<?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>160108</bug_id>
          
          <creation_ts>2016-07-22 16:59:02 -0700</creation_ts>
          <short_desc>op_mul/ArithMul(Untyped,Untyped) should be an IC</short_desc>
          <delta_ts>2016-07-25 12:06:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1213795</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-22 16:59:02 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213808</commentid>
    <comment_count>1</comment_count>
      <attachid>284392</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-22 18:39:22 -0700</bug_when>
    <thetext>Created attachment 284392
WIP

WIP with a bunch of data gathering code in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214101</commentid>
    <comment_count>2</comment_count>
      <attachid>284462</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-24 21:10:31 -0700</bug_when>
    <thetext>Created attachment 284462
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214102</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-24 21:12:57 -0700</bug_when>
    <thetext>Attachment 284462 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/JITAddGenerator.cpp:171:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITMathIC.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 17 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>1214229</commentid>
    <comment_count>4</comment_count>
      <attachid>284495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-25 10:03:18 -0700</bug_when>
    <thetext>Created attachment 284495
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214230</commentid>
    <comment_count>5</comment_count>
      <attachid>284462</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-25 10:04:08 -0700</bug_when>
    <thetext>Comment on attachment 284462
patch

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

&gt; Source/JavaScriptCore/jit/JITMulGenerator.cpp:53
&gt; +    if (lhs.isOnlyNonNumber() &amp;&amp; rhs.isOnlyNonNumber())

Shouldn&apos;t this be ((lhs.isOnlyNonNumber() || rhs.isOnlyNonNumber())?

I wonder why the op_mul.js tests didn&apos;t catch this scenario.  Can you look into adding a test case or a new test file as appropriate?  Oh, I think you&apos;ll end up returning JITMathICInlineResult::GenerateFullSnippet below, and that will still work though less efficiently.

&gt; Source/JavaScriptCore/jit/JITMulGenerator.cpp:200
&gt; +    if (!m_arithProfile || !shouldEmitProfiling)

I think this should be (!m_arithProfile &amp;&amp; !shouldEmitProfiling).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214231</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-25 10:06:05 -0700</bug_when>
    <thetext>Attachment 284495 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/JITAddGenerator.cpp:171:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 17 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>1214232</commentid>
    <comment_count>7</comment_count>
      <attachid>284462</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-25 10:07:05 -0700</bug_when>
    <thetext>Comment on attachment 284462
patch

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

&gt;&gt; Source/JavaScriptCore/jit/JITMulGenerator.cpp:53
&gt;&gt; +    if (lhs.isOnlyNonNumber() &amp;&amp; rhs.isOnlyNonNumber())
&gt; 
&gt; Shouldn&apos;t this be ((lhs.isOnlyNonNumber() || rhs.isOnlyNonNumber())?
&gt; 
&gt; I wonder why the op_mul.js tests didn&apos;t catch this scenario.  Can you look into adding a test case or a new test file as appropriate?  Oh, I think you&apos;ll end up returning JITMathICInlineResult::GenerateFullSnippet below, and that will still work though less efficiently.

Yes this is tricky. We only degrade generating if both have proven to not be numbers. We are more optimistic if one has been a number, that the other might also be a number. We can play around with this heuristic in the future. It might even be helpful to have counts.

&gt;&gt; Source/JavaScriptCore/jit/JITMulGenerator.cpp:200
&gt;&gt; +    if (!m_arithProfile || !shouldEmitProfiling)
&gt; 
&gt; I think this should be (!m_arithProfile &amp;&amp; !shouldEmitProfiling).

No, that&apos;s not quite right.
If we don&apos;t have an ArithProfile, we don&apos;t emit profiling. If shouldEmitProfiling is false, we don&apos;t emit profiling.
Hence for ||</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214234</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-25 10:11:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 284462 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284462&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/jit/JITMulGenerator.cpp:53
&gt; &gt;&gt; +    if (lhs.isOnlyNonNumber() &amp;&amp; rhs.isOnlyNonNumber())
&gt; &gt; 
&gt; &gt; Shouldn&apos;t this be ((lhs.isOnlyNonNumber() || rhs.isOnlyNonNumber())?
&gt; &gt; 
&gt; &gt; I wonder why the op_mul.js tests didn&apos;t catch this scenario.  Can you look into adding a test case or a new test file as appropriate?  Oh, I think you&apos;ll end up returning JITMathICInlineResult::GenerateFullSnippet below, and that will still work though less efficiently.
&gt; 
&gt; Yes this is tricky. We only degrade generating if both have proven to not be
&gt; numbers. We are more optimistic if one has been a number, that the other
&gt; might also be a number. We can play around with this heuristic in the
&gt; future. It might even be helpful to have counts.

OK.  Good point.

&gt; &gt;&gt; Source/JavaScriptCore/jit/JITMulGenerator.cpp:200
&gt; &gt;&gt; +    if (!m_arithProfile || !shouldEmitProfiling)
&gt; &gt; 
&gt; &gt; I think this should be (!m_arithProfile &amp;&amp; !shouldEmitProfiling).
&gt; 
&gt; No, that&apos;s not quite right.
&gt; If we don&apos;t have an ArithProfile, we don&apos;t emit profiling. If
&gt; shouldEmitProfiling is false, we don&apos;t emit profiling.
&gt; Hence for ||

Oh, you&apos;re right.  I had a mistake in my reasoning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214256</commentid>
    <comment_count>9</comment_count>
      <attachid>284495</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-25 10:54:45 -0700</bug_when>
    <thetext>Comment on attachment 284495
patch

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

r=me with fixes.

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        work over arbitrary IC snippets. This will making adding Div/Sub/Pow in the

typo: /will making/will make/.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1326
&gt; +    other.m_jit = nullptr;

I think you should also set &quot;other.m_fpr = InvalidFPRReg;&quot; similar to the GPRTemporary version.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:3122
&gt; +        if (LIKELY(m_jit))

Should this be &quot;if (LIKELY(m_jit &amp;&amp; m_fpr != InvalidFPRReg)&quot; similar to the GPRTemporary version?

Looking at the constructors, I see no way that m_fpr can be invalid unless the allocator fails.  I&apos;m thinking we should have the GPRTemporary and FPRTemporary code behaves consistently, either by adding the invalid check, or asserting that the reg is never invalid at destruction time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214262</commentid>
    <comment_count>10</comment_count>
      <attachid>284495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-25 11:09:41 -0700</bug_when>
    <thetext>Comment on attachment 284495
patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:3122
&gt;&gt; +        if (LIKELY(m_jit))
&gt; 
&gt; Should this be &quot;if (LIKELY(m_jit &amp;&amp; m_fpr != InvalidFPRReg)&quot; similar to the GPRTemporary version?
&gt; 
&gt; Looking at the constructors, I see no way that m_fpr can be invalid unless the allocator fails.  I&apos;m thinking we should have the GPRTemporary and FPRTemporary code behaves consistently, either by adding the invalid check, or asserting that the reg is never invalid at destruction time.

Mark and I spoke offline, we&apos;re going to probably make GPRTemporary behave more like FPRTemporary in another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214268</commentid>
    <comment_count>11</comment_count>
      <attachid>284503</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-25 11:15:44 -0700</bug_when>
    <thetext>Created attachment 284503
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214272</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-25 11:17:48 -0700</bug_when>
    <thetext>Attachment 284503 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/JITAddGenerator.cpp:171:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 17 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>1214289</commentid>
    <comment_count>13</comment_count>
      <attachid>284511</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-25 11:54:49 -0700</bug_when>
    <thetext>Created attachment 284511
benchmarks

looks neutral, or maybe a slight win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214292</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-25 12:06:43 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/203693</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284392</attachid>
            <date>2016-07-22 18:39:22 -0700</date>
            <delta_ts>2016-07-24 21:10:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>56350</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyMDM2MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4NywzMyBAQCBDb2RlQmxvY2tIYXNo
IENvZGVCbG9jazo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faGFzaDsKIH0KIAordm9pZCBD
b2RlQmxvY2s6OmR1bXBNdWxJQ1N0YXRlcygpCit7CisgICAgLy9yZXR1cm47CisgICAgZG91Ymxl
IHRvdGFsU2l6ZSA9IDAuMDsKKyAgICBkb3VibGUgbnVtSUNzID0gMC4wOworICAgIGRvdWJsZSBy
ZXBhdGNoTnVtcyA9IDAuMDsKKyAgICBhdXRvIGZ1bmMgPSBbJl0gKENvZGVCbG9jayogY29kZUJs
b2NrKSAtPiBib29sIHsKKyAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBjb2RlQmxvY2st
Pm1fbXVsSUNzKSB7CisgICAgICAgICAgICBudW1JQ3MrKzsKKyAgICAgICAgICAgIHRvdGFsU2l6
ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgICAgIGlmIChtdWxJQy0+bV9jb2RlKQor
ICAgICAgICAgICAgICAgIHJlcGF0Y2hOdW1zKys7CisgICAgICAgIH0KKyAgICAgICAgIAorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIHZtKCktPmhlYXAuZm9yRWFjaENvZGVC
bG9jayhmdW5jKTsKKworICAgIGRhdGFMb2coIlRvdGFsIG51bSBtdWxzOiAiLCBudW1JQ3MsICJc
biIpOworICAgIGRhdGFMb2coIlRvdGFsIHNpemU6ICIsIHRvdGFsU2l6ZSwgIlxuIik7CisgICAg
ZGF0YUxvZygiQXZlcmFnZSBzaXplOiAiLCB0b3RhbFNpemUvbnVtSUNzLCAiXG4iKTsKKyAgICBk
YXRhTG9nKCJ0b3RhbCBudW0gcmVwYXRjaGVzOiAiLCByZXBhdGNoTnVtcywgIlxuIik7CisgICAg
ZGF0YUxvZygicmVwYXRjaGUgcmF0aW86ICIsIHJlcGF0Y2hOdW1zL251bUlDcywgIlxuIik7Cisg
ICAgZGF0YUxvZygiLS0tLS0tLS0tLS0tXG4iKTsKK30KKwogQ1N0cmluZyBDb2RlQmxvY2s6OnNv
dXJjZUNvZGVGb3JUb29scygpIGNvbnN0CiB7CiAgICAgaWYgKGNvZGVUeXBlKCkgIT0gRnVuY3Rp
b25Db2RlKQpAQCAtMzAxMyw2ICszMDQwLDExIEBAIEpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJ
VEFkZElDKCkKICAgICByZXR1cm4gbV9hZGRJQ3MuYWRkKCk7CiB9CiAKK0pJVE11bElDKiBDb2Rl
QmxvY2s6OmFkZEpJVE11bElDKCkKK3sKKyAgICByZXR1cm4gbV9tdWxJQ3MuYWRkKCk7Cit9CisK
IFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiB7CiAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBtX3N0
dWJJbmZvcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjAzNjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDggQEAgcHJvdGVjdGVk
OgogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxvY2soKTsKIAorICAgIHZv
aWQgZHVtcE11bElDU3RhdGVzKCk7CisKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5nZXQoKTsgfQogCiAgICAg
Q1N0cmluZyBpbmZlcnJlZE5hbWUoKSBjb25zdDsKQEAgLTI1MCw2ICsyNTIsNyBAQCBwdWJsaWM6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNj
ZXNzVHlwZSk7CiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKCk7CisgICAgSklUTXVsSUMqIGFk
ZEpJVE11bElDKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1Yklu
Zm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KICAgICBCYWc8U3RydWN0
dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9z
LmVuZCgpOyB9CiAgICAgCkBAIC0xMDE0LDYgKzEwMTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwog
ICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgQmFnPEpJVEFkZElD
PiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwogICAgIEJhZzxCeVZhbElu
Zm8+IG1fYnlWYWxJbmZvczsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7
CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwMzYxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiSklUQml0WG9yR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSklURGl2R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUTGVmdFNoaWZ0
R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUTXVsR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpJVFN1YkdlbmVyYXRvci5oIgpAQCAtMzMzNiw2ICszMzM1LDE3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAg
IEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQygpOworICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7CisgICAg
YXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOworICAg
IGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CisgICAgCisg
ICAgY29tcGlsZU1hdGhJQyhub2RlLCBhZGRJQywgc2NyYXRjaEZQUiwgc2NyYXRjaEdQUiwgcmVw
YXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgIAorCisgICAgLyoK
ICAgICBPcHRpb25hbDxKU1ZhbHVlT3BlcmFuZD4gbGVmdDsKICAgICBPcHRpb25hbDxKU1ZhbHVl
T3BlcmFuZD4gcmlnaHQ7CiAKQEAgLTM0NDMsOCArMzQ1MywxMzMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKICAgICByZXR1cm47CisgICAgKi8KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9uLCB0eXBlbmFtZSBOb25SZXBhdGNo
aW5nRnVuY3Rpb24+Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5v
ZGUsIEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEZQUlJlZyBzY3JhdGNoRlBSLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgUmVwYXRjaGluZ0Z1bmN0aW9uIHJlcGF0Y2hpbmdGdW5jdGlvbiwgTm9u
UmVwYXRjaGluZ0Z1bmN0aW9uIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikKK3sKKyAgICBFZGdlJiBs
ZWZ0Q2hpbGQgPSBub2RlLT5jaGlsZDEoKTsKKyAgICBFZGdlJiByaWdodENoaWxkID0gbm9kZS0+
Y2hpbGQyKCk7CisKKyAgICBPcHRpb25hbDxKU1ZhbHVlT3BlcmFuZD4gbGVmdDsKKyAgICBPcHRp
b25hbDxKU1ZhbHVlT3BlcmFuZD4gcmlnaHQ7CisKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3M7CisKKyAgICBGUFJUZW1wb3JhcnkgbGVmdE51bWJl
cih0aGlzKTsKKyAgICBGUFJUZW1wb3JhcnkgcmlnaHROdW1iZXIodGhpcyk7CisgICAgRlBSUmVn
IGxlZnRGUFIgPSBsZWZ0TnVtYmVyLmZwcigpOworICAgIEZQUlJlZyByaWdodEZQUiA9IHJpZ2h0
TnVtYmVyLmZwcigpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1
bHQuZ3ByKCkpOworI2Vsc2UKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRQYXlsb2FkLmdwcigpLCByZXN1bHRUYWcuZ3ByKCkp
OworI2VuZGlmCisKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChtX3N0YXRlLmZvck5v
ZGUobGVmdENoaWxkKS5yZXN1bHRUeXBlKCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkucmVzdWx0VHlwZSgpKTsKKworICAgIC8v
IFRoZSBzbmlwcGV0IGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGJvdGggb3BlcmFuZHMgYmVp
bmcgY29uc3RhbnQuIElmIHRoZSBsZWZ0CisgICAgLy8gb3BlcmFuZCBpcyBhbHJlYWR5IGNvbnN0
LCB3ZSdsbCBpZ25vcmUgdGhlIHJpZ2h0IG9wZXJhbmQncyBjb25zdG5lc3MuCisgICAgaWYgKGxl
ZnRDaGlsZC0+aXNJbnQzMkNvbnN0YW50KCkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0
SW50MzIobGVmdENoaWxkLT5hc0ludDMyKCkpOworICAgIGVsc2UgaWYgKHJpZ2h0Q2hpbGQtPmlz
SW50MzJDb25zdGFudCgpKQorICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihyaWdo
dENoaWxkLT5hc0ludDMyKCkpOworCisgICAgQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkg
fHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCisgICAgYXV0byBzdGFydCA9IG1faml0Lmxh
YmVsKCk7CisKKyAgICBpZiAoIW1hdGhJQy0+aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkg
eworICAgICAgICBsZWZ0ID0gSlNWYWx1ZU9wZXJhbmQodGhpcywgbGVmdENoaWxkKTsKKyAgICAg
ICAgbGVmdFJlZ3MgPSBsZWZ0LT5qc1ZhbHVlUmVncygpOworICAgIH0KKyAgICBpZiAoIW1hdGhJ
Qy0+aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KCkpIHsKKyAgICAgICAgcmlnaHQgPSBKU1Zh
bHVlT3BlcmFuZCh0aGlzLCByaWdodENoaWxkKTsKKyAgICAgICAgcmlnaHRSZWdzID0gcmlnaHQt
PmpzVmFsdWVSZWdzKCk7CisgICAgfQorCisgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4g
YWRkSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRl
KCk7CisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAgICBt
YXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQs
IHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOworCisgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nID0gZmFsc2U7CisgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBtYXRoSUMtPmdl
bmVyYXRlSW5saW5lKG1faml0LCAqYWRkSUNHZW5lcmF0aW9uU3RhdGUsIHNob3VsZEVtaXRQcm9m
aWxpbmcpOworCisgICAgaWYgKGdlbmVyYXRlZElubGluZSkgeworICAgICAgICBBU1NFUlQoIWFk
ZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkpOworCisgICAgICAgIFZl
Y3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBzYXZlUGxhbnM7CisgICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzSW1wbChmYWxzZSwgc2F2ZVBsYW5zLCByZXN1bHRSZWdzKTsKKworICAg
ICAgICBhdXRvIGRvbmUgPSBtX2ppdC5sYWJlbCgpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKFs9LCBzYXZlUGxhbnMgPSBXVEZNb3ZlKHNhdmVQbGFucyldICgpIHsKKyAgICAgICAg
ICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aFN0YXJ0ID0gbV9qaXQubGFi
ZWwoKTsKKworICAgICAgICAgICAgYXV0byBzbG93U3RhcnQgPSBtX2ppdC5sYWJlbCgpOworCisg
ICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOworCisgICAgICAgICAgICBhdXRvIGlu
bmVyTGVmdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICAgICAgICAgIGF1dG8gaW5uZXJSaWdodFJlZ3Mg
PSByaWdodFJlZ3M7CisgICAgICAgICAgICBpZiAobWF0aElDLT5pc0xlZnRPcGVyYW5kVmFsaWRD
b25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgaW5uZXJMZWZ0UmVncyA9IHJlc3VsdFJlZ3M7
CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZVZhbHVlKGxlZnRDaGlsZC0+YXNKU1ZhbHVlKCks
IGlubmVyTGVmdFJlZ3MpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRoSUMtPmlzUmlnaHRP
cGVyYW5kVmFsaWRDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgaW5uZXJSaWdodFJlZ3Mg
PSByZXN1bHRSZWdzOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmVWYWx1ZShyaWdodENoaWxk
LT5hc0pTVmFsdWUoKSwgaW5uZXJSaWdodFJlZ3MpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKKyAg
ICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKSmFpYz4ocmVwYXRjaGluZ0Z1
bmN0aW9uKSwgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRk
SUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRj
aGluZ0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7
CisKKyAgICAgICAgICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKKyAgICAgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGRvbmUs
ICZtX2ppdCk7CisKKyAgICAgICAgICAgIGF1dG8gc2xvd0VuZCA9IG1faml0LmxhYmVsKCk7CisK
KyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgIG1hdGhJQy0+ZmluYWxpemVJbmxpbmVDb2RlKCphZGRJQ0dl
bmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93RW5kKS5leGVj
dXRhYmxlQWRkcmVzcygpKSAtIGJpdHdpc2VfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlv
bk9mKHNsb3dTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgbWF0
aElDLT5tX2NvZGVTaXplICs9IHNpemU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1hdGhJQy0+aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQoKSkgeworICAgICAgICAgICAgbGVmdCA9IEpTVmFsdWVPcGVyYW5kKHRoaXMsIGxlZnRDaGls
ZCk7CisgICAgICAgICAgICBsZWZ0UmVncyA9IGxlZnQtPmpzVmFsdWVSZWdzKCk7CisgICAgICAg
IH0gZWxzZSBpZiAobWF0aElDLT5pc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkgeworICAg
ICAgICAgICAgcmlnaHQgPSBKU1ZhbHVlT3BlcmFuZCh0aGlzLCByaWdodENoaWxkKTsKKyAgICAg
ICAgICAgIHJpZ2h0UmVncyA9IHJpZ2h0LT5qc1ZhbHVlUmVncygpOworICAgICAgICB9CisKKyAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNo
aW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIH0KKworICAgIGF1dG8gZG9uZSA9IG1faml0Lmxh
YmVsKCk7CisgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIHNpemVfdCBzaXplID0gYml0d2lzZV9jYXN0PGNoYXIqPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoZG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgICAgIG1hdGhJQy0+bV9jb2RlU2l6ZSArPSBzaXplOworICAgIH0pOworCisgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICByZXR1cm47CiB9CiAKKwogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZDdXN0b20oTm9kZSogbm9kZSkKIHsKICAgICAv
LyBXZSBjb3VsZCBkbyBzb21ldGhpbmcgc21hcnRlciBoZXJlIGJ1dCB0aGlzIGNhc2UgaXMgY3Vy
cmVudGx5IHN1cGVyIHJhcmUgYW5kIHVubGVzcwpAQCAtNDE1Niw2ICs0MjkxLDE2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCisgICAgICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygp
LT5hZGRKSVRNdWxJQygpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBGUFJSZWcg
c2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKKyAgICAgICAgYXV0byBub25SZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKKyAgICAgICAgCisgICAgICAgIGNvbXBp
bGVNYXRoSUMobm9kZSwgbXVsSUMsIHNjcmF0Y2hGUFIsIHNjcmF0Y2hHUFIsIHJlcGF0Y2hpbmdG
dW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAvKgogICAgICAgICBPcHRpb25hbDxKU1ZhbHVlT3BlcmFuZD4gbGVmdDsKICAgICAgICAgT3B0
aW9uYWw8SlNWYWx1ZU9wZXJhbmQ+IHJpZ2h0OwogCkBAIC00MjI5LDYgKzQzNzQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAgICAgIGdlbi5lbmRKdW1w
TGlzdCgpLmxpbmsoJm1faml0KTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAqLwogICAgIH0KIAogICAgIGRlZmF1bHQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAyMDM2MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJE
RkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiREZHU2lsZW50UmVnaXN0ZXJT
YXZlUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSAiSklUTWF0
aElDLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9j
YXRvci5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTEyODgsOSArMTI4OSw5IEBAIHB1Ymxp
YzoKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkphaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1
bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgcHRy
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpK
SmFpYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNW
YWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewotICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMS5ncHIoKSwgYXJnMi5ncHIoKSwgcHRy
KTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCks
IGFyZzIuZ3ByKCksIG1hdGhJQyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0LmdwcigpKTsKICAgICB9CiAKQEAgLTE3MTEsOSArMTcxMiw5IEBA
IHB1YmxpYzoKICAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpKYWljIG9wZXJhdGlv
biwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcy
LCBUcnVzdGVkSW1tUHRyIHB0cikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKSkphaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpT
VmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJC
SVRfRFVNTVlfQVJHIGFyZzEucGF5bG9hZEdQUigpLCBhcmcxLnRhZ0dQUigpLCBhcmcyLnBheWxv
YWRHUFIoKSwgYXJnMi50YWdHUFIoKSwgcHRyKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEucGF5bG9hZEdQUigpLCBh
cmcxLnRhZ0dQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSwgbWF0aElDKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQucGF5
bG9hZEdQUigpLCByZXN1bHQudGFnR1BSKCkpOwogICAgIH0KIApAQCAtMjQ1MSw2ICsyNDUyLDkg
QEAgcHVibGljOgogICAgIHZvaWQgZW1pdFVudHlwZWRSaWdodFNoaWZ0Qml0T3AoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVNoaWZ0T3AoTm9kZSopOwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9uLCB0eXBlbmFtZSBOb25SZXBh
dGNoaW5nRnVuY3Rpb24+CisgICAgdm9pZCBjb21waWxlTWF0aElDKE5vZGUqLCBKSVRNYXRoSUM8
R2VuZXJhdG9yPiosIEZQUlJlZyBzY3JhdGNoRlBSLCBHUFJSZWcgc2NyYXRjaEdQUiwgUmVwYXRj
aGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24pOworCiAgICAgdm9pZCBjb21waWxl
VmFsdWVBZGQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoQWRkKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVNYWtlUm9wZShOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDM2MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MzYsOSArMTUzNiwxOCBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQs
IGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNvbXBp
bGVWYWx1ZUFkZCgpCiAgICAgeworICAgICAgICBKSVRBZGRJQyogYWRkSUMgPSBjb2RlQmxvY2so
KS0+YWRkSklUQWRkSUMoKTsKKyAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplOworICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlQWRkOworICAgICAgICBjb21waWxlTWF0aElDKGFkZElDLCByZXBh
dGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4KKyAgICB2b2lkIGNvbXBpbGVNYXRoSUMoSklUTWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgRnVuY3Rpb25QdHIgcmVwYXRjaGluZ0Z1bmN0aW9uLCBG
dW5jdGlvblB0ciBub25SZXBhdGNoaW5nRnVuY3Rpb24pCisgICAgewogICAgICAgICBOb2RlKiBu
b2RlID0gbV9ub2RlOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVl
KG5vZGUtPmNoaWxkMSgpKTsKQEAgLTE1NjUsMTQgKzE1NzQsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CiAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFy
YW1zKS0+anVtcHMoaml0KTsKIAotICAgICAgICAgICAgICAgIEpJVEFkZElDKiBhZGRJQyA9IGpp
dC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN0YXJ0
ID0gaml0LmxhYmVsKCk7CisKICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0
YXRlPiBhZGRJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHN0
YXRlLT5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5h
cml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgYWRkSUMtPm1fZ2VuZXJhdG9yID0gSklUQWRkR2Vu
ZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5n
cHIoKSksCisgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihs
ZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAog
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVl
UmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApLCBJbnZhbGlk
RlBSUmVnLCBhcml0aFByb2ZpbGUpOwogCi0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRJ
bmxpbmUgPSBhZGRJQy0+Z2VuZXJhdGVJbmxpbmUoaml0LCAqYWRkSUNHZW5lcmF0aW9uU3RhdGUp
OworICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0aElDLT5nZW5lcmF0ZUlubGlu
ZShqaXQsICphZGRJQ0dlbmVyYXRpb25TdGF0ZSwgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoSnVtcHMuZW1wdHkoKSk7CkBA
IC0xNTgyLDI2ICsxNTkzLDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5saW5rKCZqaXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoU3RhcnQgPSBqaXQu
bGFiZWwoKTsKIAorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzbG93U3RhcnQgPSBqaXQu
bGFiZWwoKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZElDR2VuZXJhdGlvblN0
YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTbG93UGF0aENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oKnN0YXRlLCBwYXJhbXMudW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMu
Z2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblZhbHVlQWRk
T3B0aW1pemUsIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3By
KCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhZGRJQykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgcGFy
YW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25T
dGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3dQYXRoQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbigqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBq
aXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uVmFsdWVBZGQsIHBhcmFtc1swXS5ncHIoKSwg
cGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFt
c1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBj
YWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwogCisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIHNsb3dEb25lID0gaml0LmxhYmVsKCk7CisKICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJQy0+ZmluYWxpemVJbmxpbmVDb2RlKCphZGRJ
Q0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0aElDLT5maW5hbGl6ZUlubGluZUNvZGUoKmFkZElDR2VuZXJhdGlvblN0YXRlLCBsaW5r
QnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGJpdHdp
c2VfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dEb25lKS5leGVjdXRhYmxl
QWRkcmVzcygpKSAtIGJpdHdpc2VfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNs
b3dTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0aElDLT5tX2NvZGVTaXplICs9IHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAg
ICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBleGNlcHRpb25zLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uVmFsdWVBZGQsIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNb
Ml0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
LCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gaml0LmxhYmVsKCk7
CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGJpdHdpc2VfY2FzdDxj
aGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0g
Yml0d2lzZV9jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhcnQpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fY29kZVNpemUgKz0g
c2l6ZTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHNl
dEpTVmFsdWUocGF0Y2hwb2ludCk7CkBAIC0xNzYyLDcgKzE3ODQsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgZW1pdEJp
bmFyeVNuaXBwZXQ8SklUTXVsR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZU11bCk7CisgICAgICAg
ICAgICBKSVRNdWxJQyogbXVsSUMgPSBjb2RlQmxvY2soKS0+YWRkSklUTXVsSUMoKTsKKyAgICAg
ICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFs
dWVNdWw7CisgICAgICAgICAgICBjb21waWxlTWF0aElDKG11bElDLCByZXBhdGNoaW5nRnVuY3Rp
b24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDIwMzYxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTcxMSw2ICs3
MTEsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJ
bnQoaW50IHNyYyk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMp
OwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CisgICAgICAgIHZvaWQg
ZW1pdE1hdGhJQ0Zhc3QoSklUTWF0aElDPEdlbmVyYXRvcj4qLCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CisgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUTWF0aElDPEdlbmVyYXRvcj4qLCBJbnN0cnVjdGlvbios
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rp
b24pOworCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJv
bTsKQEAgLTc2NSw4ICs3NzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkosIGludCwgR1BSUmVn
LCBHUFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VKSkFycCwgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVn
cywgQXJpdGhQcm9maWxlKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpTVmFs
dWVSZWdzKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSkpBcnBKYWljLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVS
ZWdzLCBBcml0aFByb2ZpbGUqLCBKSVRBZGRJQyopOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkphaWMsIEpTVmFsdWVSZWdzLCBK
U1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpJVEFkZElDKik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQXJwSmFpYywgSlNWYWx1
ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgQXJpdGhQcm9maWxlKiwgVHJ1c3RlZElt
bVB0cik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUpKSmFpYywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywg
VHJ1c3RlZEltbVB0cik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUpKQXAsIGludCwgR1BSUmVnLCBHUFJSZWcsIEFycmF5UHJvZmls
ZSopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKSkJ5LCBpbnQsIEdQUlJlZywgR1BSUmVnLCBCeVZhbEluZm8qKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSk9KLCBH
UFJSZWcsIEdQUlJlZywgR1BSUmVnKTsKQEAgLTk1Niw4ICs5NjIsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXI7CiAKLSAgICAgICAgSGFzaE1hcDxJbnN0cnVjdGlvbiosIEpJVEFkZElDKj4gbV9p
bnN0cnVjdGlvblRvSklUQWRkSUM7Ci0gICAgICAgIEhhc2hNYXA8SW5zdHJ1Y3Rpb24qLCBNYXRo
SUNHZW5lcmF0aW9uU3RhdGU+IG1faW5zdHJ1Y3Rpb25Ub0pJVEFkZElDR2VuZXJhdGlvblN0YXRl
OworICAgICAgICBIYXNoTWFwPEluc3RydWN0aW9uKiwgdm9pZCo+IG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQzsKKyAgICAgICAgSGFzaE1hcDxJbnN0cnVjdGlvbiosIE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wg
bV9jYW5CZU9wdGltaXplZDsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBZGRHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQWRkR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjAzNjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBZGRH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIEpJVE1hdGhJQ0lu
bGluZVJlc3VsdCBKSVRBZGRHZW5lcmF0b3I6OmcKICAgICByZXR1cm4gSklUTWF0aElDSW5saW5l
UmVzdWx0OjpHZW5lcmF0ZUZ1bGxTbmlwcGV0OwogfQogCi1ib29sIEpJVEFkZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCYgZW5kSnVtcExpc3QsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3Qp
Citib29sIEpJVEFkZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QsIENDYWxsSGVscGVyczo6SnVt
cExpc3QmIHNsb3dQYXRoSnVtcExpc3QsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZykKIHsKICAg
ICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwogICAgIEFTU0VSVChtX3Nj
cmF0Y2hHUFIgIT0gbV9sZWZ0LnBheWxvYWRHUFIoKSk7CkBAIC0xNjYsNyArMTY2LDcgQEAgYm9v
bCBKSVRBZGRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQwogCiAgICAgLy8gRG8gZG91Ymxl
VmFyICsgZG91YmxlVmFyLgogICAgIGppdC5hZGREb3VibGUobV9yaWdodEZQUiwgbV9sZWZ0RlBS
KTsKLSAgICBpZiAobV9hcml0aFByb2ZpbGUpCisgICAgaWYgKG1fYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcpCiAgICAgICAgIG1fYXJpdGhQcm9maWxlLT5lbWl0U2V0RG91Ymxl
KGppdCk7CiAgICAgICAgIAogICAgIGppdC5ib3hEb3VibGUobV9sZWZ0RlBSLCBtX3Jlc3VsdCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFkZEdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQWRkR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDIwMzYxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQWRkR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDEwIEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBKSVRNYXRoSUNJbmxpbmVSZXN1bHQgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiwg
TWF0aElDR2VuZXJhdGlvblN0YXRlJik7Ci0gICAgYm9vbCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxs
SGVscGVycyYsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1bXBMaXN0KTsKKyAgICBib29sIGdlbmVyYXRlRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QsIEND
YWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QsIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZyk7CisKKyAgICBib29sIGlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV9sZWZ0T3BlcmFuZC5pc0NvbnN0SW50MzIoKTsgfQorICAgIGJvb2wgaXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodE9wZXJhbmQuaXND
b25zdEludDMyKCk7IH0KIAogcHJpdmF0ZToKICAgICBTbmlwcGV0T3BlcmFuZCBtX2xlZnRPcGVy
YW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CShyZXZpc2lvbiAyMDM2MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODQsNiArNjg0LDExIEBAIEFMV0FZU19JTkxJ
TkUgc3RhdGljIE9wZXJhbmRUeXBlcyBnZXRPcGUKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCk7CisgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKKyAgICBlbWl0TWF0aElDRmFzdChhZGRJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZUFkZCk7CisKKyAgICAvKgogICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwogICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwogICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwpAQCAt
NzQ0LDEyICs3NDksMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJy
ZQogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShhZGRJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aEp1bXBzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisgICAgKi8KIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChtX3Nsb3dDYXNl
cywgaXRlciwgbV9ieXRlY29kZU9mZnNldCk7CiAKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNTbG93KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7CisKKyAgICAvKgorICAgIGxpbmtBbGxT
bG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZU9m
ZnNldCk7CisKICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIGFkZElDR2VuZXJhdGlvblN0YXRl
ID0gbV9pbnN0cnVjdGlvblRvSklUQWRkSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5z
dHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0
ID0gbGFiZWwoKTsKIApAQCAtNzk3LDYgKzgwOSwxMzIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2FkZChJbnN0cnVjdGlvbiogYwogICAgICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIGFkZElD
R2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvSklUQWRkSUNHZW5lcmF0aW9uU3RhdGUu
ZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICAgICAgYWRkSUMtPmZpbmFsaXpl
SW5saW5lQ29kZShhZGRJQ0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CiAgICAgfSk7Cisg
ICAgKi8KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KK3ZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblBy
b2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKK3sKKyAgICBpbnQgcmVzdWx0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AxID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgT3BlcmFuZFR5cGVzIHR5
cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlv
bikpOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDM7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworI2Vsc2UKKyAg
ICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMoY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisjZW5kaWYK
KworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKKyAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV9jb2RlQmxvY2st
PmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBTbmlwcGV0T3Bl
cmFuZCBsZWZ0T3BlcmFuZCh0eXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQodHlwZXMuc2Vjb25kKCkpOworCisgICAgLy8gRklYTUU6CisgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIo
Z2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJh
bmRDb25zdGFudEludChvcDIpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5p
c0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCisgICAgYXV0byBzdGFydCA9
IGxhYmVsKCk7CisKKyAgICBpZiAoIW1hdGhJQy0+aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBp
ZiAoIW1hdGhJQy0+aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KCkpCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCisgICAgTWF0aElDR2VuZXJhdGlv
blN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRl
KCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9m
aWxlKTsKKworICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJ
bmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CisgICAgaWYgKCFnZW5lcmF0ZWRJ
bmxpbmVDb2RlKSB7CisgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOworICAgICAgICBlbHNl
IGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAgICAgIGlmIChhcml0aFByb2ZpbGUpCisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24obm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CisgICAgfSBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CisKKyAgICBhdXRvIGRvbmUgPSBsYWJlbCgpOworICAgIGFkZExp
bmtUYXNrKFs9XShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHNpemVfdCBzaXpl
ID0gYml0d2lzZV9jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25P
ZihzdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIG1hdGhJQy0+bV9jb2RlU2l6
ZSArPSBzaXplOworICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9m
aWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVu
Y3Rpb24pCit7CisgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5z
dHJ1Y3Rpb24pLT52YWx1ZTsKKyAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFy
dCA9IGxhYmVsKCk7CisKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGNv
cGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOworICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOworI2Vsc2UKKyAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5k
VHlwZXMoY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7CisjZW5kaWYKKyAgICAKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCh0eXBl
cy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQodHlwZXMuc2Vjb25k
KCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVs
c2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5z
ZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIGF1dG8gc3Rh
cnQgPSBsYWJlbCgpOworICAgIGlmIChtYXRoSUMtPmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CisgICAg
aWYgKG1hdGhJQy0+aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KCkpCisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCisgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgeworICAgICAgICBBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IG1fY29k
ZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBp
ZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKKyAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpBcnBKYWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsICZhcml0aFByb2ZpbGUsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsICZhcml0aFByb2ZpbGUpOworICAg
IH0gZWxzZQorICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKSmFpYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7
CisKKyAgICBhdXRvIGRvbmUgPSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5m
aW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOworICAgICAgICBtYXRoSUMtPmZpbmFsaXpl
SW5saW5lQ29kZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOworICAgICAgICBz
aXplX3Qgc2l6ZSA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGRv
bmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0d2lzZV9jYXN0PGNoYXIqPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Yoc3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBtYXRoSUMt
Pm1fY29kZVNpemUgKz0gc2l6ZTsKKyAgICB9KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGl2
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04NzUsNiArMTAxMywxMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGl2KEluc3RydWN0aW9uKiBjCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIEpJVE11bElD
KiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQygpOworICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CisgICAgZW1pdE1hdGhJQ0Zh
c3QobXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVNdWwpOworICAgIC8qCiAgICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CkBAIC05MTcsNiArMTA1OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX211bChJbnN0cnVjdGlv
biogY3VycmUKICAgICBKSVRNdWxHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCiAgICAgICAgIGZwUmVnVDAsIGZw
UmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKKyAgICBKdW1w
TGlzdCBlbmRKdW1wTGlzdDsKKyAgICBKdW1wTGlzdCBzbG93UGF0aEp1bXBMaXN0OwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIAogICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRo
KCkpIHsKQEAgLTkzOSwxMSArMTA4MywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgICAgICB9
CiAgICAgfQorICAgICovCiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93Q2Fz
ZXMsIGl0ZXIsIG1fYnl0ZWNvZGVPZmZzZXQpOworCisgICAgSklUTXVsSUMqIG11bElDID0gYml0
d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKKyAgICBlbWl0TWF0aElDU2xvdyhtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUpOworCisgICAgLyoKKyAgICBsaW5rQWxs
U2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVP
ZmZzZXQpOwogICAgIAogICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwogICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwpA
QCAtOTgxLDYgKzExMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKEluc3RydWN0aW9u
KiBjCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfbXVsKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
ICAgICB9CisgICAgKi8KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAkocmV2aXNpb24gMjAzNjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMiwxNyArNDMyLDE3IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUpKQXJwSmFpYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1
ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUs
IEpJVEFkZElDKiBhZGRJQykKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycEphaWMgb3BlcmF0aW9uLCBKU1Zh
bHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlLCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKIHsKLSAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihhcml0aFBy
b2ZpbGUpLCBUcnVzdGVkSW1tUHRyKGFkZElDKSk7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoYXJpdGhQcm9maWxlKSwgbWF0aElDKTsK
ICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CiAgICAgc2V0dXBSZXN1bHRzKHJlc3VsdCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKSkphaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdz
IGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEpJVEFkZElDKiBhZGRJQykKK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VK
SkphaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpT
VmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogewotICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKGFkZElDKSk7CisgICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIG1hdGhJQyk7CiAgICAgQ2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIHNl
dHVwUmVzdWx0cyhyZXN1bHQpOwogICAgIHJldHVybiBjYWxsOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyMDM2MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJKSVRNdWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRNYXRoSUNJbmxp
bmVSZXN1bHQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5o
IgpAQCAtNTQsNyArNTUsMTAgQEAgcHVibGljOgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQ
YXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQubGFiZWxBdE9mZnNldCht
X2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0KTsgfQogICAgIENvZGVMb2NhdGlvbkNhbGwg
c2xvd1BhdGhDYWxsTG9jYXRpb24oKSB7IHJldHVybiBtX2lubGluZVN0YXJ0LmNhbGxBdE9mZnNl
dChtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxMb2NhdGlvbik7IH0KIAotICAgIGJvb2wg
Z2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiBqaXQsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYg
c3RhdGUpCisgICAgYm9vbCBpc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2VuZXJhdG9yLmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KCk7IH0KKyAgICBib29s
IGlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdG9y
LmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgpOyB9CisKKyAgICBib29sIGdlbmVyYXRlSW5s
aW5lKENDYWxsSGVscGVycyYgaml0LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBib29s
IHNob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlKQogICAgIHsKICAgICAgICAgc3RhdGUuZmFzdFBh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgICAgICBzaXplX3Qgc3RhcnRTaXplID0gaml0Lm1f
YXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCk7CkBAIC03Myw3ICs3Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVG
dWxsU25pcHBldDogewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVuZEp1
bXBMaXN0OwotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX2dlbmVyYXRvci5nZW5lcmF0ZUZh
c3RQYXRoKGppdCwgZW5kSnVtcExpc3QsIHN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBtX2dlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCwgZW5kSnVt
cExpc3QsIHN0YXRlLnNsb3dQYXRoSnVtcHMsIHNob3VsZEVtaXRQcm9maWxpbmcpOwogICAgICAg
ICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXRlLmZhc3RQYXRoRW5kID0g
aml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNo
ID0gZmFsc2U7CkBAIC0xMDQsNyArMTA4LDkgQEAgcHVibGljOgogCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZW5kSnVtcExpc3Q7IAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoSnVtcExpc3Q7IAotICAgICAgICAgICAgYm9vbCBlbWl0
dGVkRmFzdFBhdGggPSBtX2dlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCwgZW5kSnVtcExp
c3QsIHNsb3dQYXRoSnVtcExpc3QpOworCisgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9m
aWxpbmcgPSAhSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsK
KyAgICAgICAgICAgIGJvb2wgZW1pdHRlZEZhc3RQYXRoID0gbV9nZW5lcmF0b3IuZ2VuZXJhdGVG
YXN0UGF0aChqaXQsIGVuZEp1bXBMaXN0LCBzbG93UGF0aEp1bXBMaXN0LCBzaG91bGRFbWl0UHJv
ZmlsaW5nKTsKICAgICAgICAgICAgIGlmICghZW1pdHRlZEZhc3RQYXRoKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIGVuZEp1bXBMaXN0LmFwcGVuZChqaXQuanVtcCgpKTsK
QEAgLTE0OCw2ICsxNTQsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0KSk7CiAgICAgfQogCisgICAgdWludDMy
X3QgbV9jb2RlU2l6ZSB7IDAgfTsKKyAgICBkb3VibGUgY29kZVNpemUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgZG91YmxlIHJlc3VsdCA9IG1fY29kZVNpemU7CisgICAgICAgIGlmIChtX2NvZGUp
CisgICAgICAgICAgICByZXN1bHQgKz0gbV9jb2RlLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIG1faW5saW5lU3RhcnQ7CiAgICAgaW50MzJfdCBtX2lubGluZVNpemU7
CkBAIC0xNTcsNiArMTcyLDcgQEAgcHVibGljOgogfTsKIAogdHlwZWRlZiBKSVRNYXRoSUM8SklU
QWRkR2VuZXJhdG9yPiBKSVRBZGRJQzsKK3R5cGVkZWYgSklUTWF0aElDPEpJVE11bEdlbmVyYXRv
cj4gSklUTXVsSUM7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE1hdGhJQ0ZvcndhcmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUNGb3J3YXJkcy5oCShyZXZpc2lvbiAyMDM2MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQ0ZvcndhcmRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDggKzMxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yPiBjbGFzcyBKSVRNYXRoSUM7CiBjbGFzcyBKSVRBZGRHZW5lcmF0b3I7
CitjbGFzcyBKSVRNdWxHZW5lcmF0b3I7CiAKIHR5cGVkZWYgSklUTWF0aElDPEpJVEFkZEdlbmVy
YXRvcj4gSklUQWRkSUM7Cit0eXBlZGVmIEpJVE1hdGhJQzxKSVRNdWxHZW5lcmF0b3I+IEpJVE11
bElDOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRNdWxHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUTXVsR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzNjE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMCArMjksMTQwIEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkFyaXRoUHJv
ZmlsZS5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9p
ZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCitK
SVRNYXRoSUNJbmxpbmVSZXN1bHQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUlubGluZShDQ2Fs
bEhlbHBlcnMmIGppdCwgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKK3sKKyAgICAvLyBX
ZSBkZWZhdWx0IHRvIHNwZWN1bGF0aW5nIGludDMyLgorICAgIE9ic2VydmVkVHlwZSBsaHMgPSBP
YnNlcnZlZFR5cGUoKS53aXRoSW50MzIoKTsKKyAgICBPYnNlcnZlZFR5cGUgcmhzID0gT2JzZXJ2
ZWRUeXBlKCkud2l0aEludDMyKCk7CisKKyAgICBzdGF0aWMgZG91YmxlIG51bU5vVHlwZSA9IDAu
MDsKKyAgICBzdGF0aWMgZG91YmxlIG51bUlDcyA9IDAuMDsKKyAgICBzdGF0aWMgZG91YmxlIG51
bUJhaWxzID0gMC4wOworICAgIHN0YXRpYyBkb3VibGUgbnVtRmFzdElDcyA9IDAuMDsKKyAgICBz
dGF0aWMgZG91YmxlIG51bUZ1bGxJQ3MgPSAwLjA7CisgICAgbnVtSUNzKys7CisKKyAgICBjb25z
dCBib29sIGR1bXAgPSB0cnVlOworCisgICAgaWYgKG1fYXJpdGhQcm9maWxlKSB7CisgICAgICAg
IGxocyA9IG1fYXJpdGhQcm9maWxlLT5saHNPYnNlcnZlZFR5cGUoKTsKKyAgICAgICAgcmhzID0g
bV9hcml0aFByb2ZpbGUtPnJoc09ic2VydmVkVHlwZSgpOworICAgICAgICBpZiAobGhzLmlzRW1w
dHkoKSB8fCByaHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBsaHMgPSBPYnNlcnZlZFR5cGUo
KS53aXRoTnVtYmVyKCk7CisgICAgICAgICAgICByaHMgPSBPYnNlcnZlZFR5cGUoKS53aXRoTnVt
YmVyKCk7CisgICAgICAgICAgICBudW1Ob1R5cGUrKzsKKyAgICAgICAgICAgIGlmIChkdW1wKSB7
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiTnVtIElDczogIiwgbnVtSUNzLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJOdW0gbm9UeXBlOiAiLCBudW1Ob1R5cGUsICJcbiIpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2coInJhdGlvOiAiLCBudW1Ob1R5cGUvbnVtSUNzLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCItLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIGRhdGFMb2coIk5VTSBJQ1MgRVZFUjog
IiwgbnVtSUNzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCItLS0tLS0tLS0tLS1cbiIpOworCisKKyAg
ICBpZiAobGhzLmlzT25seU5vbk51bWJlcigpICYmIHJocy5pc09ubHlOb25OdW1iZXIoKSkgewor
ICAgICAgICBkYXRhTG9nKCJOdW0gSUNzOiAiLCBudW1JQ3MsICJcbiIpOworICAgICAgICBkYXRh
TG9nKCJOdW0gbnVtQmFpbHM6ICIsIG51bUJhaWxzLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygi
cmF0aW86ICIsIG51bUJhaWxzL251bUlDcywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIi0tLS0t
LS0tLS0tLS0tXG4iKTsKKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6RG9u
dEdlbmVyYXRlOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgbnVtSW50RG91YmxlID0gMC4w
OworICAgIHN0YXRpYyBkb3VibGUgbnVtRG91YmxlRG91YmxlID0gMC4wOworICAgIHN0YXRpYyBk
b3VibGUgbnVtRG91YmxlSW50ID0gMC4wOworICAgIGlmIChsaHMuaXNPbmx5TnVtYmVyKCkgJiYg
cmhzLmlzT25seUludDMyKCkpIHsKKyAgICAgICAgbnVtRG91YmxlSW50Kys7CisgICAgICAgIGlm
IChkdW1wKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJOdW0gSUNzOiAiLCBudW1JQ3MsICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiTnVtIGludERvdWJsZSBJQ3M6ICIsIG51bURvdWJsZUlu
dCwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJyYXRpbzogIiwgbnVtRG91YmxlSW50L251
bUlDcywgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCItLS0tLS0tLS0tLS0tLVxuIik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVG
dWxsU25pcHBldDsKKyAgICB9CisKKyAgICBpZiAobGhzLmlzT25seU51bWJlcigpICYmIHJocy5p
c09ubHlOdW1iZXIoKSkgeworICAgICAgICBudW1Eb3VibGVEb3VibGUrKzsKKyAgICAgICAgaWYg
KGR1bXApIHsKKyAgICAgICAgICAgIGRhdGFMb2coIk51bSBJQ3M6ICIsIG51bUlDcywgIlxuIik7
CisgICAgICAgICAgICBkYXRhTG9nKCJOdW0gbnVtRG91YmxlRG91YmxlIElDczogIiwgbnVtRG91
YmxlRG91YmxlLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coInJhdGlvOiAiLCBudW1Eb3Vi
bGVEb3VibGUvbnVtSUNzLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIi0tLS0tLS0tLS0t
LS0tXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9sZWZ0T3BlcmFuZC5kZWZpbml0
ZWx5SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHN0YXRlLnNsb3dQYXRoSnVtcHMuYXBwZW5kKGpp
dC5icmFuY2hJZk5vdE51bWJlcihtX2xlZnQsIG1fc2NyYXRjaEdQUikpOworICAgICAgICBpZiAo
IW1fcmlnaHRPcGVyYW5kLmRlZmluaXRlbHlJc051bWJlcigpKQorICAgICAgICAgICAgc3RhdGUu
c2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKG1fcmlnaHQsIG1fc2Ny
YXRjaEdQUikpOworICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNo
SWZJbnQzMihtX2xlZnQpKTsKKyAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0
LmJyYW5jaElmSW50MzIobV9yaWdodCkpOworICAgICAgICBqaXQudW5ib3hEb3VibGVOb25EZXN0
cnVjdGl2ZShtX2xlZnQsIG1fbGVmdEZQUiwgbV9zY3JhdGNoR1BSLCBtX3NjcmF0Y2hGUFIpOwor
ICAgICAgICBqaXQudW5ib3hEb3VibGVOb25EZXN0cnVjdGl2ZShtX3JpZ2h0LCBtX3JpZ2h0RlBS
LCBtX3NjcmF0Y2hHUFIsIG1fc2NyYXRjaEZQUik7CisgICAgICAgIGppdC5tdWxEb3VibGUobV9y
aWdodEZQUiwgbV9sZWZ0RlBSKTsKKyAgICAgICAgaml0LmJveERvdWJsZShtX2xlZnRGUFIsIG1f
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVk
RmFzdFBhdGg7CisgICAgfQorCisgICAgaWYgKGxocy5pc09ubHlJbnQzMigpICYmIHJocy5pc09u
bHlOdW1iZXIoKSkgeworICAgICAgICBudW1JbnREb3VibGUrKzsKKyAgICAgICAgaWYgKGR1bXAp
IHsKKyAgICAgICAgICAgIGRhdGFMb2coIk51bSBJQ3M6ICIsIG51bUlDcywgIlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCJOdW0gbnVtSW50RG91YmxlIElDczogIiwgbnVtSW50RG91YmxlLCAi
XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coInJhdGlvOiAiLCBudW1JbnREb3VibGUvbnVtSUNz
LCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5lcmF0ZUZ1bGxT
bmlwcGV0OworICAgIH0KKworICAgIGlmICgobGhzLmlzT25seUludDMyKCkgfHwgbV9sZWZ0T3Bl
cmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSAmJiAocmhzLmlzT25seUludDMyKCkgfHwgbV9y
aWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFt
X2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkgfHwgIW1fcmlnaHRPcGVyYW5kLmlz
UG9zaXRpdmVDb25zdEludDMyKCkpOworICAgICAgICBpZiAoIW1fbGVmdE9wZXJhbmQuaXNQb3Np
dGl2ZUNvbnN0SW50MzIoKSkKKyAgICAgICAgICAgIHN0YXRlLnNsb3dQYXRoSnVtcHMuYXBwZW5k
KGppdC5icmFuY2hJZk5vdEludDMyKG1fbGVmdCkpOworICAgICAgICBpZiAoIW1fcmlnaHRPcGVy
YW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpCisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aEp1
bXBzLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihtX3JpZ2h0KSk7CisKKyAgICAgICAgaWYg
KG1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSB8fCBtX3JpZ2h0T3BlcmFuZC5p
c1Bvc2l0aXZlQ29uc3RJbnQzMigpKSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyB2YXIgPSBt
X2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkgPyBtX3JpZ2h0IDogbV9sZWZ0Owor
ICAgICAgICAgICAgaW50MzJfdCBjb25zdFZhbHVlID0gbV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZl
Q29uc3RJbnQzMigpID8gbV9sZWZ0T3BlcmFuZC5hc0NvbnN0SW50MzIoKSA6IG1fcmlnaHRPcGVy
YW5kLmFzQ29uc3RJbnQzMigpOworICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBl
bmQoaml0LmJyYW5jaE11bDMyKENDYWxsSGVscGVyczo6T3ZlcmZsb3csIHZhci5wYXlsb2FkR1BS
KCksIENDYWxsSGVscGVyczo6SW1tMzIoY29uc3RWYWx1ZSksIG1fc2NyYXRjaEdQUikpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0
LmJyYW5jaE11bDMyKENDYWxsSGVscGVyczo6T3ZlcmZsb3csIG1fcmlnaHQucGF5bG9hZEdQUigp
LCBtX2xlZnQucGF5bG9hZEdQUigpLCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHN0YXRl
LnNsb3dQYXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBtX3NjcmF0Y2hHUFIpKTsgLy8gR28gc2xvdyBpZiBwb3RlbnRpYWwgbmVnYXRpdmUgemVyby4K
KyAgICAgICAgfQorICAgICAgICBqaXQuYm94SW50MzIobV9zY3JhdGNoR1BSLCBtX3Jlc3VsdCk7
CisKKyAgICAgICAgbnVtRmFzdElDcysrOworICAgICAgICBpZiAoZHVtcCkgeworICAgICAgICAg
ICAgZGF0YUxvZygiTnVtIElDczogIiwgbnVtSUNzLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coIk51bSBpbnRJbnQgSUNzOiAiLCBudW1GYXN0SUNzLCAiXG4iKTsKKyAgICAgICAgICAgIGRh
dGFMb2coInJhdGlvOiAiLCBudW1GYXN0SUNzL251bUlDcywgIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCItLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpJ
VE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVkRmFzdFBhdGg7CisgICAgfQorCisgICAgbnVt
RnVsbElDcysrOworICAgIGlmIChkdW1wKSB7CisgICAgICAgIGRhdGFMb2coIk51bSBJQ3M6ICIs
IG51bUlDcywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIk51bSBmdWxsIElDczogIiwgbnVtRnVs
bElDcywgIlxuIik7CisgICAgICAgIGRhdGFMb2coInJhdGlvOiAiLCBudW1GdWxsSUNzL251bUlD
cywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIi0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisK
KyAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5lcmF0ZUZ1bGxTbmlwcGV0Owor
fQorCitib29sIEpJVE11bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QsIENDYWxsSGVscGVyczo6
SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZykKIHsK
ICAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwogICAgIEFTU0VSVCht
X3NjcmF0Y2hHUFIgIT0gbV9sZWZ0LnBheWxvYWRHUFIoKSk7CkBAIC00NywxMiArMTc3LDggQEAg
dm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQwogCiAgICAgQVNTRVJUKCFt
X2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkgfHwgIW1fcmlnaHRPcGVyYW5kLmlz
UG9zaXRpdmVDb25zdEludDMyKCkpOwogCi0gICAgaWYgKCFtX2xlZnRPcGVyYW5kLm1pZ2h0QmVO
dW1iZXIoKSB8fCAhbV9yaWdodE9wZXJhbmQubWlnaHRCZU51bWJlcigpKSB7Ci0gICAgICAgIEFT
U0VSVCghbV9kaWRFbWl0RmFzdFBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9kaWRFbWl0RmFzdFBhdGggPSB0cnVlOworICAgIGlmICghbV9sZWZ0T3BlcmFuZC5taWdodEJl
TnVtYmVyKCkgfHwgIW1fcmlnaHRPcGVyYW5kLm1pZ2h0QmVOdW1iZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIo
KSB8fCBtX3JpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSB7CiAgICAgICAgIEpT
VmFsdWVSZWdzIHZhciA9IG1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSA/IG1f
cmlnaHQgOiBtX2xlZnQ7CkBAIC02NiwyMCArMTkyLDIwIEBAIHZvaWQgSklUTXVsR2VuZXJhdG9y
OjpnZW5lcmF0ZUZhc3RQYXRoKEMKICAgICAgICAgaWYgKG11bHRpcGx5UmVzdWx0R1BSID09IHZh
ci5wYXlsb2FkR1BSKCkpCiAgICAgICAgICAgICBtdWx0aXBseVJlc3VsdEdQUiA9IG1fc2NyYXRj
aEdQUjsKIAotICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hNdWwz
MihDQ2FsbEhlbHBlcnM6Ok92ZXJmbG93LCB2YXIucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6
OkltbTMyKGNvbnN0T3ByLmFzQ29uc3RJbnQzMigpKSwgbXVsdGlwbHlSZXN1bHRHUFIpKTsKKyAg
ICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaE11bDMyKENDYWxsSGVscGVy
czo6T3ZlcmZsb3csIHZhci5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6SW1tMzIoY29uc3RP
cHIuYXNDb25zdEludDMyKCkpLCBtdWx0aXBseVJlc3VsdEdQUikpOwogCiAgICAgICAgIGppdC5i
b3hJbnQzMihtdWx0aXBseVJlc3VsdEdQUiwgbV9yZXN1bHQpOwotICAgICAgICBtX2VuZEp1bXBM
aXN0LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGppdC5q
dW1wKCkpOwogCiAgICAgICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0g
ICAgICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKG5vdEludDMyKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5kKG5vdEludDMy
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVHJ5
IHRvIGRvIGRvdWJsZVZhciAqIGRvdWJsZShpbnRDb25zdGFudCkuCiAgICAgICAgIG5vdEludDMy
LmxpbmsoJmppdCk7CiAgICAgICAgIGlmICghdmFyT3ByLmRlZmluaXRlbHlJc051bWJlcigpKQot
ICAgICAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIodmFyLCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBw
ZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YXIsIG1fc2NyYXRjaEdQUikpOwogCiAgICAgICAg
IGppdC51bmJveERvdWJsZU5vbkRlc3RydWN0aXZlKHZhciwgbV9sZWZ0RlBSLCBtX3NjcmF0Y2hH
UFIsIG1fc2NyYXRjaEZQUik7CiAKQEAgLTk4LDIzICsyMjQsMjMgQEAgdm9pZCBKSVRNdWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQwogICAgICAgICBsZWZ0Tm90SW50ID0gaml0LmJyYW5j
aElmTm90SW50MzIobV9sZWZ0KTsKICAgICAgICAgcmlnaHROb3RJbnQgPSBqaXQuYnJhbmNoSWZO
b3RJbnQzMihtX3JpZ2h0KTsKIAotICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGpp
dC5icmFuY2hNdWwzMihDQ2FsbEhlbHBlcnM6Ok92ZXJmbG93LCBtX3JpZ2h0LnBheWxvYWRHUFIo
KSwgbV9sZWZ0LnBheWxvYWRHUFIoKSwgbV9zY3JhdGNoR1BSKSk7Ci0gICAgICAgIG1fc2xvd1Bh
dGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIG1f
c2NyYXRjaEdQUikpOyAvLyBHbyBzbG93IGlmIHBvdGVudGlhbCBuZWdhdGl2ZSB6ZXJvLgorICAg
ICAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoTXVsMzIoQ0NhbGxIZWxwZXJz
OjpPdmVyZmxvdywgbV9yaWdodC5wYXlsb2FkR1BSKCksIG1fbGVmdC5wYXlsb2FkR1BSKCksIG1f
c2NyYXRjaEdQUikpOworICAgICAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgbV9zY3JhdGNoR1BSKSk7IC8vIEdvIHNsb3cgaWYg
cG90ZW50aWFsIG5lZ2F0aXZlIHplcm8uCiAKICAgICAgICAgaml0LmJveEludDMyKG1fc2NyYXRj
aEdQUiwgbV9yZXN1bHQpOwotICAgICAgICBtX2VuZEp1bXBMaXN0LmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOwogCiAgICAgICAgIGlm
ICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBtX3Nsb3dQYXRo
SnVtcExpc3QuYXBwZW5kKGxlZnROb3RJbnQpOwotICAgICAgICAgICAgbV9zbG93UGF0aEp1bXBM
aXN0LmFwcGVuZChyaWdodE5vdEludCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChsZWZ0Tm90SW50KTsKKyAgICAgICAgICAgIHNsb3dQ
YXRoSnVtcExpc3QuYXBwZW5kKHJpZ2h0Tm90SW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKICAgICAgICAgbGVmdE5vdEludC5saW5rKCZqaXQpOwogICAgICAgICBp
ZiAoIW1fbGVmdE9wZXJhbmQuZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtX3Ns
b3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihtX2xlZnQsIG1fc2Ny
YXRjaEdQUikpOworICAgICAgICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5j
aElmTm90TnVtYmVyKG1fbGVmdCwgbV9zY3JhdGNoR1BSKSk7CiAgICAgICAgIGlmICghbV9yaWdo
dE9wZXJhbmQuZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtX3Nsb3dQYXRoSnVt
cExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihtX3JpZ2h0LCBtX3NjcmF0Y2hHUFIp
KTsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51
bWJlcihtX3JpZ2h0LCBtX3NjcmF0Y2hHUFIpKTsKIAogICAgICAgICBqaXQudW5ib3hEb3VibGVO
b25EZXN0cnVjdGl2ZShtX2xlZnQsIG1fbGVmdEZQUiwgbV9zY3JhdGNoR1BSLCBtX3NjcmF0Y2hG
UFIpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmlnaHRJc0RvdWJsZSA9IGppdC5icmFu
Y2hJZk5vdEludDMyKG1fcmlnaHQpOwpAQCAtMTI0LDcgKzI1MCw3IEBAIHZvaWQgSklUTXVsR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKIAogICAgICAgICByaWdodE5vdEludC5saW5rKCZq
aXQpOwogICAgICAgICBpZiAoIW1fcmlnaHRPcGVyYW5kLmRlZmluaXRlbHlJc051bWJlcigpKQot
ICAgICAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIobV9yaWdodCwgbV9zY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aEp1bXBMaXN0
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9yaWdodCwgbV9zY3JhdGNoR1BSKSk7CiAK
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG1fbGVmdC5wYXlsb2FkR1BSKCksIG1f
bGVmdEZQUik7CiAKQEAgLTEzOSw3ICsyNjUsNyBAQCB2b2lkIEpJVE11bEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aChDCiAgICAgLy8gRG8gZG91YmxlVmFyICogZG91YmxlVmFyLgogICAgIGpp
dC5tdWxEb3VibGUobV9yaWdodEZQUiwgbV9sZWZ0RlBSKTsKIAotICAgIGlmICghbV9hcml0aFBy
b2ZpbGUpCisgICAgaWYgKCFtX2FyaXRoUHJvZmlsZSB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZykK
ICAgICAgICAgaml0LmJveERvdWJsZShtX2xlZnRGUFIsIG1fcmVzdWx0KTsKICAgICBlbHNlIHsK
ICAgICAgICAgLy8gVGhlIEludDUyIG92ZXJmbG93IGNoZWNrIGJlbG93IGludGVudGlvbmFsbHkg
b21pdHMgMWxsIDw8IDUxIGFzIGEgdmFsaWQgbmVnYXRpdmUgSW50NTIgdmFsdWUuCkBAIC0xNDks
NiArMjc1LDcgQEAgdm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQwogICAg
ICAgICBjb25zdCBpbnQ2NF90IG5lZ2F0aXZlWmVyb0JpdHMgPSAxbGwgPDwgNjM7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KG1fbGVmdEZQUiwgbV9yZXN1
bHQucGF5bG9hZEdQUigpKTsKKwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm90TmVnYXRp
dmVaZXJvID0gaml0LmJyYW5jaDY0KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIG1fcmVzdWx0LnBh
eWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQobmVnYXRpdmVaZXJvQml0cykp
OwogCiAgICAgICAgIGppdC5vcjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFyaXRoUHJv
ZmlsZTo6TmVnWmVyb0RvdWJsZSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKG1fYXJp
dGhQcm9maWxlLT5hZGRyZXNzT2ZCaXRzKCkpKTsKQEAgLTE4NiwxMyArMzEzLDE1IEBAIHZvaWQg
SklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKICAgICAgICAgCiAgICAgICAgIGpp
dC5vcjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFyaXRoUHJvZmlsZTo6SW50NTJPdmVy
ZmxvdyksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKG1fYXJpdGhQcm9maWxlLT5hZGRy
ZXNzT2ZCaXRzKCkpKTsKIAotICAgICAgICBtX2VuZEp1bXBMaXN0LmFwcGVuZChub0ludDUyT3Zl
cmZsb3cpOworICAgICAgICBlbmRKdW1wTGlzdC5hcHBlbmQobm9JbnQ1Mk92ZXJmbG93KTsKICAg
ICAgICAgaWYgKG1fc2NyYXRjaEdQUiA9PSBtX3Jlc3VsdC50YWdHUFIoKSB8fCBtX3NjcmF0Y2hH
UFIgPT0gbV9yZXN1bHQucGF5bG9hZEdQUigpKQogICAgICAgICAgICAgaml0LmJveERvdWJsZSht
X2xlZnRGUFIsIG1fcmVzdWx0KTsKIAotICAgICAgICBtX2VuZEp1bXBMaXN0LmFwcGVuZChkb25l
KTsKKyAgICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGRvbmUpOwogI2VuZGlmCiAgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDM2MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxMiArMjksMTcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSklUTWF0aElDSW5saW5lUmVzdWx0LmgiCiAjaW5jbHVk
ZSAiU25pcHBldE9wZXJhbmQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBNYXRoSUNH
ZW5lcmF0aW9uU3RhdGU7CisKIGNsYXNzIEpJVE11bEdlbmVyYXRvciB7CiBwdWJsaWM6CisgICAg
SklUTXVsR2VuZXJhdG9yKCkgeyB9CisKICAgICBKSVRNdWxHZW5lcmF0b3IoU25pcHBldE9wZXJh
bmQgbGVmdE9wZXJhbmQsIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZCwKICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBsZWZ0LCBKU1ZhbHVlUmVncyByaWdodCwKICAg
ICAgICAgRlBSUmVnIGxlZnRGUFIsIEZQUlJlZyByaWdodEZQUiwgR1BSUmVnIHNjcmF0Y2hHUFIs
IEZQUlJlZyBzY3JhdGNoRlBSLApAQCAtNTMsMTEgKzU4LDExIEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKCFtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkgfHwgIW1fcmlnaHRP
cGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKKyAgICBKSVRNYXRoSUNJbmxpbmVSZXN1bHQgZ2Vu
ZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiwgTWF0aElDR2VuZXJhdGlvblN0YXRlJik7CisgICAg
Ym9vbCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYsIENDYWxsSGVscGVyczo6SnVtcExp
c3QmIGVuZEp1bXBMaXN0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93SnVtcExpc3QsIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAKLSAgICBib29sIGRpZEVtaXRGYXN0UGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkRW1pdEZhc3RQYXRoOyB9Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCYgZW5kSnVtcExpc3QoKSB7IHJldHVybiBtX2VuZEp1bXBMaXN0OyB9Ci0gICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCgpIHsgcmV0dXJuIG1fc2xvd1BhdGhK
dW1wTGlzdDsgfQorICAgIGJvb2wgaXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSBjb25zdCB7
IHJldHVybiBtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCk7IH0KKyAgICBib29s
IGlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRPcGVy
YW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCk7IH0KIAogcHJpdmF0ZToKICAgICBTbmlwcGV0T3Bl
cmFuZCBtX2xlZnRPcGVyYW5kOwpAQCAtNzAsMTAgKzc1LDYgQEAgcHJpdmF0ZToKICAgICBHUFJS
ZWcgbV9zY3JhdGNoR1BSOwogICAgIEZQUlJlZyBtX3NjcmF0Y2hGUFI7CiAgICAgQXJpdGhQcm9m
aWxlKiBtX2FyaXRoUHJvZmlsZTsKLSAgICBib29sIG1fZGlkRW1pdEZhc3RQYXRoIHsgZmFsc2Ug
fTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9lbmRKdW1wTGlzdDsKLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IG1fc2xvd1BhdGhKdW1wTGlzdDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMDM2MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQ5LDYgKzIzNDksMzcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoYSAqIGIpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyopCit7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsKKyAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsK
KworICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAq
IGIpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11
bE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqIG11bElDKQoreworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworCisgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25WYWx1ZU11bE5vT3B0
aW1pemU7CisgICAgbXVsSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhlYy0+Y29kZUJsb2Nr
KCksIG5vbk9wdGltaXplVmFyaWFudCk7CisKKyAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE11
bElDU3RhdGVzKCk7CisKKyAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKKyAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKKwor
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBiID0gb3AyLnRv
TnVtYmVyKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAqIGIp
KTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0yMzY1LDYgKzIzOTYsNDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSwgSklUTXVsSUMqIG11bElDKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBv
cDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CisgICAgSlNWYWx1ZSBvcDIgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CisKKyAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNB
bmRSSFMob3AxLCBvcDIpOworICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZE5vT3B0aW1pemU7CisgICAgbXVsSUMtPmdlbmVyYXRlT3V0T2ZMaW5l
KCp2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisKKyAgICBleGVj
LT5jb2RlQmxvY2soKS0+ZHVtcE11bElDU3RhdGVzKCk7CisgICAgCisgICAgZG91YmxlIGEgPSBv
cDEudG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CisK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgKiBiKTsKKyAgICBhcml0aFByb2ZpbGUt
Pm9ic2VydmVSZXN1bHQocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQ
cm9maWxlZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSwgSklUTXVsSUMqKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBvcDEgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CisgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMik7CisKKyAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3Ax
LCBvcDIpOworCisgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7CisgICAgZG91Ymxl
IGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KGEgKiBiKTsKKyAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisKK30KKwogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMjAzNjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksOCBAQCB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpBcnApKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQXJpdGhQcm9maWxlKik7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpBcnBKYWljKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSosIEpJ
VEFkZElDKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9w
ZXJhdGlvbl9FSkpKYWljKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEpJVEFkZElDKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FSkpBcnBKbWljKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSosIEpJVE11bElDKik7Cit0eXBlZGVmIEVuY29kZWRK
U1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpKbWljKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEpJVE11bElDKik7CiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSnNzWikoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9P
UEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKc3NSZW8pKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
UmVnRXhwT2JqZWN0Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FSnNzUmVvSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cE9i
amVjdCosIEpTU3RyaW5nKik7CkBAIC00MTksNiArNDIxLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVmFsdWVBZGRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRBZGRJQyopIFdURl9JTlRFUk5BTDsK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb09wdGltaXpl
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIsIEpJVEFkZElDKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwg
SklUTXVsSUMqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZhbHVlTXVsTm9PcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSosIEpJVE11bElDKikgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
Tm9PcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqLCBKSVRNdWxJQyopIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284462</attachid>
            <date>2016-07-24 21:10:31 -0700</date>
            <delta_ts>2016-07-25 10:03:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>65199</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDE2LTA3LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IG9wX211bC9Bcml0aE11bChVbnR5cGVkLFVudHlwZWQpIHNob3VsZCBiZSBhbiBJQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTA4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtl
cyBNdWwgYSB0eXBlIGJhc2VkIElDIGluIG11Y2ggdGhlIHNhbWUgd2F5IHRoYXQgd2UgbWFkZQor
ICAgICAgICBBZGQgYSB0eXBlLWJhc2VkIElDLiBJIGltcGxlbWVudGVkIE11bCBpbiB0aGUgc2Ft
ZSB3YXkuIEkgYWJzdHJhY3RlZCB0aGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFk
ZCBJQyBpbiB0aGUgdmFyaW91cyBKSVRzIHRvIGFsbG93IGZvciBpdCB0bworICAgICAgICB3b3Jr
IG92ZXIgYXJiaXRyYXJ5IElDIHNuaXBwZXRzLiBUaGlzIHdpbGwgbWFraW5nIGFkZGluZyBEaXYv
U3ViL1BvdyBpbiB0aGUKKyAgICAgICAgZnV0dXJlIGVhc3kuIFRoaXMgcGF0Y2ggYWxzbyBhZGRz
IGEgbmV3IGJvb2xlYW4gYXJndW1lbnQgdG8gdGhlIHZhcmlvdXMKKyAgICAgICAgc25pcHBldCBn
ZW5lcmF0ZUZhc3RQYXRoKCkgbWV0aG9kcyB0byBpbmRpY2F0ZSBpZiB3ZSBzaG91bGQgZW1pdCBy
ZXN1bHQgcHJvZmlsaW5nLgorICAgICAgICBJIGFkZGVkIHRoaXMgYmVjYXVzZSB3ZSB3YW50IHRo
aXMgcHJvZmlsaW5nIHRvIGJlIGVtaXR0ZWQgZm9yIE11bCBpbgorICAgICAgICB0aGUgYmFzZWxp
bmUsIGJ1dCBub3QgaW4gdGhlIERGRy4gV2UgdXNlZCB0byBpbmRpY2F0ZSB0aGlzIHRocm91Z2gg
cGFzc2luZworICAgICAgICBpbiBhIG51bGxwdHIgZm9yIHRoZSBBcml0aFByb2ZpbGUsIGJ1dCB3
ZSBubyBsb25nZXIgZG8gdGhhdCBpbiB0aGUgdXBwZXIKKyAgICAgICAgSklUIHRpZXJzLiBTbyB3
ZSBhcmUgcGFzc2luZyBhbiBleHBsaWNpdCByZXF1ZXN0IGZyb20gdGhlIEpJVCB0aWVyIGFib3V0
CisgICAgICAgIHdoZXRoZXIgb3Igbm90IGl0J3Mgd29ydGggaXQgZm9yIHRoZSBJQyB0byBlbWl0
IHByb2ZpbGluZy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6YWRkSklUQWRkSUMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kU3R1YkluZm8pOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnN0dWJJbmZvQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvRW5kKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdQUlRlbXBvcmFyeTo6YWRvcHQpOgorICAgICAgICAoSlNDOjpERkc6OkZQUlRlbXBvcmFyeTo6
RlBSVGVtcG9yYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1h
dGhJQyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11
bCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdQ
UlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpHUFJUZW1wb3Jh
cnk6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OkRGRzo6RlBSVGVtcG9yYXJ5Ojp+RlBSVGVt
cG9yYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpGUFJUZW1wb3Jhcnk6OmZwcik6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVUb1RoaXMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlTWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChK
U0M6OkpJVDo6Z2V0U2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRBZGRHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpKSVRBZGRHZW5lcmF0b3I6OmdlbmVyYXRlSW5saW5lKToKKyAgICAg
ICAgKEpTQzo6SklUQWRkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKiBq
aXQvSklUQWRkR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpJVEFkZEdlbmVyYXRvcjo6SklU
QWRkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQWRkR2VuZXJhdG9yOjppc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVEFkZEdlbmVyYXRvcjo6aXNSaWdo
dE9wZXJhbmRWYWxpZENvbnN0YW50KToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hZGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX211bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbXVsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3N1Yik6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUTWF0aElD
Lmg6CisgICAgICAgIChKU0M6OkpJVE1hdGhJQzo6c2xvd1BhdGhTdGFydExvY2F0aW9uKToKKyAg
ICAgICAgKEpTQzo6SklUTWF0aElDOjpzbG93UGF0aENhbGxMb2NhdGlvbik6CisgICAgICAgIChK
U0M6OkpJVE1hdGhJQzo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpKSVRNYXRoSUM6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkpJVE1hdGhJQzo6Z2VuZXJhdGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpKSVRNYXRoSUM6Omdl
bmVyYXRlT3V0T2ZMaW5lKToKKyAgICAgICAgKiBqaXQvSklUTWF0aElDRm9yd2FyZHMuaDoKKyAg
ICAgICAgKiBqaXQvSklUTXVsR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUTXVsR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUlubGluZSk6CisgICAgICAgIChKU0M6OkpJVE11bEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgICogaml0L0pJVE11bEdlbmVyYXRvci5oOgorICAg
ICAgICAoSlNDOjpKSVRNdWxHZW5lcmF0b3I6OkpJVE11bEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVE11bEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpKSVRNdWxHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkpJVE11bEdlbmVyYXRvcjo6ZGlkRW1pdEZhc3RQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SklUTXVsR2VuZXJhdG9yOjplbmRKdW1wTGlzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpJVE11bEdlbmVyYXRvcjo6c2xvd1BhdGhKdW1wTGlzdCk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVy
YXRpb25zLmg6CisKIDIwMTYtMDctMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBCMyBzaG91bGQgc3VwcG9ydCBtdWx0aXBsZSBlbnRyeXBvaW50cwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDEzLDYgKzMwMTMsMTEgQEAgSklUQWRkSUMqIENvZGVCbG9j
azo6YWRkSklUQWRkSUMoKQogICAgIHJldHVybiBtX2FkZElDcy5hZGQoKTsKIH0KIAorSklUTXVs
SUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoKQoreworICAgIHJldHVybiBtX211bElDcy5hZGQo
KTsKK30KKwogU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVP
cmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA6IG1fc3R1YkluZm9zKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCBw
dWJsaWM6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1Yklu
Zm8oQWNjZXNzVHlwZSk7CiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKCk7CisgICAgSklUTXVs
SUMqIGFkZEpJVE11bElDKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Ig
c3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KICAgICBCYWc8
U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1
YkluZm9zLmVuZCgpOyB9CiAgICAgCkBAIC0xMDE0LDYgKzEwMTUsNyBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgQmFnPEpJ
VEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwogICAgIEJhZzxC
eVZhbEluZm8+IG1fYnlWYWxJbmZvczsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5r
SW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIw
MzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiSklUQml0WG9yR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklURGl2R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUTGVm
dFNoaWZ0R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklU
TXVsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgpAQCAtMTMxNyw2ICsxMzE2LDE2IEBAIHZvaWQgR1BS
VGVtcG9yYXJ5OjphZG9wdChHUFJUZW1wb3JhcnkmIG8KICAgICBvdGhlci5tX2dwciA9IEludmFs
aWRHUFJSZWc7CiB9CiAKK0ZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KEZQUlRlbXBvcmFyeSYm
IG90aGVyKQoreworICAgIEFTU0VSVChvdGhlci5tX2ppdCk7CisgICAgQVNTRVJUKG90aGVyLm1f
ZnByICE9IEludmFsaWRGUFJSZWcpOworICAgIG1faml0ID0gb3RoZXIubV9qaXQ7CisgICAgbV9m
cHIgPSBvdGhlci5tX2ZwcjsKKworICAgIG90aGVyLm1faml0ID0gbnVsbHB0cjsKK30KKwogRlBS
VGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCkKICAgICA6IG1faml0
KGppdCkKICAgICAsIG1fZnByKEludmFsaWRGUFJSZWcpCkBAIC0zMzM2LDYgKzMzNDUsMjcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgICAgICByZXR1cm47
CiAgICAgfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBib29sIG5lZWRzU2NyYXRjaEdQUlJl
ZyA9IHRydWU7CisgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSBmYWxzZTsKKyNlbHNlCisg
ICAgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcgPSB0cnVlOworICAgIGJvb2wgbmVlZHNTY3JhdGNo
RlBSUmVnID0gdHJ1ZTsKKyNlbmRpZgorCisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29k
ZUJsb2NrKCktPmFkZEpJVEFkZElDKCk7CisgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOworICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uVmFsdWVBZGQ7CisgICAgCisgICAgY29tcGlsZU1hdGhJQyhub2RlLCBhZGRJ
QywgbmVlZHNTY3JhdGNoR1BSUmVnLCBuZWVkc1NjcmF0Y2hGUFJSZWcsIHJlcGF0Y2hpbmdGdW5j
dGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9uLCB0eXBlbmFtZSBOb25SZXBhdGNo
aW5nRnVuY3Rpb24+Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5v
ZGUsIEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVn
LCBib29sIG5lZWRzU2NyYXRjaEZQUlJlZywgUmVwYXRjaGluZ0Z1bmN0aW9uIHJlcGF0Y2hpbmdG
dW5jdGlvbiwgTm9uUmVwYXRjaGluZ0Z1bmN0aW9uIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikKK3sK
KyAgICBFZGdlJiBsZWZ0Q2hpbGQgPSBub2RlLT5jaGlsZDEoKTsKKyAgICBFZGdlJiByaWdodENo
aWxkID0gbm9kZS0+Y2hpbGQyKCk7CisKICAgICBPcHRpb25hbDxKU1ZhbHVlT3BlcmFuZD4gbGVm
dDsKICAgICBPcHRpb25hbDxKU1ZhbHVlT3BlcmFuZD4gcmlnaHQ7CiAKQEAgLTMzNDcsMTkgKzMz
NzcsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIEZQ
UlJlZyBsZWZ0RlBSID0gbGVmdE51bWJlci5mcHIoKTsKICAgICBGUFJSZWcgcmlnaHRGUFIgPSBy
aWdodE51bWJlci5mcHIoKTsKIAorICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7CisKKyAgICBPcHRpb25h
bDxGUFJUZW1wb3Jhcnk+IGZwclNjcmF0Y2g7CisgICAgaWYgKG5lZWRzU2NyYXRjaEZQUlJlZykg
eworICAgICAgICBmcHJTY3JhdGNoID0gRlBSVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICBzY3Jh
dGNoRlBSID0gZnByU2NyYXRjaC0+ZnByKCk7CisgICAgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBPcHRpb25hbDxHUFJUZW1wb3Jhcnk+IGdwclNjcmF0Y2g7CisgICAgaWYgKG5lZWRzU2Ny
YXRjaEdQUlJlZykgeworICAgICAgICBncHJTY3JhdGNoID0gR1BSVGVtcG9yYXJ5KHRoaXMpOwor
ICAgICAgICBzY3JhdGNoR1BSID0gZ3ByU2NyYXRjaC0+Z3ByKCk7CisgICAgfQogICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlc3VsdC5ncHIoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gSW52YWxpZEZQUlJlZzsKICNlbHNlCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0
aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgcmVzdWx0
VGFnLmdwcigpKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAg
ICBGUFJUZW1wb3JhcnkgZnByU2NyYXRjaCh0aGlzKTsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9
IGZwclNjcmF0Y2guZnByKCk7CisgICAgaWYgKG5lZWRzU2NyYXRjaEdQUlJlZykKKyAgICAgICAg
c2NyYXRjaEdQUiA9IHJlc3VsdFJlZ3MudGFnR1BSKCk7CiAjZW5kaWYKIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLnJlc3VsdFR5cGUo
KSk7CkBAIC0zMzc0LDIxICszNDE0LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YWx1ZUFkZChOb2QKIAogICAgIEFTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKTsKIAotICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7
CisgICAgaWYgKCFtYXRoSUMtPmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KCkpIHsKICAgICAg
ICAgbGVmdCA9IEpTVmFsdWVPcGVyYW5kKHRoaXMsIGxlZnRDaGlsZCk7CiAgICAgICAgIGxlZnRS
ZWdzID0gbGVmdC0+anNWYWx1ZVJlZ3MoKTsKICAgICB9Ci0gICAgaWYgKCFyaWdodE9wZXJhbmQu
aXNDb25zdCgpKSB7CisgICAgaWYgKCFtYXRoSUMtPmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dCgpKSB7CiAgICAgICAgIHJpZ2h0ID0gSlNWYWx1ZU9wZXJhbmQodGhpcywgcmlnaHRDaGlsZCk7
CiAgICAgICAgIHJpZ2h0UmVncyA9IHJpZ2h0LT5qc1ZhbHVlUmVncygpOwogICAgIH0KIAotICAg
IEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQygpOwogICAg
IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IGFkZElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgYWRkSUMtPm1fZ2VuZXJhdG9yID0gSklUQWRkR2Vu
ZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0
aFByb2ZpbGUpOworICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJh
bmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgbGVmdEZQ
UiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKLSAg
ICBib29sIGdlbmVyYXRlZElubGluZSA9IGFkZElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwgKmFk
ZElDR2VuZXJhdGlvblN0YXRlKTsKKyAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKKyAgICBib29sIGdlbmVyYXRlZElubGluZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUobV9q
aXQsICphZGRJQ0dlbmVyYXRpb25TdGF0ZSwgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAKICAgICBp
ZiAoZ2VuZXJhdGVkSW5saW5lKSB7CiAgICAgICAgIEFTU0VSVCghYWRkSUNHZW5lcmF0aW9uU3Rh
dGUtPnNsb3dQYXRoSnVtcHMuZW1wdHkoKSk7CkBAIC0zNDA2LDM4ICszNDQ2LDM4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKIAogICAgICAgICAgICAgYXV0byBp
bm5lckxlZnRSZWdzID0gbGVmdFJlZ3M7CiAgICAgICAgICAgICBhdXRvIGlubmVyUmlnaHRSZWdz
ID0gcmlnaHRSZWdzOwotICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkgewor
ICAgICAgICAgICAgaWYgKG1hdGhJQy0+aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkgewog
ICAgICAgICAgICAgICAgIGlubmVyTGVmdFJlZ3MgPSByZXN1bHRSZWdzOwogICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmVWYWx1ZShsZWZ0Q2hpbGQtPmFzSlNWYWx1ZSgpLCBpbm5lckxlZnRSZWdz
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAg
ICAgICAgICAgfSBlbHNlIGlmIChtYXRoSUMtPmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgp
KSB7CiAgICAgICAgICAgICAgICAgaW5uZXJSaWdodFJlZ3MgPSByZXN1bHRSZWdzOwogICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmVWYWx1ZShyaWdodENoaWxkLT5hc0pTVmFsdWUoKSwgaW5uZXJS
aWdodFJlZ3MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYWRkSUNHZW5lcmF0
aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgICAgICBhZGRJQ0dl
bmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1
ZUFkZE9wdGltaXplLCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihhZGRJQykpOworICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9FSkpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJl
Z3MsIGlubmVyUmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkLCByZXN1bHRSZWdzLCBpbm5lckxlZnRS
ZWdzLCBpbm5lclJpZ2h0UmVncyk7CisgICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3Rh
dGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncyk7CiAKICAgICAgICAgICAg
IHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CiAgICAgICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGRvbmUsICZtX2ppdCk7CiAKICAg
ICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgICAgIGFkZElDLT5maW5hbGl6ZUlubGluZUNvZGUoKmFkZElDR2VuZXJh
dGlvblN0YXRlLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtYXRoSUMtPmZpbmFsaXpl
SW5saW5lQ29kZSgqYWRkSUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgaWYgKG1hdGhJQy0+aXNMZWZ0T3BlcmFuZFZhbGlkQ29u
c3RhbnQoKSkgewogICAgICAgICAgICAgbGVmdCA9IEpTVmFsdWVPcGVyYW5kKHRoaXMsIGxlZnRD
aGlsZCk7CiAgICAgICAgICAgICBsZWZ0UmVncyA9IGxlZnQtPmpzVmFsdWVSZWdzKCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKG1hdGhJQy0+aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KCkpIHsKICAgICAgICAgICAg
IHJpZ2h0ID0gSlNWYWx1ZU9wZXJhbmQodGhpcywgcmlnaHRDaGlsZCk7CiAgICAgICAgICAgICBy
aWdodFJlZ3MgPSByaWdodC0+anNWYWx1ZVJlZ3MoKTsKICAgICAgICAgfQogCiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQs
IHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7
CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgfQogCkBAIC00MTU2LDc4ICs0
MTk2LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE9wdGlvbmFsPEpTVmFsdWVPcGVy
YW5kPiBsZWZ0OwotICAgICAgICBPcHRpb25hbDxKU1ZhbHVlT3BlcmFuZD4gcmlnaHQ7Ci0KLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3M7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
czsKLQotICAgICAgICBGUFJUZW1wb3JhcnkgbGVmdE51bWJlcih0aGlzKTsKLSAgICAgICAgRlBS
VGVtcG9yYXJ5IHJpZ2h0TnVtYmVyKHRoaXMpOwotICAgICAgICBGUFJSZWcgbGVmdEZQUiA9IGxl
ZnROdW1iZXIuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByaWdodEZQUiA9IHJpZ2h0TnVtYmVyLmZw
cigpOwotCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlc3Vs
dC5ncHIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIEZQUlJlZyBzY3JhdGNo
RlBSID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcgPSB0
cnVlOworICAgICAgICBib29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IGZhbHNlOwogI2Vsc2UKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZXN1bHRQYXlsb2FkLmdwcigpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgRlBSVGVtcG9y
YXJ5IGZwclNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnByU2Ny
YXRjaC5mcHIoKTsKKyAgICAgICAgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcgPSB0cnVlOworICAg
ICAgICBib29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKLQotICAgICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5yZXN1
bHRUeXBlKCkpOwotICAgICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQobV9zdGF0ZS5m
b3JOb2RlKHJpZ2h0Q2hpbGQpLnJlc3VsdFR5cGUoKSk7Ci0KLSAgICAgICAgLy8gVGhlIHNuaXBw
ZXQgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgYm90aCBvcGVyYW5kcyBiZWluZyBjb25zdGFu
dC4gSWYgdGhlIGxlZnQKLSAgICAgICAgLy8gb3BlcmFuZCBpcyBhbHJlYWR5IGNvbnN0LCB3ZSds
bCBpZ25vcmUgdGhlIHJpZ2h0IG9wZXJhbmQncyBjb25zdG5lc3MuCi0gICAgICAgIGlmIChsZWZ0
Q2hpbGQtPmlzSW50MzJDb25zdGFudCgpKQotICAgICAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29u
c3RJbnQzMihsZWZ0Q2hpbGQtPmFzSW50MzIoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJpZ2h0Q2hp
bGQtPmlzSW50MzJDb25zdGFudCgpKQotICAgICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0
SW50MzIocmlnaHRDaGlsZC0+YXNJbnQzMigpKTsKLQotICAgICAgICBBU1NFUlQoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7Ci0KLSAgICAgICAgaWYg
KCFsZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSB7Ci0gICAgICAgICAgICBsZWZ0
ID0gSlNWYWx1ZU9wZXJhbmQodGhpcywgbGVmdENoaWxkKTsKLSAgICAgICAgICAgIGxlZnRSZWdz
ID0gbGVmdC0+anNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJpZ2h0T3Bl
cmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSB7Ci0gICAgICAgICAgICByaWdodCA9IEpTVmFs
dWVPcGVyYW5kKHRoaXMsIHJpZ2h0Q2hpbGQpOwotICAgICAgICAgICAgcmlnaHRSZWdzID0gcmln
aHQtPmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBKSVRNdWxHZW5lcmF0b3Ig
Z2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsCi0gICAgICAgICAgICBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRj
aEZQUik7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLQotICAgICAgICBB
U1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKLSAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCku
YXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFJlZ3Mp
OwotCi0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSB7Ci0g
ICAgICAgICAgICBsZWZ0UmVncyA9IHJlc3VsdFJlZ3M7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
VmFsdWUobGVmdENoaWxkLT5hc0pTVmFsdWUoKSwgbGVmdFJlZ3MpOwotICAgICAgICB9IGVsc2Ug
aWYgKHJpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSB7Ci0gICAgICAgICAgICBy
aWdodFJlZ3MgPSByZXN1bHRSZWdzOwotICAgICAgICAgICAgbV9qaXQubW92ZVZhbHVlKHJpZ2h0
Q2hpbGQtPmFzSlNWYWx1ZSgpLCByaWdodFJlZ3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZU11bCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncyk7Ci0KLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRSZWdzKTsKLSAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLQotICAgICAgICBnZW4uZW5kSnVtcExpc3Qo
KS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJ
QygpOworICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVs
T3B0aW1pemU7CisgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVNdWw7CisgICAgICAgIAorICAgICAgICBjb21waWxlTWF0aElDKG5vZGUsIG11bElDLCBu
ZWVkc1NjcmF0Y2hHUFJSZWcsIG5lZWRzU2NyYXRjaEZQUlJlZywgcmVwYXRjaGluZ0Z1bmN0aW9u
LCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJERkdPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxh
bi5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgi
CiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTEyODgsOSArMTI4OSw5IEBAIHB1YmxpYzoKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKSkphaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpT
VmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgcHRyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljIG9w
ZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVn
cyBhcmcyLCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLmdwcigpLCBhcmcyLmdwcigpLCBwdHIpOworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMS5ncHIoKSwgYXJnMi5n
cHIoKSwgbWF0aElDKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQuZ3ByKCkpOwogICAgIH0KIApAQCAtMTcxMSw5ICsxNzEyLDkgQEAgcHVibGlj
OgogICAgIH0KICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkphaWMgb3BlcmF0aW9uLCBKU1Zh
bHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0
ZWRJbW1QdHIgcHRyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUpKTWljIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVn
cyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyLCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKICAgICB7Ci0g
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSwgYXJnMi5wYXlsb2FkR1BSKCks
IGFyZzIudGFnR1BSKCksIHB0cik7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdH
UFIoKSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCksIG1hdGhJQyk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LnBheWxvYWRHUFIo
KSwgcmVzdWx0LnRhZ0dQUigpKTsKICAgICB9CiAKQEAgLTI0NTEsNiArMjQ1Miw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGVtaXRVbnR5cGVkUmlnaHRTaGlmdEJpdE9wKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVTaGlmdE9wKE5vZGUqKTsKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFJlcGF0Y2hpbmdGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUmVwYXRjaGluZ0Z1
bmN0aW9uPgorICAgIHZvaWQgY29tcGlsZU1hdGhJQyhOb2RlKiwgSklUTWF0aElDPEdlbmVyYXRv
cj4qLCBib29sIG5lZWRzU2NyYXRjaEdQUlJlZywgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcsIFJl
cGF0Y2hpbmdGdW5jdGlvbiwgTm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKKwogICAgIHZvaWQgY29t
cGlsZVZhbHVlQWRkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aEFkZChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlTWFrZVJvcGUoTm9kZSopOwpAQCAtMzA0NSw2ICszMDQ5LDE2IEBAIHB1
YmxpYzoKIAogICAgIEdQUlRlbXBvcmFyeShHUFJUZW1wb3JhcnkmIG90aGVyKSA9IGRlbGV0ZTsK
IAorICAgIEdQUlRlbXBvcmFyeShHUFJUZW1wb3JhcnkmJiBvdGhlcikKKyAgICB7CisgICAgICAg
IEFTU0VSVChvdGhlci5tX2ppdCk7CisgICAgICAgIEFTU0VSVChvdGhlci5tX2dwciAhPSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQgPSBvdGhlci5tX2ppdDsKKyAgICAgICAgbV9ncHIg
PSBvdGhlci5tX2dwcjsKKyAgICAgICAgb3RoZXIubV9qaXQgPSBudWxscHRyOworICAgICAgICBv
dGhlci5tX2dwciA9IEludmFsaWRHUFJSZWc7CisgICAgfQorCiAgICAgR1BSVGVtcG9yYXJ5JiBv
cGVyYXRvcj0oR1BSVGVtcG9yYXJ5JiYgb3RoZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1f
aml0KTsKQEAgLTMwOTMsNyArMzEwNyw5IEBAIHByaXZhdGU6CiB9OwogCiBjbGFzcyBGUFJUZW1w
b3JhcnkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZQUlRlbXBvcmFyeSk7CiBwdWJsaWM6
CisgICAgRlBSVGVtcG9yYXJ5KEZQUlRlbXBvcmFyeSYmKTsKICAgICBGUFJUZW1wb3JhcnkoU3Bl
Y3VsYXRpdmVKSVQqKTsKICAgICBGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kJik7CiAgICAgRlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCYsIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmKTsKQEAgLTMxMDMs
MTEgKzMxMTksMTMgQEAgcHVibGljOgogCiAgICAgfkZQUlRlbXBvcmFyeSgpCiAgICAgewotICAg
ICAgICBtX2ppdC0+dW5sb2NrKGZwcigpKTsKKyAgICAgICAgaWYgKExJS0VMWShtX2ppdCkpCisg
ICAgICAgICAgICBtX2ppdC0+dW5sb2NrKGZwcigpKTsKICAgICB9CiAKICAgICBGUFJSZWcgZnBy
KCkgY29uc3QKICAgICB7CisgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVCht
X2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKICAgICAgICAgcmV0dXJuIG1fZnByOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzNiw5ICsxNTM2LDE4IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwogICAg
IH0KLSAgICAKKwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKCkKICAgICB7CisgICAgICAgIEpJ
VEFkZElDKiBhZGRJQyA9IGNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQygpOworICAgICAgICBhdXRv
IHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CisgICAgICAg
IGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CisgICAgICAg
IGNvbXBpbGVNYXRoSUMoYWRkSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yPgorICAg
IHZvaWQgY29tcGlsZU1hdGhJQyhKSVRNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBGdW5jdGlv
blB0ciByZXBhdGNoaW5nRnVuY3Rpb24sIEZ1bmN0aW9uUHRyIG5vblJlcGF0Y2hpbmdGdW5jdGlv
bikKKyAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CiAgICAgICAgIAogICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTU2NSw0MiAr
MTU3NCw0MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0PiBleGNlcHRpb25zID0KICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxl
LT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwogCi0gICAgICAgICAg
ICAgICAgSklUQWRkSUMqIGFkZElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQygpOwot
ICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IGFkZElDR2VuZXJhdGlv
blN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOworICAgICAgICAg
ICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9
IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHN0YXRlLT5ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAg
YWRkSUMtPm1fZ2VuZXJhdG9yID0gSklUQWRkR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCisgICAgICAgICAgICAgICAgbWF0
aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBK
U1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJh
bXMuZnBTY3JhdGNoKDApLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEp
LCBwYXJhbXMuZ3BTY3JhdGNoKDApLCBJbnZhbGlkRlBSUmVnLCBhcml0aFByb2ZpbGUpOwogCi0g
ICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBhZGRJQy0+Z2VuZXJhdGVJbmxp
bmUoaml0LCAqYWRkSUNHZW5lcmF0aW9uU3RhdGUpOworICAgICAgICAgICAgICAgIGJvb2wgc2hv
dWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
SW5saW5lID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZShqaXQsICptYXRoSUNHZW5lcmF0aW9uU3Rh
dGUsIHNob3VsZEVtaXRQcm9maWxpbmcpOwogCiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZElubGluZSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWFkZElDR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IW1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgYXV0byBkb25lID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAg
IHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xv
d1BhdGhKdW1wcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkSUNHZW5l
cmF0aW9uU3RhdGUtPnNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRJ
Q0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xvd1BhdGhSZXBhdGNoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0
Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG93UGF0aENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMuZ2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemUsIHBhcmFtc1swXS5ncHIo
KSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihhZGRJQykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZElDR2VuZXJh
dGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFt
c1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGpp
dCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb25WYWx1ZUFkZCwgcGFyYW1zWzBdLmdwcigpLCBw
YXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBub25SZXBh
dGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNb
Ml0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZElDLT5m
aW5hbGl6ZUlubGluZUNvZGUoKmFkZElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUMtPmZpbmFsaXplSW5saW5lQ29kZSgqbWF0
aElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAg
ICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmln
aW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25WYWx1ZUFkZCwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFt
c1syXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub25SZXBhdGNoaW5nRnVuY3Rp
b24sIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogCkBAIC0xNzYyLDcgKzE3NzEsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAg
ICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklUTXVsR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1
ZU11bCk7CisgICAgICAgICAgICBKSVRNdWxJQyogbXVsSUMgPSBjb2RlQmxvY2soKS0+YWRkSklU
TXVsSUMoKTsKKyAgICAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVNdWxPcHRpbWl6ZTsKKyAgICAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uVmFsdWVNdWw7CisgICAgICAgICAgICBjb21waWxlTWF0aElDKG11bElDLCBy
ZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxMSw2ICs3MTEsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKGludCBzcmMpOwogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+
CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUTWF0aElDPEdlbmVyYXRvcj4qLCBJbnN0
cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVu
Y3Rpb24+CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUTWF0aElDPEdlbmVyYXRvcj4q
LCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
LCBSZXBhdGNoRnVuY3Rpb24pOworCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2NSw4ICs3NzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
SkosIGludCwgR1BSUmVnLCBHUFJSZWcpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycCwgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVS
ZWdzLCBKU1ZhbHVlUmVncywgQXJpdGhQcm9maWxlKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBKU1ZhbHVlUmVncywgSlNW
YWx1ZVJlZ3MsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpBcnBKYWljLCBKU1ZhbHVlUmVncywgSlNWYWx1
ZVJlZ3MsIEpTVmFsdWVSZWdzLCBBcml0aFByb2ZpbGUqLCBKSVRBZGRJQyopOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkphaWMs
IEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpJVEFkZElDKik7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpK
QXJwTWljLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBBcml0aFByb2Zp
bGUqLCBUcnVzdGVkSW1tUHRyKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywg
SlNWYWx1ZVJlZ3MsIFRydXN0ZWRJbW1QdHIpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFwLCBpbnQsIEdQUlJlZywgR1BSUmVn
LCBBcnJheVByb2ZpbGUqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FSkpCeSwgaW50LCBHUFJSZWcsIEdQUlJlZywgQnlWYWxJbmZv
Kik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVy
YXRpb25fRUpPSiwgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZyk7CkBAIC05NTYsOCArOTYyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOwogCi0gICAgICAgIEhhc2hNYXA8SW5zdHJ1Y3Rpb24qLCBK
SVRBZGRJQyo+IG1faW5zdHJ1Y3Rpb25Ub0pJVEFkZElDOwotICAgICAgICBIYXNoTWFwPEluc3Ry
dWN0aW9uKiwgTWF0aElDR2VuZXJhdGlvblN0YXRlPiBtX2luc3RydWN0aW9uVG9KSVRBZGRJQ0dl
bmVyYXRpb25TdGF0ZTsKKyAgICAgICAgSGFzaE1hcDxJbnN0cnVjdGlvbiosIHZvaWQqPiBtX2lu
c3RydWN0aW9uVG9NYXRoSUM7CisgICAgICAgIEhhc2hNYXA8SW5zdHJ1Y3Rpb24qLCBNYXRoSUNH
ZW5lcmF0aW9uU3RhdGU+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAog
ICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGlt
aXplZE9ySW5saW5lZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQWRkR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFk
ZEdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQWRkR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBKSVRNYXRoSUNJbmxpbmVSZXN1bHQgSklUQWRkR2VuZXJhdG9yOjpnCiAgICAgICAgIGxocyA9
IG1fYXJpdGhQcm9maWxlLT5saHNPYnNlcnZlZFR5cGUoKTsKICAgICAgICAgcmhzID0gbV9hcml0
aFByb2ZpbGUtPnJoc09ic2VydmVkVHlwZSgpOwogICAgICAgICBpZiAobGhzLmlzRW1wdHkoKSB8
fCByaHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSUNzIHNob3VsZCBiZSBh
YmxlIHRvIHJlcGF0Y2ggd2l0aG91dCBlbWl0dGluZyBhbiBpbmxpbmUgcGF0aDoKKyAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMTAKICAg
ICAgICAgICAgIGxocyA9IE9ic2VydmVkVHlwZSgpLndpdGhJbnQzMigpOwogICAgICAgICAgICAg
cmhzID0gT2JzZXJ2ZWRUeXBlKCkud2l0aEludDMyKCk7CiAgICAgICAgIH0KQEAgLTcxLDcgKzcz
LDcgQEAgSklUTWF0aElDSW5saW5lUmVzdWx0IEpJVEFkZEdlbmVyYXRvcjo6ZwogICAgIHJldHVy
biBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkdlbmVyYXRlRnVsbFNuaXBwZXQ7CiB9CiAKLWJvb2wg
SklUQWRkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlzdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYg
c2xvd1BhdGhKdW1wTGlzdCkKK2Jvb2wgSklUQWRkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlzdCwg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCwgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKQogewogICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7
CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBtX2xlZnQucGF5bG9hZEdQUigpKTsKQEAgLTE2
Niw3ICsxNjgsNyBAQCBib29sIEpJVEFkZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDCiAK
ICAgICAvLyBEbyBkb3VibGVWYXIgKyBkb3VibGVWYXIuCiAgICAgaml0LmFkZERvdWJsZShtX3Jp
Z2h0RlBSLCBtX2xlZnRGUFIpOwotICAgIGlmIChtX2FyaXRoUHJvZmlsZSkKKyAgICBpZiAobV9h
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZykKICAgICAgICAgbV9hcml0aFByb2Zp
bGUtPmVtaXRTZXREb3VibGUoaml0KTsKICAgICAgICAgCiAgICAgaml0LmJveERvdWJsZShtX2xl
ZnRGUFIsIG1fcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQWRk
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
ZGRHZW5lcmF0b3IuaAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBZGRHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsMTAgQEAg
cHVibGljOgogICAgIH0KIAogICAgIEpJVE1hdGhJQ0lubGluZVJlc3VsdCBnZW5lcmF0ZUlubGlu
ZShDQ2FsbEhlbHBlcnMmLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmKTsKLSAgICBib29sIGdlbmVy
YXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVt
cExpc3QsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QpOworICAgIGJv
b2wgZ2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
JiBlbmRKdW1wTGlzdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCwg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKKworICAgIGJvb2wgaXNMZWZ0T3BlcmFuZFZhbGlk
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPcGVyYW5kLmlzQ29uc3RJbnQzMigpOyB9
CisgICAgYm9vbCBpc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBt
X3JpZ2h0T3BlcmFuZC5pc0NvbnN0SW50MzIoKTsgfQogCiBwcml2YXRlOgogICAgIFNuaXBwZXRP
cGVyYW5kIG1fbGVmdE9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NCw2ICs2ODQs
MjIgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgT3BlcmFuZFR5cGVzIGdldE9wZQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBK
SVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoKTsKKyAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOworICAgIGVtaXRN
YXRoSUNGYXN0KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2Fk
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNl
dChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZU9mZnNldCk7CisKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNTbG93KGFkZElDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUTWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5v
blByb2ZpbGVkRnVuY3Rpb24pCit7CiAgICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CiAgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CkBA
IC02OTIsOSArNzA4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJy
ZQogICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3BpZWRJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlk
RlBSUmVnOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9
IGZwUmVnVDI7CiAjZWxzZQogICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBl
cyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKQEAgLTcxOCw0MCArNzM0LDM1IEBAIHZvaWQgSklUOjplbWl0
X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmUKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3Bl
cmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCi0gICAgaWYgKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgaWYgKCFtYXRoSUMtPmlzTGVmdE9wZXJhbmRWYWxp
ZENvbnN0YW50KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7Ci0gICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgIGlmICghbWF0aElDLT5p
c1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoKTsKLQotICAgIG1faW5zdHJ1Y3Rpb25Ub0pJVEFkZElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKLSAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIGFkZElD
R2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvSklUQWRkSUNHZW5lcmF0aW9uU3RhdGUu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3Ry
dWN0aW9uLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
YWRkSUMtPm1fZ2VuZXJhdG9yID0gSklUQWRkR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZwUmVnVDEs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CisgICAgbWF0aElDLT5tX2dl
bmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoRlBSLCBhcml0aFByb2ZpbGUpOwogCi0gICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0g
YWRkSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBhZGRJQ0dlbmVyYXRpb25TdGF0ZSk7CisgICAg
Ym9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywg
bWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsK
ICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7CiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKLQogICAgICAgICBpZiAoYXJpdGhQcm9maWxlKQotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blZhbHVlQWRkLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24obm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKGFkZElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlc3VsdFJlZ3MpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVw
YXRjaEZ1bmN0aW9uPgordm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVE1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCiB7Ci0gICAg
bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5
dGVjb2RlT2Zmc2V0KTsKLQotICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgYWRkSUNHZW5lcmF0
aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9KSVRBZGRJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1
cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwotICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoU3RhcnQgPSBsYWJlbCgpOworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQo
Y3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CisgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CkBAIC03NjEsNyArNzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChJ
bnN0cnVjdGlvbiogYwogICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhj
b3BpZWRJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CiAj
ZWxzZQogICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKQEAgLTc3NywyNSArNzg4LDI0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQo
SW5zdHJ1Y3Rpb24qIGMKICAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQog
ICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSk7CiAKLSAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgIGlmIChtYXRoSUMt
PmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KCkpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisg
ICAgaWYgKG1hdGhJQy0+aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCi0gICAgSklUQWRkSUMqIGFk
ZElDID0gbV9pbnN0cnVjdGlvblRvSklUQWRkSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBBcml0aFByb2ZpbGUmIGFy
aXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotICAgICAgICBpZiAoYWRkSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhS
ZXBhdGNoKQotICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsICZhcml0aFByb2ZpbGUsIGFkZElDKTsKKyAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihi
aXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKQXJwTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsICZhcml0aFByb2ZpbGUsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVB
ZGRQcm9maWxlZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgJmFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbihwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCAmYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgYWRkSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhZGRJQyk7CisgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2Vf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwogCiAgICAgYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSYgYWRkSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9KSVRBZGRJQ0dlbmVy
YXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwotICAgICAgICBhZGRJ
Qy0+ZmluYWxpemVJbmxpbmVDb2RlKGFkZElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsK
KyAgICAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBt
X2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rp
b24pLT52YWx1ZTsKKyAgICAgICAgbWF0aElDLT5maW5hbGl6ZUlubGluZUNvZGUobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsKICAgICB9KTsKIH0KIApAQCAtODc1LDExMiArODg1
LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kaXYoSW5zdHJ1Y3Rpb24qIGMKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbXVsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
aW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9w
MSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE9w
ZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3BpZWRJbnN0cnVjdGlvbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxp
ZEZQUlJlZzsKLSNlbHNlCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVz
KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBmcFJlZ1QyOwotI2VuZGlmCi0KLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51
bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9m
aWxlID0gJm1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24p
OwotCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQodHlwZXMuZmlyc3QoKSk7Ci0gICAg
U25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKHR5cGVzLnNlY29uZCgpKTsKLQotICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdElu
dDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJh
bmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKLQotICAgIGlmICghbGVm
dE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZl
Q29uc3RJbnQzMigpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRS
ZWdzKTsKLQotICAgIEpJVE11bEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywKLSAgICAgICAgZnBSZWdUMCwgZnBS
ZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKLQotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQotICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkp
IHsKLSAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwotCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VS
VChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0
aEp1bXBMaXN0KCkuZW1wdHkoKSk7Ci0gICAgICAgIGlmIChhcml0aFByb2ZpbGUpIHsKLSAgICAg
ICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKQotICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgICAgICAg
ICBpZiAocmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpCi0gICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX211bCk7Ci0gICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRN
dWxJQygpOworICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9u
LCBtdWxJQyk7CisgICAgZW1pdE1hdGhJQ0Zhc3QobXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbXVsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dD
YXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlT2Zmc2V0
KTsKLSAgICAKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGNvcGllZElu
c3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0j
ZWxzZQotICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjdXJyZW50SW5z
dHJ1Y3Rpb24pOwotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRpZgot
Ci0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQodHlwZXMuZmlyc3QoKSk7Ci0gICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKHR5cGVzLnNlY29uZCgpKTsKIAotICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMy
KGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
Ci0gICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKQotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICAgICAgaWYg
KHJpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKQotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0gICAgICAgIEFyaXRoUHJvZmlsZSYg
YXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0
cnVjdGlvbik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgJmFyaXRoUHJvZmlsZSk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX211bCk7Ci0gICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Ci0gICAgfQorICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2FzdDxKSVRNdWxJQyo+KG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CisgICAgZW1pdE1h
dGhJQ1Nsb3cobXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bE9wdGltaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMiwxNyArNDMyLDE3IEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUpKQXJwSmFpYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJl
Z3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEpJ
VEFkZElDKiBhZGRJQykKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycE1pYyBvcGVyYXRpb24sIEpTVmFsdWVS
ZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogewotICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKGFyaXRoUHJvZmls
ZSksIFRydXN0ZWRJbW1QdHIoYWRkSUMpKTsKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihhcml0aFByb2ZpbGUpLCBtYXRoSUMpOwogICAg
IENhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAg
ICBzZXR1cFJlc3VsdHMocmVzdWx0KTsKICAgICByZXR1cm4gY2FsbDsKIH0KIAotQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpKSmFpYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJn
MSwgSlNWYWx1ZVJlZ3MgYXJnMiwgSklUQWRkSUMqIGFkZElDKQorQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWlj
IG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVl
UmVncyBhcmcyLCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKIHsKLSAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihhZGRJQykpOworICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBtYXRoSUMpOwogICAgIENhbGwgY2Fs
bCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICBzZXR1cFJl
c3VsdHMocmVzdWx0KTsKICAgICByZXR1cm4gY2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9yLmgiCisj
aW5jbHVkZSAiSklUTXVsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUTWF0aElDSW5saW5lUmVz
dWx0LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAg
LTU0LDcgKzU1LDEwIEBAIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFN0
YXJ0TG9jYXRpb24oKSB7IHJldHVybiBtX2lubGluZVN0YXJ0LmxhYmVsQXRPZmZzZXQobV9kZWx0
YUZyb21TdGFydFRvU2xvd1BhdGhTdGFydCk7IH0KICAgICBDb2RlTG9jYXRpb25DYWxsIHNsb3dQ
YXRoQ2FsbExvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5jYWxsQXRPZmZzZXQobV9k
ZWx0YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24pOyB9CiAKLSAgICBib29sIGdlbmVy
YXRlSW5saW5lKENDYWxsSGVscGVycyYgaml0LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
KQorICAgIGJvb2wgaXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBt
X2dlbmVyYXRvci5pc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudCgpOyB9CisgICAgYm9vbCBpc1Jp
Z2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2dlbmVyYXRvci5pc1Jp
Z2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKTsgfQorCisgICAgYm9vbCBnZW5lcmF0ZUlubGluZShD
Q2FsbEhlbHBlcnMmIGppdCwgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgYm9vbCBzaG91
bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIHN0YXRlLmZhc3RQYXRoU3Rh
cnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgc2l6ZV90IHN0YXJ0U2l6ZSA9IGppdC5tX2Fzc2Vt
Ymxlci5idWZmZXIoKS5jb2RlU2l6ZSgpOwpAQCAtNzMsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkdlbmVyYXRlRnVsbFNu
aXBwZXQ6IHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbmRKdW1wTGlz
dDsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0
aChqaXQsIGVuZEp1bXBMaXN0LCBzdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gbV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQsIGVuZEp1bXBMaXN0
LCBzdGF0ZS5zbG93UGF0aEp1bXBzLCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKICAgICAgICAgICAg
IGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBzdGF0ZS5mYXN0UGF0aEVuZCA9IGppdC5s
YWJlbCgpOwogICAgICAgICAgICAgICAgIHN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCA9IGZh
bHNlOwpAQCAtMTA0LDcgKzEwOCw5IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVuZEp1bXBMaXN0OyAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93UGF0aEp1bXBMaXN0OyAKLSAgICAgICAgICAgIGJvb2wgZW1pdHRlZEZh
c3RQYXRoID0gbV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQsIGVuZEp1bXBMaXN0LCBz
bG93UGF0aEp1bXBMaXN0KTsKKworICAgICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
ID0gIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSk7CisgICAg
ICAgICAgICBib29sIGVtaXR0ZWRGYXN0UGF0aCA9IG1fZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBh
dGgoaml0LCBlbmRKdW1wTGlzdCwgc2xvd1BhdGhKdW1wTGlzdCwgc2hvdWxkRW1pdFByb2ZpbGlu
Zyk7CiAgICAgICAgICAgICBpZiAoIWVtaXR0ZWRGYXN0UGF0aCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBlbmRKdW1wTGlzdC5hcHBlbmQoaml0Lmp1bXAoKSk7CkBAIC0x
NTcsNiArMTYzLDcgQEAgcHVibGljOgogfTsKIAogdHlwZWRlZiBKSVRNYXRoSUM8SklUQWRkR2Vu
ZXJhdG9yPiBKSVRBZGRJQzsKK3R5cGVkZWYgSklUTWF0aElDPEpJVE11bEdlbmVyYXRvcj4gSklU
TXVsSUM7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE1hdGhJQ0ZvcndhcmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRNYXRoSUNGb3J3YXJkcy5oCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQ0ZvcndhcmRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDggKzMxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yPiBjbGFzcyBKSVRNYXRoSUM7CiBjbGFzcyBKSVRBZGRHZW5lcmF0b3I7CitjbGFz
cyBKSVRNdWxHZW5lcmF0b3I7CiAKIHR5cGVkZWYgSklUTWF0aElDPEpJVEFkZEdlbmVyYXRvcj4g
SklUQWRkSUM7Cit0eXBlZGVmIEpJVE1hdGhJQzxKSVRNdWxHZW5lcmF0b3I+IEpJVE11bElDOwog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRNdWxHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTXVsR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MCArMjksNzIgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgi
CisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVE11
bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKK0pJVE1hdGhJ
Q0lubGluZVJlc3VsdCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlSW5saW5lKENDYWxsSGVscGVy
cyYgaml0LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQoreworICAgIC8vIFdlIGRlZmF1
bHQgdG8gc3BlY3VsYXRpbmcgaW50MzIuCisgICAgT2JzZXJ2ZWRUeXBlIGxocyA9IE9ic2VydmVk
VHlwZSgpLndpdGhJbnQzMigpOworICAgIE9ic2VydmVkVHlwZSByaHMgPSBPYnNlcnZlZFR5cGUo
KS53aXRoSW50MzIoKTsKKworICAgIGlmIChtX2FyaXRoUHJvZmlsZSkgeworICAgICAgICBsaHMg
PSBtX2FyaXRoUHJvZmlsZS0+bGhzT2JzZXJ2ZWRUeXBlKCk7CisgICAgICAgIHJocyA9IG1fYXJp
dGhQcm9maWxlLT5yaHNPYnNlcnZlZFR5cGUoKTsKKyAgICAgICAgaWYgKGxocy5pc0VtcHR5KCkg
fHwgcmhzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElDcyBzaG91bGQgYmUg
YWJsZSB0byByZXBhdGNoIHdpdGhvdXQgZW1pdHRpbmcgYW4gaW5saW5lIHBhdGg6CisgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTEwCisg
ICAgICAgICAgICBsaHMgPSBPYnNlcnZlZFR5cGUoKS53aXRoSW50MzIoKTsKKyAgICAgICAgICAg
IHJocyA9IE9ic2VydmVkVHlwZSgpLndpdGhJbnQzMigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGxocy5pc09ubHlOb25OdW1iZXIoKSAmJiByaHMuaXNPbmx5Tm9uTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkRvbnRHZW5lcmF0ZTsKKworICAg
IGlmIChsaHMuaXNPbmx5TnVtYmVyKCkgJiYgcmhzLmlzT25seU51bWJlcigpKSB7CisgICAgICAg
IGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQorICAgICAgICAgICAgcmV0dXJuIEpJ
VE1hdGhJQ0lubGluZVJlc3VsdDo6RG9udEdlbmVyYXRlOworCisgICAgICAgIGlmICghbV9sZWZ0
T3BlcmFuZC5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHN0YXRlLnNsb3dQYXRo
SnVtcHMuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihtX2xlZnQsIG1fc2NyYXRjaEdQUikp
OworICAgICAgICBpZiAoIW1fcmlnaHRPcGVyYW5kLmRlZmluaXRlbHlJc051bWJlcigpKQorICAg
ICAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVy
KG1fcmlnaHQsIG1fc2NyYXRjaEdQUikpOworICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFw
cGVuZChqaXQuYnJhbmNoSWZJbnQzMihtX2xlZnQpKTsKKyAgICAgICAgc3RhdGUuc2xvd1BhdGhK
dW1wcy5hcHBlbmQoaml0LmJyYW5jaElmSW50MzIobV9yaWdodCkpOworICAgICAgICBqaXQudW5i
b3hEb3VibGVOb25EZXN0cnVjdGl2ZShtX2xlZnQsIG1fbGVmdEZQUiwgbV9zY3JhdGNoR1BSLCBt
X3NjcmF0Y2hGUFIpOworICAgICAgICBqaXQudW5ib3hEb3VibGVOb25EZXN0cnVjdGl2ZShtX3Jp
Z2h0LCBtX3JpZ2h0RlBSLCBtX3NjcmF0Y2hHUFIsIG1fc2NyYXRjaEZQUik7CisgICAgICAgIGpp
dC5tdWxEb3VibGUobV9yaWdodEZQUiwgbV9sZWZ0RlBSKTsKKyAgICAgICAgaml0LmJveERvdWJs
ZShtX2xlZnRGUFIsIG1fcmVzdWx0KTsKKworICAgICAgICByZXR1cm4gSklUTWF0aElDSW5saW5l
UmVzdWx0OjpHZW5lcmF0ZWRGYXN0UGF0aDsKKyAgICB9CisKKyAgICBpZiAoKGxocy5pc09ubHlJ
bnQzMigpIHx8IG1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkgJiYgKHJocy5p
c09ubHlJbnQzMigpIHx8IG1fcmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpKSB7
CisgICAgICAgIEFTU0VSVCghbV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpIHx8
ICFtX3JpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKTsKKyAgICAgICAgaWYgKCFt
X2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpCisgICAgICAgICAgICBzdGF0ZS5z
bG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihtX2xlZnQpKTsKKyAgICAg
ICAgaWYgKCFtX3JpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKQorICAgICAgICAg
ICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIobV9yaWdo
dCkpOworCisgICAgICAgIGlmIChtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkg
fHwgbV9yaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkgeworICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgdmFyID0gbV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpID8g
bV9yaWdodCA6IG1fbGVmdDsKKyAgICAgICAgICAgIGludDMyX3QgY29uc3RWYWx1ZSA9IG1fbGVm
dE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSA/IG1fbGVmdE9wZXJhbmQuYXNDb25zdElu
dDMyKCkgOiBtX3JpZ2h0T3BlcmFuZC5hc0NvbnN0SW50MzIoKTsKKyAgICAgICAgICAgIHN0YXRl
LnNsb3dQYXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hNdWwzMihDQ2FsbEhlbHBlcnM6Ok92ZXJm
bG93LCB2YXIucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkltbTMyKGNvbnN0VmFsdWUpLCBt
X3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlLnNsb3dQ
YXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hNdWwzMihDQ2FsbEhlbHBlcnM6Ok92ZXJmbG93LCBt
X3JpZ2h0LnBheWxvYWRHUFIoKSwgbV9sZWZ0LnBheWxvYWRHUFIoKSwgbV9zY3JhdGNoR1BSKSk7
CisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMy
KENDYWxsSGVscGVyczo6WmVybywgbV9zY3JhdGNoR1BSKSk7IC8vIEdvIHNsb3cgaWYgcG90ZW50
aWFsIG5lZ2F0aXZlIHplcm8uCisgICAgICAgIH0KKyAgICAgICAgaml0LmJveEludDMyKG1fc2Ny
YXRjaEdQUiwgbV9yZXN1bHQpOworCisgICAgICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1
bHQ6OkdlbmVyYXRlZEZhc3RQYXRoOworICAgIH0KKworICAgIHJldHVybiBKSVRNYXRoSUNJbmxp
bmVSZXN1bHQ6OkdlbmVyYXRlRnVsbFNuaXBwZXQ7Cit9CisKK2Jvb2wgSklUTXVsR2VuZXJhdG9y
OjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0JiBlbmRKdW1wTGlzdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlz
dCwgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKQogewogICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIg
IT0gSW52YWxpZEdQUlJlZyk7CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBtX2xlZnQucGF5
bG9hZEdQUigpKTsKQEAgLTQ3LDEyICsxMDksOCBAQCB2b2lkIEpJVE11bEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aChDCiAKICAgICBBU1NFUlQoIW1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNv
bnN0SW50MzIoKSB8fCAhbV9yaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSk7CiAK
LSAgICBpZiAoIW1fbGVmdE9wZXJhbmQubWlnaHRCZU51bWJlcigpIHx8ICFtX3JpZ2h0T3BlcmFu
ZC5taWdodEJlTnVtYmVyKCkpIHsKLSAgICAgICAgQVNTRVJUKCFtX2RpZEVtaXRGYXN0UGF0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2RpZEVtaXRGYXN0UGF0aCA9IHRydWU7
CisgICAgaWYgKCFtX2xlZnRPcGVyYW5kLm1pZ2h0QmVOdW1iZXIoKSB8fCAhbV9yaWdodE9wZXJh
bmQubWlnaHRCZU51bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9s
ZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpIHx8IG1fcmlnaHRPcGVyYW5kLmlzUG9z
aXRpdmVDb25zdEludDMyKCkpIHsKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFyID0gbV9sZWZ0T3Bl
cmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpID8gbV9yaWdodCA6IG1fbGVmdDsKQEAgLTY2LDIw
ICsxMjQsMjAgQEAgdm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQwogICAg
ICAgICBpZiAobXVsdGlwbHlSZXN1bHRHUFIgPT0gdmFyLnBheWxvYWRHUFIoKSkKICAgICAgICAg
ICAgIG11bHRpcGx5UmVzdWx0R1BSID0gbV9zY3JhdGNoR1BSOwogCi0gICAgICAgIG1fc2xvd1Bh
dGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaE11bDMyKENDYWxsSGVscGVyczo6T3ZlcmZsb3cs
IHZhci5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6SW1tMzIoY29uc3RPcHIuYXNDb25zdElu
dDMyKCkpLCBtdWx0aXBseVJlc3VsdEdQUikpOworICAgICAgICBzbG93UGF0aEp1bXBMaXN0LmFw
cGVuZChqaXQuYnJhbmNoTXVsMzIoQ0NhbGxIZWxwZXJzOjpPdmVyZmxvdywgdmFyLnBheWxvYWRH
UFIoKSwgQ0NhbGxIZWxwZXJzOjpJbW0zMihjb25zdE9wci5hc0NvbnN0SW50MzIoKSksIG11bHRp
cGx5UmVzdWx0R1BSKSk7CiAKICAgICAgICAgaml0LmJveEludDMyKG11bHRpcGx5UmVzdWx0R1BS
LCBtX3Jlc3VsdCk7Ci0gICAgICAgIG1fZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICBlbmRKdW1wTGlzdC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgaWYgKCFq
aXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAgICAgICAgIG1fc2xvd1BhdGhKdW1w
TGlzdC5hcHBlbmQobm90SW50MzIpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
c2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQobm90SW50MzIpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUcnkgdG8gZG8gZG91YmxlVmFyICogZG91Ymxl
KGludENvbnN0YW50KS4KICAgICAgICAgbm90SW50MzIubGluaygmaml0KTsKICAgICAgICAgaWYg
KCF2YXJPcHIuZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtX3Nsb3dQYXRoSnVt
cExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YXIsIG1fc2NyYXRjaEdQUikpOwor
ICAgICAgICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVy
KHZhciwgbV9zY3JhdGNoR1BSKSk7CiAKICAgICAgICAgaml0LnVuYm94RG91YmxlTm9uRGVzdHJ1
Y3RpdmUodmFyLCBtX2xlZnRGUFIsIG1fc2NyYXRjaEdQUiwgbV9zY3JhdGNoRlBSKTsKIApAQCAt
OTgsMjMgKzE1NiwyMyBAQCB2b2lkIEpJVE11bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChD
CiAgICAgICAgIGxlZnROb3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihtX2xlZnQpOwogICAg
ICAgICByaWdodE5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKG1fcmlnaHQpOwogCi0gICAg
ICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaE11bDMyKENDYWxsSGVscGVy
czo6T3ZlcmZsb3csIG1fcmlnaHQucGF5bG9hZEdQUigpLCBtX2xlZnQucGF5bG9hZEdQUigpLCBt
X3NjcmF0Y2hHUFIpKTsKLSAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJh
bmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgbV9zY3JhdGNoR1BSKSk7IC8vIEdvIHNsb3cg
aWYgcG90ZW50aWFsIG5lZ2F0aXZlIHplcm8uCisgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBw
ZW5kKGppdC5icmFuY2hNdWwzMihDQ2FsbEhlbHBlcnM6Ok92ZXJmbG93LCBtX3JpZ2h0LnBheWxv
YWRHUFIoKSwgbV9sZWZ0LnBheWxvYWRHUFIoKSwgbV9zY3JhdGNoR1BSKSk7CisgICAgICAgIHNs
b3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBtX3NjcmF0Y2hHUFIpKTsgLy8gR28gc2xvdyBpZiBwb3RlbnRpYWwgbmVnYXRpdmUgemVyby4K
IAogICAgICAgICBqaXQuYm94SW50MzIobV9zY3JhdGNoR1BSLCBtX3Jlc3VsdCk7Ci0gICAgICAg
IG1fZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBlbmRKdW1wTGlzdC5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpIHsKLSAgICAgICAgICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQobGVmdE5vdElu
dCk7Ci0gICAgICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKHJpZ2h0Tm90SW50KTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5k
KGxlZnROb3RJbnQpOworICAgICAgICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQocmlnaHRO
b3RJbnQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBs
ZWZ0Tm90SW50LmxpbmsoJmppdCk7CiAgICAgICAgIGlmICghbV9sZWZ0T3BlcmFuZC5kZWZpbml0
ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0
LmJyYW5jaElmTm90TnVtYmVyKG1fbGVmdCwgbV9zY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBz
bG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9sZWZ0LCBtX3Nj
cmF0Y2hHUFIpKTsKICAgICAgICAgaWYgKCFtX3JpZ2h0T3BlcmFuZC5kZWZpbml0ZWx5SXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaElm
Tm90TnVtYmVyKG1fcmlnaHQsIG1fc2NyYXRjaEdQUikpOworICAgICAgICAgICAgc2xvd1BhdGhK
dW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKG1fcmlnaHQsIG1fc2NyYXRjaEdQ
UikpOwogCiAgICAgICAgIGppdC51bmJveERvdWJsZU5vbkRlc3RydWN0aXZlKG1fbGVmdCwgbV9s
ZWZ0RlBSLCBtX3NjcmF0Y2hHUFIsIG1fc2NyYXRjaEZQUik7CiAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCByaWdodElzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIobV9yaWdodCk7CkBA
IC0xMjQsNyArMTgyLDcgQEAgdm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgo
QwogCiAgICAgICAgIHJpZ2h0Tm90SW50LmxpbmsoJmppdCk7CiAgICAgICAgIGlmICghbV9yaWdo
dE9wZXJhbmQuZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtX3Nsb3dQYXRoSnVt
cExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihtX3JpZ2h0LCBtX3NjcmF0Y2hHUFIp
KTsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51
bWJlcihtX3JpZ2h0LCBtX3NjcmF0Y2hHUFIpKTsKIAogICAgICAgICBqaXQuY29udmVydEludDMy
VG9Eb3VibGUobV9sZWZ0LnBheWxvYWRHUFIoKSwgbV9sZWZ0RlBSKTsKIApAQCAtMTM5LDcgKzE5
Nyw3IEBAIHZvaWQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKICAgICAvLyBE
byBkb3VibGVWYXIgKiBkb3VibGVWYXIuCiAgICAgaml0Lm11bERvdWJsZShtX3JpZ2h0RlBSLCBt
X2xlZnRGUFIpOwogCi0gICAgaWYgKCFtX2FyaXRoUHJvZmlsZSkKKyAgICBpZiAoIW1fYXJpdGhQ
cm9maWxlIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKQogICAgICAgICBqaXQuYm94RG91YmxlKG1f
bGVmdEZQUiwgbV9yZXN1bHQpOwogICAgIGVsc2UgewogICAgICAgICAvLyBUaGUgSW50NTIgb3Zl
cmZsb3cgY2hlY2sgYmVsb3cgaW50ZW50aW9uYWxseSBvbWl0cyAxbGwgPDwgNTEgYXMgYSB2YWxp
ZCBuZWdhdGl2ZSBJbnQ1MiB2YWx1ZS4KQEAgLTE0OSw2ICsyMDcsNyBAQCB2b2lkIEpJVE11bEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDCiAgICAgICAgIGNvbnN0IGludDY0X3QgbmVnYXRp
dmVaZXJvQml0cyA9IDFsbCA8PCA2MzsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQu
bW92ZURvdWJsZVRvNjQobV9sZWZ0RlBSLCBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpOworCiAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBub3ROZWdhdGl2ZVplcm8gPSBqaXQuYnJhbmNoNjQoQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgbV9yZXN1bHQucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW02NChuZWdhdGl2ZVplcm9CaXRzKSk7CiAKICAgICAgICAgaml0Lm9yMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQXJpdGhQcm9maWxlOjpOZWdaZXJvRG91YmxlKSwgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MobV9hcml0aFByb2ZpbGUtPmFkZHJlc3NPZkJpdHMo
KSkpOwpAQCAtMTg2LDEzICsyNDUsMTUgQEAgdm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhdGgoQwogICAgICAgICAKICAgICAgICAgaml0Lm9yMzIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoQXJpdGhQcm9maWxlOjpJbnQ1Mk92ZXJmbG93KSwgQ0NhbGxIZWxwZXJzOjpBYnNv
bHV0ZUFkZHJlc3MobV9hcml0aFByb2ZpbGUtPmFkZHJlc3NPZkJpdHMoKSkpOwogCi0gICAgICAg
IG1fZW5kSnVtcExpc3QuYXBwZW5kKG5vSW50NTJPdmVyZmxvdyk7CisgICAgICAgIGVuZEp1bXBM
aXN0LmFwcGVuZChub0ludDUyT3ZlcmZsb3cpOwogICAgICAgICBpZiAobV9zY3JhdGNoR1BSID09
IG1fcmVzdWx0LnRhZ0dQUigpIHx8IG1fc2NyYXRjaEdQUiA9PSBtX3Jlc3VsdC5wYXlsb2FkR1BS
KCkpCiAgICAgICAgICAgICBqaXQuYm94RG91YmxlKG1fbGVmdEZQUiwgbV9yZXN1bHQpOwogCi0g
ICAgICAgIG1fZW5kSnVtcExpc3QuYXBwZW5kKGRvbmUpOworICAgICAgICBlbmRKdW1wTGlzdC5h
cHBlbmQoZG9uZSk7CiAjZW5kaWYKICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTXVs
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTXVsR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNyBAQAog
I2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJK
SVRNYXRoSUNJbmxpbmVSZXN1bHQuaCIKICNpbmNsdWRlICJTbmlwcGV0T3BlcmFuZC5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKKwogY2xhc3Mg
SklUTXVsR2VuZXJhdG9yIHsKIHB1YmxpYzoKKyAgICBKSVRNdWxHZW5lcmF0b3IoKSB7IH0KKwog
ICAgIEpJVE11bEdlbmVyYXRvcihTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCwgU25pcHBldE9w
ZXJhbmQgcmlnaHRPcGVyYW5kLAogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVS
ZWdzIGxlZnQsIEpTVmFsdWVSZWdzIHJpZ2h0LAogICAgICAgICBGUFJSZWcgbGVmdEZQUiwgRlBS
UmVnIHJpZ2h0RlBSLCBHUFJSZWcgc2NyYXRjaEdQUiwgRlBSUmVnIHNjcmF0Y2hGUFIsCkBAIC01
MywxMSArNTgsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoIW1fbGVmdE9wZXJhbmQuaXNQ
b3NpdGl2ZUNvbnN0SW50MzIoKSB8fCAhbV9yaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50
MzIoKSk7CiAgICAgfQogCi0gICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYp
OworICAgIEpJVE1hdGhJQ0lubGluZVJlc3VsdCBnZW5lcmF0ZUlubGluZShDQ2FsbEhlbHBlcnMm
LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmKTsKKyAgICBib29sIGdlbmVyYXRlRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QsIENDYWxsSGVs
cGVyczo6SnVtcExpc3QmIHNsb3dKdW1wTGlzdCwgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKTsK
IAotICAgIGJvb2wgZGlkRW1pdEZhc3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9kaWRFbWl0RmFz
dFBhdGg7IH0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlzdCgpIHsgcmV0
dXJuIG1fZW5kSnVtcExpc3Q7IH0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0
aEp1bXBMaXN0KCkgeyByZXR1cm4gbV9zbG93UGF0aEp1bXBMaXN0OyB9CisgICAgYm9vbCBpc0xl
ZnRPcGVyYW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdE9wZXJhbmQuaXNQ
b3NpdGl2ZUNvbnN0SW50MzIoKTsgfQorICAgIGJvb2wgaXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIo
KTsgfQogCiBwcml2YXRlOgogICAgIFNuaXBwZXRPcGVyYW5kIG1fbGVmdE9wZXJhbmQ7CkBAIC03
MCwxMCArNzUsNiBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX3NjcmF0Y2hHUFI7CiAgICAgRlBS
UmVnIG1fc2NyYXRjaEZQUjsKICAgICBBcml0aFByb2ZpbGUqIG1fYXJpdGhQcm9maWxlOwotICAg
IGJvb2wgbV9kaWRFbWl0RmFzdFBhdGggeyBmYWxzZSB9OwotCi0gICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBtX2VuZEp1bXBMaXN0OwotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9zbG93
UGF0aEp1bXBMaXN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwMzY2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMzYsMTEgKzIzMzYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
K0FMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWRNdWwoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMik7CiAKQEAgLTIzNDksMTQgKzIzNDYsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
YSAqIGIpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCitB
TFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZE11bChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBib29sIHNob3VsZE9ic2VydmVMSFNBbmRS
SFNUeXBlcyA9IHRydWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKIAorICAgIGlmIChzaG91bGRPYnNlcnZlTEhTQW5kUkhTVHlwZXMp
CisgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIU0FuZFJIUyhvcDEsIG9wMik7CisKICAg
ICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKICAgICBkb3VibGUgYiA9IG9wMi50b051
bWJlcihleGVjKTsKICAgICAKQEAgLTIzNjUsNiArMjM2Miw2MSBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVs
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiB1bnByb2ZpbGVk
TXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJ
VE11bElDKikKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiB1bnByb2ZpbGVkTXVsKGV4
ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyog
bXVsSUMpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9
IG9wZXJhdGlvblZhbHVlTXVsTm9PcHRpbWl6ZTsKKyAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxp
bmUoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKworICAgIHJl
dHVybiB1bnByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KworICAgIHJldHVybiBwcm9maWxlZE11bChleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCBh
cml0aFByb2ZpbGUpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlLCBKSVRNdWxJQyogbXVsSUMpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBhcml0
aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOworICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50
ID0gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE5vT3B0aW1pemU7CisgICAgbXVsSUMtPmdlbmVy
YXRlT3V0T2ZMaW5lKCp2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7
CisKKyAgICByZXR1cm4gcHJvZmlsZWRNdWwoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwg
YXJpdGhQcm9maWxlLCBmYWxzZSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSwgSklUTXVsSUMqKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAg
cmV0dXJuIHByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsIGFyaXRoUHJv
ZmlsZSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVT
dWIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwMzY2NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIHR5cGVkZWYgY2hhciogVW51c2VkUHRyOwogICAgIEljZjog
SW5saW5lQ2FsbEZyYW1lKgogICAgIElkYzogY29uc3QgSWRlbnRpZmllcioKICAgICBKOiBFbmNv
ZGVkSlNWYWx1ZQotICAgIEphaWM6IEpJVEFkZElDKgorICAgIE1pYzogSklUTWF0aElDKiAoY2Fu
IGJlIEpJVEFkZElDKiwgSklUTXVsSUMqLCBldGMpLgogICAgIEpjcDogY29uc3QgSlNWYWx1ZSoK
ICAgICBKc2M6IEpTU2NvcGUqCiAgICAgSnNmOiBKU0Z1bmN0aW9uKgpAQCAtMTM3LDggKzEzNyw4
IEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkoKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkJ5KShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopOwogdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKSikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7
CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9F
SkpBcnApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQXJpdGhQ
cm9maWxlKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9w
ZXJhdGlvbl9FSkpBcnBKYWljKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEFyaXRoUHJvZmlsZSosIEpJVEFkZElDKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpKYWljKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEpJVEFkZElDKik7Cit0eXBlZGVmIEVuY29kZWRK
U1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpBcnBNaWMpKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQXJpdGhQcm9maWxlKiwgdm9pZCop
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25f
RUpKTWljKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHZvaWQq
KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9u
X0VKc3NaKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpzc1JlbykoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqLCBSZWdFeHBPYmplY3QqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJ
VF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKc3NSZW9Kc3MpKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKiwgUmVnRXhwT2JqZWN0KiwgSlNTdHJpbmcqKTsKQEAgLTQxOSw2ICs0MTksMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFkZElDKikg
V1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1
ZUFkZE5vT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRF
Uk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxPcHRp
bWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxOb09wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElD
KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiwgSklUTXVsSUMq
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWROb09wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSosIEpJVE11bElD
KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSopIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWIoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RG
X0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSopIFdURl9JTlRFUk5BTDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284495</attachid>
            <date>2016-07-25 10:03:18 -0700</date>
            <delta_ts>2016-07-25 11:15:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>65641</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE2LTA3LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IG9wX211bC9Bcml0aE11bChVbnR5cGVkLFVudHlwZWQpIHNob3VsZCBiZSBhbiBJQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTA4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtl
cyBNdWwgYSB0eXBlIGJhc2VkIElDIGluIG11Y2ggdGhlIHNhbWUgd2F5IHRoYXQgd2UgbWFkZQor
ICAgICAgICBBZGQgYSB0eXBlLWJhc2VkIElDLiBJIGltcGxlbWVudGVkIE11bCBpbiB0aGUgc2Ft
ZSB3YXkuIEkgYWJzdHJhY3RlZCB0aGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFk
ZCBJQyBpbiB0aGUgdmFyaW91cyBKSVRzIHRvIGFsbG93IGZvciBpdCB0bworICAgICAgICB3b3Jr
IG92ZXIgYXJiaXRyYXJ5IElDIHNuaXBwZXRzLiBUaGlzIHdpbGwgbWFraW5nIGFkZGluZyBEaXYv
U3ViL1BvdyBpbiB0aGUKKyAgICAgICAgZnV0dXJlIGVhc3kuIFRoaXMgcGF0Y2ggYWxzbyBhZGRz
IGEgbmV3IGJvb2xlYW4gYXJndW1lbnQgdG8gdGhlIHZhcmlvdXMKKyAgICAgICAgc25pcHBldCBn
ZW5lcmF0ZUZhc3RQYXRoKCkgbWV0aG9kcyB0byBpbmRpY2F0ZSBpZiB3ZSBzaG91bGQgZW1pdCBy
ZXN1bHQgcHJvZmlsaW5nLgorICAgICAgICBJIGFkZGVkIHRoaXMgYmVjYXVzZSB3ZSB3YW50IHRo
aXMgcHJvZmlsaW5nIHRvIGJlIGVtaXR0ZWQgZm9yIE11bCBpbgorICAgICAgICB0aGUgYmFzZWxp
bmUsIGJ1dCBub3QgaW4gdGhlIERGRy4gV2UgdXNlZCB0byBpbmRpY2F0ZSB0aGlzIHRocm91Z2gg
cGFzc2luZworICAgICAgICBpbiBhIG51bGxwdHIgZm9yIHRoZSBBcml0aFByb2ZpbGUsIGJ1dCB3
ZSBubyBsb25nZXIgZG8gdGhhdCBpbiB0aGUgdXBwZXIKKyAgICAgICAgSklUIHRpZXJzLiBTbyB3
ZSBhcmUgcGFzc2luZyBhbiBleHBsaWNpdCByZXF1ZXN0IGZyb20gdGhlIEpJVCB0aWVyIGFib3V0
CisgICAgICAgIHdoZXRoZXIgb3Igbm90IGl0J3Mgd29ydGggaXQgZm9yIHRoZSBJQyB0byBlbWl0
IHByb2ZpbGluZy4KKworICAgICAgICBXZSBub3cgZW1pdCBtdWNoIGxlc3MgY29kZSBmb3IgTXVs
LiBIZXJlIGlzIHNvbWUgZGF0YSBvbiB0aGUgYXZlcmFnZQorICAgICAgICBNdWwgc25pcHBldC9J
QyBzaXplOgorCisgICAgICAgICAgICAgICAgICAgfCAgIEpldFN0cmVhbSAgfCAgVW5pdHkgM0Qg
IHwKKyAgICAgICAgICAgICAtLS0tLS18IC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0KKyAg
ICAgICAgICAgICAgT2xkICB8ICB+MjgwIGJ5dGVzICB8IH4yODAgYnl0ZXMgfAorICAgICAgICAg
ICAgIC0tLS0tLXwgLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBO
ZXcgIHwgICAyMTAgIGJ5dGVzIHwgIDE4NSBieXRlcyB8CisgICAgICAgICAgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluZFN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzdHViSW5mb0JlZ2luKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzdHViSW5mb0VuZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHUFJUZW1wb3Jhcnk6OmFkb3B0KToKKyAgICAgICAgKEpTQzo6REZH
OjpGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeSk6CisgICAgICAgIChKU0M6
OkRGRzo6R1BSVGVtcG9yYXJ5OjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpERkc6OkZQUlRl
bXBvcmFyeTo6fkZQUlRlbXBvcmFyeSk6CisgICAgICAgIChKU0M6OkRGRzo6RlBSVGVtcG9yYXJ5
OjpmcHIpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVG9UaGlzKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmdldFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklU
QWRkR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUQWRkR2VuZXJhdG9yOjpnZW5lcmF0
ZUlubGluZSk6CisgICAgICAgIChKU0M6OkpJVEFkZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0
aCk6CisgICAgICAgICogaml0L0pJVEFkZEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpKSVRB
ZGRHZW5lcmF0b3I6OkpJVEFkZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEFkZEdlbmVy
YXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVRBZGRH
ZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCk6CisgICAgICAgICogaml0L0pJ
VEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9hZGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRN
YXRoSUNGYXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xvdyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X211bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
ICogaml0L0pJVE1hdGhJQy5oOgorICAgICAgICAoSlNDOjpKSVRNYXRoSUM6OnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpJVE1hdGhJQzo6c2xvd1BhdGhDYWxsTG9jYXRp
b24pOgorICAgICAgICAoSlNDOjpKSVRNYXRoSUM6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6SklUTWF0aElDOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpKSVRNYXRoSUM6OmdlbmVyYXRlSW5saW5lKToKKyAgICAgICAgKEpT
Qzo6SklUTWF0aElDOjpnZW5lcmF0ZU91dE9mTGluZSk6CisgICAgICAgICogaml0L0pJVE1hdGhJ
Q0ZvcndhcmRzLmg6CisgICAgICAgICogaml0L0pJVE11bEdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkpJVE11bEdlbmVyYXRvcjo6Z2VuZXJhdGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpK
SVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAqIGppdC9KSVRNdWxH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SklUTXVsR2VuZXJhdG9yOjpKSVRNdWxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVRNdWxHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6SklUTXVsR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZh
bGlkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVRNdWxHZW5lcmF0b3I6OmRpZEVtaXRGYXN0
UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVE11bEdlbmVyYXRvcjo6ZW5kSnVtcExp
c3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVRNdWxHZW5lcmF0b3I6OnNsb3dQYXRoSnVt
cExpc3QpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorCiAyMDE2LTA3LTI0ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQjMgc2hvdWxkIHN1cHBvcnQgbXVsdGlwbGUgZW50
cnlwb2ludHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxMyw2ICszMDEzLDExIEBAIEpJ
VEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKCkKICAgICByZXR1cm4gbV9hZGRJQ3MuYWRk
KCk7CiB9CiAKK0pJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElDKCkKK3sKKyAgICByZXR1
cm4gbV9tdWxJQ3MuYWRkKCk7Cit9CisKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgZm9yIChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gOiBtX3N0dWJJbmZvcykgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTAsNiArMjUwLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgU3RydWN0dXJlU3R1
YkluZm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOwogICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJ
QygpOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQygpOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdp
bigpOyB9CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQo
KSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQogICAgIApAQCAtMTAxNCw2ICsxMDE1LDcg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1f
Y2FsbGVlU2F2ZVJlZ2lzdGVyczsKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1Yklu
Zm9zOwogICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211
bElDczsKICAgICBCYWc8QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7CiAgICAgQmFnPENhbGxMaW5r
SW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0lu
Zm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1
ZGUgIkpJVEJpdFhvckdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgogI2luY2x1ZGUgIkpJVE11bEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRTdWJHZW5lcmF0b3IuaCIKQEAgLTEzMTcsNiArMTMx
NiwxNiBAQCB2b2lkIEdQUlRlbXBvcmFyeTo6YWRvcHQoR1BSVGVtcG9yYXJ5JiBvCiAgICAgb3Ro
ZXIubV9ncHIgPSBJbnZhbGlkR1BSUmVnOwogfQogCitGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFy
eShGUFJUZW1wb3JhcnkmJiBvdGhlcikKK3sKKyAgICBBU1NFUlQob3RoZXIubV9qaXQpOworICAg
IEFTU0VSVChvdGhlci5tX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICBtX2ppdCA9IG90aGVy
Lm1faml0OworICAgIG1fZnByID0gb3RoZXIubV9mcHI7CisKKyAgICBvdGhlci5tX2ppdCA9IG51
bGxwdHI7Cit9CisKIEZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBq
aXQpCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQpAQCAtMzMz
Niw2ICszMzQ1LDI3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYm9vbCBu
ZWVkc1NjcmF0Y2hHUFJSZWcgPSB0cnVlOworICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0g
ZmFsc2U7CisjZWxzZQorICAgIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVnID0gdHJ1ZTsKKyAgICBi
b29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IHRydWU7CisjZW5kaWYKKworICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQygpOworICAgIGF1dG8gcmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKKyAgICBhdXRvIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOworICAgIAorICAgIGNvbXBpbGVN
YXRoSUMobm9kZSwgYWRkSUMsIG5lZWRzU2NyYXRjaEdQUlJlZywgbmVlZHNTY3JhdGNoRlBSUmVn
LCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFJlcGF0Y2hpbmdGdW5jdGlvbiwgdHlw
ZW5hbWUgTm9uUmVwYXRjaGluZ0Z1bmN0aW9uPgordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1hdGhJQyhOb2RlKiBub2RlLCBKSVRNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBib29sIG5l
ZWRzU2NyYXRjaEdQUlJlZywgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcsIFJlcGF0Y2hpbmdGdW5j
dGlvbiByZXBhdGNoaW5nRnVuY3Rpb24sIE5vblJlcGF0Y2hpbmdGdW5jdGlvbiBub25SZXBhdGNo
aW5nRnVuY3Rpb24pCit7CisgICAgRWRnZSYgbGVmdENoaWxkID0gbm9kZS0+Y2hpbGQxKCk7Cisg
ICAgRWRnZSYgcmlnaHRDaGlsZCA9IG5vZGUtPmNoaWxkMigpOworCiAgICAgT3B0aW9uYWw8SlNW
YWx1ZU9wZXJhbmQ+IGxlZnQ7CiAgICAgT3B0aW9uYWw8SlNWYWx1ZU9wZXJhbmQ+IHJpZ2h0Owog
CkBAIC0zMzQ3LDE5ICszMzc3LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZUFkZChOb2QKICAgICBGUFJSZWcgbGVmdEZQUiA9IGxlZnROdW1iZXIuZnByKCk7CiAgICAgRlBS
UmVnIHJpZ2h0RlBSID0gcmlnaHROdW1iZXIuZnByKCk7CiAKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVn
OworCisgICAgT3B0aW9uYWw8RlBSVGVtcG9yYXJ5PiBmcHJTY3JhdGNoOworICAgIGlmIChuZWVk
c1NjcmF0Y2hGUFJSZWcpIHsKKyAgICAgICAgZnByU2NyYXRjaCA9IEZQUlRlbXBvcmFyeSh0aGlz
KTsKKyAgICAgICAgc2NyYXRjaEZQUiA9IGZwclNjcmF0Y2gtPmZwcigpOworICAgIH0KKwogI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgT3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBncHJTY3JhdGNoOwor
ICAgIGlmIChuZWVkc1NjcmF0Y2hHUFJSZWcpIHsKKyAgICAgICAgZ3ByU2NyYXRjaCA9IEdQUlRl
bXBvcmFyeSh0aGlzKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IGdwclNjcmF0Y2gtPmdwcigpOwor
ICAgIH0KICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHQuZ3ByKCkpOwotICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7CiAjZWxzZQogICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhp
cyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlc3VsdFBheWxv
YWQuZ3ByKCksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZXN1
bHRUYWcuZ3ByKCk7Ci0gICAgRlBSVGVtcG9yYXJ5IGZwclNjcmF0Y2godGhpcyk7Ci0gICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBmcHJTY3JhdGNoLmZwcigpOworICAgIGlmIChuZWVkc1NjcmF0Y2hH
UFJSZWcpCisgICAgICAgIHNjcmF0Y2hHUFIgPSByZXN1bHRSZWdzLnRhZ0dQUigpOwogI2VuZGlm
CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobGVmdENo
aWxkKS5yZXN1bHRUeXBlKCkpOwpAQCAtMzM3NCwyMSArMzQxNCwyMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAKICAgICBBU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKLSAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkgeworICAgIGlmICghbWF0aElDLT5pc0xlZnRPcGVyYW5kVmFsaWRDb25z
dGFudCgpKSB7CiAgICAgICAgIGxlZnQgPSBKU1ZhbHVlT3BlcmFuZCh0aGlzLCBsZWZ0Q2hpbGQp
OwogICAgICAgICBsZWZ0UmVncyA9IGxlZnQtPmpzVmFsdWVSZWdzKCk7CiAgICAgfQotICAgIGlm
ICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgIGlmICghbWF0aElDLT5pc1JpZ2h0T3Bl
cmFuZFZhbGlkQ29uc3RhbnQoKSkgewogICAgICAgICByaWdodCA9IEpTVmFsdWVPcGVyYW5kKHRo
aXMsIHJpZ2h0Q2hpbGQpOwogICAgICAgICByaWdodFJlZ3MgPSByaWdodC0+anNWYWx1ZVJlZ3Mo
KTsKICAgICB9CiAKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRk
SklUQWRkSUMoKTsKICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBhZGRJQ0dlbmVyYXRp
b25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKICAgICBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgIGFkZElDLT5tX2dlbmVy
YXRvciA9IEpJVEFkZEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2Vu
ZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0
aFByb2ZpbGUpOwogCi0gICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBhZGRJQy0+Z2VuZXJhdGVJ
bmxpbmUobV9qaXQsICphZGRJQ0dlbmVyYXRpb25TdGF0ZSk7CisgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nID0gZmFsc2U7CisgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBtYXRoSUMtPmdl
bmVyYXRlSW5saW5lKG1faml0LCAqYWRkSUNHZW5lcmF0aW9uU3RhdGUsIHNob3VsZEVtaXRQcm9m
aWxpbmcpOwogCiAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewogICAgICAgICBBU1NFUlQoIWFk
ZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkpOwpAQCAtMzQwNiwzOCAr
MzQ0NiwzOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAKICAg
ICAgICAgICAgIGF1dG8gaW5uZXJMZWZ0UmVncyA9IGxlZnRSZWdzOwogICAgICAgICAgICAgYXV0
byBpbm5lclJpZ2h0UmVncyA9IHJpZ2h0UmVnczsKLSAgICAgICAgICAgIGlmIChsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpIHsKKyAgICAgICAgICAgIGlmIChtYXRoSUMtPmlzTGVmdE9wZXJhbmRWYWxp
ZENvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBpbm5lckxlZnRSZWdzID0gcmVzdWx0UmVn
czsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlVmFsdWUobGVmdENoaWxkLT5hc0pTVmFsdWUo
KSwgaW5uZXJMZWZ0UmVncyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0aElDLT5pc1JpZ2h0T3BlcmFu
ZFZhbGlkQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIGlubmVyUmlnaHRSZWdzID0gcmVz
dWx0UmVnczsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlVmFsdWUocmlnaHRDaGlsZC0+YXNK
U1ZhbHVlKCksIGlubmVyUmlnaHRSZWdzKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGFkZElDR2VuZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAg
ICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSwgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywg
aW5uZXJSaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIoYWRkSUMpKTsKKyAgICAgICAgICAgICAgICBh
ZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoaW5nRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0
ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0
UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MpOworICAgICAgICAgICAgICAgIGFk
ZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3Mp
OwogCiAgICAgICAgICAgICBzaWxlbnRGaWxsKHNhdmVQbGFucyk7CiAgICAgICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhkb25l
LCAmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBhZGRJQy0+ZmluYWxpemVJbmxpbmVD
b2RlKCphZGRJQ0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAg
bWF0aElDLT5maW5hbGl6ZUlubGluZUNvZGUoKmFkZElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVm
ZmVyKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICB9IGVsc2UgewotICAgICAg
ICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAgIGlmIChtYXRoSUMtPmlzTGVm
dE9wZXJhbmRWYWxpZENvbnN0YW50KCkpIHsKICAgICAgICAgICAgIGxlZnQgPSBKU1ZhbHVlT3Bl
cmFuZCh0aGlzLCBsZWZ0Q2hpbGQpOwogICAgICAgICAgICAgbGVmdFJlZ3MgPSBsZWZ0LT5qc1Zh
bHVlUmVncygpOwotICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChtYXRoSUMtPmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgp
KSB7CiAgICAgICAgICAgICByaWdodCA9IEpTVmFsdWVPcGVyYW5kKHRoaXMsIHJpZ2h0Q2hpbGQp
OwogICAgICAgICAgICAgcmlnaHRSZWdzID0gcmlnaHQtPmpzVmFsdWVSZWdzKCk7CiAgICAgICAg
IH0KIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblZhbHVlQWRkLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIH0K
IApAQCAtNDE1Niw3OCArNDE5NiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJp
dGhNdWwoTm9kCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBPcHRp
b25hbDxKU1ZhbHVlT3BlcmFuZD4gbGVmdDsKLSAgICAgICAgT3B0aW9uYWw8SlNWYWx1ZU9wZXJh
bmQ+IHJpZ2h0OwotCi0gICAgICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzOwotICAgICAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3M7Ci0KLSAgICAgICAgRlBSVGVtcG9yYXJ5IGxlZnROdW1iZXIodGhp
cyk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByaWdodE51bWJlcih0aGlzKTsKLSAgICAgICAgRlBS
UmVnIGxlZnRGUFIgPSBsZWZ0TnVtYmVyLmZwcigpOwotICAgICAgICBGUFJSZWcgcmlnaHRGUFIg
PSByaWdodE51bWJlci5mcHIoKTsKLQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZXN1bHQuZ3ByKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIGJvb2wgbmVlZHNT
Y3JhdGNoR1BSUmVnID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSBm
YWxzZTsKICNlbHNlCi0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgcmVzdWx0VGFn
LmdwcigpKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0g
ICAgICAgIEZQUlRlbXBvcmFyeSBmcHJTY3JhdGNoKHRoaXMpOwotICAgICAgICBGUFJSZWcgc2Ny
YXRjaEZQUiA9IGZwclNjcmF0Y2guZnByKCk7CisgICAgICAgIGJvb2wgbmVlZHNTY3JhdGNoR1BS
UmVnID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSB0cnVlOwogI2Vu
ZGlmCi0KLSAgICAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQobV9zdGF0ZS5mb3JOb2Rl
KGxlZnRDaGlsZCkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRP
cGVyYW5kKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5yZXN1bHRUeXBlKCkpOwotCi0gICAg
ICAgIC8vIFRoZSBzbmlwcGV0IGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGJvdGggb3BlcmFu
ZHMgYmVpbmcgY29uc3RhbnQuIElmIHRoZSBsZWZ0Ci0gICAgICAgIC8vIG9wZXJhbmQgaXMgYWxy
ZWFkeSBjb25zdCwgd2UnbGwgaWdub3JlIHRoZSByaWdodCBvcGVyYW5kJ3MgY29uc3RuZXNzLgot
ICAgICAgICBpZiAobGVmdENoaWxkLT5pc0ludDMyQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIGxl
ZnRPcGVyYW5kLnNldENvbnN0SW50MzIobGVmdENoaWxkLT5hc0ludDMyKCkpOwotICAgICAgICBl
bHNlIGlmIChyaWdodENoaWxkLT5pc0ludDMyQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJpZ2h0
T3BlcmFuZC5zZXRDb25zdEludDMyKHJpZ2h0Q2hpbGQtPmFzSW50MzIoKSk7Ci0KLSAgICAgICAg
QVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
OwotCi0gICAgICAgIGlmICghbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkgewot
ICAgICAgICAgICAgbGVmdCA9IEpTVmFsdWVPcGVyYW5kKHRoaXMsIGxlZnRDaGlsZCk7Ci0gICAg
ICAgICAgICBsZWZ0UmVncyA9IGxlZnQtPmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCFyaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkgewotICAgICAgICAg
ICAgcmlnaHQgPSBKU1ZhbHVlT3BlcmFuZCh0aGlzLCByaWdodENoaWxkKTsKLSAgICAgICAgICAg
IHJpZ2h0UmVncyA9IHJpZ2h0LT5qc1ZhbHVlUmVncygpOwotICAgICAgICB9Ci0KLSAgICAgICAg
SklUTXVsR2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICAgICAgbGVmdEZQUiwgcmlnaHRGUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2pp
dCk7Ci0KLSAgICAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7Ci0gICAgICAgIGdl
bi5lbmRKdW1wTGlzdCgpLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotCi0gICAgICAgIGdlbi5zbG93
UGF0aEp1bXBMaXN0KCkubGluaygmbV9qaXQpOwotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRSZWdzKTsKLQotICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNv
bnN0SW50MzIoKSkgewotICAgICAgICAgICAgbGVmdFJlZ3MgPSByZXN1bHRSZWdzOwotICAgICAg
ICAgICAgbV9qaXQubW92ZVZhbHVlKGxlZnRDaGlsZC0+YXNKU1ZhbHVlKCksIGxlZnRSZWdzKTsK
LSAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkg
ewotICAgICAgICAgICAgcmlnaHRSZWdzID0gcmVzdWx0UmVnczsKLSAgICAgICAgICAgIG1faml0
Lm1vdmVWYWx1ZShyaWdodENoaWxkLT5hc0pTVmFsdWUoKSwgcmlnaHRSZWdzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVNdWwsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MpOwotCi0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0UmVncyk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAgICAg
Z2VuLmVuZEp1bXBMaXN0KCkubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkSklUTXVsSUMoKTsKKyAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplOworICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOworICAgICAgICAKKyAgICAgICAgY29tcGlsZU1hdGhJ
Qyhub2RlLCBtdWxJQywgbmVlZHNTY3JhdGNoR1BSUmVnLCBuZWVkc1NjcmF0Y2hGUFJSZWcsIHJl
cGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAj
aW5jbHVkZSAiREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkRGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgorI2luY2x1
ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJN
YXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0xMjg4LDkgKzEyODks
OSBAQCBwdWJsaWM6CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpKYWljIG9wZXJhdGlvbiwgSlNWYWx1
ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyLCBUcnVzdGVk
SW1tUHRyIHB0cikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3Mg
YXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewotICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMS5ncHIoKSwgYXJnMi5n
cHIoKSwgcHRyKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEuZ3ByKCksIGFyZzIuZ3ByKCksIG1hdGhJQyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LmdwcigpKTsKICAgICB9CiAKQEAgLTE3MTEsOSAr
MTcxMiw5IEBAIHB1YmxpYzoKICAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpKYWlj
IG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVl
UmVncyBhcmcyLCBUcnVzdGVkSW1tUHRyIHB0cikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJl
c3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBt
YXRoSUMpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
RUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMS5wYXlsb2FkR1BSKCksIGFyZzEudGFnR1BSKCksIGFy
ZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBwdHIpOworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMS5wYXlsb2Fk
R1BSKCksIGFyZzEudGFnR1BSKCksIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBt
YXRoSUMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdC5wYXlsb2FkR1BSKCksIHJlc3VsdC50YWdHUFIoKSk7CiAgICAgfQogCkBAIC0yNDUxLDYg
KzI0NTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbWl0VW50eXBlZFJpZ2h0U2hpZnRCaXRPcChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlU2hpZnRPcChOb2RlKik7CiAKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBSZXBhdGNoaW5nRnVuY3Rpb24sIHR5cGVuYW1l
IE5vblJlcGF0Y2hpbmdGdW5jdGlvbj4KKyAgICB2b2lkIGNvbXBpbGVNYXRoSUMoTm9kZSosIEpJ
VE1hdGhJQzxHZW5lcmF0b3I+KiwgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcsIGJvb2wgbmVlZHNT
Y3JhdGNoRlBSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24sIE5vblJlcGF0Y2hpbmdGdW5jdGlvbik7
CisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJp
dGhBZGQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU1ha2VSb3BlKE5vZGUqKTsKQEAgLTMwNDUs
NiArMzA0OSwxNiBAQCBwdWJsaWM6CiAKICAgICBHUFJUZW1wb3JhcnkoR1BSVGVtcG9yYXJ5JiBv
dGhlcikgPSBkZWxldGU7CiAKKyAgICBHUFJUZW1wb3JhcnkoR1BSVGVtcG9yYXJ5JiYgb3RoZXIp
CisgICAgeworICAgICAgICBBU1NFUlQob3RoZXIubV9qaXQpOworICAgICAgICBBU1NFUlQob3Ro
ZXIubV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0ID0gb3RoZXIubV9qaXQ7
CisgICAgICAgIG1fZ3ByID0gb3RoZXIubV9ncHI7CisgICAgICAgIG90aGVyLm1faml0ID0gbnVs
bHB0cjsKKyAgICAgICAgb3RoZXIubV9ncHIgPSBJbnZhbGlkR1BSUmVnOworICAgIH0KKwogICAg
IEdQUlRlbXBvcmFyeSYgb3BlcmF0b3I9KEdQUlRlbXBvcmFyeSYmIG90aGVyKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFtX2ppdCk7CkBAIC0zMDkzLDcgKzMxMDcsOSBAQCBwcml2YXRlOgogfTsK
IAogY2xhc3MgRlBSVGVtcG9yYXJ5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGUFJUZW1w
b3JhcnkpOwogcHVibGljOgorICAgIEZQUlRlbXBvcmFyeShGUFJUZW1wb3JhcnkmJik7CiAgICAg
RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKik7CiAgICAgRlBSVGVtcG9yYXJ5KFNwZWN1bGF0
aXZlSklUKiwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYpOwogICAgIEZQUlRlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJVCosIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmLCBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kJik7CkBAIC0zMTAzLDExICszMTE5LDEzIEBAIHB1YmxpYzoKIAogICAgIH5GUFJUZW1wb3Jh
cnkoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVubG9jayhmcHIoKSk7CisgICAgICAgIGlmIChM
SUtFTFkobV9qaXQpKQorICAgICAgICAgICAgbV9qaXQtPnVubG9jayhmcHIoKSk7CiAgICAgfQog
CiAgICAgRlBSUmVnIGZwcigpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NFUlQobV9qaXQpOwog
ICAgICAgICBBU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgIHJldHVybiBt
X2ZwcjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzYsOSArMTUzNiwx
OCBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCiAg
ICAgeworICAgICAgICBKSVRBZGRJQyogYWRkSUMgPSBjb2RlQmxvY2soKS0+YWRkSklUQWRkSUMo
KTsKKyAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9w
dGltaXplOworICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlQWRkOworICAgICAgICBjb21waWxlTWF0aElDKGFkZElDLCByZXBhdGNoaW5nRnVuY3Rpb24s
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvcj4KKyAgICB2b2lkIGNvbXBpbGVNYXRoSUMoSklUTWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgRnVuY3Rpb25QdHIgcmVwYXRjaGluZ0Z1bmN0aW9uLCBGdW5jdGlvblB0ciBub25S
ZXBhdGNoaW5nRnVuY3Rpb24pCisgICAgewogICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwog
ICAgICAgICAKICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMSgp
KTsKQEAgLTE1NjUsNDIgKzE1NzQsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBCb3g8
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CiAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0
KTsKIAotICAgICAgICAgICAgICAgIEpJVEFkZElDKiBhZGRJQyA9IGppdC5jb2RlQmxvY2soKS0+
YWRkSklUQWRkSUMoKTsKLSAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRl
PiBhZGRJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBzdGF0ZS0+Z3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIGFkZElDLT5tX2dlbmVyYXRvciA9IEpJVEFkZEdlbmVyYXRvcihsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAorICAg
ICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1z
WzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwgSW52YWxpZEZQUlJlZywgYXJp
dGhQcm9maWxlKTsKIAotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gYWRk
SUMtPmdlbmVyYXRlSW5saW5lKGppdCwgKmFkZElDR2VuZXJhdGlvblN0YXRlKTsKKyAgICAgICAg
ICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZElubGluZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoaml0LCAqbWF0
aElDR2VuZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKIAogICAgICAgICAgICAg
ICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFh
ZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoSnVtcHMuZW1w
dHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkSUNHZW5l
cmF0aW9uU3RhdGUtPnNsb3dQYXRoSnVtcHMubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRo
SnVtcHMubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS0+c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2hv
dWxkU2xvd1BhdGhSZXBhdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1Bh
dGhDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25zLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXpl
LCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWRkSUMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5jYWxsKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1z
WzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5jYWxsKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNs
b3dQYXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uVmFsdWVBZGQsIHBh
cmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwg
PSBjYWxsLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
cy5nZXQoKSwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sx
XS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5s
aW5rVG8oZG9uZSwgJmppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRJQy0+ZmluYWxpemVJbmxpbmVDb2RlKCphZGRJQ0dlbmVyYXRpb25TdGF0ZSwg
bGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDLT5maW5hbGl6
ZUlubGluZUNvZGUoKm1hdGhJQ0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAg
ICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25zLmdldCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uVmFsdWVBZGQsIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1z
WzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9u
UmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwgcGFy
YW1zWzJdLmdwcigpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKIApAQCAt
MTc2Miw3ICsxNzcxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFVu
dHlwZWRVc2U6IHsKLSAgICAgICAgICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVE11bEdlbmVyYXRv
cj4ob3BlcmF0aW9uVmFsdWVNdWwpOworICAgICAgICAgICAgSklUTXVsSUMqIG11bElDID0gY29k
ZUJsb2NrKCktPmFkZEpJVE11bElDKCk7CisgICAgICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CisgICAgICAgICAgICBhdXRvIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOworICAgICAgICAgICAgY29tcGls
ZU1hdGhJQyhtdWxJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MTEsNiArNzExLDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpOwogICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKTsKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Q
cm9maWxlZEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVE1hdGhJQzxH
ZW5lcmF0b3I+KiwgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1
bmN0aW9uKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVE1h
dGhJQzxHZW5lcmF0b3I+KiwgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKwogICAgICAgICBKdW1wIGdldFNs
b3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBAIC03NjUsOCArNzcxLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpBcnAsIEpTVmFs
dWVSZWdzLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEFyaXRoUHJvZmlsZSopOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiwg
SlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQXJwSmFpYywgSlNW
YWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgQXJpdGhQcm9maWxlKiwgSklUQWRk
SUMqKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSkpKYWljLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBK
SVRBZGRJQyopOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VKSkFycE1pYywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVl
UmVncywgQXJpdGhQcm9maWxlKiwgVHJ1c3RlZEltbVB0cik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljLCBKU1ZhbHVlUmVn
cywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBUcnVzdGVkSW1tUHRyKTsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpBcCwgaW50
LCBHUFJSZWcsIEdQUlJlZywgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQnksIGludCwgR1BSUmVnLCBH
UFJSZWcsIEJ5VmFsSW5mbyopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKT0osIEdQUlJlZywgR1BSUmVnLCBHUFJSZWcpOwpAQCAt
OTU2LDggKzk2Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlciBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsKIAotICAgICAgICBIYXNoTWFw
PEluc3RydWN0aW9uKiwgSklUQWRkSUMqPiBtX2luc3RydWN0aW9uVG9KSVRBZGRJQzsKLSAgICAg
ICAgSGFzaE1hcDxJbnN0cnVjdGlvbiosIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbV9pbnN0cnVj
dGlvblRvSklUQWRkSUNHZW5lcmF0aW9uU3RhdGU7CisgICAgICAgIEhhc2hNYXA8SW5zdHJ1Y3Rp
b24qLCB2b2lkKj4gbV9pbnN0cnVjdGlvblRvTWF0aElDOworICAgICAgICBIYXNoTWFwPEluc3Ry
dWN0aW9uKiwgTWF0aElDR2VuZXJhdGlvblN0YXRlPiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwogICAgICAgICBi
b29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFkZEdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBZGRHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFkZEdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAgSklUTWF0aElDSW5saW5lUmVzdWx0IEpJVEFkZEdlbmVyYXRvcjo6
ZwogICAgICAgICBsaHMgPSBtX2FyaXRoUHJvZmlsZS0+bGhzT2JzZXJ2ZWRUeXBlKCk7CiAgICAg
ICAgIHJocyA9IG1fYXJpdGhQcm9maWxlLT5yaHNPYnNlcnZlZFR5cGUoKTsKICAgICAgICAgaWYg
KGxocy5pc0VtcHR5KCkgfHwgcmhzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6
IElDcyBzaG91bGQgYmUgYWJsZSB0byByZXBhdGNoIHdpdGhvdXQgZW1pdHRpbmcgYW4gaW5saW5l
IHBhdGg6CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYwMTEwCiAgICAgICAgICAgICBsaHMgPSBPYnNlcnZlZFR5cGUoKS53aXRoSW50MzIo
KTsKICAgICAgICAgICAgIHJocyA9IE9ic2VydmVkVHlwZSgpLndpdGhJbnQzMigpOwogICAgICAg
ICB9CkBAIC03MSw3ICs3Myw3IEBAIEpJVE1hdGhJQ0lubGluZVJlc3VsdCBKSVRBZGRHZW5lcmF0
b3I6OmcKICAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5lcmF0ZUZ1bGxTbmlw
cGV0OwogfQogCi1ib29sIEpJVEFkZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QsIENDYWxsSGVs
cGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QpCitib29sIEpJVEFkZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCYgZW5kSnVtcExpc3QsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3Qs
IGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZykKIHsKICAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9
IEludmFsaWRHUFJSZWcpOwogICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gbV9sZWZ0LnBheWxv
YWRHUFIoKSk7CkBAIC0xNjYsNyArMTY4LDcgQEAgYm9vbCBKSVRBZGRHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhdGgoQwogCiAgICAgLy8gRG8gZG91YmxlVmFyICsgZG91YmxlVmFyLgogICAgIGpp
dC5hZGREb3VibGUobV9yaWdodEZQUiwgbV9sZWZ0RlBSKTsKLSAgICBpZiAobV9hcml0aFByb2Zp
bGUpCisgICAgaWYgKG1fYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcpCiAgICAg
ICAgIG1fYXJpdGhQcm9maWxlLT5lbWl0U2V0RG91YmxlKGppdCk7CiAgICAgICAgIAogICAgIGpp
dC5ib3hEb3VibGUobV9sZWZ0RlBSLCBtX3Jlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFkZEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQWRkR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQWRkR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDcgKzYxLDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBKSVRNYXRoSUNJbmxpbmVSZXN1
bHQgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiwgTWF0aElDR2VuZXJhdGlvblN0YXRlJik7
Ci0gICAgYm9vbCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYsIENDYWxsSGVscGVyczo6
SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1
bXBMaXN0KTsKKyAgICBib29sIGdlbmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNs
b3dQYXRoSnVtcExpc3QsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyk7CisKKyAgICBib29sIGlz
TGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0T3BlcmFuZC5p
c0NvbnN0SW50MzIoKTsgfQorICAgIGJvb2wgaXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9yaWdodE9wZXJhbmQuaXNDb25zdEludDMyKCk7IH0KIAogcHJpdmF0
ZToKICAgICBTbmlwcGV0T3BlcmFuZCBtX2xlZnRPcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyMDM2NjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02ODQsNiArNjg0LDIyIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIE9wZXJhbmRUeXBlcyBn
ZXRPcGUKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElD
KCk7CisgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFk
ZElDKTsKKyAgICBlbWl0TWF0aElDRmFzdChhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
Rm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVPZmZzZXQpOwor
CisgICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJVEFkZElDKj4obV9pbnN0cnVj
dGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKKyAgICBlbWl0TWF0aElDU2xv
dyhhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0
aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkT3B0aW1p
emUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxl
ZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgordm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJv
ZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQorewogICAgIGludCByZXN1bHQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGludCBvcDEgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwpAQCAtNjkyLDkgKzcwOCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2FkZChJ
bnN0cnVjdGlvbiogY3VycmUKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlw
ZXMoY29waWVkSW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKSk7CiAgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gSW52YWxpZEZQUlJlZzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOwogI2Vsc2UKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMg
PSBnZXRPcGVyYW5kVHlwZXMoY3VycmVudEluc3RydWN0aW9uKTsKICAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CkBAIC03MTgsNDAgKzczNCwzNSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKICAgICBSRUxFQVNF
X0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgp
KTsKIAotICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgIGlmICghbWF0aElDLT5p
c0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAg
ICBpZiAoIW1hdGhJQy0+aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KCkpCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogCi0gICAgSklUQWRkSUMqIGFk
ZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKCk7Ci0KLSAgICBtX2luc3RydWN0aW9uVG9K
SVRBZGRJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7Ci0gICAgTWF0aElDR2VuZXJh
dGlvblN0YXRlJiBhZGRJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub0pJVEFkZElD
R2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9y
LT52YWx1ZTsKIAotICAgIGFkZElDLT5tX2dlbmVyYXRvciA9IEpJVEFkZEdlbmVyYXRvcihsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwor
ICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3Bl
cmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwg
c2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKIAotICAgIGJvb2wgZ2VuZXJh
dGVkSW5saW5lQ29kZSA9IGFkZElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgYWRkSUNHZW5lcmF0
aW9uU3RhdGUpOworICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJh
dGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0
ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwogICAgICAgICBl
bHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSkK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgcmVz
dWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24ocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZShhZGRJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rp
b24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJv
ZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1
bmN0aW9uKQogewotICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChtX3Nsb3dD
YXNlcywgaXRlciwgbV9ieXRlY29kZU9mZnNldCk7Ci0KLSAgICBNYXRoSUNHZW5lcmF0aW9uU3Rh
dGUmIGFkZElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvSklUQWRkSUNHZW5lcmF0
aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKLSAgICBhZGRJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBNYXRoSUNHZW5lcmF0aW9u
U3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOworICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGludCByZXN1bHQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGludCBvcDEgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwpAQCAtNzYxLDcgKzc3Miw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qIGMKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBn
ZXRPcGVyYW5kVHlwZXMoY29waWVkSW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKSk7CiAg
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CiAgICAgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOwogI2Vsc2UKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5k
VHlwZXMoY3VycmVudEluc3RydWN0aW9uKTsKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CkBAIC03NzcsMjUgKzc4OCwyNCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfYWRkKEluc3RydWN0aW9uKiBjCiAgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkKICAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3Bl
cmFuZENvbnN0YW50SW50KG9wMikpOwogCi0gICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3QoKSkK
KyAgICBpZiAobWF0aElDLT5pc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudCgpKQogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmIChyaWdodE9wZXJh
bmQuaXNDb25zdCgpKQorICAgIGlmIChtYXRoSUMtPmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dCgpKQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKIAot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faW5zdHJ1Y3Rpb25Ub0pJVEFkZElDLmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9y
UEMoY3VycmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgaWYgKGFkZElDR2VuZXJhdGlvblN0YXRl
LnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9w
dGltaXplLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCAmYXJpdGhQcm9maWxlLCBh
ZGRJQyk7CisgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhS
ZXBhdGNoKQorICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb24oYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSkFycE1pYz4ocHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCAm
YXJpdGhQcm9maWxlLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsICZhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24ocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgJmFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IGFkZElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVmFsdWVBZGRPcHRpbWl6ZSwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYWRk
SUMpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKIAog
ICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBN
YXRoSUNHZW5lcmF0aW9uU3RhdGUmIGFkZElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvSklUQWRkSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1
ZTsKLSAgICAgICAgYWRkSUMtPmZpbmFsaXplSW5saW5lQ29kZShhZGRJQ0dlbmVyYXRpb25TdGF0
ZSwgbGlua0J1ZmZlcik7CisgICAgICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQo
Y3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CisgICAgICAgIG1hdGhJQy0+ZmluYWxpemVJbmxp
bmVDb2RlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CiAgICAgfSk7CiB9CiAK
QEAgLTg3NSwxMTIgKzg4NSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGl2KEluc3RydWN0
aW9uKiBjCiAKIHZvaWQgSklUOjplbWl0X29wX211bChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMoY29waWVk
SW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSAgICBGUFJSZWcgc2Ny
YXRjaEZQUiA9IEludmFsaWRGUFJSZWc7Ci0jZWxzZQotICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9
IGdldE9wZXJhbmRUeXBlcyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQ
UlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgotCi0gICAgQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBudWxscHRyOwotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0g
ICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3Vy
cmVudEluc3RydWN0aW9uKTsKLQotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKHR5cGVz
LmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZCh0eXBlcy5zZWNvbmQo
KSk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCi0gICAgUkVMRUFTRV9B
U1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7
Ci0KLSAgICBpZiAoIWxlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFyaWdodE9w
ZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KLSAgICBKSVRNdWxHZW5lcmF0b3IgZ2VuKGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAg
ICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmls
ZSk7Ci0KLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KLSAgICBpZiAoZ2VuLmRp
ZEVtaXRGYXN0UGF0aCgpKSB7Ci0gICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKLQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7Ci0gICAgICAgIEFT
U0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOwotICAgICAgICBpZiAoYXJpdGhQ
cm9maWxlKSB7Ci0gICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50
MzIoKSkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOwotICAgICAgICAgICAgaWYgKHJpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigp
KQotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tdWwpOwotICAgICAgICAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTXVsSUMoKTsKKyAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOworICAgIGVtaXRNYXRoSUNGYXN0KG11bElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
TXVsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChtX3Nsb3dDYXNlcywgaXRlciwg
bV9ieXRlY29kZU9mZnNldCk7Ci0gICAgCi0gICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJh
bmRUeXBlcyhjb3BpZWRJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotI2Vsc2UKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5k
VHlwZXMoY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7Ci0jZW5kaWYKLQotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKHR5cGVzLmZp
cnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZCh0eXBlcy5zZWNvbmQoKSk7
CiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0gICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwotCi0gICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0
SW50MzIoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7Ci0gICAgICAgIGlmIChyaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotICAgICAg
ICBBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVG
b3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blZhbHVlTXVsUHJvZmlsZWQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsICZhcml0
aFByb2ZpbGUpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tdWwpOwotICAgICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwotICAgIH0KKyAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nh
c3Q8SklUTXVsSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bikpOworICAgIGVtaXRNYXRoSUNTbG93KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N1YihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsMTcgKzQzMiwxNyBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNh
bGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycEphaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyBy
ZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlLCBKSVRBZGRJQyogYWRkSUMpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpBcnBNaWMgb3Bl
cmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdz
IGFyZzIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBUcnVzdGVkSW1tUHRyIG1hdGhJQykK
IHsKLSAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZElt
bVB0cihhcml0aFByb2ZpbGUpLCBUcnVzdGVkSW1tUHRyKGFkZElDKSk7CisgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoYXJpdGhQcm9maWxl
KSwgbWF0aElDKTsKICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7CiAgICAgc2V0dXBSZXN1bHRzKHJlc3VsdCk7CiAgICAgcmV0dXJuIGNhbGw7
CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VKSkphaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQs
IEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEpJVEFkZElDKiBhZGRJQykKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJl
Z3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiB7Ci0gICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoYWRk
SUMpKTsKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgbWF0aElD
KTsKICAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgc2V0dXBSZXN1bHRzKHJlc3VsdCk7CiAgICAgcmV0dXJuIGNhbGw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDIwMzY2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJKSVRBZGRH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCIKKyNpbmNsdWRl
ICJKSVRNdWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAi
UmVwYXRjaC5oIgogI2luY2x1ZGUgIlNuaXBwZXRPcGVyYW5kLmgiCkBAIC01NCw3ICs1NSwxMCBA
QCBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkg
eyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRUb1Ns
b3dQYXRoU3RhcnQpOyB9CiAgICAgQ29kZUxvY2F0aW9uQ2FsbCBzbG93UGF0aENhbGxMb2NhdGlv
bigpIHsgcmV0dXJuIG1faW5saW5lU3RhcnQuY2FsbEF0T2Zmc2V0KG1fZGVsdGFGcm9tU3RhcnRU
b1Nsb3dQYXRoQ2FsbExvY2F0aW9uKTsgfQogCi0gICAgYm9vbCBnZW5lcmF0ZUlubGluZShDQ2Fs
bEhlbHBlcnMmIGppdCwgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKKyAgICBib29sIGlz
TGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0b3IuaXNM
ZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKTsgfQorICAgIGJvb2wgaXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0b3IuaXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KCk7IH0KKworICAgIGJvb2wgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiBq
aXQsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZyA9IHRydWUpCiAgICAgewogICAgICAgICBzdGF0ZS5mYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVs
KCk7CiAgICAgICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCku
Y29kZVNpemUoKTsKQEAgLTczLDcgKzc3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAg
IGNhc2UgSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5lcmF0ZUZ1bGxTbmlwcGV0OiB7CiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW5kSnVtcExpc3Q7Ci0gICAgICAgICAg
ICBib29sIHJlc3VsdCA9IG1fZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0LCBlbmRKdW1w
TGlzdCwgc3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1f
Z2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0LCBlbmRKdW1wTGlzdCwgc3RhdGUuc2xvd1Bh
dGhKdW1wcywgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7
CiAgICAgICAgICAgICAgICAgc3RhdGUuZmFzdFBhdGhFbmQgPSBqaXQubGFiZWwoKTsKICAgICAg
ICAgICAgICAgICBzdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2ggPSBmYWxzZTsKQEAgLTEwNCw3
ICsxMDgsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbmRKdW1wTGlzdDsgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d1BhdGhKdW1wTGlzdDsgCi0gICAgICAgICAgICBib29sIGVtaXR0ZWRGYXN0UGF0aCA9IG1fZ2Vu
ZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0LCBlbmRKdW1wTGlzdCwgc2xvd1BhdGhKdW1wTGlz
dCk7CisKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpOworICAgICAgICAgICAgYm9vbCBl
bWl0dGVkRmFzdFBhdGggPSBtX2dlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCwgZW5kSnVt
cExpc3QsIHNsb3dQYXRoSnVtcExpc3QsIHNob3VsZEVtaXRQcm9maWxpbmcpOwogICAgICAgICAg
ICAgaWYgKCFlbWl0dGVkRmFzdFBhdGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOwpAQCAtMTU3LDYgKzE2Myw3IEBA
IHB1YmxpYzoKIH07CiAKIHR5cGVkZWYgSklUTWF0aElDPEpJVEFkZEdlbmVyYXRvcj4gSklUQWRk
SUM7Cit0eXBlZGVmIEpJVE1hdGhJQzxKSVRNdWxHZW5lcmF0b3I+IEpJVE11bElDOwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRo
SUNGb3J3YXJkcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
TWF0aElDRm9yd2FyZHMuaAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRNYXRoSUNGb3J3YXJkcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4gY2xh
c3MgSklUTWF0aElDOwogY2xhc3MgSklUQWRkR2VuZXJhdG9yOworY2xhc3MgSklUTXVsR2VuZXJh
dG9yOwogCiB0eXBlZGVmIEpJVE1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwordHlw
ZWRlZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJQzsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTXVsR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTXVsR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDcyIEBACiAj
aWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgorI2luY2x1ZGUgIkpJ
VE1hdGhJQy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKSVRNdWxHZW5lcmF0b3I6Omdl
bmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCitKSVRNYXRoSUNJbmxpbmVSZXN1bHQg
SklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUlubGluZShDQ2FsbEhlbHBlcnMmIGppdCwgTWF0aElD
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKK3sKKyAgICAvLyBXZSBkZWZhdWx0IHRvIHNwZWN1bGF0
aW5nIGludDMyLgorICAgIE9ic2VydmVkVHlwZSBsaHMgPSBPYnNlcnZlZFR5cGUoKS53aXRoSW50
MzIoKTsKKyAgICBPYnNlcnZlZFR5cGUgcmhzID0gT2JzZXJ2ZWRUeXBlKCkud2l0aEludDMyKCk7
CisKKyAgICBpZiAobV9hcml0aFByb2ZpbGUpIHsKKyAgICAgICAgbGhzID0gbV9hcml0aFByb2Zp
bGUtPmxoc09ic2VydmVkVHlwZSgpOworICAgICAgICByaHMgPSBtX2FyaXRoUHJvZmlsZS0+cmhz
T2JzZXJ2ZWRUeXBlKCk7CisgICAgICAgIGlmIChsaHMuaXNFbXB0eSgpIHx8IHJocy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJQ3Mgc2hvdWxkIGJlIGFibGUgdG8gcmVwYXRj
aCB3aXRob3V0IGVtaXR0aW5nIGFuIGlubGluZSBwYXRoOgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDExMAorICAgICAgICAgICAgbGhz
ID0gT2JzZXJ2ZWRUeXBlKCkud2l0aEludDMyKCk7CisgICAgICAgICAgICByaHMgPSBPYnNlcnZl
ZFR5cGUoKS53aXRoSW50MzIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsaHMuaXNP
bmx5Tm9uTnVtYmVyKCkgJiYgcmhzLmlzT25seU5vbk51bWJlcigpKQorICAgICAgICByZXR1cm4g
SklUTWF0aElDSW5saW5lUmVzdWx0OjpEb250R2VuZXJhdGU7CisKKyAgICBpZiAobGhzLmlzT25s
eU51bWJlcigpICYmIHJocy5pc09ubHlOdW1iZXIoKSkgeworICAgICAgICBpZiAoIWppdC5zdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVS
ZXN1bHQ6OkRvbnRHZW5lcmF0ZTsKKworICAgICAgICBpZiAoIW1fbGVmdE9wZXJhbmQuZGVmaW5p
dGVseUlzTnVtYmVyKCkpCisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3ROdW1iZXIobV9sZWZ0LCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgaWYg
KCFtX3JpZ2h0T3BlcmFuZC5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHN0YXRl
LnNsb3dQYXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihtX3JpZ2h0LCBtX3Nj
cmF0Y2hHUFIpKTsKKyAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5j
aElmSW50MzIobV9sZWZ0KSk7CisgICAgICAgIHN0YXRlLnNsb3dQYXRoSnVtcHMuYXBwZW5kKGpp
dC5icmFuY2hJZkludDMyKG1fcmlnaHQpKTsKKyAgICAgICAgaml0LnVuYm94RG91YmxlTm9uRGVz
dHJ1Y3RpdmUobV9sZWZ0LCBtX2xlZnRGUFIsIG1fc2NyYXRjaEdQUiwgbV9zY3JhdGNoRlBSKTsK
KyAgICAgICAgaml0LnVuYm94RG91YmxlTm9uRGVzdHJ1Y3RpdmUobV9yaWdodCwgbV9yaWdodEZQ
UiwgbV9zY3JhdGNoR1BSLCBtX3NjcmF0Y2hGUFIpOworICAgICAgICBqaXQubXVsRG91YmxlKG1f
cmlnaHRGUFIsIG1fbGVmdEZQUik7CisgICAgICAgIGppdC5ib3hEb3VibGUobV9sZWZ0RlBSLCBt
X3Jlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJh
dGVkRmFzdFBhdGg7CisgICAgfQorCisgICAgaWYgKChsaHMuaXNPbmx5SW50MzIoKSB8fCBtX2xl
ZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpICYmIChyaHMuaXNPbmx5SW50MzIoKSB8
fCBtX3JpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSkgeworICAgICAgICBBU1NF
UlQoIW1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSB8fCAhbV9yaWdodE9wZXJh
bmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSk7CisgICAgICAgIGlmICghbV9sZWZ0T3BlcmFuZC5p
c1Bvc2l0aXZlQ29uc3RJbnQzMigpKQorICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5h
cHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIobV9sZWZ0KSk7CisgICAgICAgIGlmICghbV9yaWdo
dE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkKKyAgICAgICAgICAgIHN0YXRlLnNsb3dQ
YXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKG1fcmlnaHQpKTsKKworICAgICAg
ICBpZiAobV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpIHx8IG1fcmlnaHRPcGVy
YW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHZh
ciA9IG1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSA/IG1fcmlnaHQgOiBtX2xl
ZnQ7CisgICAgICAgICAgICBpbnQzMl90IGNvbnN0VmFsdWUgPSBtX2xlZnRPcGVyYW5kLmlzUG9z
aXRpdmVDb25zdEludDMyKCkgPyBtX2xlZnRPcGVyYW5kLmFzQ29uc3RJbnQzMigpIDogbV9yaWdo
dE9wZXJhbmQuYXNDb25zdEludDMyKCk7CisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBz
LmFwcGVuZChqaXQuYnJhbmNoTXVsMzIoQ0NhbGxIZWxwZXJzOjpPdmVyZmxvdywgdmFyLnBheWxv
YWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpJbW0zMihjb25zdFZhbHVlKSwgbV9zY3JhdGNoR1BSKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVu
ZChqaXQuYnJhbmNoTXVsMzIoQ0NhbGxIZWxwZXJzOjpPdmVyZmxvdywgbV9yaWdodC5wYXlsb2Fk
R1BSKCksIG1fbGVmdC5wYXlsb2FkR1BSKCksIG1fc2NyYXRjaEdQUikpOworICAgICAgICAgICAg
c3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6
Olplcm8sIG1fc2NyYXRjaEdQUikpOyAvLyBHbyBzbG93IGlmIHBvdGVudGlhbCBuZWdhdGl2ZSB6
ZXJvLgorICAgICAgICB9CisgICAgICAgIGppdC5ib3hJbnQzMihtX3NjcmF0Y2hHUFIsIG1fcmVz
dWx0KTsKKworICAgICAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5lcmF0ZWRG
YXN0UGF0aDsKKyAgICB9CisKKyAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5l
cmF0ZUZ1bGxTbmlwcGV0OworfQorCitib29sIEpJVE11bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExp
c3QsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QsIGJvb2wgc2hvdWxk
RW1pdFByb2ZpbGluZykKIHsKICAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IEludmFsaWRHUFJS
ZWcpOwogICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gbV9sZWZ0LnBheWxvYWRHUFIoKSk7CkBA
IC00NywxMiArMTA5LDggQEAgdm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgo
QwogCiAgICAgQVNTRVJUKCFtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkgfHwg
IW1fcmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpOwogCi0gICAgaWYgKCFtX2xl
ZnRPcGVyYW5kLm1pZ2h0QmVOdW1iZXIoKSB8fCAhbV9yaWdodE9wZXJhbmQubWlnaHRCZU51bWJl
cigpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9kaWRFbWl0RmFzdFBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9kaWRFbWl0RmFzdFBhdGggPSB0cnVlOworICAgIGlmICghbV9s
ZWZ0T3BlcmFuZC5taWdodEJlTnVtYmVyKCkgfHwgIW1fcmlnaHRPcGVyYW5kLm1pZ2h0QmVOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbGVmdE9wZXJhbmQuaXNQ
b3NpdGl2ZUNvbnN0SW50MzIoKSB8fCBtX3JpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQz
MigpKSB7CiAgICAgICAgIEpTVmFsdWVSZWdzIHZhciA9IG1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2
ZUNvbnN0SW50MzIoKSA/IG1fcmlnaHQgOiBtX2xlZnQ7CkBAIC02NiwyMCArMTI0LDIwIEBAIHZv
aWQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKICAgICAgICAgaWYgKG11bHRp
cGx5UmVzdWx0R1BSID09IHZhci5wYXlsb2FkR1BSKCkpCiAgICAgICAgICAgICBtdWx0aXBseVJl
c3VsdEdQUiA9IG1fc2NyYXRjaEdQUjsKIAotICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBw
ZW5kKGppdC5icmFuY2hNdWwzMihDQ2FsbEhlbHBlcnM6Ok92ZXJmbG93LCB2YXIucGF5bG9hZEdQ
UigpLCBDQ2FsbEhlbHBlcnM6OkltbTMyKGNvbnN0T3ByLmFzQ29uc3RJbnQzMigpKSwgbXVsdGlw
bHlSZXN1bHRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5j
aE11bDMyKENDYWxsSGVscGVyczo6T3ZlcmZsb3csIHZhci5wYXlsb2FkR1BSKCksIENDYWxsSGVs
cGVyczo6SW1tMzIoY29uc3RPcHIuYXNDb25zdEludDMyKCkpLCBtdWx0aXBseVJlc3VsdEdQUikp
OwogCiAgICAgICAgIGppdC5ib3hJbnQzMihtdWx0aXBseVJlc3VsdEdQUiwgbV9yZXN1bHQpOwot
ICAgICAgICBtX2VuZEp1bXBMaXN0LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgZW5kSnVt
cExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOwogCiAgICAgICAgIGlmICghaml0LnN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKG5v
dEludDMyKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExp
c3QuYXBwZW5kKG5vdEludDMyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gVHJ5IHRvIGRvIGRvdWJsZVZhciAqIGRvdWJsZShpbnRDb25zdGFudCku
CiAgICAgICAgIG5vdEludDMyLmxpbmsoJmppdCk7CiAgICAgICAgIGlmICghdmFyT3ByLmRlZmlu
aXRlbHlJc051bWJlcigpKQotICAgICAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChq
aXQuYnJhbmNoSWZOb3ROdW1iZXIodmFyLCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHNs
b3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YXIsIG1fc2NyYXRj
aEdQUikpOwogCiAgICAgICAgIGppdC51bmJveERvdWJsZU5vbkRlc3RydWN0aXZlKHZhciwgbV9s
ZWZ0RlBSLCBtX3NjcmF0Y2hHUFIsIG1fc2NyYXRjaEZQUik7CiAKQEAgLTk4LDIzICsxNTYsMjMg
QEAgdm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQwogICAgICAgICBsZWZ0
Tm90SW50ID0gaml0LmJyYW5jaElmTm90SW50MzIobV9sZWZ0KTsKICAgICAgICAgcmlnaHROb3RJ
bnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihtX3JpZ2h0KTsKIAotICAgICAgICBtX3Nsb3dQYXRo
SnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hNdWwzMihDQ2FsbEhlbHBlcnM6Ok92ZXJmbG93LCBt
X3JpZ2h0LnBheWxvYWRHUFIoKSwgbV9sZWZ0LnBheWxvYWRHUFIoKSwgbV9zY3JhdGNoR1BSKSk7
Ci0gICAgICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2Fs
bEhlbHBlcnM6Olplcm8sIG1fc2NyYXRjaEdQUikpOyAvLyBHbyBzbG93IGlmIHBvdGVudGlhbCBu
ZWdhdGl2ZSB6ZXJvLgorICAgICAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNo
TXVsMzIoQ0NhbGxIZWxwZXJzOjpPdmVyZmxvdywgbV9yaWdodC5wYXlsb2FkR1BSKCksIG1fbGVm
dC5wYXlsb2FkR1BSKCksIG1fc2NyYXRjaEdQUikpOworICAgICAgICBzbG93UGF0aEp1bXBMaXN0
LmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgbV9zY3JhdGNoR1BS
KSk7IC8vIEdvIHNsb3cgaWYgcG90ZW50aWFsIG5lZ2F0aXZlIHplcm8uCiAKICAgICAgICAgaml0
LmJveEludDMyKG1fc2NyYXRjaEdQUiwgbV9yZXN1bHQpOwotICAgICAgICBtX2VuZEp1bXBMaXN0
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1w
KCkpOwogCiAgICAgICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAg
ICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGxlZnROb3RJbnQpOwotICAgICAgICAg
ICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChyaWdodE5vdEludCk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChsZWZ0Tm90SW50KTsK
KyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5kKHJpZ2h0Tm90SW50KTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgbGVmdE5vdEludC5saW5r
KCZqaXQpOwogICAgICAgICBpZiAoIW1fbGVmdE9wZXJhbmQuZGVmaW5pdGVseUlzTnVtYmVyKCkp
Ci0gICAgICAgICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51
bWJlcihtX2xlZnQsIG1fc2NyYXRjaEdQUikpOworICAgICAgICAgICAgc2xvd1BhdGhKdW1wTGlz
dC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKG1fbGVmdCwgbV9zY3JhdGNoR1BSKSk7CiAg
ICAgICAgIGlmICghbV9yaWdodE9wZXJhbmQuZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAg
ICAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihtX3Jp
Z2h0LCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5k
KGppdC5icmFuY2hJZk5vdE51bWJlcihtX3JpZ2h0LCBtX3NjcmF0Y2hHUFIpKTsKIAogICAgICAg
ICBqaXQudW5ib3hEb3VibGVOb25EZXN0cnVjdGl2ZShtX2xlZnQsIG1fbGVmdEZQUiwgbV9zY3Jh
dGNoR1BSLCBtX3NjcmF0Y2hGUFIpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmlnaHRJ
c0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKG1fcmlnaHQpOwpAQCAtMTI0LDcgKzE4Miw3
IEBAIHZvaWQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKIAogICAgICAgICBy
aWdodE5vdEludC5saW5rKCZqaXQpOwogICAgICAgICBpZiAoIW1fcmlnaHRPcGVyYW5kLmRlZmlu
aXRlbHlJc051bWJlcigpKQotICAgICAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChq
aXQuYnJhbmNoSWZOb3ROdW1iZXIobV9yaWdodCwgbV9zY3JhdGNoR1BSKSk7CisgICAgICAgICAg
ICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9yaWdodCwg
bV9zY3JhdGNoR1BSKSk7CiAKICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG1fbGVm
dC5wYXlsb2FkR1BSKCksIG1fbGVmdEZQUik7CiAKQEAgLTEzOSw3ICsxOTcsNyBAQCB2b2lkIEpJ
VE11bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDCiAgICAgLy8gRG8gZG91YmxlVmFyICog
ZG91YmxlVmFyLgogICAgIGppdC5tdWxEb3VibGUobV9yaWdodEZQUiwgbV9sZWZ0RlBSKTsKIAot
ICAgIGlmICghbV9hcml0aFByb2ZpbGUpCisgICAgaWYgKCFtX2FyaXRoUHJvZmlsZSB8fCAhc2hv
dWxkRW1pdFByb2ZpbGluZykKICAgICAgICAgaml0LmJveERvdWJsZShtX2xlZnRGUFIsIG1fcmVz
dWx0KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVGhlIEludDUyIG92ZXJmbG93IGNoZWNrIGJl
bG93IGludGVudGlvbmFsbHkgb21pdHMgMWxsIDw8IDUxIGFzIGEgdmFsaWQgbmVnYXRpdmUgSW50
NTIgdmFsdWUuCkBAIC0xNDksNiArMjA3LDcgQEAgdm9pZCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhdGgoQwogICAgICAgICBjb25zdCBpbnQ2NF90IG5lZ2F0aXZlWmVyb0JpdHMgPSAx
bGwgPDwgNjM7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0
KG1fbGVmdEZQUiwgbV9yZXN1bHQucGF5bG9hZEdQUigpKTsKKwogICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgbm90TmVnYXRpdmVaZXJvID0gaml0LmJyYW5jaDY0KENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIG1fcmVzdWx0LnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
bmVnYXRpdmVaZXJvQml0cykpOwogCiAgICAgICAgIGppdC5vcjMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEFyaXRoUHJvZmlsZTo6TmVnWmVyb0RvdWJsZSksIENDYWxsSGVscGVyczo6QWJz
b2x1dGVBZGRyZXNzKG1fYXJpdGhQcm9maWxlLT5hZGRyZXNzT2ZCaXRzKCkpKTsKQEAgLTE4Niwx
MyArMjQ1LDE1IEBAIHZvaWQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKICAg
ICAgICAgCiAgICAgICAgIGppdC5vcjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFyaXRo
UHJvZmlsZTo6SW50NTJPdmVyZmxvdyksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKG1f
YXJpdGhQcm9maWxlLT5hZGRyZXNzT2ZCaXRzKCkpKTsKIAotICAgICAgICBtX2VuZEp1bXBMaXN0
LmFwcGVuZChub0ludDUyT3ZlcmZsb3cpOworICAgICAgICBlbmRKdW1wTGlzdC5hcHBlbmQobm9J
bnQ1Mk92ZXJmbG93KTsKICAgICAgICAgaWYgKG1fc2NyYXRjaEdQUiA9PSBtX3Jlc3VsdC50YWdH
UFIoKSB8fCBtX3NjcmF0Y2hHUFIgPT0gbV9yZXN1bHQucGF5bG9hZEdQUigpKQogICAgICAgICAg
ICAgaml0LmJveERvdWJsZShtX2xlZnRGUFIsIG1fcmVzdWx0KTsKIAotICAgICAgICBtX2VuZEp1
bXBMaXN0LmFwcGVuZChkb25lKTsKKyAgICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGRvbmUpOwog
I2VuZGlmCiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdlbmVyYXRvci5oCShy
ZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTcgQEAKICNpZiBFTkFCTEUoSklU
KQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSklUTWF0aElDSW5saW5l
UmVzdWx0LmgiCiAjaW5jbHVkZSAiU25pcHBldE9wZXJhbmQuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK3N0cnVjdCBNYXRoSUNHZW5lcmF0aW9uU3RhdGU7CisKIGNsYXNzIEpJVE11bEdlbmVyYXRv
ciB7CiBwdWJsaWM6CisgICAgSklUTXVsR2VuZXJhdG9yKCkgeyB9CisKICAgICBKSVRNdWxHZW5l
cmF0b3IoU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQsIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3Bl
cmFuZCwKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBsZWZ0LCBKU1Zh
bHVlUmVncyByaWdodCwKICAgICAgICAgRlBSUmVnIGxlZnRGUFIsIEZQUlJlZyByaWdodEZQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIEZQUlJlZyBzY3JhdGNoRlBSLApAQCAtNTMsMTEgKzU4LDExIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdElu
dDMyKCkgfHwgIW1fcmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpOwogICAgIH0K
IAotICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKKyAgICBKSVRNYXRo
SUNJbmxpbmVSZXN1bHQgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiwgTWF0aElDR2VuZXJh
dGlvblN0YXRlJik7CisgICAgYm9vbCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYsIEND
YWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
JiBzbG93SnVtcExpc3QsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAKLSAgICBib29sIGRp
ZEVtaXRGYXN0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkRW1pdEZhc3RQYXRoOyB9Ci0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QoKSB7IHJldHVybiBtX2VuZEp1bXBM
aXN0OyB9Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCgpIHsg
cmV0dXJuIG1fc2xvd1BhdGhKdW1wTGlzdDsgfQorICAgIGJvb2wgaXNMZWZ0T3BlcmFuZFZhbGlk
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdElu
dDMyKCk7IH0KKyAgICBib29sIGlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCk7IH0KIAogcHJpdmF0
ZToKICAgICBTbmlwcGV0T3BlcmFuZCBtX2xlZnRPcGVyYW5kOwpAQCAtNzAsMTAgKzc1LDYgQEAg
cHJpdmF0ZToKICAgICBHUFJSZWcgbV9zY3JhdGNoR1BSOwogICAgIEZQUlJlZyBtX3NjcmF0Y2hG
UFI7CiAgICAgQXJpdGhQcm9maWxlKiBtX2FyaXRoUHJvZmlsZTsKLSAgICBib29sIG1fZGlkRW1p
dEZhc3RQYXRoIHsgZmFsc2UgfTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9lbmRK
dW1wTGlzdDsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1fc2xvd1BhdGhKdW1wTGlzdDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzM2LDEx
ICsyMzM2LDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitBTFdBWVNfSU5MSU5F
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVkTXVsKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCkBA
IC0yMzQ5LDE0ICsyMzQ2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgKiBiKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQorQUxXQVlTX0lOTElORSBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmlsZWRNdWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSwgYm9vbCBzaG91bGRPYnNlcnZlTEhTQW5kUkhTVHlwZXMgPSB0cnVl
KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
Mik7CiAKKyAgICBpZiAoc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVzKQorICAgICAgICBhcml0
aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOworCiAgICAgZG91YmxlIGEgPSBv
cDEudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAg
ICAgCkBAIC0yMzY1LDYgKzIzNjIsNjEgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25WYQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bChFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
Cit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4gdW5wcm9maWxlZE11bChleGVjLCBlbmNv
ZGVkT3AxLCBlbmNvZGVkT3AyKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyopCit7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4gdW5wcm9maWxlZE11bChleGVjLCBlbmNvZGVkT3Ax
LCBlbmNvZGVkT3AyKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYWx1ZU11bE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqIG11bElDKQoreworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworCisgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25WYWx1
ZU11bE5vT3B0aW1pemU7CisgICAgbXVsSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhlYy0+
Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisKKyAgICByZXR1cm4gdW5wcm9maWxl
ZE11bChleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4g
cHJvZmlsZWRNdWwoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYXJpdGhQcm9maWxlKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSklU
TXVsSUMqIG11bElDKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgYXJpdGhQcm9maWxlLT5vYnNl
cnZlTEhTQW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpKTsKKyAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWROb09wdGltaXplOworICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZSgq
dm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworCisgICAgcmV0dXJu
IHByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsIGFyaXRoUHJvZmlsZSwg
ZmFsc2UpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWROb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUsIEpJVE11bElDKikKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiBwcm9maWxl
ZE11bChleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCBhcml0aFByb2ZpbGUpOworfQorCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNyBAQCB0eXBlZGVmIGNoYXIqIFVudXNlZFB0cjsKICAgICBJY2Y6IElubGluZUNhbGxGcmFt
ZSoKICAgICBJZGM6IGNvbnN0IElkZW50aWZpZXIqCiAgICAgSjogRW5jb2RlZEpTVmFsdWUKLSAg
ICBKYWljOiBKSVRBZGRJQyoKKyAgICBNaWM6IEpJVE1hdGhJQyogKGNhbiBiZSBKSVRBZGRJQyos
IEpJVE11bElDKiwgZXRjKS4KICAgICBKY3A6IGNvbnN0IEpTVmFsdWUqCiAgICAgSnNjOiBKU1Nj
b3BlKgogICAgIEpzZjogSlNGdW5jdGlvbioKQEAgLTEzNyw4ICsxMzcsOCBAQCB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChK
SVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpCeSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKQXJwKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSopOwotdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKQXJw
SmFpYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBBcml0aFBy
b2ZpbGUqLCBKSVRBZGRJQyopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElP
TiAqSl9KSVRPcGVyYXRpb25fRUpKSmFpYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBKSVRBZGRJQyopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09Q
RVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKQXJwTWljKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSosIHZvaWQqKTsKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSk1pYykoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7CiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSnNzWikoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9P
UEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKc3NSZW8pKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
UmVnRXhwT2JqZWN0Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FSnNzUmVvSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cE9i
amVjdCosIEpTU3RyaW5nKik7CkBAIC00MTksNiArNDE5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVmFsdWVBZGRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRBZGRJQyopIFdURl9JTlRFUk5BTDsK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb09wdGltaXpl
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIsIEpJVEFkZElDKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwg
SklUTXVsSUMqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZhbHVlTXVsTm9PcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSosIEpJVE11bElDKikgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
Tm9PcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqLCBKSVRNdWxJQyopIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7Cg==
</data>
<flag name="review"
          id="308133"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284503</attachid>
            <date>2016-07-25 11:15:44 -0700</date>
            <delta_ts>2016-07-25 11:15:44 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>65633</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE2LTA3LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IG9wX211bC9Bcml0aE11bChVbnR5cGVkLFVudHlwZWQpIHNob3VsZCBiZSBhbiBJQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMTA4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBNdWwg
YSB0eXBlIGJhc2VkIElDIGluIG11Y2ggdGhlIHNhbWUgd2F5IHRoYXQgd2UgbWFkZQorICAgICAg
ICBBZGQgYSB0eXBlLWJhc2VkIElDLiBJIGltcGxlbWVudGVkIE11bCBpbiB0aGUgc2FtZSB3YXku
IEkgYWJzdHJhY3RlZCB0aGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFkZCBJQyBp
biB0aGUgdmFyaW91cyBKSVRzIHRvIGFsbG93IGZvciBpdCB0bworICAgICAgICB3b3JrIG92ZXIg
YXJiaXRyYXJ5IElDIHNuaXBwZXRzLiBUaGlzIHdpbGwgbWFrZSBhZGRpbmcgRGl2L1N1Yi9Qb3cg
aW4gdGhlCisgICAgICAgIGZ1dHVyZSBlYXN5LiBUaGlzIHBhdGNoIGFsc28gYWRkcyBhIG5ldyBi
b29sZWFuIGFyZ3VtZW50IHRvIHRoZSB2YXJpb3VzCisgICAgICAgIHNuaXBwZXQgZ2VuZXJhdGVG
YXN0UGF0aCgpIG1ldGhvZHMgdG8gaW5kaWNhdGUgaWYgd2Ugc2hvdWxkIGVtaXQgcmVzdWx0IHBy
b2ZpbGluZy4KKyAgICAgICAgSSBhZGRlZCB0aGlzIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHByb2Zp
bGluZyB0byBiZSBlbWl0dGVkIGZvciBNdWwgaW4KKyAgICAgICAgdGhlIGJhc2VsaW5lLCBidXQg
bm90IGluIHRoZSBERkcuIFdlIHVzZWQgdG8gaW5kaWNhdGUgdGhpcyB0aHJvdWdoIHBhc3NpbmcK
KyAgICAgICAgaW4gYSBudWxscHRyIGZvciB0aGUgQXJpdGhQcm9maWxlLCBidXQgd2Ugbm8gbG9u
Z2VyIGRvIHRoYXQgaW4gdGhlIHVwcGVyCisgICAgICAgIEpJVCB0aWVycy4gU28gd2UgYXJlIHBh
c3NpbmcgYW4gZXhwbGljaXQgcmVxdWVzdCBmcm9tIHRoZSBKSVQgdGllciBhYm91dAorICAgICAg
ICB3aGV0aGVyIG9yIG5vdCBpdCdzIHdvcnRoIGl0IGZvciB0aGUgSUMgdG8gZW1pdCBwcm9maWxp
bmcuCisKKyAgICAgICAgV2Ugbm93IGVtaXQgbXVjaCBsZXNzIGNvZGUgZm9yIE11bC4gSGVyZSBp
cyBzb21lIGRhdGEgb24gdGhlIGF2ZXJhZ2UKKyAgICAgICAgTXVsIHNuaXBwZXQvSUMgc2l6ZToK
KworICAgICAgICAgICAgICAgICAgIHwgICBKZXRTdHJlYW0gIHwgIFVuaXR5IDNEICB8CisgICAg
ICAgICAgICAgLS0tLS0tfCAtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tCisgICAgICAgICAg
ICAgIE9sZCAgfCAgfjI4MCBieXRlcyAgfCB+MjgwIGJ5dGVzIHwKKyAgICAgICAgICAgICAtLS0t
LS18IC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgTmV3ICB8ICAg
MjEwICBieXRlcyB8ICAxODUgYnl0ZXMgfAorICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRkSklUTXVsSUMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHVi
SW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c3R1YkluZm9CZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3R1Yklu
Zm9FbmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6R1BSVGVtcG9yYXJ5OjphZG9wdCk6CisgICAgICAgIChKU0M6OkRGRzo6RlBSVGVt
cG9yYXJ5OjpGUFJUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWF0aElDKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFyaXRoTXVsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6
OkRGRzo6R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OkdQ
UlRlbXBvcmFyeTo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6REZHOjpGUFJUZW1wb3Jhcnk6
On5GUFJUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OkZQUlRlbXBvcmFyeTo6ZnByKToK
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRvVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjpnZXRTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVEFkZEdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVEFkZEdlbmVyYXRvcjo6Z2VuZXJhdGVJbmxpbmUp
OgorICAgICAgICAoSlNDOjpKSVRBZGRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAg
ICAgICAqIGppdC9KSVRBZGRHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SklUQWRkR2VuZXJh
dG9yOjpKSVRBZGRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRBZGRHZW5lcmF0b3I6Omlz
TGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6SklUQWRkR2VuZXJhdG9y
Ojppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1l
dGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFz
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbXVsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGppdC9K
SVRNYXRoSUMuaDoKKyAgICAgICAgKEpTQzo6SklUTWF0aElDOjpzbG93UGF0aFN0YXJ0TG9jYXRp
b24pOgorICAgICAgICAoSlNDOjpKSVRNYXRoSUM6OnNsb3dQYXRoQ2FsbExvY2F0aW9uKToKKyAg
ICAgICAgKEpTQzo6SklUTWF0aElDOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkpJVE1hdGhJQzo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6SklUTWF0aElDOjpnZW5lcmF0ZUlubGluZSk6CisgICAgICAgIChKU0M6OkpJVE1h
dGhJQzo6Z2VuZXJhdGVPdXRPZkxpbmUpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUNGb3J3YXJk
cy5oOgorICAgICAgICAqIGppdC9KSVRNdWxHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
SVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlSW5saW5lKToKKyAgICAgICAgKEpTQzo6SklUTXVsR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUTXVsR2VuZXJhdG9y
Lmg6CisgICAgICAgIChKU0M6OkpJVE11bEdlbmVyYXRvcjo6SklUTXVsR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUTXVsR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkpJVE11bEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6SklUTXVsR2VuZXJhdG9yOjpkaWRFbWl0RmFzdFBhdGgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKSVRNdWxHZW5lcmF0b3I6OmVuZEp1bXBMaXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SklUTXVsR2VuZXJhdG9yOjpzbG93UGF0aEp1bXBMaXN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKwogMjAxNi0wNy0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEIzIHNob3VsZCBzdXBwb3J0IG11bHRpcGxlIGVudHJ5cG9pbnRz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMTMsNiArMzAxMywxMSBAQCBKSVRBZGRJQyog
Q29kZUJsb2NrOjphZGRKSVRBZGRJQygpCiAgICAgcmV0dXJuIG1fYWRkSUNzLmFkZCgpOwogfQog
CitKSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQygpCit7CisgICAgcmV0dXJuIG1fbXVs
SUNzLmFkZCgpOworfQorCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1Yklu
Zm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvIDogbV9zdHViSW5mb3MpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1
MCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBh
ZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoKTsKKyAg
ICBKSVRNdWxJQyogYWRkSklUTXVsSUMoKTsKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+Ojpp
dGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4oKTsgfQog
ICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvRW5kKCkgeyByZXR1
cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKQEAgLTEwMTQsNiArMTAxNSw3IEBAIHByaXZh
dGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBtX2NhbGxlZVNh
dmVSZWdpc3RlcnM7CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAg
ICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CiAg
ICAgQmFnPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
Y2FsbExpbmtJbmZvczsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJKSVRC
aXRYb3JHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVREaXZHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNs
dWRlICJKSVRNdWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCkBAIC0xMzE3LDYgKzEzMTYsMTYgQEAg
dm9pZCBHUFJUZW1wb3Jhcnk6OmFkb3B0KEdQUlRlbXBvcmFyeSYgbwogICAgIG90aGVyLm1fZ3By
ID0gSW52YWxpZEdQUlJlZzsKIH0KIAorRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoRlBSVGVt
cG9yYXJ5JiYgb3RoZXIpCit7CisgICAgQVNTRVJUKG90aGVyLm1faml0KTsKKyAgICBBU1NFUlQo
b3RoZXIubV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgbV9qaXQgPSBvdGhlci5tX2ppdDsK
KyAgICBtX2ZwciA9IG90aGVyLm1fZnByOworCisgICAgb3RoZXIubV9qaXQgPSBudWxscHRyOwor
fQorCiBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogICAg
IDogbV9qaXQoaml0KQogICAgICwgbV9mcHIoSW52YWxpZEZQUlJlZykKQEAgLTMzMzYsNiArMzM0
NSwyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGJvb2wgbmVlZHNTY3Jh
dGNoR1BSUmVnID0gdHJ1ZTsKKyAgICBib29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IGZhbHNlOwor
I2Vsc2UKKyAgICBib29sIG5lZWRzU2NyYXRjaEdQUlJlZyA9IHRydWU7CisgICAgYm9vbCBuZWVk
c1NjcmF0Y2hGUFJSZWcgPSB0cnVlOworI2VuZGlmCisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoKTsKKyAgICBhdXRvIHJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CisgICAgYXV0byBub25SZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKKyAgICAKKyAgICBjb21waWxlTWF0aElDKG5v
ZGUsIGFkZElDLCBuZWVkc1NjcmF0Y2hHUFJSZWcsIG5lZWRzU2NyYXRjaEZQUlJlZywgcmVwYXRj
aGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBSZXBhdGNoaW5nRnVuY3Rpb24sIHR5cGVuYW1lIE5v
blJlcGF0Y2hpbmdGdW5jdGlvbj4KK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMo
Tm9kZSogbm9kZSwgSklUTWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgYm9vbCBuZWVkc1NjcmF0
Y2hHUFJSZWcsIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24gcmVw
YXRjaGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24gbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uKQoreworICAgIEVkZ2UmIGxlZnRDaGlsZCA9IG5vZGUtPmNoaWxkMSgpOworICAgIEVkZ2Um
IHJpZ2h0Q2hpbGQgPSBub2RlLT5jaGlsZDIoKTsKKwogICAgIE9wdGlvbmFsPEpTVmFsdWVPcGVy
YW5kPiBsZWZ0OwogICAgIE9wdGlvbmFsPEpTVmFsdWVPcGVyYW5kPiByaWdodDsKIApAQCAtMzM0
NywxOSArMzM3NywyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9k
CiAgICAgRlBSUmVnIGxlZnRGUFIgPSBsZWZ0TnVtYmVyLmZwcigpOwogICAgIEZQUlJlZyByaWdo
dEZQUiA9IHJpZ2h0TnVtYmVyLmZwcigpOwogCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKKworICAg
IE9wdGlvbmFsPEZQUlRlbXBvcmFyeT4gZnByU2NyYXRjaDsKKyAgICBpZiAobmVlZHNTY3JhdGNo
RlBSUmVnKSB7CisgICAgICAgIGZwclNjcmF0Y2ggPSBGUFJUZW1wb3JhcnkodGhpcyk7CisgICAg
ICAgIHNjcmF0Y2hGUFIgPSBmcHJTY3JhdGNoLT5mcHIoKTsKKyAgICB9CisKICNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIE9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gZ3ByU2NyYXRjaDsKKyAgICBpZiAo
bmVlZHNTY3JhdGNoR1BSUmVnKSB7CisgICAgICAgIGdwclNjcmF0Y2ggPSBHUFJUZW1wb3Jhcnko
dGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBncHJTY3JhdGNoLT5ncHIoKTsKKyAgICB9CiAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVzdWx0LmdwcigpKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgRlBSUmVn
IHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwogI2Vsc2UKICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0VGFnKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZXN1bHRQYXlsb2FkLmdwcigp
LCByZXN1bHRUYWcuZ3ByKCkpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVzdWx0VGFnLmdw
cigpOwotICAgIEZQUlRlbXBvcmFyeSBmcHJTY3JhdGNoKHRoaXMpOwotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnByU2NyYXRjaC5mcHIoKTsKKyAgICBpZiAobmVlZHNTY3JhdGNoR1BSUmVnKQor
ICAgICAgICBzY3JhdGNoR1BSID0gcmVzdWx0UmVncy50YWdHUFIoKTsKICNlbmRpZgogCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkucmVz
dWx0VHlwZSgpKTsKQEAgLTMzNzQsMjEgKzM0MTQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKE5vZAogCiAgICAgQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkg
fHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwogCi0gICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkpIHsKKyAgICBpZiAoIW1hdGhJQy0+aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkg
ewogICAgICAgICBsZWZ0ID0gSlNWYWx1ZU9wZXJhbmQodGhpcywgbGVmdENoaWxkKTsKICAgICAg
ICAgbGVmdFJlZ3MgPSBsZWZ0LT5qc1ZhbHVlUmVncygpOwogICAgIH0KLSAgICBpZiAoIXJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpIHsKKyAgICBpZiAoIW1hdGhJQy0+aXNSaWdodE9wZXJhbmRWYWxp
ZENvbnN0YW50KCkpIHsKICAgICAgICAgcmlnaHQgPSBKU1ZhbHVlT3BlcmFuZCh0aGlzLCByaWdo
dENoaWxkKTsKICAgICAgICAgcmlnaHRSZWdzID0gcmlnaHQtPmpzVmFsdWVSZWdzKCk7CiAgICAg
fQogCi0gICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElD
KCk7CiAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gYWRkSUNHZW5lcmF0aW9uU3RhdGUg
PSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7CiAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICBhZGRJQy0+bV9nZW5lcmF0b3IgPSBK
SVRBZGRHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hG
UFIsIGFyaXRoUHJvZmlsZSk7CisgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihs
ZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBsZWZ0RlBSLCByaWdodEZQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxl
KTsKIAotICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gYWRkSUMtPmdlbmVyYXRlSW5saW5lKG1f
aml0LCAqYWRkSUNHZW5lcmF0aW9uU3RhdGUpOworICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZyA9IGZhbHNlOworICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0aElDLT5nZW5lcmF0ZUlu
bGluZShtX2ppdCwgKmFkZElDR2VuZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJvZmlsaW5nKTsK
IAogICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsKICAgICAgICAgQVNTRVJUKCFhZGRJQ0dlbmVy
YXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgpKTsKQEAgLTM0MDYsMzggKzM0NDYsMzgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogCiAgICAgICAgICAg
ICBhdXRvIGlubmVyTGVmdFJlZ3MgPSBsZWZ0UmVnczsKICAgICAgICAgICAgIGF1dG8gaW5uZXJS
aWdodFJlZ3MgPSByaWdodFJlZ3M7Ci0gICAgICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25z
dCgpKSB7CisgICAgICAgICAgICBpZiAobWF0aElDLT5pc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dCgpKSB7CiAgICAgICAgICAgICAgICAgaW5uZXJMZWZ0UmVncyA9IHJlc3VsdFJlZ3M7CiAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZVZhbHVlKGxlZnRDaGlsZC0+YXNKU1ZhbHVlKCksIGlubmVy
TGVmdFJlZ3MpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGhJQy0+aXNSaWdodE9wZXJhbmRWYWxpZENv
bnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBpbm5lclJpZ2h0UmVncyA9IHJlc3VsdFJlZ3M7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZVZhbHVlKHJpZ2h0Q2hpbGQtPmFzSlNWYWx1ZSgp
LCBpbm5lclJpZ2h0UmVncyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChhZGRJ
Q0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgICAg
IGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblZhbHVlQWRkT3B0aW1pemUsIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKGFkZElDKSk7CisgICAgICAgICAgICAgICAgYWRkSUNHZW5l
cmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgcmVzdWx0UmVncywgaW5u
ZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdFJlZ3MsIGlu
bmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzKTsKKyAgICAgICAgICAgICAgICBhZGRJQ0dlbmVy
YXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzKTsKIAogICAg
ICAgICAgICAgc2lsZW50RmlsbChzYXZlUGxhbnMpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKICAgICAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJm1faml0
KTsKIAogICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgYWRkSUMtPmZpbmFsaXplSW5saW5lQ29kZSgqYWRk
SUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOworICAgICAgICAgICAgICAgIG1hdGhJQy0+
ZmluYWxpemVJbmxpbmVDb2RlKCphZGRJQ0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGxl
ZnRPcGVyYW5kLmlzQ29uc3QoKSkgeworICAgICAgICBpZiAobWF0aElDLT5pc0xlZnRPcGVyYW5k
VmFsaWRDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBsZWZ0ID0gSlNWYWx1ZU9wZXJhbmQodGhp
cywgbGVmdENoaWxkKTsKICAgICAgICAgICAgIGxlZnRSZWdzID0gbGVmdC0+anNWYWx1ZVJlZ3Mo
KTsKLSAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKSB7CisgICAgICAg
IH0gZWxzZSBpZiAobWF0aElDLT5pc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkgewogICAg
ICAgICAgICAgcmlnaHQgPSBKU1ZhbHVlT3BlcmFuZCh0aGlzLCByaWdodENoaWxkKTsKICAgICAg
ICAgICAgIHJpZ2h0UmVncyA9IHJpZ2h0LT5qc1ZhbHVlUmVncygpOwogICAgICAgICB9CiAKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25W
YWx1ZUFkZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICB9CiAKQEAgLTQx
NTYsNzggKzQxOTYsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5v
ZAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgT3B0aW9uYWw8SlNW
YWx1ZU9wZXJhbmQ+IGxlZnQ7Ci0gICAgICAgIE9wdGlvbmFsPEpTVmFsdWVPcGVyYW5kPiByaWdo
dDsKLQotICAgICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVnczsKLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzOwotCi0gICAgICAgIEZQUlRlbXBvcmFyeSBsZWZ0TnVtYmVyKHRoaXMpOwotICAg
ICAgICBGUFJUZW1wb3JhcnkgcmlnaHROdW1iZXIodGhpcyk7Ci0gICAgICAgIEZQUlJlZyBsZWZ0
RlBSID0gbGVmdE51bWJlci5mcHIoKTsKLSAgICAgICAgRlBSUmVnIHJpZ2h0RlBSID0gcmlnaHRO
dW1iZXIuZnByKCk7Ci0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVzdWx0LmdwcigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgRlBSUmVn
IHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBib29sIG5lZWRzU2NyYXRjaEdQ
UlJlZyA9IHRydWU7CisgICAgICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gZmFsc2U7CiAj
ZWxzZQotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlc3VsdFBheWxvYWQuZ3ByKCksIHJlc3VsdFRhZy5ncHIoKSk7
Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICBG
UFJUZW1wb3JhcnkgZnByU2NyYXRjaCh0aGlzKTsKLSAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBmcHJTY3JhdGNoLmZwcigpOworICAgICAgICBib29sIG5lZWRzU2NyYXRjaEdQUlJlZyA9IHRy
dWU7CisgICAgICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0gdHJ1ZTsKICNlbmRpZgotCi0g
ICAgICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hp
bGQpLnJlc3VsdFR5cGUoKSk7Ci0gICAgICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZCht
X3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkucmVzdWx0VHlwZSgpKTsKLQotICAgICAgICAvLyBU
aGUgc25pcHBldCBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBib3RoIG9wZXJhbmRzIGJlaW5n
IGNvbnN0YW50LiBJZiB0aGUgbGVmdAotICAgICAgICAvLyBvcGVyYW5kIGlzIGFscmVhZHkgY29u
c3QsIHdlJ2xsIGlnbm9yZSB0aGUgcmlnaHQgb3BlcmFuZCdzIGNvbnN0bmVzcy4KLSAgICAgICAg
aWYgKGxlZnRDaGlsZC0+aXNJbnQzMkNvbnN0YW50KCkpCi0gICAgICAgICAgICBsZWZ0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGxlZnRDaGlsZC0+YXNJbnQzMigpKTsKLSAgICAgICAgZWxzZSBpZiAo
cmlnaHRDaGlsZC0+aXNJbnQzMkNvbnN0YW50KCkpCi0gICAgICAgICAgICByaWdodE9wZXJhbmQu
c2V0Q29uc3RJbnQzMihyaWdodENoaWxkLT5hc0ludDMyKCkpOwotCi0gICAgICAgIEFTU0VSVCgh
bGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKLQotICAg
ICAgICBpZiAoIWxlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpIHsKLSAgICAgICAg
ICAgIGxlZnQgPSBKU1ZhbHVlT3BlcmFuZCh0aGlzLCBsZWZ0Q2hpbGQpOwotICAgICAgICAgICAg
bGVmdFJlZ3MgPSBsZWZ0LT5qc1ZhbHVlUmVncygpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
cmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpIHsKLSAgICAgICAgICAgIHJpZ2h0
ID0gSlNWYWx1ZU9wZXJhbmQodGhpcywgcmlnaHRDaGlsZCk7Ci0gICAgICAgICAgICByaWdodFJl
Z3MgPSByaWdodC0+anNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpJVE11bEdl
bmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywKLSAgICAgICAgICAgIGxlZnRGUFIsIHJpZ2h0RlBSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwotCi0g
ICAgICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwotICAgICAgICBnZW4uZW5kSnVt
cExpc3QoKS5hcHBlbmQobV9qaXQuanVtcCgpKTsKLQotICAgICAgICBnZW4uc2xvd1BhdGhKdW1w
TGlzdCgpLmxpbmsoJm1faml0KTsKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0UmVncyk7Ci0KLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMy
KCkpIHsKLSAgICAgICAgICAgIGxlZnRSZWdzID0gcmVzdWx0UmVnczsKLSAgICAgICAgICAgIG1f
aml0Lm1vdmVWYWx1ZShsZWZ0Q2hpbGQtPmFzSlNWYWx1ZSgpLCBsZWZ0UmVncyk7Ci0gICAgICAg
IH0gZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpIHsKLSAgICAg
ICAgICAgIHJpZ2h0UmVncyA9IHJlc3VsdFJlZ3M7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlVmFs
dWUocmlnaHRDaGlsZC0+YXNKU1ZhbHVlKCksIHJpZ2h0UmVncyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlTXVsLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzKTsKLQotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFJl
Z3MpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAgICAgIGdlbi5lbmRK
dW1wTGlzdCgpLmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKKyAgICAgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFk
ZEpJVE11bElDKCk7CisgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVNdWxPcHRpbWl6ZTsKKyAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZU11bDsKKyAgICAgICAgCisgICAgICAgIGNvbXBpbGVNYXRoSUMobm9kZSwg
bXVsSUMsIG5lZWRzU2NyYXRjaEdQUlJlZywgbmVlZHNTY3JhdGNoRlBSUmVnLCByZXBhdGNoaW5n
RnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
IkRGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmgiCiAjaW5jbHVkZSAiREZHVmFsdWVTb3VyY2UuaCIKKyNpbmNsdWRlICJKSVRN
YXRoSUMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMTI4OCw5ICsxMjg5LDkgQEAgcHVi
bGljOgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKSmFpYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJl
c3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBw
dHIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
SkpNaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpT
VmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKLSAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIuZ3ByKCksIHB0
cik7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLmdwcigp
LCBhcmcyLmdwcigpLCBtYXRoSUMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdC5ncHIoKSk7CiAgICAgfQogCkBAIC0xNzExLDkgKzE3MTIsOSBA
QCBwdWJsaWM6CiAgICAgfQogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKSmFpYyBvcGVyYXRp
b24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJn
MiwgVHJ1c3RlZEltbVB0ciBwdHIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FSkpNaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpT
VmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJC
SVRfRFVNTVlfQVJHIGFyZzEucGF5bG9hZEdQUigpLCBhcmcxLnRhZ0dQUigpLCBhcmcyLnBheWxv
YWRHUFIoKSwgYXJnMi50YWdHUFIoKSwgcHRyKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEucGF5bG9hZEdQUigpLCBh
cmcxLnRhZ0dQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSwgbWF0aElDKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQucGF5
bG9hZEdQUigpLCByZXN1bHQudGFnR1BSKCkpOwogICAgIH0KIApAQCAtMjQ1MSw2ICsyNDUyLDkg
QEAgcHVibGljOgogICAgIHZvaWQgZW1pdFVudHlwZWRSaWdodFNoaWZ0Qml0T3AoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVNoaWZ0T3AoTm9kZSopOwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9uLCB0eXBlbmFtZSBOb25SZXBh
dGNoaW5nRnVuY3Rpb24+CisgICAgdm9pZCBjb21waWxlTWF0aElDKE5vZGUqLCBKSVRNYXRoSUM8
R2VuZXJhdG9yPiosIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVnLCBib29sIG5lZWRzU2NyYXRjaEZQ
UlJlZywgUmVwYXRjaGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24pOworCiAgICAg
dm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoQWRkKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVNYWtlUm9wZShOb2RlKik7CkBAIC0zMDQ1LDYgKzMwNDks
MTYgQEAgcHVibGljOgogCiAgICAgR1BSVGVtcG9yYXJ5KEdQUlRlbXBvcmFyeSYgb3RoZXIpID0g
ZGVsZXRlOwogCisgICAgR1BSVGVtcG9yYXJ5KEdQUlRlbXBvcmFyeSYmIG90aGVyKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG90aGVyLm1faml0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLm1fZ3By
ICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBtX2ppdCA9IG90aGVyLm1faml0OworICAgICAg
ICBtX2dwciA9IG90aGVyLm1fZ3ByOworICAgICAgICBvdGhlci5tX2ppdCA9IG51bGxwdHI7Cisg
ICAgICAgIG90aGVyLm1fZ3ByID0gSW52YWxpZEdQUlJlZzsKKyAgICB9CisKICAgICBHUFJUZW1w
b3JhcnkmIG9wZXJhdG9yPShHUFJUZW1wb3JhcnkmJiBvdGhlcikKICAgICB7CiAgICAgICAgIEFT
U0VSVCghbV9qaXQpOwpAQCAtMzA5Myw3ICszMTA3LDkgQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNz
IEZQUlRlbXBvcmFyeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRlBSVGVtcG9yYXJ5KTsK
IHB1YmxpYzoKKyAgICBGUFJUZW1wb3JhcnkoRlBSVGVtcG9yYXJ5JiYpOwogICAgIEZQUlRlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCopOwogICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCos
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmKTsKICAgICBGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVK
SVQqLCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kJiwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYpOwpA
QCAtMzEwMywxMSArMzExOSwxMyBAQCBwdWJsaWM6CiAKICAgICB+RlBSVGVtcG9yYXJ5KCkKICAg
ICB7Ci0gICAgICAgIG1faml0LT51bmxvY2soZnByKCkpOworICAgICAgICBpZiAoTElLRUxZKG1f
aml0KSkKKyAgICAgICAgICAgIG1faml0LT51bmxvY2soZnByKCkpOwogICAgIH0KIAogICAgIEZQ
UlJlZyBmcHIoKSBjb25zdAogICAgIHsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAg
QVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICByZXR1cm4gbV9mcHI7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM2LDkgKzE1MzYsMTggQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KSk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoKQogICAgIHsKKyAg
ICAgICAgSklUQWRkSUMqIGFkZElDID0gY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKCk7CisgICAg
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsK
KyAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsK
KyAgICAgICAgY29tcGlsZU1hdGhJQyhhZGRJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBh
dGNoaW5nRnVuY3Rpb24pOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0
b3I+CisgICAgdm9pZCBjb21waWxlTWF0aElDKEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMs
IEZ1bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uKQorICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKICAgICAgICAg
CiAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSk7CkBAIC0x
NTY1LDQyICsxNTc0LDQyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQm94PENDYWxsSGVs
cGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQogICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CiAKLSAg
ICAgICAgICAgICAgICBKSVRBZGRJQyogYWRkSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZEpJVEFk
ZElDKCk7Ci0gICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gYWRkSUNH
ZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlv
blN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gc3RhdGUtPmdyYXBoLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAg
ICAgICAgICBhZGRJQy0+bV9nZW5lcmF0b3IgPSBKSVRBZGRHZW5lcmF0b3IobGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKKyAgICAgICAgICAg
ICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIo
KSksIHBhcmFtcy5mcFNjcmF0Y2goMCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNj
cmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCksIEludmFsaWRGUFJSZWcsIGFyaXRoUHJvZmls
ZSk7CiAKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZElubGluZSA9IGFkZElDLT5nZW5l
cmF0ZUlubGluZShqaXQsICphZGRJQ0dlbmVyYXRpb25TdGF0ZSk7CisgICAgICAgICAgICAgICAg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRJbmxpbmUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKGppdCwgKm1hdGhJQ0dlbmVy
YXRpb25TdGF0ZSwgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAKICAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghYWRkSUNHZW5l
cmF0aW9uU3RhdGUtPnNsb3dQYXRoSnVtcHMuZW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghbWF0aElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmVtcHR5KCkpOwog
ICAgICAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqaXQubGFiZWwoKTsKICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0
YXRlLT5zbG93UGF0aEp1bXBzLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmxp
bmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUt
PnNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGFkZElDR2VuZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0Y2gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3dQYXRoQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbigqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSwgcGFyYW1z
WzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGFkZElDKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRk
SUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIo
KSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG93UGF0aENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvblZhbHVlQWRkLCBwYXJhbXNbMF0u
Z3ByKCksIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5j
YWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCks
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1syXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRv
bmUsICZqaXQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkSUMtPmZpbmFsaXplSW5saW5lQ29kZSgqYWRkSUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZm
ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGhJQy0+ZmluYWxpemVJbmxpbmVD
b2RlKCptYXRoSUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAg
ICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvblZhbHVlQWRkLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5n
cHIoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAKQEAgLTE3NjIsNyAr
MTc3MSwxMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVbnR5cGVkVXNl
OiB7Ci0gICAgICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxKSVRNdWxHZW5lcmF0b3I+KG9wZXJh
dGlvblZhbHVlTXVsKTsKKyAgICAgICAgICAgIEpJVE11bElDKiBtdWxJQyA9IGNvZGVCbG9jaygp
LT5hZGRKSVRNdWxJQygpOworICAgICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplOworICAgICAgICAgICAgYXV0byBub25SZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKKyAgICAgICAgICAgIGNvbXBpbGVNYXRoSUMo
bXVsSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzExLDYgKzcxMSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBpc09wZXJhbmRDb25zdGFudEludChpbnQgc3JjKTsKICAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudENoYXIoaW50IHNyYyk7CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRG
dW5jdGlvbj4KKyAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRNYXRoSUM8R2VuZXJhdG9y
PiosIEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJl
cGF0Y2hGdW5jdGlvbj4KKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRNYXRoSUM8R2Vu
ZXJhdG9yPiosIEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVk
RnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisKICAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gaXRlcisrLT5mcm9tOwpAQCAtNzY1LDggKzc3MSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZyk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQXJwLCBKU1ZhbHVlUmVncywg
SlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBBcml0aFByb2ZpbGUqKTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkosIEpTVmFsdWVS
ZWdzLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycEphaWMsIEpTVmFsdWVSZWdz
LCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEFyaXRoUHJvZmlsZSosIEpJVEFkZElDKik7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpKSmFpYywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgSklUQWRkSUMq
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSkpBcnBNaWMsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEFy
aXRoUHJvZmlsZSosIFRydXN0ZWRJbW1QdHIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYywgSlNWYWx1ZVJlZ3MsIEpTVmFs
dWVSZWdzLCBKU1ZhbHVlUmVncywgVHJ1c3RlZEltbVB0cik7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQXAsIGludCwgR1BSUmVn
LCBHUFJSZWcsIEFycmF5UHJvZmlsZSopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkJ5LCBpbnQsIEdQUlJlZywgR1BSUmVnLCBC
eVZhbEluZm8qKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbiha
X0pJVE9wZXJhdGlvbl9FSk9KLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnKTsKQEAgLTk1Niw4ICs5
NjIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI7CiAKLSAgICAgICAgSGFzaE1hcDxJbnN0cnVj
dGlvbiosIEpJVEFkZElDKj4gbV9pbnN0cnVjdGlvblRvSklUQWRkSUM7Ci0gICAgICAgIEhhc2hN
YXA8SW5zdHJ1Y3Rpb24qLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1faW5zdHJ1Y3Rpb25Ub0pJ
VEFkZElDR2VuZXJhdGlvblN0YXRlOworICAgICAgICBIYXNoTWFwPEluc3RydWN0aW9uKiwgdm9p
ZCo+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQzsKKyAgICAgICAgSGFzaE1hcDxJbnN0cnVjdGlvbios
IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0
YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBZGRHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQWRkR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBZGRHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw4IEBAIEpJVE1hdGhJQ0lubGluZVJlc3VsdCBKSVRBZGRHZW5lcmF0b3I6OmcKICAgICAg
ICAgbGhzID0gbV9hcml0aFByb2ZpbGUtPmxoc09ic2VydmVkVHlwZSgpOwogICAgICAgICByaHMg
PSBtX2FyaXRoUHJvZmlsZS0+cmhzT2JzZXJ2ZWRUeXBlKCk7CiAgICAgICAgIGlmIChsaHMuaXNF
bXB0eSgpIHx8IHJocy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJQ3Mgc2hv
dWxkIGJlIGFibGUgdG8gcmVwYXRjaCB3aXRob3V0IGVtaXR0aW5nIGFuIGlubGluZSBwYXRoOgor
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDExMAogICAgICAgICAgICAgbGhzID0gT2JzZXJ2ZWRUeXBlKCkud2l0aEludDMyKCk7CiAgICAg
ICAgICAgICByaHMgPSBPYnNlcnZlZFR5cGUoKS53aXRoSW50MzIoKTsKICAgICAgICAgfQpAQCAt
NzEsNyArNzMsNyBAQCBKSVRNYXRoSUNJbmxpbmVSZXN1bHQgSklUQWRkR2VuZXJhdG9yOjpnCiAg
ICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVGdWxsU25pcHBldDsKIH0K
IAotYm9vbCBKSVRBZGRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0JiBzbG93UGF0aEp1bXBMaXN0KQorYm9vbCBKSVRBZGRHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1
bXBMaXN0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1bXBMaXN0LCBib29sIHNo
b3VsZEVtaXRQcm9maWxpbmcpCiB7CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBJbnZhbGlk
R1BSUmVnKTsKICAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IG1fbGVmdC5wYXlsb2FkR1BSKCkp
OwpAQCAtMTY2LDcgKzE2OCw3IEBAIGJvb2wgSklUQWRkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoKEMKIAogICAgIC8vIERvIGRvdWJsZVZhciArIGRvdWJsZVZhci4KICAgICBqaXQuYWRkRG91
YmxlKG1fcmlnaHRGUFIsIG1fbGVmdEZQUik7Ci0gICAgaWYgKG1fYXJpdGhQcm9maWxlKQorICAg
IGlmIChtX2FyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKQogICAgICAgICBtX2Fy
aXRoUHJvZmlsZS0+ZW1pdFNldERvdWJsZShqaXQpOwogICAgICAgICAKICAgICBqaXQuYm94RG91
YmxlKG1fbGVmdEZQUiwgbV9yZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBZGRHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFkZEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFkZEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2
MSwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSklUTWF0aElDSW5saW5lUmVzdWx0IGdlbmVy
YXRlSW5saW5lKENDYWxsSGVscGVycyYsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYpOwotICAgIGJv
b2wgZ2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
JiBlbmRKdW1wTGlzdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCk7
CisgICAgYm9vbCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYsIENDYWxsSGVscGVyczo6
SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1
bXBMaXN0LCBib29sIHNob3VsZEVtaXRQcm9maWxpbmcpOworCisgICAgYm9vbCBpc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdE9wZXJhbmQuaXNDb25zdElu
dDMyKCk7IH0KKyAgICBib29sIGlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHRPcGVyYW5kLmlzQ29uc3RJbnQzMigpOyB9CiAKIHByaXZhdGU6CiAgICAg
U25pcHBldE9wZXJhbmQgbV9sZWZ0T3BlcmFuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg0
LDYgKzY4NCwyMiBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBPcGVyYW5kVHlwZXMgZ2V0T3BlCiAK
IHZvaWQgSklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQygpOworICAg
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7Cisg
ICAgZW1pdE1hdGhJQ0Zhc3QoYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlT2Zmc2V0KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKworICAgIEpJ
VEFkZElDKiBhZGRJQyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CisgICAgZW1pdE1hdGhJQ1Nsb3coYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KK3ZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVu
Y3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKK3sKICAgICBpbnQgcmVzdWx0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKICAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKQEAgLTY5Miw5ICs3MDgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rp
b24qIGN1cnJlCiAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGNvcGll
ZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9
IEludmFsaWRGUFJSZWc7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QyKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKICNlbHNlCiAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3Bl
cmFuZFR5cGVzKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwpAQCAtNzE4LDQwICs3MzQsMzUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZQogCiAgICAgUkVMRUFTRV9BU1NFUlQo
IWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CiAKLSAg
ICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICBpZiAoIW1hdGhJQy0+aXNMZWZ0T3Bl
cmFuZFZhbGlkQ29uc3RhbnQoKSkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGxlZnRSZWdzKTsKLSAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgaWYgKCFt
YXRoSUMtPmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudCgpKQogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKIAotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRBZGRJQygpOwotCi0gICAgbV9pbnN0cnVjdGlvblRvSklUQWRkSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwotICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSYgYWRkSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9KSVRBZGRJQ0dlbmVyYXRp
b25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9uLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUoKSku
aXRlcmF0b3ItPnZhbHVlOworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7
CiAKLSAgICBhZGRJQy0+bV9nZW5lcmF0b3IgPSBKSVRBZGRHZW5lcmF0b3IobGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgZnBSZWdUMCwg
ZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKyAgICBtYXRo
SUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hGUFIsIGFyaXRoUHJvZmlsZSk7CiAKLSAgICBib29sIGdlbmVyYXRlZElubGlu
ZUNvZGUgPSBhZGRJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIGFkZElDR2VuZXJhdGlvblN0YXRl
KTsKKyAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgewogICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKICAgICAgICAgZWxzZSBpZiAo
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOwotCiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUpCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbihub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoYWRk
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9h
ZGQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUTWF0aElD
PEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikK
IHsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93Q2FzZXMsIGl0
ZXIsIG1fYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBhZGRJ
Q0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub0pJVEFkZElDR2VuZXJhdGlvblN0YXRl
LmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7Ci0gICAgYWRkSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKKyAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpbnQgcmVzdWx0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKQEAgLTc2MSw3ICs3NzIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfYWRkKEluc3RydWN0aW9uKiBjCiAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFu
ZFR5cGVzKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gbGVmdFJlZ3M7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QyKTsKICNlbHNlCiAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwpAQCAtNzc3LDI1ICs3ODgsMjQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2FkZChJbnN0cnVjdGlvbiogYwogICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMikpCiAgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25z
dGFudEludChvcDIpKTsKIAotICAgIGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgaWYg
KG1hdGhJQy0+aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAocmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkKKyAgICBpZiAobWF0aElDLT5pc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSkKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAKLSAgICBKSVRB
ZGRJQyogYWRkSUMgPSBtX2luc3RydWN0aW9uVG9KSVRBZGRJQy5nZXQoY3VycmVudEluc3RydWN0
aW9uKTsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIEFyaXRoUHJv
ZmlsZSYgYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJl
bnRJbnN0cnVjdGlvbik7Ci0gICAgICAgIGlmIChhZGRJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRT
bG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwg
cmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgJmFyaXRoUHJvZmlsZSwgYWRkSUMpOwor
ICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
KyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpBcnBNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgJmFyaXRoUHJv
ZmlsZSwgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
YWRkSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25WYWx1ZUFkZFByb2ZpbGVkLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCAmYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uKHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdz
LCByaWdodFJlZ3MsICZhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBhZGRJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemUsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFkZElDKTsKKyAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24o
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CiAKICAgICBhZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlJiBhZGRJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub0pJVEFk
ZElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7Ci0gICAg
ICAgIGFkZElDLT5maW5hbGl6ZUlubGluZUNvZGUoYWRkSUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtC
dWZmZXIpOworICAgICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJ
bnN0cnVjdGlvbiktPnZhbHVlOworICAgICAgICBtYXRoSUMtPmZpbmFsaXplSW5saW5lQ29kZSht
YXRoSUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOwogICAgIH0pOwogfQogCkBAIC04NzUs
MTEyICs4ODUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RpdihJbnN0cnVjdGlvbiogYwog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3Ay
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGNvcGllZEluc3RydWN0
aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIp
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVy
YW5kVHlwZXMoY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
bGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2Ny
YXRjaEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKLQotICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbnVsbHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBh
cml0aFByb2ZpbGUgPSAmbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0
cnVjdGlvbik7Ci0KLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCh0eXBlcy5maXJzdCgp
KTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQodHlwZXMuc2Vjb25kKCkpOwotCi0g
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAgIGxlZnRPcGVyYW5kLnNl
dENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwotICAgIGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdElu
dDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwotCi0gICAg
aWYgKCFsZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
UG9zaXRpdmVDb25zdEludDMyKCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOwotCi0gICAgSklUTXVsR2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmln
aHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJl
Z1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwotCi0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCi0gICAgaWYgKGdlbi5kaWRFbWl0RmFz
dFBhdGgoKSkgewotICAgICAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci0KLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKGdlbi5lbmRKdW1wTGlzdCgpLmVtcHR5KCkpOwotICAgICAgICBBU1NFUlQoZ2Vu
LnNsb3dQYXRoSnVtcExpc3QoKS5lbXB0eSgpKTsKLSAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSkg
ewotICAgICAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAg
ICAgICAgICAgIGlmIChyaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfbXVsKTsKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE11bElDKCk7CisgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKKyAgICBlbWl0TWF0aElDRmFzdChtdWxJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNv
ZGVPZmZzZXQpOwotICAgIAotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMo
Y29waWVkSW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKLSNlbHNlCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
I2VuZGlmCi0KLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCh0eXBlcy5maXJzdCgpKTsK
LSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQodHlwZXMuc2Vjb25kKCkpOwogCi0gICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAgIGxlZnRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMy
KGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQotICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkp
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAg
ICAgICBpZiAocmlnaHRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkpCi0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLSAgICAgICAgQXJpdGhQ
cm9maWxlJiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3Vy
cmVudEluc3RydWN0aW9uKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCAmYXJpdGhQcm9maWxl
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbXVsKTsKLSAgICAgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKLSAgICB9CisgICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11
bElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKKyAg
ICBlbWl0TWF0aElDU2xvdyhtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZU11bFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlTXVsT3B0aW1pemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMyLDE3ICs0MzIsMTcgQEAgQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQog
Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSkpBcnBKYWljIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBK
U1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSwgSklUQWRkSUMqIGFkZElDKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQXJwTWljIG9wZXJhdGlvbiwg
SlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyLCBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiB7Ci0gICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoYXJp
dGhQcm9maWxlKSwgVHJ1c3RlZEltbVB0cihhZGRJQykpOworICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKGFyaXRoUHJvZmlsZSksIG1hdGhJ
Qyk7CiAgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOwogICAgIHNldHVwUmVzdWx0cyhyZXN1bHQpOwogICAgIHJldHVybiBjYWxsOwogfQogCi1B
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSkpKYWljIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVl
UmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyLCBKSVRBZGRJQyogYWRkSUMpCitBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FSkpNaWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEs
IEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogewotICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKGFkZElDKSk7Cisg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIG1hdGhJQyk7CiAgICAg
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAg
IHNldHVwUmVzdWx0cyhyZXN1bHQpOwogICAgIHJldHVybiBjYWxsOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSklUTWF0aElDSW5saW5lUmVzdWx0LmgiCisjaW5jbHVkZSAiSklUTXVs
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlcGF0Y2gu
aCIKICNpbmNsdWRlICJTbmlwcGV0T3BlcmFuZC5oIgpAQCAtNTQsNyArNTUsMTAgQEAgcHVibGlj
OgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJu
IG1faW5saW5lU3RhcnQubGFiZWxBdE9mZnNldChtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0
YXJ0KTsgfQogICAgIENvZGVMb2NhdGlvbkNhbGwgc2xvd1BhdGhDYWxsTG9jYXRpb24oKSB7IHJl
dHVybiBtX2lubGluZVN0YXJ0LmNhbGxBdE9mZnNldChtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0
aENhbGxMb2NhdGlvbik7IH0KIAotICAgIGJvb2wgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJz
JiBqaXQsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCisgICAgYm9vbCBpc0xlZnRPcGVy
YW5kVmFsaWRDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdG9yLmlzTGVmdE9wZXJh
bmRWYWxpZENvbnN0YW50KCk7IH0KKyAgICBib29sIGlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdG9yLmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFu
dCgpOyB9CisKKyAgICBib29sIGdlbmVyYXRlSW5saW5lKENDYWxsSGVscGVycyYgaml0LCBNYXRo
SUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVl
KQogICAgIHsKICAgICAgICAgc3RhdGUuZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAg
ICAgICBzaXplX3Qgc3RhcnRTaXplID0gaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXpl
KCk7CkBAIC03Myw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBjYXNlIEpJ
VE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVGdWxsU25pcHBldDogewogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVuZEp1bXBMaXN0OwotICAgICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBtX2dlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCwgZW5kSnVtcExpc3QsIHN0
YXRlLnNsb3dQYXRoSnVtcHMpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX2dlbmVyYXRv
ci5nZW5lcmF0ZUZhc3RQYXRoKGppdCwgZW5kSnVtcExpc3QsIHN0YXRlLnNsb3dQYXRoSnVtcHMs
IHNob3VsZEVtaXRQcm9maWxpbmcpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAg
ICAgICAgICAgIHN0YXRlLmZhc3RQYXRoRW5kID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAg
ICAgc3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoID0gZmFsc2U7CkBAIC0xMDQsNyArMTA4LDkg
QEAgcHVibGljOgogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW5kSnVt
cExpc3Q7IAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoSnVt
cExpc3Q7IAotICAgICAgICAgICAgYm9vbCBlbWl0dGVkRmFzdFBhdGggPSBtX2dlbmVyYXRvci5n
ZW5lcmF0ZUZhc3RQYXRoKGppdCwgZW5kSnVtcExpc3QsIHNsb3dQYXRoSnVtcExpc3QpOworCisg
ICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSAhSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKTsKKyAgICAgICAgICAgIGJvb2wgZW1pdHRlZEZh
c3RQYXRoID0gbV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQsIGVuZEp1bXBMaXN0LCBz
bG93UGF0aEp1bXBMaXN0LCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKICAgICAgICAgICAgIGlmICgh
ZW1pdHRlZEZhc3RQYXRoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGVu
ZEp1bXBMaXN0LmFwcGVuZChqaXQuanVtcCgpKTsKQEAgLTE1Nyw2ICsxNjMsNyBAQCBwdWJsaWM6
CiB9OwogCiB0eXBlZGVmIEpJVE1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwordHlw
ZWRlZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJQzsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDRm9yd2Fy
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQ0Zv
cndhcmRzLmgJKHJldmlzaW9uIDIwMzY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTWF0aElDRm9yd2FyZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+IGNsYXNzIEpJVE1h
dGhJQzsKIGNsYXNzIEpJVEFkZEdlbmVyYXRvcjsKK2NsYXNzIEpJVE11bEdlbmVyYXRvcjsKIAog
dHlwZWRlZiBKSVRNYXRoSUM8SklUQWRkR2VuZXJhdG9yPiBKSVRBZGRJQzsKK3R5cGVkZWYgSklU
TWF0aElDPEpJVE11bEdlbmVyYXRvcj4gSklUTXVsSUM7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyMDM2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw3MiBAQAogI2lmIEVOQUJM
RShKSVQpCiAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0KQorSklUTWF0aElDSW5saW5lUmVzdWx0IEpJVE11bEdl
bmVyYXRvcjo6Z2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiBqaXQsIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSYgc3RhdGUpCit7CisgICAgLy8gV2UgZGVmYXVsdCB0byBzcGVjdWxhdGluZyBpbnQz
Mi4KKyAgICBPYnNlcnZlZFR5cGUgbGhzID0gT2JzZXJ2ZWRUeXBlKCkud2l0aEludDMyKCk7Cisg
ICAgT2JzZXJ2ZWRUeXBlIHJocyA9IE9ic2VydmVkVHlwZSgpLndpdGhJbnQzMigpOworCisgICAg
aWYgKG1fYXJpdGhQcm9maWxlKSB7CisgICAgICAgIGxocyA9IG1fYXJpdGhQcm9maWxlLT5saHNP
YnNlcnZlZFR5cGUoKTsKKyAgICAgICAgcmhzID0gbV9hcml0aFByb2ZpbGUtPnJoc09ic2VydmVk
VHlwZSgpOworICAgICAgICBpZiAobGhzLmlzRW1wdHkoKSB8fCByaHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogSUNzIHNob3VsZCBiZSBhYmxlIHRvIHJlcGF0Y2ggd2l0aG91
dCBlbWl0dGluZyBhbiBpbmxpbmUgcGF0aDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxMTAKKyAgICAgICAgICAgIGxocyA9IE9ic2Vy
dmVkVHlwZSgpLndpdGhJbnQzMigpOworICAgICAgICAgICAgcmhzID0gT2JzZXJ2ZWRUeXBlKCku
d2l0aEludDMyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobGhzLmlzT25seU5vbk51
bWJlcigpICYmIHJocy5pc09ubHlOb25OdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJ
Q0lubGluZVJlc3VsdDo6RG9udEdlbmVyYXRlOworCisgICAgaWYgKGxocy5pc09ubHlOdW1iZXIo
KSAmJiByaHMuaXNPbmx5TnVtYmVyKCkpIHsKKyAgICAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpCisgICAgICAgICAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpE
b250R2VuZXJhdGU7CisKKyAgICAgICAgaWYgKCFtX2xlZnRPcGVyYW5kLmRlZmluaXRlbHlJc051
bWJlcigpKQorICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5j
aElmTm90TnVtYmVyKG1fbGVmdCwgbV9zY3JhdGNoR1BSKSk7CisgICAgICAgIGlmICghbV9yaWdo
dE9wZXJhbmQuZGVmaW5pdGVseUlzTnVtYmVyKCkpCisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0
aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9yaWdodCwgbV9zY3JhdGNoR1BS
KSk7CisgICAgICAgIHN0YXRlLnNsb3dQYXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hJZkludDMy
KG1fbGVmdCkpOworICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNo
SWZJbnQzMihtX3JpZ2h0KSk7CisgICAgICAgIGppdC51bmJveERvdWJsZU5vbkRlc3RydWN0aXZl
KG1fbGVmdCwgbV9sZWZ0RlBSLCBtX3NjcmF0Y2hHUFIsIG1fc2NyYXRjaEZQUik7CisgICAgICAg
IGppdC51bmJveERvdWJsZU5vbkRlc3RydWN0aXZlKG1fcmlnaHQsIG1fcmlnaHRGUFIsIG1fc2Ny
YXRjaEdQUiwgbV9zY3JhdGNoRlBSKTsKKyAgICAgICAgaml0Lm11bERvdWJsZShtX3JpZ2h0RlBS
LCBtX2xlZnRGUFIpOworICAgICAgICBqaXQuYm94RG91YmxlKG1fbGVmdEZQUiwgbV9yZXN1bHQp
OworCisgICAgICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkdlbmVyYXRlZEZhc3RQ
YXRoOworICAgIH0KKworICAgIGlmICgobGhzLmlzT25seUludDMyKCkgfHwgbV9sZWZ0T3BlcmFu
ZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKSAmJiAocmhzLmlzT25seUludDMyKCkgfHwgbV9yaWdo
dE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xl
ZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkgfHwgIW1fcmlnaHRPcGVyYW5kLmlzUG9z
aXRpdmVDb25zdEludDMyKCkpOworICAgICAgICBpZiAoIW1fbGVmdE9wZXJhbmQuaXNQb3NpdGl2
ZUNvbnN0SW50MzIoKSkKKyAgICAgICAgICAgIHN0YXRlLnNsb3dQYXRoSnVtcHMuYXBwZW5kKGpp
dC5icmFuY2hJZk5vdEludDMyKG1fbGVmdCkpOworICAgICAgICBpZiAoIW1fcmlnaHRPcGVyYW5k
LmlzUG9zaXRpdmVDb25zdEludDMyKCkpCisgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBz
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihtX3JpZ2h0KSk7CisKKyAgICAgICAgaWYgKG1f
bGVmdE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSB8fCBtX3JpZ2h0T3BlcmFuZC5pc1Bv
c2l0aXZlQ29uc3RJbnQzMigpKSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyB2YXIgPSBtX2xl
ZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdEludDMyKCkgPyBtX3JpZ2h0IDogbV9sZWZ0OworICAg
ICAgICAgICAgaW50MzJfdCBjb25zdFZhbHVlID0gbV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29u
c3RJbnQzMigpID8gbV9sZWZ0T3BlcmFuZC5hc0NvbnN0SW50MzIoKSA6IG1fcmlnaHRPcGVyYW5k
LmFzQ29uc3RJbnQzMigpOworICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQo
aml0LmJyYW5jaE11bDMyKENDYWxsSGVscGVyczo6T3ZlcmZsb3csIHZhci5wYXlsb2FkR1BSKCks
IENDYWxsSGVscGVyczo6SW1tMzIoY29uc3RWYWx1ZSksIG1fc2NyYXRjaEdQUikpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJy
YW5jaE11bDMyKENDYWxsSGVscGVyczo6T3ZlcmZsb3csIG1fcmlnaHQucGF5bG9hZEdQUigpLCBt
X2xlZnQucGF5bG9hZEdQUigpLCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHN0YXRlLnNs
b3dQYXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBt
X3NjcmF0Y2hHUFIpKTsgLy8gR28gc2xvdyBpZiBwb3RlbnRpYWwgbmVnYXRpdmUgemVyby4KKyAg
ICAgICAgfQorICAgICAgICBqaXQuYm94SW50MzIobV9zY3JhdGNoR1BSLCBtX3Jlc3VsdCk7CisK
KyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVkRmFzdFBhdGg7
CisgICAgfQorCisgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVGdWxs
U25pcHBldDsKK30KKworYm9vbCBKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1bXBMaXN0LCBib29sIHNob3VsZEVtaXRQcm9m
aWxpbmcpCiB7CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAg
ICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IG1fbGVmdC5wYXlsb2FkR1BSKCkpOwpAQCAtNDcsMTIg
KzEwOSw4IEBAIHZvaWQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKIAogICAg
IEFTU0VSVCghbV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpIHx8ICFtX3JpZ2h0
T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKTsKIAotICAgIGlmICghbV9sZWZ0T3BlcmFu
ZC5taWdodEJlTnVtYmVyKCkgfHwgIW1fcmlnaHRPcGVyYW5kLm1pZ2h0QmVOdW1iZXIoKSkgewot
ICAgICAgICBBU1NFUlQoIW1fZGlkRW1pdEZhc3RQYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fZGlkRW1pdEZhc3RQYXRoID0gdHJ1ZTsKKyAgICBpZiAoIW1fbGVmdE9wZXJh
bmQubWlnaHRCZU51bWJlcigpIHx8ICFtX3JpZ2h0T3BlcmFuZC5taWdodEJlTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVD
b25zdEludDMyKCkgfHwgbV9yaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIoKSkgewog
ICAgICAgICBKU1ZhbHVlUmVncyB2YXIgPSBtX2xlZnRPcGVyYW5kLmlzUG9zaXRpdmVDb25zdElu
dDMyKCkgPyBtX3JpZ2h0IDogbV9sZWZ0OwpAQCAtNjYsMjAgKzEyNCwyMCBAQCB2b2lkIEpJVE11
bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDCiAgICAgICAgIGlmIChtdWx0aXBseVJlc3Vs
dEdQUiA9PSB2YXIucGF5bG9hZEdQUigpKQogICAgICAgICAgICAgbXVsdGlwbHlSZXN1bHRHUFIg
PSBtX3NjcmF0Y2hHUFI7CiAKLSAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQu
YnJhbmNoTXVsMzIoQ0NhbGxIZWxwZXJzOjpPdmVyZmxvdywgdmFyLnBheWxvYWRHUFIoKSwgQ0Nh
bGxIZWxwZXJzOjpJbW0zMihjb25zdE9wci5hc0NvbnN0SW50MzIoKSksIG11bHRpcGx5UmVzdWx0
R1BSKSk7CisgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hNdWwzMihD
Q2FsbEhlbHBlcnM6Ok92ZXJmbG93LCB2YXIucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6Oklt
bTMyKGNvbnN0T3ByLmFzQ29uc3RJbnQzMigpKSwgbXVsdGlwbHlSZXN1bHRHUFIpKTsKIAogICAg
ICAgICBqaXQuYm94SW50MzIobXVsdGlwbHlSZXN1bHRHUFIsIG1fcmVzdWx0KTsKLSAgICAgICAg
bV9lbmRKdW1wTGlzdC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIGVuZEp1bXBMaXN0LmFw
cGVuZChqaXQuanVtcCgpKTsKIAogICAgICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkgewotICAgICAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChub3RJbnQzMik7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVu
ZChub3RJbnQzMik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIFRyeSB0byBkbyBkb3VibGVWYXIgKiBkb3VibGUoaW50Q29uc3RhbnQpLgogICAgICAg
ICBub3RJbnQzMi5saW5rKCZqaXQpOwogICAgICAgICBpZiAoIXZhck9wci5kZWZpbml0ZWx5SXNO
dW1iZXIoKSkKLSAgICAgICAgICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5j
aElmTm90TnVtYmVyKHZhciwgbV9zY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aEp1
bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFyLCBtX3NjcmF0Y2hHUFIpKTsK
IAogICAgICAgICBqaXQudW5ib3hEb3VibGVOb25EZXN0cnVjdGl2ZSh2YXIsIG1fbGVmdEZQUiwg
bV9zY3JhdGNoR1BSLCBtX3NjcmF0Y2hGUFIpOwogCkBAIC05OCwyMyArMTU2LDIzIEBAIHZvaWQg
SklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKEMKICAgICAgICAgbGVmdE5vdEludCA9
IGppdC5icmFuY2hJZk5vdEludDMyKG1fbGVmdCk7CiAgICAgICAgIHJpZ2h0Tm90SW50ID0gaml0
LmJyYW5jaElmTm90SW50MzIobV9yaWdodCk7CiAKLSAgICAgICAgbV9zbG93UGF0aEp1bXBMaXN0
LmFwcGVuZChqaXQuYnJhbmNoTXVsMzIoQ0NhbGxIZWxwZXJzOjpPdmVyZmxvdywgbV9yaWdodC5w
YXlsb2FkR1BSKCksIG1fbGVmdC5wYXlsb2FkR1BSKCksIG1fc2NyYXRjaEdQUikpOwotICAgICAg
ICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJz
OjpaZXJvLCBtX3NjcmF0Y2hHUFIpKTsgLy8gR28gc2xvdyBpZiBwb3RlbnRpYWwgbmVnYXRpdmUg
emVyby4KKyAgICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaE11bDMyKEND
YWxsSGVscGVyczo6T3ZlcmZsb3csIG1fcmlnaHQucGF5bG9hZEdQUigpLCBtX2xlZnQucGF5bG9h
ZEdQUigpLCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQo
aml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIG1fc2NyYXRjaEdQUikpOyAvLyBH
byBzbG93IGlmIHBvdGVudGlhbCBuZWdhdGl2ZSB6ZXJvLgogCiAgICAgICAgIGppdC5ib3hJbnQz
MihtX3NjcmF0Y2hHUFIsIG1fcmVzdWx0KTsKLSAgICAgICAgbV9lbmRKdW1wTGlzdC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIGVuZEp1bXBMaXN0LmFwcGVuZChqaXQuanVtcCgpKTsKIAog
ICAgICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAg
bV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChsZWZ0Tm90SW50KTsKLSAgICAgICAgICAgIG1fc2xv
d1BhdGhKdW1wTGlzdC5hcHBlbmQocmlnaHROb3RJbnQpOwotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQobGVmdE5vdEludCk7CisgICAgICAg
ICAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChyaWdodE5vdEludCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGxlZnROb3RJbnQubGluaygmaml0KTsK
ICAgICAgICAgaWYgKCFtX2xlZnRPcGVyYW5kLmRlZmluaXRlbHlJc051bWJlcigpKQotICAgICAg
ICAgICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9s
ZWZ0LCBtX3NjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5k
KGppdC5icmFuY2hJZk5vdE51bWJlcihtX2xlZnQsIG1fc2NyYXRjaEdQUikpOwogICAgICAgICBp
ZiAoIW1fcmlnaHRPcGVyYW5kLmRlZmluaXRlbHlJc051bWJlcigpKQotICAgICAgICAgICAgbV9z
bG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9yaWdodCwgbV9z
Y3JhdGNoR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJh
bmNoSWZOb3ROdW1iZXIobV9yaWdodCwgbV9zY3JhdGNoR1BSKSk7CiAKICAgICAgICAgaml0LnVu
Ym94RG91YmxlTm9uRGVzdHJ1Y3RpdmUobV9sZWZ0LCBtX2xlZnRGUFIsIG1fc2NyYXRjaEdQUiwg
bV9zY3JhdGNoRlBSKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHJpZ2h0SXNEb3VibGUg
PSBqaXQuYnJhbmNoSWZOb3RJbnQzMihtX3JpZ2h0KTsKQEAgLTEyNCw3ICsxODIsNyBAQCB2b2lk
IEpJVE11bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDCiAKICAgICAgICAgcmlnaHROb3RJ
bnQubGluaygmaml0KTsKICAgICAgICAgaWYgKCFtX3JpZ2h0T3BlcmFuZC5kZWZpbml0ZWx5SXNO
dW1iZXIoKSkKLSAgICAgICAgICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5j
aElmTm90TnVtYmVyKG1fcmlnaHQsIG1fc2NyYXRjaEdQUikpOworICAgICAgICAgICAgc2xvd1Bh
dGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKG1fcmlnaHQsIG1fc2NyYXRj
aEdQUikpOwogCiAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShtX2xlZnQucGF5bG9h
ZEdQUigpLCBtX2xlZnRGUFIpOwogCkBAIC0xMzksNyArMTk3LDcgQEAgdm9pZCBKSVRNdWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQwogICAgIC8vIERvIGRvdWJsZVZhciAqIGRvdWJsZVZh
ci4KICAgICBqaXQubXVsRG91YmxlKG1fcmlnaHRGUFIsIG1fbGVmdEZQUik7CiAKLSAgICBpZiAo
IW1fYXJpdGhQcm9maWxlKQorICAgIGlmICghbV9hcml0aFByb2ZpbGUgfHwgIXNob3VsZEVtaXRQ
cm9maWxpbmcpCiAgICAgICAgIGppdC5ib3hEb3VibGUobV9sZWZ0RlBSLCBtX3Jlc3VsdCk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIC8vIFRoZSBJbnQ1MiBvdmVyZmxvdyBjaGVjayBiZWxvdyBpbnRl
bnRpb25hbGx5IG9taXRzIDFsbCA8PCA1MSBhcyBhIHZhbGlkIG5lZ2F0aXZlIEludDUyIHZhbHVl
LgpAQCAtMTQ5LDYgKzIwNyw3IEBAIHZvaWQgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoKEMKICAgICAgICAgY29uc3QgaW50NjRfdCBuZWdhdGl2ZVplcm9CaXRzID0gMWxsIDw8IDYz
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChtX2xlZnRG
UFIsIG1fcmVzdWx0LnBheWxvYWRHUFIoKSk7CisKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG5vdE5lZ2F0aXZlWmVybyA9IGppdC5icmFuY2g2NChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBt
X3Jlc3VsdC5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KG5lZ2F0aXZl
WmVyb0JpdHMpKTsKIAogICAgICAgICBqaXQub3IzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihBcml0aFByb2ZpbGU6Ok5lZ1plcm9Eb3VibGUpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRk
cmVzcyhtX2FyaXRoUHJvZmlsZS0+YWRkcmVzc09mQml0cygpKSk7CkBAIC0xODYsMTMgKzI0NSwx
NSBAQCB2b2lkIEpJVE11bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDCiAgICAgICAgIAog
ICAgICAgICBqaXQub3IzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcml0aFByb2ZpbGU6
OkludDUyT3ZlcmZsb3cpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhtX2FyaXRoUHJv
ZmlsZS0+YWRkcmVzc09mQml0cygpKSk7CiAKLSAgICAgICAgbV9lbmRKdW1wTGlzdC5hcHBlbmQo
bm9JbnQ1Mk92ZXJmbG93KTsKKyAgICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKG5vSW50NTJPdmVy
Zmxvdyk7CiAgICAgICAgIGlmIChtX3NjcmF0Y2hHUFIgPT0gbV9yZXN1bHQudGFnR1BSKCkgfHwg
bV9zY3JhdGNoR1BSID09IG1fcmVzdWx0LnBheWxvYWRHUFIoKSkKICAgICAgICAgICAgIGppdC5i
b3hEb3VibGUobV9sZWZ0RlBSLCBtX3Jlc3VsdCk7CiAKLSAgICAgICAgbV9lbmRKdW1wTGlzdC5h
cHBlbmQoZG9uZSk7CisgICAgICAgIGVuZEp1bXBMaXN0LmFwcGVuZChkb25lKTsKICNlbmRpZgog
ICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTXVsR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuaAkocmV2aXNpb24g
MjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDE3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQ0lubGluZVJlc3VsdC5o
IgogI2luY2x1ZGUgIlNuaXBwZXRPcGVyYW5kLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1
Y3QgTWF0aElDR2VuZXJhdGlvblN0YXRlOworCiBjbGFzcyBKSVRNdWxHZW5lcmF0b3IgewogcHVi
bGljOgorICAgIEpJVE11bEdlbmVyYXRvcigpIHsgfQorCiAgICAgSklUTXVsR2VuZXJhdG9yKFNu
aXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kLCBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQsCiAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgbGVmdCwgSlNWYWx1ZVJlZ3Mg
cmlnaHQsCiAgICAgICAgIEZQUlJlZyBsZWZ0RlBSLCBGUFJSZWcgcmlnaHRGUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCBGUFJSZWcgc2NyYXRjaEZQUiwKQEAgLTUzLDExICs1OCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVCghbV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpIHx8
ICFtX3JpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpKTsKICAgICB9CiAKLSAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CisgICAgSklUTWF0aElDSW5saW5l
UmVzdWx0IGdlbmVyYXRlSW5saW5lKENDYWxsSGVscGVycyYsIE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSYpOworICAgIGJvb2wgZ2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlzdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0p1
bXBMaXN0LCBib29sIHNob3VsZEVtaXRQcm9maWxpbmcpOwogCi0gICAgYm9vbCBkaWRFbWl0RmFz
dFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2RpZEVtaXRGYXN0UGF0aDsgfQotICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0KCkgeyByZXR1cm4gbV9lbmRKdW1wTGlzdDsgfQot
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QoKSB7IHJldHVybiBt
X3Nsb3dQYXRoSnVtcExpc3Q7IH0KKyAgICBib29sIGlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50
KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpOyB9
CisgICAgYm9vbCBpc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBt
X3JpZ2h0T3BlcmFuZC5pc1Bvc2l0aXZlQ29uc3RJbnQzMigpOyB9CiAKIHByaXZhdGU6CiAgICAg
U25pcHBldE9wZXJhbmQgbV9sZWZ0T3BlcmFuZDsKQEAgLTcwLDEwICs3NSw2IEBAIHByaXZhdGU6
CiAgICAgR1BSUmVnIG1fc2NyYXRjaEdQUjsKICAgICBGUFJSZWcgbV9zY3JhdGNoRlBSOwogICAg
IEFyaXRoUHJvZmlsZSogbV9hcml0aFByb2ZpbGU7Ci0gICAgYm9vbCBtX2RpZEVtaXRGYXN0UGF0
aCB7IGZhbHNlIH07Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1fZW5kSnVtcExpc3Q7
Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtX3Nsb3dQYXRoSnVtcExpc3Q7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzNiwxMSArMjMzNiw4
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVNdWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorQUxXQVlTX0lOTElORSBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgdW5wcm9maWxlZE11bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0KICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIApAQCAtMjM0OSwx
NCArMjM0NiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhICogYikpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHByb2ZpbGVkTXVsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVzID0gdHJ1ZSkKIHsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCisg
ICAgaWYgKHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcykKKyAgICAgICAgYXJpdGhQcm9maWxl
LT5vYnNlcnZlTEhTQW5kUkhTKG9wMSwgb3AyKTsKKwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVt
YmVyKGV4ZWMpOwogICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwogICAgIApAQCAt
MjM2NSw2ICsyMzYyLDYxIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWwoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQoreworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworCisgICAgcmV0dXJuIHVucHJvZmlsZWRNdWwoZXhlYywgZW5jb2RlZE9wMSwg
ZW5jb2RlZE9wMik7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmFsdWVNdWxOb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworCisgICAgcmV0dXJuIHVucHJvZmlsZWRNdWwoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2Rl
ZE9wMik7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVN
dWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKiBtdWxJQykKK3sKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKworICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFsdWVNdWxOb09w
dGltaXplOworICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0sIGV4ZWMtPmNvZGVCbG9j
aygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworCisgICAgcmV0dXJuIHVucHJvZmlsZWRNdWwoZXhl
YywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMik7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0dXJuIHByb2ZpbGVk
TXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsIGFyaXRoUHJvZmlsZSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGlt
aXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEpJVE11bElDKiBt
dWxJQykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIU0Fu
ZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AyKSk7CisgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkTm9PcHRpbWl6ZTsKKyAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVj
LT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKworICAgIHJldHVybiBwcm9maWxl
ZE11bChleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCBhcml0aFByb2ZpbGUsIGZhbHNlKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2Zp
bGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBK
SVRNdWxJQyopCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4gcHJvZmlsZWRNdWwoZXhl
YywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYXJpdGhQcm9maWxlKTsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjAzNjY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAg
dHlwZWRlZiBjaGFyKiBVbnVzZWRQdHI7CiAgICAgSWNmOiBJbmxpbmVDYWxsRnJhbWUqCiAgICAg
SWRjOiBjb25zdCBJZGVudGlmaWVyKgogICAgIEo6IEVuY29kZWRKU1ZhbHVlCi0gICAgSmFpYzog
SklUQWRkSUMqCisgICAgTWljOiBKSVRNYXRoSUMqIChjYW4gYmUgSklUQWRkSUMqLCBKSVRNdWxJ
QyosIGV0YykuCiAgICAgSmNwOiBjb25zdCBKU1ZhbHVlKgogICAgIEpzYzogSlNTY29wZSoKICAg
ICBKc2Y6IEpTRnVuY3Rpb24qCkBAIC0xMzcsOCArMTM3LDggQEAgdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJB
VElPTiAqSl9KSVRPcGVyYXRpb25fRUpKQnkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRf
T1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkFycCkoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBBcml0aFByb2ZpbGUqKTsKLXR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkFycEphaWMpKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQXJpdGhQcm9maWxlKiwg
SklUQWRkSUMqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklU
T3BlcmF0aW9uX0VKSkphaWMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgSklUQWRkSUMqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04g
KkpfSklUT3BlcmF0aW9uX0VKSkFycE1pYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBBcml0aFByb2ZpbGUqLCB2b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpNaWMpKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwogdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9O
ICpKX0pJVE9wZXJhdGlvbl9FSnNzUmVvKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cE9i
amVjdCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVy
YXRpb25fRUpzc1Jlb0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHBPYmplY3QqLCBK
U1N0cmluZyopOwpAQCAtNDE5LDYgKzQxOSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlQWRkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm9PcHRpbWl6ZShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
LCBKSVRBZGRJQyopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVNdWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElD
KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZU11bE5vT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6
ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqLCBKSVRNdWxJQyopIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE5vT3B0aW1p
emUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiwgSklUTXVsSUMqKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MiwgQXJpdGhQcm9maWxlKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZVN1YihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJp
dGhQcm9maWxlKikgV1RGX0lOVEVSTkFMOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>284511</attachid>
            <date>2016-07-25 11:54:49 -0700</date>
            <delta_ts>2016-07-25 11:54:49 -0700</delta_ts>
            <desc>benchmarks</desc>
            <filename>scratch</filename>
            <type>application/octet-stream</type>
            <size>6080</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgS3Jha2VuIG9uIFNhYW1zLU1hY0Jvb2stUHJvIChNYWNCb29r
UHJvMTEsMykuCgpWTXMgdGVzdGVkOgoib2ciIGF0IC9Wb2x1bWVzL0RhdGEvV0svYi9PcGVuU291
cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2UvanNjIChyMjAzNjY3KQoiY2hhbmdlIiBhdCAvVm9sdW1l
cy9EYXRhL1dLL2EvT3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlL2pzYyAocjIwMzY2NykK
CkNvbGxlY3RlZCAyMCBzYW1wbGVzIHBlciBiZW5jaG1hcmsvVk0sIHdpdGggMjAgVk0gaW52b2Nh
dGlvbnMgcGVyIGJlbmNobWFyay4gRW1pdHRlZCBhIGNhbGwgdG8gZ2MoKSBiZXR3ZWVuIHNhbXBs
ZQptZWFzdXJlbWVudHMuIFVzZWQgMSBiZW5jaG1hcmsgaXRlcmF0aW9uIHBlciBWTSBpbnZvY2F0
aW9uIGZvciB3YXJtLXVwLiBVc2VkIHRoZSBqc2Mtc3BlY2lmaWMgcHJlY2lzZVRpbWUoKQpmdW5j
dGlvbiB0byBnZXQgbWljcm9zZWNvbmQtbGV2ZWwgdGltaW5nLiBSZXBvcnRpbmcgYmVuY2htYXJr
IGV4ZWN1dGlvbiB0aW1lcyB3aXRoIDk1JSBjb25maWRlbmNlIGludGVydmFscyBpbgptaWxsaXNl
Y29uZHMuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2cg
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKCmFpLWFzdGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NC43MDUr
LTEuMjc5ICAgICAgICAgICAgIDg0LjAxNystMS4zODEgICAgICAgICAKYXVkaW8tYmVhdC1kZXRl
Y3Rpb24gICAgICAgICAgICAgICAgICAgIDM5LjUwMCstMC4yNzQgICAgICBeICAgICAgMzUuODU3
Ky0wLjEzMSAgICAgICAgIF4gZGVmaW5pdGVseSAxLjEwMTZ4IGZhc3RlcgphdWRpby1kZnQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOTYuNzU2Ky0xLjMwNiAgICAgICAgICAgICA5Ni4w
MDErLTAuNzg1ICAgICAgICAgCmF1ZGlvLWZmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyOC4yNjYrLTAuMzE0ICAgICAgICAgICAgIDI3LjkzMCstMC4xNjkgICAgICAgICAgIG1pZ2h0
IGJlIDEuMDEyMHggZmFzdGVyCmF1ZGlvLW9zY2lsbGF0b3IgICAgICAgICAgICAgICAgICAgICAg
ICA0Ni4yOTkrLTAuMzgxICAgICAgPyAgICAgIDQ2Ljk5MSstMC40NzIgICAgICAgICA/IG1pZ2h0
IGJlIDEuMDE1MHggc2xvd2VyCmltYWdpbmctZGFya3Jvb20gICAgICAgICAgICAgICAgICAgICAg
ICA1Ny44MjYrLTAuNDA1ICAgICAgICAgICAgIDU3LjYyMSstMC4xOTMgICAgICAgICAKaW1hZ2lu
Zy1kZXNhdHVyYXRlICAgICAgICAgICAgICAgICAgICAgIDQzLjAxNCstMS4yMTYgICAgICA/ICAg
ICAgNDUuNDQ1Ky00LjQ2MSAgICAgICAgID8gbWlnaHQgYmUgMS4wNTY1eCBzbG93ZXIKaW1hZ2lu
Zy1nYXVzc2lhbi1ibHVyICAgICAgICAgICAgICAgICAgIDU3LjI5MystMS4wMDEgICAgICA/ICAg
ICAgNTcuNDI4Ky0wLjg0NSAgICAgICAgID8KanNvbi1wYXJzZS1maW5hbmNpYWwgICAgICAgICAg
ICAgICAgICAgIDMyLjcyMSstMC4yOTUgICAgICA/ICAgICAgMzMuMTg0Ky0wLjgzMCAgICAgICAg
ID8gbWlnaHQgYmUgMS4wMTQyeCBzbG93ZXIKanNvbi1zdHJpbmdpZnktdGluZGVyYm94ICAgICAg
ICAgICAgICAgIDIyLjE2MystMC42MzkgICAgICA/ICAgICAgMjIuNTQxKy0wLjcwOSAgICAgICAg
ID8gbWlnaHQgYmUgMS4wMTcxeCBzbG93ZXIKc3RhbmZvcmQtY3J5cHRvLWFlcyAgICAgICAgICAg
ICAgICAgICAgIDM4LjA2OSstMC41MTggICAgICBeICAgICAgMzQuODMyKy0wLjI5OSAgICAgICAg
IF4gZGVmaW5pdGVseSAxLjA5Mjl4IGZhc3RlcgpzdGFuZm9yZC1jcnlwdG8tY2NtICAgICAgICAg
ICAgICAgICAgICAgMzIuNDA4Ky0xLjIxMSAgICAgID8gICAgICAzMi41NTArLTAuNTg1ICAgICAg
ICAgPwpzdGFuZm9yZC1jcnlwdG8tcGJrZGYyICAgICAgICAgICAgICAgICAgOTIuODM0Ky0xLjQy
MSAgICAgIF4gICAgICA4OC42OTArLTAuNzYyICAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDQ2N3gg
ZmFzdGVyCnN0YW5mb3JkLWNyeXB0by1zaGEyNTYtaXRlcmF0aXZlICAgICAgICAzMC42MzArLTEu
NjQ5ICAgICAgICAgICAgIDI5LjQxMystMC41OTYgICAgICAgICAgIG1pZ2h0IGJlIDEuMDQxNHgg
ZmFzdGVyCgo8YXJpdGhtZXRpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAuMTc3Ky0w
LjI1MCAgICAgIF4gICAgICA0OS40NjQrLTAuMzE2ICAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDE0
NHggZmFzdGVyCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpWTXMgdGVzdGVkOgoi
b2ciIGF0IC9Wb2x1bWVzL0RhdGEvV0svYi9PcGVuU291cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2Uv
anNjIChyMjAzNjY3KQoiY2hhbmdlIiBhdCAvVm9sdW1lcy9EYXRhL1dLL2EvT3BlblNvdXJjZS9X
ZWJLaXRCdWlsZC9SZWxlYXNlL2pzYyAocjIwMzY2NykKCkNvbGxlY3RlZCA2IHNhbXBsZXMgcGVy
IGJlbmNobWFyay9WTSwgd2l0aCA2IFZNIGludm9jYXRpb25zIHBlciBiZW5jaG1hcmsuIEVtaXR0
ZWQgYSBjYWxsIHRvIGdjKCkgYmV0d2VlbgpzYW1wbGUgbWVhc3VyZW1lbnRzLiBVc2VkIDEgYmVu
Y2htYXJrIGl0ZXJhdGlvbiBwZXIgVk0gaW52b2NhdGlvbiBmb3Igd2FybS11cC4gVXNlZCB0aGUg
anNjLXNwZWNpZmljCnByZWNpc2VUaW1lKCkgZnVuY3Rpb24gdG8gZ2V0IG1pY3Jvc2Vjb25kLWxl
dmVsIHRpbWluZy4gUmVwb3J0aW5nIGJlbmNobWFyayBleGVjdXRpb24gdGltZXMgd2l0aCA5NSUK
Y29uZmlkZW5jZSBpbnRlcnZhbHMgaW4gbWlsbGlzZWNvbmRzLgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2cgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKT2N0YW5lOgogICBlbmNyeXB0ICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMTQ4NDMrLTAuMDAyMzUgICAgPyAgICAgMC4xNDg2NCst
MC4wMDM4NSAgICAgICA/CiAgIGRlY3J5cHQgICAgICAgICAgICAgICAgICAgICAgICAgMi42NjI1
MCstMC4wMjc0NyAgICA/ICAgICAyLjY5ODMzKy0wLjA2NTc3ICAgICAgID8gbWlnaHQgYmUgMS4w
MTM1eCBzbG93ZXIKICAgZGVsdGFibHVlICAgICAgICAgICAgICB4MiAgICAgICAwLjEyOTI2Ky0w
LjAwMzM2ICAgICAgICAgIDAuMTI0ODgrLTAuMDAxMjUgICAgICAgICBtaWdodCBiZSAxLjAzNTF4
IGZhc3RlcgogICBlYXJsZXkgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjczNDMrLTAuMDAx
OTIgICAgPyAgICAgMC4yNzM3MCstMC4wMDQ0MCAgICAgICA/CiAgIGJveWVyICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNC42ODc5NistMC4xNzI3MyAgICA/ICAgICA0Ljc1MjQ0Ky0wLjE1MzU4
ICAgICAgID8gbWlnaHQgYmUgMS4wMTM4eCBzbG93ZXIKICAgbmF2aWVyLXN0b2tlcyAgICAgICAg
ICB4MiAgICAgICA0LjcwODI3Ky0wLjAyNjQyICAgID8gICAgIDQuNzEzNjUrLTAuMDMxNjEgICAg
ICAgPwogICByYXl0cmFjZSAgICAgICAgICAgICAgIHgyICAgICAgIDAuNzY1NzcrLTAuMDA0NjUg
ICAgICAgICAgMC43NTg2MistMC4wMDU1NSAgICAgICAKICAgcmljaGFyZHMgICAgICAgICAgICAg
ICB4MiAgICAgICAwLjA3ODI0Ky0wLjAwMDk4ICAgID8gICAgIDAuMDc4NTUrLTAuMDAxMzkgICAg
ICAgPwogICBzcGxheSAgICAgICAgICAgICAgICAgIHgyICAgICAgIDAuMzM0NDgrLTAuMDAzODcg
ICAgICAgICAgMC4zMjg2NSstMC4wMDQ2MyAgICAgICAgIG1pZ2h0IGJlIDEuMDE3N3ggZmFzdGVy
CiAgIHJlZ2V4cCAgICAgICAgICAgICAgICAgeDIgICAgICAxNS4xMTYwOSstMC4xNjU3MCAgICA/
ICAgIDE1LjE3NjczKy0wLjIxODM0ICAgICAgID8KICAgcGRmanMgICAgICAgICAgICAgICAgICB4
MiAgICAgIDM3LjA3MDYzKy0wLjU3MTIwICAgID8gICAgMzcuMDgyODArLTAuMzIxMjMgICAgICAg
PwogICBtYW5kcmVlbCAgICAgICAgICAgICAgIHgyICAgICAgNDAuNjQ0OTYrLTAuOTgwNTUgICAg
ICAgICA0MC41MTYxOCstMC4xNDI2MSAgICAgICAKICAgZ2JlbXUgICAgICAgICAgICAgICAgICB4
MiAgICAgIDI4LjYwNTg4Ky0wLjc1MzAwICAgICAgICAgMjguMTQwMzgrLTAuMjg5OTggICAgICAg
ICBtaWdodCBiZSAxLjAxNjV4IGZhc3RlcgogICBjbG9zdXJlICAgICAgICAgICAgICAgICAgICAg
ICAgIDAuNDc5MDUrLTAuMDA0MjQgICAgICAgICAgMC40Nzc5MistMC4wMDg1NyAgICAgICAKICAg
anF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICA2LjMwNDU0Ky0wLjAxODc3ICAgID8gICAg
IDYuMzY0NDErLTAuMDUyNzQgICAgICAgPwogICBib3gyZCAgICAgICAgICAgICAgICAgIHgyICAg
ICAgIDguOTE1OTUrLTAuMTk1NjIgICAgICAgICAgOC43NzkyMCstMC4wNzg4NCAgICAgICAgIG1p
Z2h0IGJlIDEuMDE1NnggZmFzdGVyCiAgIHpsaWIgICAgICAgICAgICAgICAgICAgeDIgICAgIDM1
NS4yOTQ3MistNC42ODQ2OCAgICBeICAgMzQ3LjMzMTg3Ky0zLjA5MDg0ICAgICAgIF4gZGVmaW5p
dGVseSAxLjAyMjl4IGZhc3RlcgogICB0eXBlc2NyaXB0ICAgICAgICAgICAgIHgyICAgICA1ODEu
NzcyMDkrLTMuNTc2ODcgICAgPyAgIDU4Ni42ODQ4NistOC43Njk2OCAgICAgICA/CgogICA8Z2Vv
bWV0cmljPiAgICAgICAgICAgICAgICAgICAgIDQuODI4NjMrLTAuMDE2NzEgICAgXiAgICAgNC44
MDIxMCstMC4wMDkzMCAgICAgICBeIGRlZmluaXRlbHkgMS4wMDU1eCBmYXN0ZXIKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9nICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkFzbUJlbmNoOgog
ICBiaWdmaWIuY3BwICAgICAgICAgICAgICAgICAgICAgNDE2Ljc0OTQrLTkuNTY5NyAgICAgICAg
ICA0MTAuNzE5OSstOS41OTc5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE0N3ggZmFzdGVyCiAgIGNy
YXkuYyAgICAgICAgICAgICAgICAgICAgICAgICAzNjYuOTU2MystNS42MDU1ICAgICAgICAgIDM2
Ni4xMjgyKy00LjEzODEgICAgICAgIAogICBkcnkuYyAgICAgICAgICAgICAgICAgICAgICAgICAg
NDA5LjczMzUrLTExLjE0NDMgICAgPyAgICA0NDQuODg1MCstOTYuOTUxMiAgICAgICA/IG1pZ2h0
IGJlIDEuMDg1OHggc2xvd2VyCiAgIEZsb2F0TU0uYyAgICAgICAgICAgICAgICAgICAgICA3MDAu
MjQzNCstMzcuMDAyOCAgICAgICAgIDY5OS44NjkzKy0zNS4zNzMzICAgICAgIAogICBnY2MtbG9v
cHMuY3BwICAgICAgICAgICAgICAgICAzNDE0LjEzNjArLTIxLjQ1MDAgICAgPyAgIDM0MzYuNTI3
OCstMjYuNzExNyAgICAgICA/CiAgIG4tYm9keS5jICAgICAgICAgICAgICAgICAgICAgICA3NjMu
NTIzOSstNS4xODUwICAgICAgICAgIDc2MC44NjEyKy0yLjcyNjYgICAgICAgIAogICBRdWlja3Nv
cnQuYyAgICAgICAgICAgICAgICAgICAgMzc4LjUxMzMrLTQuMjEyMSAgICAgPyAgICAzODAuMzYz
NistNC41MTE0ICAgICAgICA/CiAgIHN0ZXBhbm92X2NvbnRhaW5lci5jcHAgICAgICAgIDMyMzEu
NjI3NystNDAuOTkwMyAgICA/ICAgMzIzMS44MTM1Ky0yOS40MzI4ICAgICAgID8KICAgVG93ZXJz
LmMgICAgICAgICAgICAgICAgICAgICAgIDI1Mi45NjEyKy0xLjk5NzkgICAgICAgICAgMjUyLjQ1
NDUrLTIuMjUwOSAgICAgICAgCgogICA8Z2VvbWV0cmljPiAgICAgICAgICAgICAgICAgICAgNjg5
Ljc1NDMrLTUuOTE3MiAgICAgPyAgICA2OTQuMTYwNistMTMuMjQzOCAgICAgICA/IG1pZ2h0IGJl
IDEuMDA2NHggc2xvd2VyCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvZyAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIApHZW9tZWFuIG9mIHByZWZlcnJlZCBtZWFuczoKICAgPHNjYWxlZC1yZXN1
bHQ+ICAgICAgICAgICAgICAgIDE4Mi40OTY1Ky0wLjY5OTcgICAgID8gICAgMTgyLjU3MDMrLTEu
NzExNSAgICAgICAgPyBtaWdodCBiZSAxLjAwMDR4IHNsb3dlcgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>