<?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>190057</bug_id>
          
          <creation_ts>2018-09-27 14:43:19 -0700</creation_ts>
          <short_desc>Verify the contents of AssemblerBuffer on arm64e</short_desc>
          <delta_ts>2018-09-28 09:49:34 -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>InRadar</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>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1464166</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 14:43:19 -0700</bug_when>
    <thetext>....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464167</commentid>
    <comment_count>1</comment_count>
      <attachid>351006</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 14:45:39 -0700</bug_when>
    <thetext>Created attachment 351006
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464213</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 16:47:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/38916630&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464225</commentid>
    <comment_count>3</comment_count>
      <attachid>351025</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 17:14:19 -0700</bug_when>
    <thetext>Created attachment 351025
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464234</commentid>
    <comment_count>4</comment_count>
      <attachid>351029</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 17:25:20 -0700</bug_when>
    <thetext>Created attachment 351029
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464235</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-27 17:27:07 -0700</bug_when>
    <thetext>Attachment 351029 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:964:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:992:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:196:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:197:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:198:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/ARM64Assembler.h:333:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AssemblerBuffer.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AssemblerBuffer.h:178:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
Total errors found: 8 in 13 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>1464247</commentid>
    <comment_count>6</comment_count>
      <attachid>351029</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-09-27 18:10:57 -0700</bug_when>
    <thetext>Comment on attachment 351029
patch

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

LGTM but I would like to read through it one more time tonight before r+ing.  Some comments and suggestions for now.

&gt; Source/JavaScriptCore/assembler/ARM64Assembler.h:329
&gt; +    ARM64Assembler(
&gt; +#if CPU(ARM64E)
&gt; +        unsigned randomNumber
&gt; +#endif 
&gt; +            )

nit: How about express this as:
    ARM64Assembler(unsigned randomNumber = 0)

I think the compiler will optimize the argument out if not used.

&gt; Source/JavaScriptCore/assembler/ARM64Assembler.h:337
&gt;      {
&gt;      }

... and add UNUSED_PARAM(randomNumber) here?

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:994
&gt; +        , m_assembler(
&gt; +#if CPU(ARM64E)
&gt; +              random()
&gt; +#endif
&gt; +                )

nit: this looks so wonky.  IMHO, I think it&apos;s easier to read if you express it as:

#if CPU(ARM64E)
        , m_assembler(random())
#else
        , m_assembler()
#endif

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:174
&gt; +        AssemblerBuffer(
&gt; +#if CPU(ARM64E)
&gt; +            unsigned randomNumber
&gt; +#endif
&gt; +                )

nit: consider expressing as:

        AssemblerBuffer(unsigned randomNumber = 0)

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:181
&gt;          {
&gt;          }

... and add UNUSED_PARAM(randomNumber) here?

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:291
&gt; +        ARM64EHash hash() const
&gt; +        {
&gt; +            return m_hash;
&gt; +        }

nit: just make this one line:
        ARM64EHash hash() const { return hash; }

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:294
&gt; +#if !CPU(ARM64) // If we were to define this on arm64e, we&apos;d need a way to update the hash as we wrote directly into the buffer.

/wrote/write/.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:298
&gt; +        void* data() const
&gt; +        {
&gt; +            return m_storage.buffer();
&gt; +        }

Ditto: can be single line.

&gt; Source/JavaScriptCore/assembler/LinkBuffer.cpp:211
&gt; +#if CPU(ARM64E)
&gt; +        unsigned index = readPtr;
&gt; +#endif
&gt; +
&gt; +        for (size_t i = 0; i &lt; bytes; i += sizeof(InstructionType)) {
&gt; +            InstructionType insn = *src++;
&gt; +#if CPU(ARM64E)
&gt; +            verifyUncompactedHash.update(insn, index);
&gt; +            index += sizeof(InstructionType);
&gt; +#endif
&gt; +            *dst++ = insn;
&gt; +        }

How about put this whole thing in #if CPU(ARM64E), and have an #else
    memcpy(dst, src, bytes);

&gt; Source/JavaScriptCore/assembler/LinkBuffer.cpp:220
&gt; +#if CPU(ARM64E)
&gt; +    if (verifyUncompactedHash.hash() != assemblerBufferHash.hash()) {
&gt; +        dataLogLn(&quot;Hashes don&apos;t match: &quot;, RawPointer(bitwise_cast&lt;void*&gt;(verifyUncompactedHash.hash())), &quot; &quot;, RawPointer(bitwise_cast&lt;void*&gt;(assemblerBufferHash.hash())));
&gt; +        dataLogLn(&quot;Crashing!&quot;);
&gt; +        CRASH();
&gt; +    }
&gt; +#endif

You can move this blob into the #if CPU(ARM64E) blob above right after the for loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464252</commentid>
    <comment_count>7</comment_count>
      <attachid>351029</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 18:36:33 -0700</bug_when>
    <thetext>Comment on attachment 351029
patch

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

&gt;&gt; Source/JavaScriptCore/assembler/ARM64Assembler.h:329
&gt;&gt; +            )
&gt; 
&gt; nit: How about express this as:
&gt;     ARM64Assembler(unsigned randomNumber = 0)
&gt; 
&gt; I think the compiler will optimize the argument out if not used.

I think that&apos;s worse than this.

&gt;&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:174
&gt;&gt; +                )
&gt; 
&gt; nit: consider expressing as:
&gt; 
&gt;         AssemblerBuffer(unsigned randomNumber = 0)

same</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464253</commentid>
    <comment_count>8</comment_count>
      <attachid>351029</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 18:44:00 -0700</bug_when>
    <thetext>Comment on attachment 351029
patch

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

&gt;&gt; Source/JavaScriptCore/assembler/LinkBuffer.cpp:211
&gt;&gt; +        }
&gt; 
&gt; How about put this whole thing in #if CPU(ARM64E), and have an #else
&gt;     memcpy(dst, src, bytes);

I&apos;d rather have this code be shared on all archs that do branch compaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464255</commentid>
    <comment_count>9</comment_count>
      <attachid>351035</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 18:45:31 -0700</bug_when>
    <thetext>Created attachment 351035
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464257</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-27 18:48:47 -0700</bug_when>
    <thetext>Attachment 351035 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:964:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:196:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:197:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:198:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/ARM64Assembler.h:333:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AssemblerBuffer.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AssemblerBuffer.h:178:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
Total errors found: 7 in 13 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>1464283</commentid>
    <comment_count>11</comment_count>
      <attachid>351035</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-09-27 20:49:56 -0700</bug_when>
    <thetext>Comment on attachment 351035
patch

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

r=me with remaining issues resolved.

I think you missed the ARMv7Assembler::fillNops().  Incidentally, the ARMv7 port does use the copy function in fillNops() and needs a fix.

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:973
&gt;          AssemblerType::fillNops(static_cast&lt;char*&gt;(buffer.data()) + startCodeSize, memoryToFillWithNopsInBytes, isCopyingToExecutableMemory);

I think you need to update this to use the new fillNops() with memcpy.  Strange, how did this build for x86_64 or any other non ARM64 build?  Oh, I get it.  The copyFunction argument&apos;s type is templated, and on all those platforms, the argument happens to be unused.  Hence, x86_64 doesn&apos;t care that we passed it a boolean instead.  I think it&apos;s misleading to leave this code in this state.  We should make it pass memcpy for the 3rd arg here.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:174
&gt; +                )

Fix indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464288</commentid>
    <comment_count>12</comment_count>
      <attachid>351048</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-27 21:15:09 -0700</bug_when>
    <thetext>Created attachment 351048
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464289</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-27 21:16:14 -0700</bug_when>
    <thetext>Attachment 351048 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:964:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:196:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:197:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.cpp:198:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/assembler/ARM64Assembler.h:333:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AssemblerBuffer.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 6 in 14 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>1464309</commentid>
    <comment_count>14</comment_count>
      <attachid>351048</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-27 22:34:45 -0700</bug_when>
    <thetext>Comment on attachment 351048
patch for landing

Clearing flags on attachment: 351048

Committed r236589: &lt;https://trac.webkit.org/changeset/236589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464310</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-27 22:34:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464414</commentid>
    <comment_count>16</comment_count>
    <who name="Guillaume Emont">guijemont</who>
    <bug_when>2018-09-28 09:49:34 -0700</bug_when>
    <thetext>This breaks compilation on Armv7. I created Bug 190080 to address this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351006</attachid>
            <date>2018-09-27 14:45:39 -0700</date>
            <delta_ts>2018-09-27 17:14:19 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>26668</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg5MTMyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTg5MTMyLmpzCShyZXZpc2lvbiAyMzY1MTgpCisrKyBKU1Rl
c3RzL3N0cmVzcy9yZWdyZXNzLTE4OTEzMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUg
QEAKKy8vQCBza2lwIGlmICRtZW1vcnlMaW1pdGVkCisKIHRyeSB7CiAgICAgdmFyIGEwID0gJ1x1
ZDgwMSc7CiAgICAgdmFyIGExID0gW107CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZpc2lvbiAyMzY1MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NTYsMTYgKzE1NTYsMTQgQEAgcHVibGljOgogICAgICAgICBpbnNuKG5vcFBzZXVk
bygpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwg
c2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9p
ZCogYmFzZSwgc2l6ZV90IHNpemUsIENvcHlGdW5jdGlvbiBjb3B5KQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIShzaXplICUgc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgICAgIHNpemVf
dCBuID0gc2l6ZSAvIHNpemVvZihpbnQzMl90KTsKICAgICAgICAgZm9yIChpbnQzMl90KiBwdHIg
PSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oYmFzZSk7IG4tLTspIHsKICAgICAgICAgICAgIGludCBp
bnNuID0gbm9wUHNldWRvKCk7Ci0gICAgICAgICAgICBpZiAoaXNDb3B5aW5nVG9FeGVjdXRhYmxl
TWVtb3J5KQotICAgICAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkocHRyKyssICZpbnNuLCBz
aXplb2YoaW50KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVtY3B5KHB0
cisrLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgY29weShwdHIrKywgJmluc24s
IHNpemVvZihpbnQpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTI1NzAsNyArMjU2OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGIubV9vZmZzZXQgLSBhLm1fb2Zmc2V0OwogICAg
IH0KIAotICAgIHZvaWQqIHVubGlua2VkQ29kZSgpIHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsg
fQorICAgIC8vdm9pZCogdW5saW5rZWRDb2RlKCkgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9
CiAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuY29kZVNpemUo
KTsgfQogCiAgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoQXNzZW1ibGVy
TGFiZWwgY2FsbCkKQEAgLTI2MDgsMTIgKzI2MDYsMTIgQEAgcHVibGljOgogICAgICAgICBtX2p1
bXBzVG9MaW5rLmFwcGVuZChMaW5rUmVjb3JkKGZyb20ubV9vZmZzZXQsIHRvLm1fb2Zmc2V0LCB0
eXBlLCBjb25kaXRpb24sIGJpdE51bWJlciwgY29tcGFyZVJlZ2lzdGVyKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBsaW5rSnVtcChBc3NlbWJsZXJMYWJlbCBmcm9tLCB2b2lkKiBleGVjdXRhYmxlQ29k
ZSwgQXNzZW1ibGVyTGFiZWwgdG8pCi0gICAgewotICAgICAgICBBU1NFUlQoZnJvbS5pc1NldCgp
KTsKLSAgICAgICAgQVNTRVJUKHRvLmlzU2V0KCkpOwotICAgICAgICByZWxpbmtKdW1wT3JDYWxs
PGZhbHNlPihhZGRyZXNzT2YoZnJvbSksIGFkZHJlc3NPZihleGVjdXRhYmxlQ29kZSwgZnJvbSks
IGFkZHJlc3NPZih0bykpOwotICAgIH0KKyAgICAvL3ZvaWQgbGlua0p1bXAoQXNzZW1ibGVyTGFi
ZWwgZnJvbSwgdm9pZCogZXhlY3V0YWJsZUNvZGUsIEFzc2VtYmxlckxhYmVsIHRvKQorICAgIC8v
eworICAgIC8vICAgIEFTU0VSVChmcm9tLmlzU2V0KCkpOworICAgIC8vICAgIEFTU0VSVCh0by5p
c1NldCgpKTsKKyAgICAvLyAgICByZWxpbmtKdW1wT3JDYWxsPGZhbHNlPihhZGRyZXNzT2YoZnJv
bSksIGFkZHJlc3NPZihleGVjdXRhYmxlQ29kZSwgZnJvbSksIGFkZHJlc3NPZih0bykpOworICAg
IC8vfQogICAgIAogICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEFzc2VtYmxl
ckxhYmVsIGZyb20sIHZvaWQqIHRvKQogICAgIHsKQEAgLTI5NjcsMzAgKzI5NjUsMzIgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9qdW1wc1RvTGluazsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBBTFdBWVNfSU5MSU5FIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBmcm9t
LCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb244LCB1aW50OF90KiB0bykKKyAgICB0eXBl
ZGVmIHZvaWQqICgqQ29weUZ1bmN0aW9uKSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CisK
KyAgICBzdGF0aWMgdm9pZCBBTFdBWVNfSU5MSU5FIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1
aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb244LCB1aW50OF90KiB0
bywgQ29weUZ1bmN0aW9uIGNvcHkpCiAgICAgewogICAgICAgICBjb25zdCBpbnQqIGZyb21JbnN0
cnVjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50Kj4oZnJvbUluc3RydWN0aW9uOCk7
CiAgICAgICAgIHN3aXRjaCAocmVjb3JkLmxpbmtUeXBlKCkpIHsKICAgICAgICAgY2FzZSBMaW5r
SnVtcE5vQ29uZGl0aW9uOgotICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KHJlaW50
ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8pOworICAgICAgICAg
ICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZy
b21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTGlua0p1bXBDb25kaXRpb25EaXJlY3Q6Ci0gICAgICAgICAgICBsaW5rQ29uZGl0aW9uYWxC
cmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZy
b20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvKTsKKyAgICAgICAgICAgIGxpbmtDb25kaXRpb25hbEJy
YW5jaDx0cnVlPihyZWNvcmQuY29uZGl0aW9uKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJv
bSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTGlua0p1bXBDb25kaXRpb246Ci0gICAgICAgICAgICBsaW5rQ29uZGl0aW9uYWxC
cmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihm
cm9tKSAtIDEsIGZyb21JbnN0cnVjdGlvbiAtIDEsIHRvKTsKKyAgICAgICAgICAgIGxpbmtDb25k
aXRpb25hbEJyYW5jaDxmYWxzZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0
PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8sIGNvcHkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb21wYXJlQW5kQnJhbmNoRGlyZWN0
OgotICAgICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlv
bigpLCByZWNvcmQuaXM2NEJpdCgpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8pOworICAgICAgICAgICAg
bGlua0NvbXBhcmVBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuaXM2
NEJpdCgpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4o
ZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTGlua0p1bXBDb21wYXJlQW5kQnJhbmNoOgotICAgICAgICAgICAgbGlua0Nv
bXBhcmVBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3JkLmlzNjRCaXQo
KSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20p
IC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8pOworICAgICAgICAgICAgbGlua0NvbXBhcmVB
bmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3JkLmlzNjRCaXQoKSwgcmVj
b3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwg
ZnJvbUluc3RydWN0aW9uIC0gMSwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTGlua0p1bXBUZXN0Qml0RGlyZWN0OgotICAgICAgICAgICAgbGlua1Rlc3RBbmRC
cmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuYml0TnVtYmVyKCksIHJlY29y
ZC5jb21wYXJlUmVnaXN0ZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSwgZnJvbUlu
c3RydWN0aW9uLCB0byk7CisgICAgICAgICAgICBsaW5rVGVzdEFuZEJyYW5jaDx0cnVlPihyZWNv
cmQuY29uZGl0aW9uKCksIHJlY29yZC5iaXROdW1iZXIoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3Rl
cigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvLCBj
b3B5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtKdW1wVGVzdEJpdDoK
LSAgICAgICAgICAgIGxpbmtUZXN0QW5kQnJhbmNoPGZhbHNlPihyZWNvcmQuY29uZGl0aW9uKCks
IHJlY29yZC5iaXROdW1iZXIoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJl
dF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8pOworICAgICAg
ICAgICAgbGlua1Rlc3RBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3Jk
LmJpdE51bWJlcigpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50Kj4oZnJvbSkgLSAxLCBmcm9tSW5zdHJ1Y3Rpb24gLSAxLCB0bywgY29weSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMzAzMiw3ICszMDMyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHRl
bXBsYXRlPGJvb2wgaXNDYWxsPgotICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wT3JDYWxsKGludCog
ZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2
b2lkIGxpbmtKdW1wT3JDYWxsKGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24s
IHZvaWQqIHRvLCBDb3B5RnVuY3Rpb24gY29weSA9IHBlcmZvcm1KSVRNZW1jcHkpCiAgICAgewog
ICAgICAgICBib29sIGxpbms7CiAgICAgICAgIGludCBpbW0yNjsKQEAgLTMwNDgsMTEgKzMwNDgs
MTEgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQp
ID09IG9mZnNldCk7CiAKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1t
ZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKLSAgICAgICAgcGVyZm9y
bUpJVE1lbWNweShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBjb3B5KGZyb20s
ICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0RpcmVj
dD4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ29tcGFyZUFuZEJyYW5jaChDb25kaXRpb24gY29uZGl0
aW9uLCBib29sIGlzNjRCaXQsIFJlZ2lzdGVySUQgcnQsIGludCogZnJvbSwgY29uc3QgaW50KiBm
cm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtDb21wYXJlQW5k
QnJhbmNoKENvbmRpdGlvbiBjb25kaXRpb24sIGJvb2wgaXM2NEJpdCwgUmVnaXN0ZXJJRCBydCwg
aW50KiBmcm9tLCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5j
dGlvbiBjb3B5ID0gcGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBAIC0zMDY0LDIwICszMDY0LDIw
IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IGlzRGlyZWN0KSB7CiAg
ICAgICAgICAgICBpbnQgaW5zbiA9IGNvbXBhcmVBbmRCcmFuY2hJbW1lZGlhdGUoaXM2NEJpdCA/
IERhdGFzaXplXzY0IDogRGF0YXNpemVfMzIsIGNvbmRpdGlvbiA9PSBDb25kaXRpb25ORSwgc3Rh
dGljX2Nhc3Q8aW50PihvZmZzZXQpLCBydCk7Ci0gICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBjb3B5KGZyb20sICZpbnNu
LCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CiAgICAgICAgICAg
ICAgICAgaW5zbiA9IG5vcFBzZXVkbygpOwotICAgICAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1j
cHkoZnJvbSArIDEsICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgY29weShm
cm9tICsgMSwgJmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGludCBpbnNuID0gY29tcGFyZUFuZEJyYW5jaEltbWVkaWF0ZShp
czY0Qml0ID8gRGF0YXNpemVfNjQgOiBEYXRhc2l6ZV8zMiwgaW52ZXJ0KGNvbmRpdGlvbikgPT0g
Q29uZGl0aW9uTkUsIDIsIHJ0KTsKLSAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJvbSwg
Jmluc24sIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIGxpbmtKdW1wT3JDYWxsPGZhbHNlPihm
cm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsgMSwgdG8pOworICAgICAgICAgICAgY29weShmcm9t
LCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+
KGZyb20gKyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0bywgY29weSk7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxib29sIGlzRGlyZWN0PgotICAgIHN0YXRpYyB2b2lkIGxpbmtD
b25kaXRpb25hbEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCBpbnQqIGZyb20sIGNvbnN0IGlu
dCogZnJvbUluc3RydWN0aW9uLCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ29uZGl0
aW9uYWxCcmFuY2goQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50KiBmcm9tLCBjb25zdCBpbnQqIGZy
b21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5ID0gcGVyZm9ybUpJVE1l
bWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
Pih0bykgJiAzKSk7CkBAIC0zMDg5LDIwICszMDg5LDIwIEBAIHByb3RlY3RlZDoKIAogICAgICAg
ICBpZiAodXNlRGlyZWN0IHx8IGlzRGlyZWN0KSB7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGNv
bmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgY29uZGl0
aW9uKTsKLSAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJvbSwgJmluc24sIHNpemVvZihp
bnQpKTsKKyAgICAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKICAgICAg
ICAgICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAgICAgICAgICBpbnNuID0gbm9wUHNldWRv
KCk7Ci0gICAgICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShmcm9tICsgMSwgJmluc24sIHNp
emVvZihpbnQpKTsKKyAgICAgICAgICAgICAgICBjb3B5KGZyb20gKyAxLCAmaW5zbiwgc2l6ZW9m
KGludCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW50
IGluc24gPSBjb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZSgyLCBpbnZlcnQoY29uZGl0aW9uKSk7
Ci0gICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7
Ci0gICAgICAgICAgICBsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oZnJvbSArIDEsIGZyb21JbnN0cnVj
dGlvbiArIDEsIHRvKTsKKyAgICAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQp
KTsKKyAgICAgICAgICAgIGxpbmtKdW1wT3JDYWxsPGZhbHNlPihmcm9tICsgMSwgZnJvbUluc3Ry
dWN0aW9uICsgMSwgdG8sIGNvcHkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
Ym9vbCBpc0RpcmVjdD4KLSAgICBzdGF0aWMgdm9pZCBsaW5rVGVzdEFuZEJyYW5jaChDb25kaXRp
b24gY29uZGl0aW9uLCB1bnNpZ25lZCBiaXROdW1iZXIsIFJlZ2lzdGVySUQgcnQsIGludCogZnJv
bSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lk
IGxpbmtUZXN0QW5kQnJhbmNoKENvbmRpdGlvbiBjb25kaXRpb24sIHVuc2lnbmVkIGJpdE51bWJl
ciwgUmVnaXN0ZXJJRCBydCwgaW50KiBmcm9tLCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwg
dm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5ID0gcGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwog
ICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBA
IC0zMTE1LDE1ICszMTE1LDE1IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAodXNlRGlyZWN0
IHx8IGlzRGlyZWN0KSB7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFuY2hJbW1l
ZGlhdGUoY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdE51bWJl
ciksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwotICAgICAgICAgICAgcGVyZm9ybUpJ
VE1lbWNweShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgY29weShmcm9t
LCAmaW5zbiwgc2l6ZW9mKGludCkpOwogICAgICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAg
ICAgICAgICAgICAgIGluc24gPSBub3BQc2V1ZG8oKTsKLSAgICAgICAgICAgICAgICBwZXJmb3Jt
SklUTWVtY3B5KGZyb20gKyAxLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgICAg
IGNvcHkoZnJvbSArIDEsICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFuY2hJbW1lZGlh
dGUoaW52ZXJ0KGNvbmRpdGlvbikgPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0
TnVtYmVyKSwgMiwgcnQpOwotICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShmcm9tLCAmaW5z
biwgc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KGZyb20g
KyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0byk7CisgICAgICAgICAgICBjb3B5KGZyb20sICZp
bnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oZnJv
bSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEsIHRvLCBjb3B5KTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMzE4MSwxMCArMzE4MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGludCo+KHN0YXRpY19jYXN0PGNoYXIqPihjb2RlKSArIGxhYmVsLm1fb2Zm
c2V0KTsKICAgICB9CiAKLSAgICBpbnQqIGFkZHJlc3NPZihBc3NlbWJsZXJMYWJlbCBsYWJlbCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzT2YobV9idWZmZXIuZGF0YSgpLCBsYWJlbCk7
Ci0gICAgfQorICAgIC8vaW50KiBhZGRyZXNzT2YoQXNzZW1ibGVyTGFiZWwgbGFiZWwpCisgICAg
Ly97CisgICAgLy8gICAgcmV0dXJuIGFkZHJlc3NPZihtX2J1ZmZlci5kYXRhKCksIGxhYmVsKTsK
KyAgICAvL30KIAogICAgIHN0YXRpYyBSZWdpc3RlcklEIGRpc2Fzc2VtYmxlWE9yU3AoaW50IHJl
ZykgeyByZXR1cm4gcmVnID09IDMxID8gQVJNNjRSZWdpc3RlcnM6OnNwIDogc3RhdGljX2Nhc3Q8
UmVnaXN0ZXJJRD4ocmVnKTsgfQogICAgIHN0YXRpYyBSZWdpc3RlcklEIGRpc2Fzc2VtYmxlWE9y
WnIoaW50IHJlZykgeyByZXR1cm4gcmVnID09IDMxID8gQVJNNjRSZWdpc3RlcnM6OnpyIDogc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXJJRD4ocmVnKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCShyZXZpc2lvbiAyMzY1MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NTIsOSArNzUyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9idWZm
ZXIucHV0SW50KE5PUCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBmaWxsTm9w
cyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgYm9vbCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1v
cnkpCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAgICAgIHN0
YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBDb3B5RnVuY3Rpb24g
Y29weSkKICAgICAgICAgewotICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGlzQ29weWluZ1RvRXhl
Y3V0YWJsZU1lbW9yeSk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oY29weSk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghKHNpemUgJSBzaXplb2YoaW50MzJfdCkpKTsKIAogICAgICAg
ICAgICAgaW50MzJfdCogcHRyID0gc3RhdGljX2Nhc3Q8aW50MzJfdCo+KGJhc2UpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzNjUxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NjIsNiArOTYyLDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdE5vcHMoc2l6ZV90IG1lbW9y
eVRvRmlsbFdpdGhOb3BzSW5CeXRlcykKICAgICB7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBS
RUxFQVNFX0FTU0VSVChtZW1vcnlUb0ZpbGxXaXRoTm9wc0luQnl0ZXMgJSA0ID09IDApOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVz
IC8gNDsgKytpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisjZWxzZQogICAgICAg
ICBBc3NlbWJsZXJCdWZmZXImIGJ1ZmZlciA9IG1fYXNzZW1ibGVyLmJ1ZmZlcigpOwogICAgICAg
ICBzaXplX3Qgc3RhcnRDb2RlU2l6ZSA9IGJ1ZmZlci5jb2RlU2l6ZSgpOwogICAgICAgICBzaXpl
X3QgdGFyZ2V0Q29kZVNpemUgPSBzdGFydENvZGVTaXplICsgbWVtb3J5VG9GaWxsV2l0aE5vcHNJ
bkJ5dGVzOwpAQCAtOTY5LDYgKzk3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0NvcHlp
bmdUb0V4ZWN1dGFibGVNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6Zmls
bE5vcHMoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhKCkpICsgc3RhcnRDb2RlU2l6ZSwg
bWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVzLCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkp
OwogICAgICAgICBidWZmZXIuc2V0Q29kZVNpemUodGFyZ2V0Q29kZVNpemUpOworI2VuZGlmCiAg
ICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1JldHVybkFkZHJlc3MoKSB7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZm
ZXIuaAkocmV2aXNpb24gMjM2NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDE2IEBACiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2lmIENQVShBUk02NEUpCisjaW5jbHVkZSA8d3RmL1B0clRh
Zy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9VbmFsaWduZWRBY2Nlc3MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFzcyBMaW5r
QnVmZmVyOworCiAgICAgc3RydWN0IEFzc2VtYmxlckxhYmVsIHsKICAgICAgICAgQXNzZW1ibGVy
TGFiZWwoKQogICAgICAgICAgICAgOiBtX29mZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpCkBAIC0xNDEsMTIgKzE0NiwzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKICAgICB9OwogCisjaWYgQ1BVKEFSTTY0RSkKKyAgICBj
bGFzcyBBUk02NEVIYXNoIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGlubGluZSB2b2lkIHVwZGF0
ZSh1bnNpZ25lZCB2YWx1ZSwgdWludHB0cl90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgICAgICAgICAgLy8gT09QUzogU2hvdWxkIHRoaXMg
ZmVlZCBpbiBvciBiZSBYT1Igb2YgcmVzdWx0PyBWZXJpZnkgdGhhdCBoYXZpbmcgaGlnaCBiaXRz
CisgICAgICAgICAgICAvLyBhZmZlY3RzIHRoZSByZXN1bHQgaGVyZS4KKyAgICAgICAgICAgIC8v
IE9PUFM6IGRlZmluZSBhIHRhZy4KKyAgICAgICAgICAgIC8vbV9oYXNoID0gdGFnSW50KChzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSArIG1faGFzaCkgXiAobV9oYXNoID4+IDMyKSwgc3Rh
dGljX2Nhc3Q8UHRyVGFnPihpbmRleCkpOworICAgICAgICAgICAgbV9oYXNoID0gdGFnSW50KChz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSArIG1faGFzaCkgXiAobV9oYXNoID4+IDMyKSwg
c3RhdGljX2Nhc3Q8UHRyVGFnPigxMjM0KSk7CisgICAgICAgIH0KKyAgICAgICAgdWludHB0cl90
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dWludHB0cl90IG1faGFzaCB7IDAgfTsKKyAgICB9OworI2VuZGlmCisKICAgICBjbGFzcyBBc3Nl
bWJsZXJCdWZmZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyQnVmZmVyKCkKICAg
ICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRleCgwKQogICAgICAg
ICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2hhc2gudmFsdWUoKSA9PSAwKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGJvb2wgaXNBdmFpbGFibGUodW5zaWduZWQgc3BhY2UpCkBAIC0x
NjUsMjUgKzE4OSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKG1f
aW5kZXggJiAoYWxpZ25tZW50IC0gMSkpOwogICAgICAgICB9CiAKKyNpZiAhQ1BVKEFSTTY0KQog
ICAgICAgICB2b2lkIHB1dEJ5dGVVbmNoZWNrZWQoaW50OF90IHZhbHVlKSB7IHB1dEludGVncmFs
VW5jaGVja2VkKHZhbHVlKTsgfQogICAgICAgICB2b2lkIHB1dEJ5dGUoaW50OF90IHZhbHVlKSB7
IHB1dEludGVncmFsKHZhbHVlKTsgfQogICAgICAgICB2b2lkIHB1dFNob3J0VW5jaGVja2VkKGlu
dDE2X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9CiAgICAgICAgIHZv
aWQgcHV0U2hvcnQoaW50MTZfdCB2YWx1ZSkgeyBwdXRJbnRlZ3JhbCh2YWx1ZSk7IH0KLSAgICAg
ICAgdm9pZCBwdXRJbnRVbmNoZWNrZWQoaW50MzJfdCB2YWx1ZSkgeyBwdXRJbnRlZ3JhbFVuY2hl
Y2tlZCh2YWx1ZSk7IH0KLSAgICAgICAgdm9pZCBwdXRJbnQoaW50MzJfdCB2YWx1ZSkgeyBwdXRJ
bnRlZ3JhbCh2YWx1ZSk7IH0KICAgICAgICAgdm9pZCBwdXRJbnQ2NFVuY2hlY2tlZChpbnQ2NF90
IHZhbHVlKSB7IHB1dEludGVncmFsVW5jaGVja2VkKHZhbHVlKTsgfQogICAgICAgICB2b2lkIHB1
dEludDY0KGludDY0X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwodmFsdWUpOyB9Ci0KLSAgICAgICAg
dm9pZCogZGF0YSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3Jh
Z2UuYnVmZmVyKCk7Ci0gICAgICAgIH0KKyNlbmRpZgorICAgICAgICB2b2lkIHB1dEludFVuY2hl
Y2tlZChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsVW5jaGVja2VkKHZhbHVlKTsgfQorICAg
ICAgICB2b2lkIHB1dEludChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsKHZhbHVlKTsgfQog
CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4OwogICAgICAgICB9CiAKKyNpZiAhQ1BVKEFSTTY0KQogICAgICAgICB2
b2lkIHNldENvZGVTaXplKHNpemVfdCBpbmRleCkKICAgICAgICAgewogICAgICAgICAgICAgLy8g
V2FybmluZzogT25seSB1c2UgdGhpcyBpZiB5b3Uga25vdyBleGFjdGx5IHdoYXQgeW91IGFyZSBk
b2luZy4KQEAgLTE5Miw2ICsyMTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1f
aW5kZXggPSBpbmRleDsKICAgICAgICAgICAgIEFTU0VSVChtX2luZGV4IDw9IG1fc3RvcmFnZS5j
YXBhY2l0eSgpKTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgQXNzZW1ibGVyTGFiZWwg
bGFiZWwoKSBjb25zdAogICAgICAgICB7CkBAIC0yMDksNiArMjMyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIExvY2FsV3JpdGVyICpDQU5OT1QqIGJlIG1peGVk
IHdpdGggb3RoZXIgdHlwZXMgb2YgYWNjZXNzIHRvIEFzc2VtYmxlckJ1ZmZlci4KICAgICAgICAg
Ly8gQXNzZW1ibGVyQnVmZmVyIGNhbm5vdCBiZSB1c2VkIHVudGlsIGl0cyBMb2NhbFdyaXRlciBn
b2VzIG91dCBvZiBzY29wZS4KKyNpZiAhQ1BVKEFSTTY0KSAvLyBJZiB3ZSBldmVyIG5lZWQgdG8g
dXNlIHRoaXMgb24gQVJNNjRlLCB3ZSBuZWVkIHRvIG1ha2UgdGhlIGNoZWNrc3VtIGhhc2ggYXdh
cmUgb2YgdGhpcy4KICAgICAgICAgY2xhc3MgTG9jYWxXcml0ZXIgewogICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgICBMb2NhbFdyaXRlcihBc3NlbWJsZXJCdWZmZXImIGJ1ZmZlciwgdW5zaWdu
ZWQgcmVxdWlyZWRTcGFjZSkKQEAgLTI1MSw2ICsyNzUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBtX3JlcXVpcmVkU3BhY2U7CiAjZW5kaWYKICAgICAgICAgfTsK
KyNlbmRpZiAvLyAhQ1BVKEFSTTY0KQorCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgQVJNNjRF
SGFzaCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faGFzaDsK
KyAgICAgICAgfQorI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEludGVncmFsVHlwZT4KQEAgLTI2NSwxMSArMjk3LDE5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CiAgICAgICAgIHZvaWQg
cHV0SW50ZWdyYWxVbmNoZWNrZWQoSW50ZWdyYWxUeXBlIHZhbHVlKQogICAgICAgICB7CisjaWYg
Q1BVKEFSTTY0KQorICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YodmFsdWUpID09IDQs
ICIiKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAgICAgbV9oYXNoLnVwZGF0ZSh2YWx1ZSwg
bV9pbmRleCk7CisjZW5kaWYKKyNlbmRpZgogICAgICAgICAgICAgQVNTRVJUKGlzQXZhaWxhYmxl
KHNpemVvZihJbnRlZ3JhbFR5cGUpKSk7CiAgICAgICAgICAgICBXVEY6OnVuYWxpZ25lZFN0b3Jl
PEludGVncmFsVHlwZT4obV9zdG9yYWdlLmJ1ZmZlcigpICsgbV9pbmRleCwgdmFsdWUpOwogICAg
ICAgICAgICAgbV9pbmRleCArPSBzaXplb2YoSW50ZWdyYWxUeXBlKTsKICAgICAgICAgfQogCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgLyoKICAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciog
ZGF0YSwgaW50IHNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghaXNBdmFpbGFibGUo
c2l6ZSkpCkBAIC0yNzgsMjIgKzMxOCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IG1lbWNweShtX3N0b3JhZ2UuYnVmZmVyKCkgKyBtX2luZGV4LCBkYXRhLCBzaXplKTsKICAgICAg
ICAgICAgIG1faW5kZXggKz0gc2l6ZTsKICAgICAgICAgfQorICAgICAgICAqLworCisjaWYgIUNQ
VShBUk02NEUpCisgICAgICAgIHZvaWQqIGRhdGEoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9zdG9yYWdlLmJ1ZmZlcigpOworICAgICAgICB9CisjZW5kaWYKIAogICAg
ICAgICB2b2lkIGdyb3coaW50IGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX3N0b3JhZ2UuZ3JvdyhleHRyYUNhcGFjaXR5KTsKICAgICAgICAgfQogCi0gICAgcHJp
dmF0ZToKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgb3V0T2ZMaW5lR3JvdygpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fc3RvcmFnZS5ncm93KCk7CiAgICAgICAgIH0KIAorI2lmICFDUFUo
QVJNNjQpCiAgICAgICAgIGZyaWVuZCBMb2NhbFdyaXRlcjsKKyNlbmRpZgorICAgICAgICBmcmll
bmQgTGlua0J1ZmZlcjsKIAogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAgICAg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICBBUk02NEVIYXNo
IG1faGFzaDsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lv
biAyMzY1MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTcgKzEwNiwyOSBAQCB2b2lkIExpbmtCdWZmZXI6
OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxM
aW5rUmVjb3JkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGp1bXBzVG9MaW5rID0gbWFjcm9B
c3NlbWJsZXIuanVtcHNUb0xpbmsoKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgIGNvbnN0IEFSTTY0
RUhhc2ggYXNzZW1ibGVyQnVmZmVySGFzaCA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1
ZmZlcigpLmhhc2goKTsKKyNlbmRpZgogICAgIG1fYXNzZW1ibGVyU3RvcmFnZSA9IG1hY3JvQXNz
ZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpLnJlbGVhc2VBc3NlbWJsZXJEYXRhKCk7CiAgICAg
dWludDhfdCogaW5EYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9hc3NlbWJsZXJT
dG9yYWdlLmJ1ZmZlcigpKTsKIAorICAgIHVpbnQ4X3QqIGNvZGVPdXREYXRhID0gbV9jb2RlLmRh
dGFMb2NhdGlvbjx1aW50OF90Kj4oKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgIEFSTTY0RUhhc2gg
dmVyaWZ5VW5jb21wYWN0ZWRIYXNoOworICAgIHVpbnQ4X3QqIG91dERhdGEgPSBjb2RlT3V0RGF0
YTsKKyNlbHNlCiAgICAgQXNzZW1ibGVyRGF0YSBvdXRCdWZmZXIobV9zaXplKTsKLQogICAgIHVp
bnQ4X3QqIG91dERhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihvdXRCdWZmZXIuYnVm
ZmVyKCkpOwotICAgIHVpbnQ4X3QqIGNvZGVPdXREYXRhID0gbV9jb2RlLmRhdGFMb2NhdGlvbjx1
aW50OF90Kj4oKTsKKyNlbmRpZgogCiAgICAgaW50IHJlYWRQdHIgPSAwOwogICAgIGludCB3cml0
ZVB0ciA9IDA7CiAgICAgdW5zaWduZWQganVtcENvdW50ID0ganVtcHNUb0xpbmsuc2l6ZSgpOwor
CisjaWYgQ1BVKEFSTTY0RSkKKyAgICBvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfdG9fcnco
KTsKKyNlbmRpZgorCiAgICAgaWYgKG1fc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24pIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1bXBDb3VudDsgKytpKSB7CiAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZFB0ciAtIHdyaXRlUHRyOwpAQCAtMTMwLDggKzE0Miwx
OCBAQCB2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgICAgICAg
ICBBU1NFUlQoIShyZWdpb25TaXplICUgMikpOwogICAgICAgICAgICAgQVNTRVJUKCEocmVhZFB0
ciAlIDIpKTsKICAgICAgICAgICAgIEFTU0VSVCghKHdyaXRlUHRyICUgMikpOwotICAgICAgICAg
ICAgd2hpbGUgKGNvcHlTb3VyY2UgIT0gY29weUVuZCkKLSAgICAgICAgICAgICAgICAqY29weURz
dCsrID0gKmNvcHlTb3VyY2UrKzsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSByZWFkUHRyOworI2VuZGlmCisgICAgICAgICAgICB3aGlsZSAoY29weVNvdXJj
ZSAhPSBjb3B5RW5kKSB7CisgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlIGluc24gPSAq
Y29weVNvdXJjZSsrOworICAgICAgICAgICAgICAgICpjb3B5RHN0KysgPSBpbnNuOworI2lmIENQ
VShBUk02NEUpCisgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW5zbikgPT0g
NCwgIiIpOworICAgICAgICAgICAgICAgIHZlcmlmeVVuY29tcGFjdGVkSGFzaC51cGRhdGUoaW5z
biwgaW5kZXgpOworICAgICAgICAgICAgICAgIGluZGV4ICs9IHNpemVvZihJbnN0cnVjdGlvblR5
cGUpOworI2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWNvcmRMaW5rT2Zmc2V0
cyhtX2Fzc2VtYmxlclN0b3JhZ2UsIHJlYWRQdHIsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSwgb2Zm
c2V0KTsKICAgICAgICAgICAgIHJlYWRQdHIgKz0gcmVnaW9uU2l6ZTsKICAgICAgICAgICAgIHdy
aXRlUHRyICs9IHJlZ2lvblNpemU7CkBAIC0xNjIsMjkgKzE4NCw3NSBAQCB2b2lkIExpbmtCdWZm
ZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgICAgICAgICAgICAgQVNTRVJUKCFNYWNy
b0Fzc2VtYmxlcjo6Y2FuQ29tcGFjdChqdW1wc1RvTGlua1tpXS50eXBlKCkpKTsKICAgICAgICAg
fQogICAgIH0KKwogICAgIC8vIENvcHkgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBqdW1wCi0g
ICAgbWVtY3B5KG91dERhdGEgKyB3cml0ZVB0ciwgaW5EYXRhICsgcmVhZFB0ciwgaW5pdGlhbFNp
emUgLSByZWFkUHRyKTsKKyAgICB7CisgICAgICAgIEluc3RydWN0aW9uVHlwZSogZHN0ID0gYml0
d2lzZV9jYXN0PEluc3RydWN0aW9uVHlwZSo+KG91dERhdGEgKyB3cml0ZVB0cik7CisgICAgICAg
IEluc3RydWN0aW9uVHlwZSogc3JjID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uVHlwZSo+KGlu
RGF0YSArIHJlYWRQdHIpOworICAgICAgICBzaXplX3QgYnl0ZXMgPSBpbml0aWFsU2l6ZSAtIHJl
YWRQdHI7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZHN0KSAlIHNpemVvZihJbnN0cnVjdGlvblR5cGUpID09IDApOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzcmMpICUgc2l6ZW9mKEluc3RydWN0aW9uVHlw
ZSkgPT0gMCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzICUgc2l6ZW9mKEluc3RydWN0
aW9uVHlwZSkgPT0gMCk7CisKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHJlYWRQdHI7CisjZW5kaWYKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ5
dGVzOyBpICs9IHNpemVvZihJbnN0cnVjdGlvblR5cGUpKSB7CisgICAgICAgICAgICBJbnN0cnVj
dGlvblR5cGUgaW5zbiA9ICpzcmMrKzsKKyAgICAgICAgICAgICpkc3QrKyA9IGluc247CisjaWYg
Q1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHZlcmlmeVVuY29tcGFjdGVkSGFzaC51cGRhdGUoaW5z
biwgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gc2l6ZW9mKEluc3RydWN0aW9uVHlwZSk7
CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworI2lmIENQVShBUk02NEUpCisgICAgaWYgKHZl
cmlmeVVuY29tcGFjdGVkSGFzaC52YWx1ZSgpICE9IGFzc2VtYmxlckJ1ZmZlckhhc2gudmFsdWUo
KSkgeworICAgICAgICBkYXRhTG9nTG4oIkhhc2hlcyBkb24ndCBtYXRjaDogIiwgUmF3UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZlcmlmeVVuY29tcGFjdGVkSGFzaC52YWx1ZSgpKSksICIg
IiwgUmF3UG9pbnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGFzc2VtYmxlckJ1ZmZlckhhc2gudmFs
dWUoKSkpKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJlY29yZExp
bmtPZmZzZXRzKG1fYXNzZW1ibGVyU3RvcmFnZSwgcmVhZFB0ciwgaW5pdGlhbFNpemUsIHJlYWRQ
dHIgLSB3cml0ZVB0cik7Ci0gICAgICAgIAorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGp1bXBDb3VudDsgKytpKSB7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgYXV0byBtZW1jcHlG
dW5jdGlvbiA9IG1lbWNweTsKKyNlbHNlCisgICAgICAgIGF1dG8gbWVtY3B5RnVuY3Rpb24gPSBw
ZXJmb3JtSklUTWVtY3B5OworI2VuZGlmCisKICAgICAgICAgdWludDhfdCogbG9jYXRpb24gPSBj
b2RlT3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLmZyb20oKTsKICAgICAgICAgdWludDhfdCogdGFy
Z2V0ID0gY29kZU91dERhdGEgKyBqdW1wc1RvTGlua1tpXS50bygpIC0gZXhlY3V0YWJsZU9mZnNl
dEZvcihqdW1wc1RvTGlua1tpXS50bygpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Omxpbmso
anVtcHNUb0xpbmtbaV0sIG91dERhdGEgKyBqdW1wc1RvTGlua1tpXS5mcm9tKCksIGxvY2F0aW9u
LCB0YXJnZXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGluayhqdW1wc1RvTGlua1tpXSwg
b3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLmZyb20oKSwgbG9jYXRpb24sIHRhcmdldCwgbWVtY3B5
RnVuY3Rpb24pOwogICAgIH0KIAotICAgIGp1bXBzVG9MaW5rLmNsZWFyKCk7Ci0KICAgICBzaXpl
X3QgY29tcGFjdFNpemUgPSB3cml0ZVB0ciArIGluaXRpYWxTaXplIC0gcmVhZFB0cjsKKyAgICBp
ZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkgeworICAgICAgICBzaXplX3Qgbm9wU2l6ZUluQnl0ZXMg
PSBpbml0aWFsU2l6ZSAtIGNvbXBhY3RTaXplOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNz
ZW1ibGVyVHlwZV9UOjpmaWxsTm9wcyhvdXREYXRhICsgY29tcGFjdFNpemUsIG5vcFNpemVJbkJ5
dGVzLCBtZW1jcHkpOworICAgIH0KKworI2lmIENQVShBUk02NEUpCisgICAgb3NfdGhyZWFkX3Nl
bGZfcmVzdHJpY3Rfcnd4X3RvX3J4KCk7CisjZW5kaWYKKwogICAgIGlmIChtX2V4ZWN1dGFibGVN
ZW1vcnkpIHsKICAgICAgICAgbV9zaXplID0gY29tcGFjdFNpemU7CiAgICAgICAgIG1fZXhlY3V0
YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90
IG5vcFNpemVJbkJ5dGVzID0gaW5pdGlhbFNpemUgLSBjb21wYWN0U2l6ZTsKLSAgICAgICAgYm9v
bCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkgPSBmYWxzZTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMob3V0RGF0YSArIGNvbXBhY3RTaXplLCBu
b3BTaXplSW5CeXRlcywgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KTsKICAgICB9CiAKKyNp
ZiAhQ1BVKEFSTTY0RSkKKyAgICBBU1NFUlQoY29kZU91dERhdGEgIT0gb3V0RGF0YSk7CiAgICAg
cGVyZm9ybUpJVE1lbWNweShjb2RlT3V0RGF0YSwgb3V0RGF0YSwgbV9zaXplKTsKKyNlbHNlCisg
ICAgQVNTRVJUKGNvZGVPdXREYXRhID09IG91dERhdGEpOworI2VuZGlmCisKKyAgICBqdW1wc1Rv
TGluay5jbGVhcigpOwogCiAjaWYgRFVNUF9MSU5LX1NUQVRJU1RJQ1MKICAgICBkdW1wTGlua1N0
YXRpc3RpY3MoY29kZU91dERhdGEsIGluaXRpYWxTaXplLCBtX3NpemUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDIzNjUxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsOSArMjY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ZW1pdEluc3QoMHgwMDAwMDAwMCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGZpbGxO
b3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBib29sIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1l
bW9yeSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1bmN0aW9uPgorICAgIHN0YXRpYyB2
b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBDb3B5RnVuY3Rpb24gY29weSkK
ICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkp
OworICAgICAgICBVTlVTRURfUEFSQU0oY29weSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEo
c2l6ZSAlIHNpemVvZihpbnQzMl90KSkpOwogCiAgICAgICAgIGludDMyX3QqIHB0ciA9IHN0YXRp
Y19jYXN0PGludDMyX3QqPihiYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMzY1MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3QgQXNzZW1ibGVyOjpKdW1wVHlwZSBEZWZhdWx0SnVtcCA9IEFzc2VtYmxlcjo6SnVtcE5v
Q29uZGl0aW9uRml4ZWRTaXplOwogCiAgICAgVmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiYganVtcHNUb0xpbmsoKSB7IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wc1Rv
TGluaygpOyB9Ci0gICAgdm9pZCogdW5saW5rZWRDb2RlKCkgeyByZXR1cm4gbV9hc3NlbWJsZXIu
dW5saW5rZWRDb2RlKCk7IH0KKyAgICAvL3ZvaWQqIHVubGlua2VkQ29kZSgpIHsgcmV0dXJuIG1f
YXNzZW1ibGVyLnVubGlua2VkQ29kZSgpOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuQ29tcGFjdChK
dW1wVHlwZSBqdW1wVHlwZSkgeyByZXR1cm4gQXNzZW1ibGVyOjpjYW5Db21wYWN0KGp1bXBUeXBl
KTsgfQogICAgIHN0YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1
bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4g
QXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcFR5cGUsIGZyb20sIHRvKTsgfQogICAgIHN0
YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29u
c3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIEFzc2VtYmxlcjo6
Y29tcHV0ZUp1bXBUeXBlKHJlY29yZCwgZnJvbSwgdG8pOyB9CiAgICAgc3RhdGljIGludCBqdW1w
U2l6ZURlbHRhKEp1bXBUeXBlIGp1bXBUeXBlLCBKdW1wTGlua1R5cGUganVtcExpbmtUeXBlKSB7
IHJldHVybiBBc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEoanVtcFR5cGUsIGp1bXBMaW5rVHlwZSk7
IH0KLSAgICBzdGF0aWMgdm9pZCBsaW5rKExpbmtSZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJv
bSwgY29uc3QgdWludDhfdCogZnJvbUluc3RydWN0aW9uLCB1aW50OF90KiB0bykgeyByZXR1cm4g
QXNzZW1ibGVyOjpsaW5rKHJlY29yZCwgZnJvbSwgZnJvbUluc3RydWN0aW9uLCB0byk7IH0KKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1bmN0aW9uPgorICAgIHN0YXRpYyB2b2lkIGxpbmso
TGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5z
dHJ1Y3Rpb24sIHVpbnQ4X3QqIHRvLCBDb3B5RnVuY3Rpb24gY29weSkgeyByZXR1cm4gQXNzZW1i
bGVyOjpsaW5rKHJlY29yZCwgZnJvbSwgZnJvbUluc3RydWN0aW9uLCB0bywgY29weSk7IH0KIAog
ICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRWlnaHQ7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNp
b24gMjM2NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzMyw5ICszOTMzLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX05PUCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5aW5nVG9FeGVj
dXRhYmxlTWVtb3J5KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAg
c3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIENvcHlGdW5jdGlv
biBjb3B5KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGlzQ29weWluZ1RvRXhlY3V0YWJs
ZU1lbW9yeSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKICNpZiBDUFUoWDg2XzY0KQog
ICAgICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBub3BzWzEwXVsxMF0gPSB7CiAgICAgICAgICAg
ICAvLyBub3AKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1B0clRhZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1B0clRhZy5oCShyZXZpc2lvbiAyMzY1MTgpCisrKyBTb3VyY2UvV1RGL3d0
Zi9QdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMyBAQCBpbmxpbmUgUHRy
VHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlCiB0ZW1wbGF0ZTxQdHJUYWcsIHR5cGVuYW1l
IFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRy
VHlwZT46OnZhbHVlPj4KIGlubGluZSBQdHJUeXBlIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUg
cHRyKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+Citpbmxp
bmUgSW50VHlwZSB0YWdJbnQoSW50VHlwZSBwdHJJbnQsIFB0clRhZykKK3sKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihJbnRUeXBlKSA9PSBzaXplb2YodWludHB0cl90KSwgIiIpOworICAgIHJl
dHVybiBwdHJJbnQ7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0
SXNDRnVuY3Rpb25QdHIoUHRyVHlwZSkgeyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2
b2lkIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKFB0clR5cGUpIHsgfQogCkBAIC0xODQsNiAr
MTkxLDcgQEAgdXNpbmcgV1RGOjpyZXRhZ0NvZGVQdHI7CiB1c2luZyBXVEY6OnJlbW92ZUNvZGVQ
dHJUYWc7CiB1c2luZyBXVEY6OnRhZ0NGdW5jdGlvblB0cjsKIHVzaW5nIFdURjo6dW50YWdDRnVu
Y3Rpb25QdHI7Cit1c2luZyBXVEY6OnRhZ0ludDsKIAogdXNpbmcgV1RGOjphc3NlcnRJc0NGdW5j
dGlvblB0cjsKIHVzaW5nIFdURjo6YXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351025</attachid>
            <date>2018-09-27 17:14:19 -0700</date>
            <delta_ts>2018-09-27 17:25:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>33016</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzY1NzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVyIG9u
IGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTE4OTEz
Mi5qczoKKwogMjAxOC0wOS0yNyAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNv
bT4KIAogICAgICAgICBEaXNhYmxlIHRlc3Qgd2l0aG91dCBMTEludCBvbiBBUk12NwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvcmVncmVzcy0xODkxMzIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9z
dHJlc3MvcmVncmVzcy0xODkxMzIuanMJKHJldmlzaW9uIDIzNjUxOCkKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTg5MTMyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorLy9A
IHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQKKwogdHJ5IHsKICAgICB2YXIgYTAgPSAnXHVkODAxJzsK
ICAgICB2YXIgYTEgPSBbXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjM2NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVy
IG9uIGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk02NEFz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6QVJNNjRBc3NlbWJsZXIp
OgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAoSlND
OjpBUk02NEFzc2VtYmxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjps
aW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29tcGFy
ZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0aW9u
YWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRCcmFu
Y2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjplbWl0Tm9wcyk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIpOgorICAgICAg
ICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFz
aDo6QVJNNjRFSGFzaCk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAg
ICAgIChKU0M6OkFSTTY0RUhhc2g6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpBUk02NEVI
YXNoOjpyYW5kb21TZWVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpB
c3NlbWJsZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnB1dFNob3J0
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpwdXRJbnRVbmNoZWNrZWQpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnB1dEludCk6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckJ1ZmZlcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6
ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50ZWdyYWxV
bmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmFwcGVuZCk6IERlbGV0
ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TUlQU0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpmaWxsTm9wcyk6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcHNUb0xpbmspOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpsaW5rKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6dW5saW5rZWRDb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpqdW1wc1Rv
TGluayk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnVubGlua2VkQ29kZSk6
IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OmZpbGxOb3BzKToKKwogMjAxOC0wOS0yNiAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBzaG91bGQgemVybyB1bnVz
ZWQgcHJvcGVydHkgc3RvcmFnZSB3aGVuIHJlYmFsYW5jaW5nIGFycmF5IHN0b3JhZ2UuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5o
CShyZXZpc2lvbiAyMzY1MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TTY0QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw5ICszMjAsMTcgQEAgcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc1pyKFJlZ2lzdGVySUQgcmVnKSB7IHJl
dHVybiBBUk02NFJlZ2lzdGVyczo6aXNacihyZWcpOyB9CiAKIHB1YmxpYzoKLSAgICBBUk02NEFz
c2VtYmxlcigpCisgICAgQVJNNjRBc3NlbWJsZXIoCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAg
dW5zaWduZWQgcmFuZG9tTnVtYmVyCisjZW5kaWYgCisgICAgICAgICAgICApCiAgICAgICAgIDog
bV9pbmRleE9mTGFzdFdhdGNocG9pbnQoSU5UX01JTikKICAgICAgICAgLCBtX2luZGV4T2ZUYWls
T2ZMYXN0V2F0Y2hwb2ludChJTlRfTUlOKQorI2lmIENQVShBUk02NEUpCisgICAgICAgICwgbV9i
dWZmZXIocmFuZG9tTnVtYmVyKQorI2VuZGlmCisgICAgICAgIAogICAgIHsKICAgICB9CiAgICAg
CkBAIC0xNTU2LDE2ICsxNTY0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgaW5zbihub3BQc2V1ZG8o
KSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNp
emVfdCBzaXplLCBib29sIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSkKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29weUZ1bmN0aW9uPgorICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQq
IGJhc2UsIHNpemVfdCBzaXplLCBDb3B5RnVuY3Rpb24gY29weSkKICAgICB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCEoc2l6ZSAlIHNpemVvZihpbnQzMl90KSkpOwogICAgICAgICBzaXplX3Qg
biA9IHNpemUgLyBzaXplb2YoaW50MzJfdCk7CiAgICAgICAgIGZvciAoaW50MzJfdCogcHRyID0g
c3RhdGljX2Nhc3Q8aW50MzJfdCo+KGJhc2UpOyBuLS07KSB7CiAgICAgICAgICAgICBpbnQgaW5z
biA9IG5vcFBzZXVkbygpOwotICAgICAgICAgICAgaWYgKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1l
bW9yeSkKLSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHB0cisrLCAmaW5zbiwgc2l6
ZW9mKGludCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lbWNweShwdHIr
KywgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIGNvcHkocHRyKyssICZpbnNuLCBz
aXplb2YoaW50KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yNTcwLDcgKzI1NzYsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0gYS5tX29mZnNldDsKICAgICB9
CiAKLSAgICB2b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0K
ICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5jb2RlU2l6ZSgp
OyB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChBc3NlbWJsZXJM
YWJlbCBjYWxsKQpAQCAtMjYwOCwxMyArMjYxMyw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qdW1w
c1RvTGluay5hcHBlbmQoTGlua1JlY29yZChmcm9tLm1fb2Zmc2V0LCB0by5tX29mZnNldCwgdHlw
ZSwgY29uZGl0aW9uLCBiaXROdW1iZXIsIGNvbXBhcmVSZWdpc3RlcikpOwogICAgIH0KIAotICAg
IHZvaWQgbGlua0p1bXAoQXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCogZXhlY3V0YWJsZUNvZGUs
IEFzc2VtYmxlckxhYmVsIHRvKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGZyb20uaXNTZXQoKSk7
Ci0gICAgICAgIEFTU0VSVCh0by5pc1NldCgpKTsKLSAgICAgICAgcmVsaW5rSnVtcE9yQ2FsbDxm
YWxzZT4oYWRkcmVzc09mKGZyb20pLCBhZGRyZXNzT2YoZXhlY3V0YWJsZUNvZGUsIGZyb20pLCBh
ZGRyZXNzT2YodG8pKTsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9p
ZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCogdG8pCiAgICAgewogICAgICAgICBB
U1NFUlQoZnJvbS5pc1NldCgpKTsKQEAgLTI5NjcsMzAgKzI5NjUsMzIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9qdW1wc1RvTGluazsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBBTFdB
WVNfSU5MSU5FIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBmcm9tLCBjb25zdCB1
aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb244LCB1aW50OF90KiB0bykKKyAgICB0eXBlZGVmIHZvaWQq
ICgqQ29weUZ1bmN0aW9uKSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CisKKyAgICBzdGF0
aWMgdm9pZCBBTFdBWVNfSU5MSU5FIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBm
cm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb244LCB1aW50OF90KiB0bywgQ29weUZ1
bmN0aW9uIGNvcHkpCiAgICAgewogICAgICAgICBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50Kj4oZnJvbUluc3RydWN0aW9uOCk7CiAgICAgICAg
IHN3aXRjaCAocmVjb3JkLmxpbmtUeXBlKCkpIHsKICAgICAgICAgY2FzZSBMaW5rSnVtcE5vQ29u
ZGl0aW9uOgotICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8pOworICAgICAgICAgICAgbGlua0p1
bXBPckNhbGw8ZmFsc2U+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVj
dGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1
bXBDb25kaXRpb25EaXJlY3Q6Ci0gICAgICAgICAgICBsaW5rQ29uZGl0aW9uYWxCcmFuY2g8dHJ1
ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9t
SW5zdHJ1Y3Rpb24sIHRvKTsKKyAgICAgICAgICAgIGxpbmtDb25kaXRpb25hbEJyYW5jaDx0cnVl
PihyZWNvcmQuY29uZGl0aW9uKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21J
bnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TGlua0p1bXBDb25kaXRpb246Ci0gICAgICAgICAgICBsaW5rQ29uZGl0aW9uYWxCcmFuY2g8ZmFs
c2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEs
IGZyb21JbnN0cnVjdGlvbiAtIDEsIHRvKTsKKyAgICAgICAgICAgIGxpbmtDb25kaXRpb25hbEJy
YW5jaDxmYWxzZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZy
b20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb21wYXJlQW5kQnJhbmNoRGlyZWN0OgotICAgICAg
ICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNv
cmQuaXM2NEJpdCgpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8pOworICAgICAgICAgICAgbGlua0NvbXBh
cmVBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuaXM2NEJpdCgpLCBy
ZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZy
b21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTGlua0p1bXBDb21wYXJlQW5kQnJhbmNoOgotICAgICAgICAgICAgbGlua0NvbXBhcmVBbmRC
cmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3JkLmlzNjRCaXQoKSwgcmVjb3Jk
LmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJv
bUluc3RydWN0aW9uIC0gMSwgdG8pOworICAgICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8
ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3JkLmlzNjRCaXQoKSwgcmVjb3JkLmNvbXBh
cmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3Ry
dWN0aW9uIC0gMSwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TGlua0p1bXBUZXN0Qml0RGlyZWN0OgotICAgICAgICAgICAgbGlua1Rlc3RBbmRCcmFuY2g8dHJ1
ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuYml0TnVtYmVyKCksIHJlY29yZC5jb21wYXJl
UmVnaXN0ZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSwgZnJvbUluc3RydWN0aW9u
LCB0byk7CisgICAgICAgICAgICBsaW5rVGVzdEFuZEJyYW5jaDx0cnVlPihyZWNvcmQuY29uZGl0
aW9uKCksIHJlY29yZC5iaXROdW1iZXIoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWlu
dGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvLCBjb3B5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtKdW1wVGVzdEJpdDoKLSAgICAgICAg
ICAgIGxpbmtUZXN0QW5kQnJhbmNoPGZhbHNlPihyZWNvcmQuY29uZGl0aW9uKCksIHJlY29yZC5i
aXROdW1iZXIoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGlu
dCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8pOworICAgICAgICAgICAgbGlu
a1Rlc3RBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3JkLmJpdE51bWJl
cigpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJv
bSkgLSAxLCBmcm9tSW5zdHJ1Y3Rpb24gLSAxLCB0bywgY29weSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMzAzMiw3ICszMDMyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHRlbXBsYXRlPGJv
b2wgaXNDYWxsPgotICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wT3JDYWxsKGludCogZnJvbSwgY29u
c3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtK
dW1wT3JDYWxsKGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRv
LCBDb3B5RnVuY3Rpb24gY29weSA9IHBlcmZvcm1KSVRNZW1jcHkpCiAgICAgewogICAgICAgICBi
b29sIGxpbms7CiAgICAgICAgIGludCBpbW0yNjsKQEAgLTMwNDgsMTEgKzMwNDgsMTEgQEAgcHJv
dGVjdGVkOgogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID09IG9mZnNl
dCk7CiAKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlz
Q2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKLSAgICAgICAgcGVyZm9ybUpJVE1lbWNw
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBz
aXplb2YoaW50KSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0RpcmVjdD4KLSAgICBz
dGF0aWMgdm9pZCBsaW5rQ29tcGFyZUFuZEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCBib29s
IGlzNjRCaXQsIFJlZ2lzdGVySUQgcnQsIGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1
Y3Rpb24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtDb21wYXJlQW5kQnJhbmNoKENv
bmRpdGlvbiBjb25kaXRpb24sIGJvb2wgaXM2NEJpdCwgUmVnaXN0ZXJJRCBydCwgaW50KiBmcm9t
LCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5
ID0gcGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBAIC0zMDY0LDIwICszMDY0LDIwIEBAIHByb3Rl
Y3RlZDoKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IGlzRGlyZWN0KSB7CiAgICAgICAgICAg
ICBpbnQgaW5zbiA9IGNvbXBhcmVBbmRCcmFuY2hJbW1lZGlhdGUoaXM2NEJpdCA/IERhdGFzaXpl
XzY0IDogRGF0YXNpemVfMzIsIGNvbmRpdGlvbiA9PSBDb25kaXRpb25ORSwgc3RhdGljX2Nhc3Q8
aW50PihvZmZzZXQpLCBydCk7Ci0gICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGZyb20sICZp
bnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2Yo
aW50KSk7CiAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CiAgICAgICAgICAgICAgICAgaW5z
biA9IG5vcFBzZXVkbygpOwotICAgICAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJvbSAr
IDEsICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgY29weShmcm9tICsgMSwg
Jmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGludCBpbnNuID0gY29tcGFyZUFuZEJyYW5jaEltbWVkaWF0ZShpczY0Qml0ID8g
RGF0YXNpemVfNjQgOiBEYXRhc2l6ZV8zMiwgaW52ZXJ0KGNvbmRpdGlvbikgPT0gQ29uZGl0aW9u
TkUsIDIsIHJ0KTsKLSAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJvbSwgJmluc24sIHNp
emVvZihpbnQpKTsKLSAgICAgICAgICAgIGxpbmtKdW1wT3JDYWxsPGZhbHNlPihmcm9tICsgMSwg
ZnJvbUluc3RydWN0aW9uICsgMSwgdG8pOworICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwg
c2l6ZW9mKGludCkpOworICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KGZyb20gKyAx
LCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0bywgY29weSk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTxib29sIGlzRGlyZWN0PgotICAgIHN0YXRpYyB2b2lkIGxpbmtDb25kaXRpb25h
bEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCBpbnQqIGZyb20sIGNvbnN0IGludCogZnJvbUlu
c3RydWN0aW9uLCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ29uZGl0aW9uYWxCcmFu
Y2goQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50KiBmcm9tLCBjb25zdCBpbnQqIGZyb21JbnN0cnVj
dGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5ID0gcGVyZm9ybUpJVE1lbWNweSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYg
MykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAz
KSk7CkBAIC0zMDg5LDIwICszMDg5LDIwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAodXNl
RGlyZWN0IHx8IGlzRGlyZWN0KSB7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGNvbmRpdGlvbmFs
QnJhbmNoSW1tZWRpYXRlKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgY29uZGl0aW9uKTsKLSAg
ICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAg
ICAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIGlm
ICghaXNEaXJlY3QpIHsKICAgICAgICAgICAgICAgICBpbnNuID0gbm9wUHNldWRvKCk7Ci0gICAg
ICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShmcm9tICsgMSwgJmluc24sIHNpemVvZihpbnQp
KTsKKyAgICAgICAgICAgICAgICBjb3B5KGZyb20gKyAxLCAmaW5zbiwgc2l6ZW9mKGludCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW50IGluc24gPSBj
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZSgyLCBpbnZlcnQoY29uZGl0aW9uKSk7Ci0gICAgICAg
ICAgICBwZXJmb3JtSklUTWVtY3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7Ci0gICAgICAg
ICAgICBsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oZnJvbSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEs
IHRvKTsKKyAgICAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgICAgIGxpbmtKdW1wT3JDYWxsPGZhbHNlPihmcm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsg
MSwgdG8sIGNvcHkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0Rp
cmVjdD4KLSAgICBzdGF0aWMgdm9pZCBsaW5rVGVzdEFuZEJyYW5jaChDb25kaXRpb24gY29uZGl0
aW9uLCB1bnNpZ25lZCBiaXROdW1iZXIsIFJlZ2lzdGVySUQgcnQsIGludCogZnJvbSwgY29uc3Qg
aW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtUZXN0
QW5kQnJhbmNoKENvbmRpdGlvbiBjb25kaXRpb24sIHVuc2lnbmVkIGJpdE51bWJlciwgUmVnaXN0
ZXJJRCBydCwgaW50KiBmcm9tLCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8s
IENvcHlGdW5jdGlvbiBjb3B5ID0gcGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBAIC0zMTE1LDE1
ICszMTE1LDE1IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IGlzRGly
ZWN0KSB7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFuY2hJbW1lZGlhdGUoY29u
ZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdE51bWJlciksIHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwotICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShm
cm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwg
c2l6ZW9mKGludCkpOwogICAgICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAg
ICAgIGluc24gPSBub3BQc2V1ZG8oKTsKLSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5
KGZyb20gKyAxLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgICAgIGNvcHkoZnJv
bSArIDEsICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFuY2hJbW1lZGlhdGUoaW52ZXJ0
KGNvbmRpdGlvbikgPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0TnVtYmVyKSwg
MiwgcnQpOwotICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShmcm9tLCAmaW5zbiwgc2l6ZW9m
KGludCkpOwotICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KGZyb20gKyAxLCBmcm9t
SW5zdHJ1Y3Rpb24gKyAxLCB0byk7CisgICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CisgICAgICAgICAgICBsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oZnJvbSArIDEsIGZy
b21JbnN0cnVjdGlvbiArIDEsIHRvLCBjb3B5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE4
MSwxMSArMzE4MSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGNvZGUpICsgbGFiZWwubV9vZmZzZXQpOwogICAg
IH0KIAotICAgIGludCogYWRkcmVzc09mKEFzc2VtYmxlckxhYmVsIGxhYmVsKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkZHJlc3NPZihtX2J1ZmZlci5kYXRhKCksIGxhYmVsKTsKLSAgICB9Ci0K
ICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNhc3NlbWJsZVhPclNwKGludCByZWcpIHsgcmV0dXJu
IHJlZyA9PSAzMSA/IEFSTTY0UmVnaXN0ZXJzOjpzcCA6IHN0YXRpY19jYXN0PFJlZ2lzdGVySUQ+
KHJlZyk7IH0KICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNhc3NlbWJsZVhPclpyKGludCByZWcp
IHsgcmV0dXJuIHJlZyA9PSAzMSA/IEFSTTY0UmVnaXN0ZXJzOjp6ciA6IHN0YXRpY19jYXN0PFJl
Z2lzdGVySUQ+KHJlZyk7IH0KICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNhc3NlbWJsZVhPclpy
T3JTcChib29sIHVzZVpyLCBpbnQgcmVnKSB7IHJldHVybiByZWcgPT0gMzEgPyAodXNlWnIgPyBB
Uk02NFJlZ2lzdGVyczo6enIgOiBBUk02NFJlZ2lzdGVyczo6c3ApIDogc3RhdGljX2Nhc3Q8UmVn
aXN0ZXJJRD4ocmVnKTsgfQpAQCAtMzc2MSwxMCArMzc1NiwxMCBAQCBwcm90ZWN0ZWQ6CiAjZW5k
aWYKICAgICB9CiAKLSAgICBBc3NlbWJsZXJCdWZmZXIgbV9idWZmZXI7CiAgICAgVmVjdG9yPExp
bmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2p1bXBzVG9MaW5rOwogICAgIGlu
dCBtX2luZGV4T2ZMYXN0V2F0Y2hwb2ludDsKICAgICBpbnQgbV9pbmRleE9mVGFpbE9mTGFzdFdh
dGNocG9pbnQ7CisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOwogCiBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgTUFYX1BPSU5URVJfQklUUyA9IDQ4OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCShyZXZp
c2lvbiAyMzY1MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsOSArNzUyLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KE5PUCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgYm9vbCBpc0Nv
cHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5
RnVuY3Rpb24+CisgICAgICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVf
dCBzaXplLCBDb3B5RnVuY3Rpb24gY29weSkKICAgICAgICAgewotICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CisgICAgICAgICAgICBVTlVTRURf
UEFSQU0oY29weSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNpemUgJSBzaXplb2Yo
aW50MzJfdCkpKTsKIAogICAgICAgICAgICAgaW50MzJfdCogcHRyID0gc3RhdGljX2Nhc3Q8aW50
MzJfdCo+KGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12
N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQ3
LDcgKzIyNDcsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkKiB1bmxp
bmtlZENvZGUoKSB7IHJldHVybiBtX2Zvcm1hdHRlci5kYXRhKCk7IH0KICAgICBzaXplX3QgY29k
ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRlci5jb2RlU2l6ZSgpOyB9CiAKICAgICBz
dGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChBc3NlbWJsZXJMYWJlbCBjYWxsKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzNjUxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NjIsOCArODYyLDYgQEAgcHVibGljOgogICAgICAgICBBc3NlbWJsZXJUeXBlOjpjYWNo
ZUZsdXNoKGNvZGUsIHNpemUpOwogICAgIH0KIAotICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJs
ZXI7Ci0gICAgCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdGF0aWMgdm9pZCBsaW5r
SnVtcCh2b2lkKiBjb2RlLCBKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPHRhZz4gdGFyZ2V0
KQogICAgIHsKQEAgLTk2Miw2ICs5NjAsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0Tm9w
cyhzaXplX3QgbWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVzKQogICAgIHsKKyNpZiBDUFUoQVJN
NjQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeVRvRmlsbFdpdGhOb3BzSW5CeXRlcyAl
IDQgPT0gMCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZW1vcnlUb0ZpbGxX
aXRoTm9wc0luQnl0ZXMgLyA0OyArK2kpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyNlbHNlCiAgICAgICAgIEFzc2VtYmxlckJ1ZmZlciYgYnVmZmVyID0gbV9hc3NlbWJsZXIuYnVm
ZmVyKCk7CiAgICAgICAgIHNpemVfdCBzdGFydENvZGVTaXplID0gYnVmZmVyLmNvZGVTaXplKCk7
CiAgICAgICAgIHNpemVfdCB0YXJnZXRDb2RlU2l6ZSA9IHN0YXJ0Q29kZVNpemUgKyBtZW1vcnlU
b0ZpbGxXaXRoTm9wc0luQnl0ZXM7CkBAIC05NjksNiArOTcyLDcgQEAgcHVibGljOgogICAgICAg
ICBib29sIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSA9IGZhbHNlOwogICAgICAgICBBc3Nl
bWJsZXJUeXBlOjpmaWxsTm9wcyhzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyLmRhdGEoKSkgKyBz
dGFydENvZGVTaXplLCBtZW1vcnlUb0ZpbGxXaXRoTm9wc0luQnl0ZXMsIGlzQ29weWluZ1RvRXhl
Y3V0YWJsZU1lbW9yeSk7CiAgICAgICAgIGJ1ZmZlci5zZXRDb2RlU2l6ZSh0YXJnZXRDb2RlU2l6
ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUmV0dXJuQWRk
cmVzcygpIHsgfQpAQCAtOTgzLDYgKzk4NywxMSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAg
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoMCkKKyAg
ICAgICAgLCBtX2Fzc2VtYmxlcigKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAgICAgICByYW5k
b20oKQorI2VuZGlmCisgICAgICAgICAgICAgICAgKQogICAgIHsKICAgICAgICAgaW52YWxpZGF0
ZUFsbFRlbXBSZWdpc3RlcnMoKTsKICAgICB9CkBAIC05OTgsNiArMTAwNyw5IEBAIHByb3RlY3Rl
ZDoKIAogICAgIGJvb2wgbV9yYW5kb21Tb3VyY2VJc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAg
ICBXZWFrUmFuZG9tIG1fcmFuZG9tU291cmNlOworcHVibGljOgorICAgIEFzc2VtYmxlclR5cGUg
bV9hc3NlbWJsZXI7Citwcm90ZWN0ZWQ6CiAKICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9D
QVRJT05fVkFMSURBVElPTikKICAgICBWZWN0b3I8UmVnaXN0ZXJBbGxvY2F0aW9uT2Zmc2V0LCAx
MD4gbV9yZWdpc3RlckFsbG9jYXRpb25Gb3JPZmZzZXRzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyMzY1
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaWYgQ1BVKEFSTTY0RSkKKyNpbmNsdWRlIDx3dGYvUHRyVGFnLmg+CisjZW5kaWYKICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VuYWxpZ25lZEFjY2Vzcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIExpbmtCdWZmZXI7CisKICAgICBzdHJ1
Y3QgQXNzZW1ibGVyTGFiZWwgewogICAgICAgICBBc3NlbWJsZXJMYWJlbCgpCiAgICAgICAgICAg
ICA6IG1fb2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKQEAgLTE0
MSwxMSArMTQ2LDM3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2NhcGFj
aXR5OwogICAgIH07CiAKKyNpZiBDUFUoQVJNNjRFKQorICAgIGNsYXNzIEFSTTY0RUhhc2ggewor
ICAgIHB1YmxpYzoKKyAgICAgICAgQVJNNjRFSGFzaCh1bnNpZ25lZCByYW5kb21OdW1iZXIpCisg
ICAgICAgICAgICA6IG1faGFzaChyYW5kb21OdW1iZXIpCisgICAgICAgICAgICAsIG1fcmFuZG9t
U2VlZChyYW5kb21OdW1iZXIpCisgICAgICAgIHsgfQorICAgICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdXBkYXRlKHVuc2lnbmVkIHZhbHVlLCB1aW50cHRyX3QgaW5kZXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faGFzaCA9IHRhZ0ludCgoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkg
KyBtX2hhc2gpIF4gKG1faGFzaCA+PiAzMiksIHN0YXRpY19jYXN0PFB0clRhZz4oaW5kZXgpKTsK
KyAgICAgICAgfQorICAgICAgICB1aW50cHRyX3QgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
aDsgfQorICAgICAgICB1bnNpZ25lZCByYW5kb21TZWVkKCkgY29uc3QgeyByZXR1cm4gbV9yYW5k
b21TZWVkOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgdWludHB0cl90IG1faGFzaDsKKyAgICAg
ICAgdW5zaWduZWQgbV9yYW5kb21TZWVkOworICAgIH07CisjZW5kaWYKKwogICAgIGNsYXNzIEFz
c2VtYmxlckJ1ZmZlciB7CiAgICAgcHVibGljOgotICAgICAgICBBc3NlbWJsZXJCdWZmZXIoKQor
ICAgICAgICBBc3NlbWJsZXJCdWZmZXIoCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHVu
c2lnbmVkIHJhbmRvbU51bWJlcgorI2VuZGlmCisgICAgICAgICAgICAgICAgKQogICAgICAgICAg
ICAgOiBtX3N0b3JhZ2UoKQogICAgICAgICAgICAgLCBtX2luZGV4KDApCisjaWYgQ1BVKEFSTTY0
RSkKKyAgICAgICAgICAgICwgbV9oYXNoKHJhbmRvbU51bWJlcikKKyNlbmRpZgogICAgICAgICB7
CiAgICAgICAgIH0KIApAQCAtMTY1LDI1ICsxOTYsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gIShtX2luZGV4ICYgKGFsaWdubWVudCAtIDEpKTsKICAgICAgICAgfQog
CisjaWYgIUNQVShBUk02NCkKICAgICAgICAgdm9pZCBwdXRCeXRlVW5jaGVja2VkKGludDhfdCB2
YWx1ZSkgeyBwdXRJbnRlZ3JhbFVuY2hlY2tlZCh2YWx1ZSk7IH0KICAgICAgICAgdm9pZCBwdXRC
eXRlKGludDhfdCB2YWx1ZSkgeyBwdXRJbnRlZ3JhbCh2YWx1ZSk7IH0KICAgICAgICAgdm9pZCBw
dXRTaG9ydFVuY2hlY2tlZChpbnQxNl90IHZhbHVlKSB7IHB1dEludGVncmFsVW5jaGVja2VkKHZh
bHVlKTsgfQogICAgICAgICB2b2lkIHB1dFNob3J0KGludDE2X3QgdmFsdWUpIHsgcHV0SW50ZWdy
YWwodmFsdWUpOyB9Ci0gICAgICAgIHZvaWQgcHV0SW50VW5jaGVja2VkKGludDMyX3QgdmFsdWUp
IHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9Ci0gICAgICAgIHZvaWQgcHV0SW50KGlu
dDMyX3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwodmFsdWUpOyB9CiAgICAgICAgIHZvaWQgcHV0SW50
NjRVbmNoZWNrZWQoaW50NjRfdCB2YWx1ZSkgeyBwdXRJbnRlZ3JhbFVuY2hlY2tlZCh2YWx1ZSk7
IH0KICAgICAgICAgdm9pZCBwdXRJbnQ2NChpbnQ2NF90IHZhbHVlKSB7IHB1dEludGVncmFsKHZh
bHVlKTsgfQotCi0gICAgICAgIHZvaWQqIGRhdGEoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9zdG9yYWdlLmJ1ZmZlcigpOwotICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgdm9pZCBwdXRJbnRVbmNoZWNrZWQoaW50MzJfdCB2YWx1ZSkgeyBwdXRJbnRlZ3JhbFVuY2hl
Y2tlZCh2YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBwdXRJbnQoaW50MzJfdCB2YWx1ZSkgeyBwdXRJ
bnRlZ3JhbCh2YWx1ZSk7IH0KIAogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbmRleDsKICAgICAgICAgfQogCisjaWYgIUNQ
VShBUk02NCkKICAgICAgICAgdm9pZCBzZXRDb2RlU2l6ZShzaXplX3QgaW5kZXgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIC8vIFdhcm5pbmc6IE9ubHkgdXNlIHRoaXMgaWYgeW91IGtub3cgZXhh
Y3RseSB3aGF0IHlvdSBhcmUgZG9pbmcuCkBAIC0xOTIsNiArMjIxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBtX2luZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICBBU1NFUlQobV9p
bmRleCA8PSBtX3N0b3JhZ2UuY2FwYWNpdHkoKSk7CiAgICAgICAgIH0KKyNlbmRpZgogCiAgICAg
ICAgIEFzc2VtYmxlckxhYmVsIGxhYmVsKCkgY29uc3QKICAgICAgICAgewpAQCAtMjA5LDYgKzIz
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLwogICAgICAgICAvLyBMb2NhbFdyaXRl
ciAqQ0FOTk9UKiBiZSBtaXhlZCB3aXRoIG90aGVyIHR5cGVzIG9mIGFjY2VzcyB0byBBc3NlbWJs
ZXJCdWZmZXIuCiAgICAgICAgIC8vIEFzc2VtYmxlckJ1ZmZlciBjYW5ub3QgYmUgdXNlZCB1bnRp
bCBpdHMgTG9jYWxXcml0ZXIgZ29lcyBvdXQgb2Ygc2NvcGUuCisjaWYgIUNQVShBUk02NCkgLy8g
SWYgd2UgZXZlciBuZWVkIHRvIHVzZSB0aGlzIG9uIGFybTY0ZSwgd2Ugd291bGQgbmVlZCB0byBt
YWtlIHRoZSBjaGVja3N1bSBhd2FyZSBvZiB0aGlzLgogICAgICAgICBjbGFzcyBMb2NhbFdyaXRl
ciB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIExvY2FsV3JpdGVyKEFzc2VtYmxlckJ1
ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCByZXF1aXJlZFNwYWNlKQpAQCAtMjUxLDYgKzI4MiwyMiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1fcmVxdWlyZWRTcGFjZTsK
ICNlbmRpZgogICAgICAgICB9OworI2VuZGlmIC8vICFDUFUoQVJNNjQpCisKKyNpZiBDUFUoQVJN
NjRFKQorICAgICAgICBBUk02NEVIYXNoIGhhc2goKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9oYXNoOworICAgICAgICB9CisjZW5kaWYKKworI2lmICFDUFUoQVJNNjQp
IC8vIElmIHdlIHdlcmUgdG8gZGVmaW5lIHRoaXMgb24gYXJtNjRlLCB3ZSdkIG5lZWQgYSB3YXkg
dG8gdXBkYXRlIHRoZSBoYXNoIGFzIHdlIHdyb3RlIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlci4K
KyAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3N0b3JhZ2UuYnVmZmVyKCk7CisgICAgICAgIH0KKyNlbmRpZgorCiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludGVncmFsVHlwZT4KQEAgLTI2NSwzNSAr
MzEyLDM4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRl
Z3JhbFR5cGU+CiAgICAgICAgIHZvaWQgcHV0SW50ZWdyYWxVbmNoZWNrZWQoSW50ZWdyYWxUeXBl
IHZhbHVlKQogICAgICAgICB7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YodmFsdWUpID09IDQsICIiKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAg
ICAgbV9oYXNoLnVwZGF0ZSh2YWx1ZSwgbV9pbmRleCk7CisjZW5kaWYKKyNlbmRpZgogICAgICAg
ICAgICAgQVNTRVJUKGlzQXZhaWxhYmxlKHNpemVvZihJbnRlZ3JhbFR5cGUpKSk7CiAgICAgICAg
ICAgICBXVEY6OnVuYWxpZ25lZFN0b3JlPEludGVncmFsVHlwZT4obV9zdG9yYWdlLmJ1ZmZlcigp
ICsgbV9pbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgbV9pbmRleCArPSBzaXplb2YoSW50ZWdy
YWxUeXBlKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBzaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlzQXZhaWxhYmxlKHNp
emUpKQotICAgICAgICAgICAgICAgIGdyb3coc2l6ZSk7Ci0KLSAgICAgICAgICAgIG1lbWNweSht
X3N0b3JhZ2UuYnVmZmVyKCkgKyBtX2luZGV4LCBkYXRhLCBzaXplKTsKLSAgICAgICAgICAgIG1f
aW5kZXggKz0gc2l6ZTsKLSAgICAgICAgfQotCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBn
cm93KGludCBleHRyYUNhcGFjaXR5ID0gMCkKICAgICAgICAgewogICAgICAgICAgICAgbV9zdG9y
YWdlLmdyb3coZXh0cmFDYXBhY2l0eSk7CiAgICAgICAgIH0KIAotICAgIHByaXZhdGU6CiAgICAg
ICAgIE5FVkVSX0lOTElORSB2b2lkIG91dE9mTGluZUdyb3coKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX3N0b3JhZ2UuZ3JvdygpOwogICAgICAgICB9CiAKKyNpZiAhQ1BVKEFSTTY0KQogICAg
ICAgICBmcmllbmQgTG9jYWxXcml0ZXI7CisjZW5kaWYKKyAgICAgICAgZnJpZW5kIExpbmtCdWZm
ZXI7CiAKICAgICAgICAgQXNzZW1ibGVyRGF0YSBtX3N0b3JhZ2U7CiAgICAgICAgIHVuc2lnbmVk
IG1faW5kZXg7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgQVJNNjRFSGFzaCBtX2hhc2g7Cisj
ZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjM2NTE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDE0ICsxMDksMjQgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFj
dEFuZExpbmtDb2RlKAogICAgIG1fYXNzZW1ibGVyU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmJ1ZmZlcigpLnJlbGVhc2VBc3NlbWJsZXJEYXRhKCk7CiAgICAgdWludDhfdCog
aW5EYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9hc3NlbWJsZXJTdG9yYWdlLmJ1
ZmZlcigpKTsKIAorICAgIHVpbnQ4X3QqIGNvZGVPdXREYXRhID0gbV9jb2RlLmRhdGFMb2NhdGlv
bjx1aW50OF90Kj4oKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgIGNvbnN0IEFSTTY0RUhhc2ggYXNz
ZW1ibGVyQnVmZmVySGFzaCA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmhh
c2goKTsKKyAgICBBUk02NEVIYXNoIHZlcmlmeVVuY29tcGFjdGVkSGFzaChhc3NlbWJsZXJCdWZm
ZXJIYXNoLnJhbmRvbVNlZWQoKSk7CisgICAgdWludDhfdCogb3V0RGF0YSA9IGNvZGVPdXREYXRh
OworI2Vsc2UKICAgICBBc3NlbWJsZXJEYXRhIG91dEJ1ZmZlcihtX3NpemUpOwotCiAgICAgdWlu
dDhfdCogb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG91dEJ1ZmZlci5idWZm
ZXIoKSk7Ci0gICAgdWludDhfdCogY29kZU91dERhdGEgPSBtX2NvZGUuZGF0YUxvY2F0aW9uPHVp
bnQ4X3QqPigpOworI2VuZGlmCiAKICAgICBpbnQgcmVhZFB0ciA9IDA7CiAgICAgaW50IHdyaXRl
UHRyID0gMDsKICAgICB1bnNpZ25lZCBqdW1wQ291bnQgPSBqdW1wc1RvTGluay5zaXplKCk7CisK
KyNpZiBDUFUoQVJNNjRFKQorICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19ydygp
OworI2VuZGlmCisKICAgICBpZiAobV9zaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbikgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwganVtcENvdW50OyArK2kpIHsKICAgICAg
ICAgICAgIGludCBvZmZzZXQgPSByZWFkUHRyIC0gd3JpdGVQdHI7CkBAIC0xMzAsOCArMTQwLDE4
IEBAIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICAgICAgICAg
IEFTU0VSVCghKHJlZ2lvblNpemUgJSAyKSk7CiAgICAgICAgICAgICBBU1NFUlQoIShyZWFkUHRy
ICUgMikpOwogICAgICAgICAgICAgQVNTRVJUKCEod3JpdGVQdHIgJSAyKSk7Ci0gICAgICAgICAg
ICB3aGlsZSAoY29weVNvdXJjZSAhPSBjb3B5RW5kKQotICAgICAgICAgICAgICAgICpjb3B5RHN0
KysgPSAqY29weVNvdXJjZSsrOworI2lmIENQVShBUk02NEUpCisgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IHJlYWRQdHI7CisjZW5kaWYKKyAgICAgICAgICAgIHdoaWxlIChjb3B5U291cmNl
ICE9IGNvcHlFbmQpIHsKKyAgICAgICAgICAgICAgICBJbnN0cnVjdGlvblR5cGUgaW5zbiA9ICpj
b3B5U291cmNlKys7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihJbnN0cnVjdGlvblR5cGUpID09IDQsICIiKTsKKyAgICAgICAgICAgICAgICB2
ZXJpZnlVbmNvbXBhY3RlZEhhc2gudXBkYXRlKGluc24sIGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBpbmRleCArPSBzaXplb2YoSW5zdHJ1Y3Rpb25UeXBlKTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgICpjb3B5RHN0KysgPSBpbnNuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVjb3Jk
TGlua09mZnNldHMobV9hc3NlbWJsZXJTdG9yYWdlLCByZWFkUHRyLCBqdW1wc1RvTGlua1tpXS5m
cm9tKCksIG9mZnNldCk7CiAgICAgICAgICAgICByZWFkUHRyICs9IHJlZ2lvblNpemU7CiAgICAg
ICAgICAgICB3cml0ZVB0ciArPSByZWdpb25TaXplOwpAQCAtMTYyLDI5ICsxODIsNzYgQEAgdm9p
ZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAgICAgICAgICAgICAgIEFT
U0VSVCghTWFjcm9Bc3NlbWJsZXI6OmNhbkNvbXBhY3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSk7
CiAgICAgICAgIH0KICAgICB9CisKICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxh
c3QganVtcAotICAgIG1lbWNweShvdXREYXRhICsgd3JpdGVQdHIsIGluRGF0YSArIHJlYWRQdHIs
IGluaXRpYWxTaXplIC0gcmVhZFB0cik7CisgICAgeworICAgICAgICBJbnN0cnVjdGlvblR5cGUq
IGRzdCA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvblR5cGUqPihvdXREYXRhICsgd3JpdGVQdHIp
OworICAgICAgICBJbnN0cnVjdGlvblR5cGUqIHNyYyA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlv
blR5cGUqPihpbkRhdGEgKyByZWFkUHRyKTsKKyAgICAgICAgc2l6ZV90IGJ5dGVzID0gaW5pdGlh
bFNpemUgLSByZWFkUHRyOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGRzdCkgJSBzaXplb2YoSW5zdHJ1Y3Rpb25UeXBlKSA9PSAwKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3JjKSAlIHNpemVvZihJbnN0
cnVjdGlvblR5cGUpID09IDApOworICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlcyAlIHNpemVv
ZihJbnN0cnVjdGlvblR5cGUpID09IDApOworCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSByZWFkUHRyOworI2VuZGlmCisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBieXRlczsgaSArPSBzaXplb2YoSW5zdHJ1Y3Rpb25UeXBlKSkgeworICAgICAgICAg
ICAgSW5zdHJ1Y3Rpb25UeXBlIGluc24gPSAqc3JjKys7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAg
ICAgICAgIHZlcmlmeVVuY29tcGFjdGVkSGFzaC51cGRhdGUoaW5zbiwgaW5kZXgpOworICAgICAg
ICAgICAgaW5kZXggKz0gc2l6ZW9mKEluc3RydWN0aW9uVHlwZSk7CisjZW5kaWYKKyAgICAgICAg
ICAgICpkc3QrKyA9IGluc247CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBDUFUoQVJNNjRFKQor
ICAgIGlmICh2ZXJpZnlVbmNvbXBhY3RlZEhhc2guaGFzaCgpICE9IGFzc2VtYmxlckJ1ZmZlckhh
c2guaGFzaCgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiSGFzaGVzIGRvbid0IG1hdGNoOiAiLCBS
YXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmVyaWZ5VW5jb21wYWN0ZWRIYXNoLmhhc2go
KSkpLCAiICIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihhc3NlbWJsZXJCdWZmZXJI
YXNoLmhhc2goKSkpKTsKKyAgICAgICAgZGF0YUxvZ0xuKCJDcmFzaGluZyEiKTsKKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJlY29yZExpbmtPZmZzZXRzKG1fYXNzZW1i
bGVyU3RvcmFnZSwgcmVhZFB0ciwgaW5pdGlhbFNpemUsIHJlYWRQdHIgLSB3cml0ZVB0cik7CiAg
ICAgICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgewor
I2lmIENQVShBUk02NEUpCisgICAgICAgIGF1dG8gbWVtY3B5RnVuY3Rpb24gPSBtZW1jcHk7Cisj
ZWxzZQorICAgICAgICBhdXRvIG1lbWNweUZ1bmN0aW9uID0gcGVyZm9ybUpJVE1lbWNweTsKKyNl
bmRpZgorCiAgICAgICAgIHVpbnQ4X3QqIGxvY2F0aW9uID0gY29kZU91dERhdGEgKyBqdW1wc1Rv
TGlua1tpXS5mcm9tKCk7CiAgICAgICAgIHVpbnQ4X3QqIHRhcmdldCA9IGNvZGVPdXREYXRhICsg
anVtcHNUb0xpbmtbaV0udG8oKSAtIGV4ZWN1dGFibGVPZmZzZXRGb3IoanVtcHNUb0xpbmtbaV0u
dG8oKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rKGp1bXBzVG9MaW5rW2ldLCBvdXRE
YXRhICsganVtcHNUb0xpbmtbaV0uZnJvbSgpLCBsb2NhdGlvbiwgdGFyZ2V0KTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OmxpbmsoanVtcHNUb0xpbmtbaV0sIG91dERhdGEgKyBqdW1wc1RvTGlu
a1tpXS5mcm9tKCksIGxvY2F0aW9uLCB0YXJnZXQsIG1lbWNweUZ1bmN0aW9uKTsKICAgICB9CiAK
LSAgICBqdW1wc1RvTGluay5jbGVhcigpOwotCiAgICAgc2l6ZV90IGNvbXBhY3RTaXplID0gd3Jp
dGVQdHIgKyBpbml0aWFsU2l6ZSAtIHJlYWRQdHI7CisgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1v
cnkpIHsKKyAgICAgICAgc2l6ZV90IG5vcFNpemVJbkJ5dGVzID0gaW5pdGlhbFNpemUgLSBjb21w
YWN0U2l6ZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5v
cHMob3V0RGF0YSArIGNvbXBhY3RTaXplLCBub3BTaXplSW5CeXRlcywgbWVtY3B5KTsKKyAgICB9
CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19y
eCgpOworI2VuZGlmCisKICAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KSB7CiAgICAgICAgIG1f
c2l6ZSA9IGNvbXBhY3RTaXplOwogICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayht
X3NpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemVfdCBub3BTaXplSW5CeXRlcyA9IGlu
aXRpYWxTaXplIC0gY29tcGFjdFNpemU7Ci0gICAgICAgIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRh
YmxlTWVtb3J5ID0gZmFsc2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBl
X1Q6OmZpbGxOb3BzKG91dERhdGEgKyBjb21wYWN0U2l6ZSwgbm9wU2l6ZUluQnl0ZXMsIGlzQ29w
eWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgfQogCisjaWYgIUNQVShBUk02NEUpCisgICAg
QVNTRVJUKGNvZGVPdXREYXRhICE9IG91dERhdGEpOwogICAgIHBlcmZvcm1KSVRNZW1jcHkoY29k
ZU91dERhdGEsIG91dERhdGEsIG1fc2l6ZSk7CisjZWxzZQorICAgIEFTU0VSVChjb2RlT3V0RGF0
YSA9PSBvdXREYXRhKTsKKyNlbmRpZgorCisgICAganVtcHNUb0xpbmsuY2xlYXIoKTsKIAogI2lm
IERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAgZHVtcExpbmtTdGF0aXN0aWNzKGNvZGVPdXREYXRh
LCBpbml0aWFsU2l6ZSwgbV9zaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzY1MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjY2LDkgKzI2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDAp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXpl
X3Qgc2l6ZSwgYm9vbCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENvcHlGdW5jdGlvbj4KKyAgICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBi
YXNlLCBzaXplX3Qgc2l6ZSwgQ29weUZ1bmN0aW9uIGNvcHkpCiAgICAgewotICAgICAgICBVTlVT
RURfUEFSQU0oaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGNvcHkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNpemUgJSBzaXplb2YoaW50MzJf
dCkpKTsKIAogICAgICAgICBpbnQzMl90KiBwdHIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oYmFz
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMjM2NTE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDEyICs3OSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEFzc2VtYmxlcjo6SnVt
cFR5cGUgRGVmYXVsdEp1bXAgPSBBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZTsK
IAogICAgIFZlY3RvcjxMaW5rUmVjb3JkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGp1bXBz
VG9MaW5rKCkgeyByZXR1cm4gbV9hc3NlbWJsZXIuanVtcHNUb0xpbmsoKTsgfQotICAgIHZvaWQq
IHVubGlua2VkQ29kZSgpIHsgcmV0dXJuIG1fYXNzZW1ibGVyLnVubGlua2VkQ29kZSgpOyB9CiAg
ICAgc3RhdGljIGJvb2wgY2FuQ29tcGFjdChKdW1wVHlwZSBqdW1wVHlwZSkgeyByZXR1cm4gQXNz
ZW1ibGVyOjpjYW5Db21wYWN0KGp1bXBUeXBlKTsgfQogICAgIHN0YXRpYyBKdW1wTGlua1R5cGUg
Y29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBj
b25zdCB1aW50OF90KiB0bykgeyByZXR1cm4gQXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVt
cFR5cGUsIGZyb20sIHRvKTsgfQogICAgIHN0YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBU
eXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhf
dCogdG8pIHsgcmV0dXJuIEFzc2VtYmxlcjo6Y29tcHV0ZUp1bXBUeXBlKHJlY29yZCwgZnJvbSwg
dG8pOyB9CiAgICAgc3RhdGljIGludCBqdW1wU2l6ZURlbHRhKEp1bXBUeXBlIGp1bXBUeXBlLCBK
dW1wTGlua1R5cGUganVtcExpbmtUeXBlKSB7IHJldHVybiBBc3NlbWJsZXI6Omp1bXBTaXplRGVs
dGEoanVtcFR5cGUsIGp1bXBMaW5rVHlwZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBsaW5rKExpbmtS
ZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogZnJvbUluc3RydWN0
aW9uLCB1aW50OF90KiB0bykgeyByZXR1cm4gQXNzZW1ibGVyOjpsaW5rKHJlY29yZCwgZnJvbSwg
ZnJvbUluc3RydWN0aW9uLCB0byk7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1bmN0
aW9uPgorICAgIHN0YXRpYyB2b2lkIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBm
cm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb24sIHVpbnQ4X3QqIHRvLCBDb3B5RnVu
Y3Rpb24gY29weSkgeyByZXR1cm4gQXNzZW1ibGVyOjpsaW5rKHJlY29yZCwgZnJvbSwgZnJvbUlu
c3RydWN0aW9uLCB0bywgY29weSk7IH0KIAogICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0
ciA9IFRpbWVzRWlnaHQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAyMzY1MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVmVjdG9y
PExpbmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYganVtcHNUb0xpbmsoKSB7IHJl
dHVybiBtX2Fzc2VtYmxlci5qdW1wc1RvTGluaygpOyB9Ci0gICAgdm9pZCogdW5saW5rZWRDb2Rl
KCkgeyByZXR1cm4gbV9hc3NlbWJsZXIudW5saW5rZWRDb2RlKCk7IH0KICAgICBzdGF0aWMgYm9v
bCBjYW5Db21wYWN0KEp1bXBUeXBlIGp1bXBUeXBlKSB7IHJldHVybiBBUk12N0Fzc2VtYmxlcjo6
Y2FuQ29tcGFjdChqdW1wVHlwZSk7IH0KICAgICBzdGF0aWMgSnVtcExpbmtUeXBlIGNvbXB1dGVK
dW1wVHlwZShKdW1wVHlwZSBqdW1wVHlwZSwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWlu
dDhfdCogdG8pIHsgcmV0dXJuIEFSTXY3QXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcFR5
cGUsIGZyb20sIHRvKTsgfQogICAgIHN0YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBl
KExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCog
dG8pIHsgcmV0dXJuIEFSTXY3QXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUocmVjb3JkLCBmcm9t
LCB0byk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzMyw5ICszOTMzLDEw
IEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX05PUCk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGJv
b2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBD
b3B5RnVuY3Rpb24+CisgICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90
IHNpemUsIENvcHlGdW5jdGlvbiBjb3B5KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGlz
Q29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShjb3B5KTsK
ICNpZiBDUFUoWDg2XzY0KQogICAgICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBub3BzWzEwXVsx
MF0gPSB7CiAgICAgICAgICAgICAvLyBub3AKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzY1MTgpCisrKyBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4
LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFZlcmlm
eSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVyIG9uIGFybTY0ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMDU3CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHd0Zi9QdHJUYWcuaDoKKyAgICAgICAgKFdURjo6dGFnSW50KToKKwog
MjAxOC0wOS0yNSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBDaGFuZ2UgZnJvbSBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykgdG8gRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1B0clRh
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1B0clRhZy5oCShyZXZpc2lvbiAyMzY1
MTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYg
KzE0NywxMyBAQCBpbmxpbmUgUHRyVHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlCiB0ZW1w
bGF0ZTxQdHJUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBQdHJUeXBlIHVudGFn
Q0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGUgPHR5
cGVuYW1lIEludFR5cGU+CitpbmxpbmUgSW50VHlwZSB0YWdJbnQoSW50VHlwZSBwdHJJbnQsIFB0
clRhZykKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihJbnRUeXBlKSA9PSBzaXplb2YodWlu
dHB0cl90KSwgIiIpOworICAgIHJldHVybiBwdHJJbnQ7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1l
IFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoUHRyVHlwZSkgeyB9CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKFB0clR5
cGUpIHsgfQogCkBAIC0xODQsNiArMTkxLDcgQEAgdXNpbmcgV1RGOjpyZXRhZ0NvZGVQdHI7CiB1
c2luZyBXVEY6OnJlbW92ZUNvZGVQdHJUYWc7CiB1c2luZyBXVEY6OnRhZ0NGdW5jdGlvblB0cjsK
IHVzaW5nIFdURjo6dW50YWdDRnVuY3Rpb25QdHI7Cit1c2luZyBXVEY6OnRhZ0ludDsKIAogdXNp
bmcgV1RGOjphc3NlcnRJc0NGdW5jdGlvblB0cjsKIHVzaW5nIFdURjo6YXNzZXJ0SXNOdWxsT3JD
RnVuY3Rpb25QdHI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351029</attachid>
            <date>2018-09-27 17:25:20 -0700</date>
            <delta_ts>2018-09-27 18:45:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>34199</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzY1NzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVyIG9u
IGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTE4OTEz
Mi5qczoKKwogMjAxOC0wOS0yNyAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNv
bT4KIAogICAgICAgICBEaXNhYmxlIHRlc3Qgd2l0aG91dCBMTEludCBvbiBBUk12NwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvcmVncmVzcy0xODkxMzIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9z
dHJlc3MvcmVncmVzcy0xODkxMzIuanMJKHJldmlzaW9uIDIzNjU3NykKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTg5MTMyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorLy9A
IHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQKKwogdHJ5IHsKICAgICB2YXIgYTAgPSAnXHVkODAxJzsK
ICAgICB2YXIgYTEgPSBbXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjM2NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVy
IG9uIGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk02NEFz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6QVJNNjRBc3NlbWJsZXIp
OgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAoSlND
OjpBUk02NEFzc2VtYmxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjps
aW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29tcGFy
ZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0aW9u
YWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRCcmFu
Y2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjplbWl0Tm9wcyk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIpOgorICAgICAg
ICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFz
aDo6QVJNNjRFSGFzaCk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAg
ICAgIChKU0M6OkFSTTY0RUhhc2g6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpBUk02NEVI
YXNoOjpyYW5kb21TZWVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpB
c3NlbWJsZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnB1dFNob3J0
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpwdXRJbnRVbmNoZWNrZWQpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnB1dEludCk6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckJ1ZmZlcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6
ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50ZWdyYWxV
bmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmFwcGVuZCk6IERlbGV0
ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TUlQU0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpmaWxsTm9wcyk6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcHNUb0xpbmspOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpsaW5rKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6dW5saW5rZWRDb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpqdW1wc1Rv
TGluayk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnVubGlua2VkQ29kZSk6
IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OmZpbGxOb3BzKToKKwogMjAxOC0wOS0yNyAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpPU1JFbnRyeTo6bV9tYWNoaW5lQ29k
ZU9mZnNldCBzaG91bGQgYmUgYSBDb2RlTG9jYXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZpc2lvbiAyMzY1Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyMiw5ICszMjIsMTcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc1pyKFJlZ2lzdGVySUQgcmVnKSB7IHJldHVybiBBUk02NFJlZ2lzdGVy
czo6aXNacihyZWcpOyB9CiAKIHB1YmxpYzoKLSAgICBBUk02NEFzc2VtYmxlcigpCisgICAgQVJN
NjRBc3NlbWJsZXIoCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgdW5zaWduZWQgcmFuZG9tTnVt
YmVyCisjZW5kaWYgCisgICAgICAgICAgICApCiAgICAgICAgIDogbV9pbmRleE9mTGFzdFdhdGNo
cG9pbnQoSU5UX01JTikKICAgICAgICAgLCBtX2luZGV4T2ZUYWlsT2ZMYXN0V2F0Y2hwb2ludChJ
TlRfTUlOKQorI2lmIENQVShBUk02NEUpCisgICAgICAgICwgbV9idWZmZXIocmFuZG9tTnVtYmVy
KQorI2VuZGlmCisgICAgICAgIAogICAgIHsKICAgICB9CiAgICAgCkBAIC0xNTU4LDE3ICsxNTY2
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgaW5zbihub3BQc2V1ZG8oKSk7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBib29sIGlz
Q29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1
bmN0aW9uPgorICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXpl
LCBDb3B5RnVuY3Rpb24gY29weSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc2l6
ZSAlIHNpemVvZihpbnQzMl90KSkpOwogICAgICAgICBzaXplX3QgbiA9IHNpemUgLyBzaXplb2Yo
aW50MzJfdCk7CiAgICAgICAgIGZvciAoaW50MzJfdCogcHRyID0gc3RhdGljX2Nhc3Q8aW50MzJf
dCo+KGJhc2UpOyBuLS07KSB7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IG5vcFBzZXVkbygpOwot
ICAgICAgICAgICAgaWYgKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSkgewotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXpl
PihwdHIpID09IHB0cik7Ci0gICAgICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShwdHIrKywg
Jmluc24sIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IG1lbWNweShwdHIrKywgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihwdHIpID09IHB0cik7
CisgICAgICAgICAgICBjb3B5KHB0cisrLCAmaW5zbiwgc2l6ZW9mKGludCkpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMjU3Myw3ICsyNTc5LDYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYi5tX29mZnNldCAtIGEubV9vZmZzZXQ7CiAgICAgfQogCi0gICAgdm9pZCogdW5saW5rZWRD
b2RlKCkgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CiAgICAgc2l6ZV90IGNvZGVTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXIuY29kZVNpemUoKTsgfQogCiAgICAgc3RhdGljIHVuc2ln
bmVkIGdldENhbGxSZXR1cm5PZmZzZXQoQXNzZW1ibGVyTGFiZWwgY2FsbCkKQEAgLTI2MTEsMTMg
KzI2MTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fanVtcHNUb0xpbmsuYXBwZW5kKExpbmtSZWNv
cmQoZnJvbS5tX29mZnNldCwgdG8ubV9vZmZzZXQsIHR5cGUsIGNvbmRpdGlvbiwgYml0TnVtYmVy
LCBjb21wYXJlUmVnaXN0ZXIpKTsKICAgICB9CiAKLSAgICB2b2lkIGxpbmtKdW1wKEFzc2VtYmxl
ckxhYmVsIGZyb20sIHZvaWQqIGV4ZWN1dGFibGVDb2RlLCBBc3NlbWJsZXJMYWJlbCB0bykKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChmcm9tLmlzU2V0KCkpOwotICAgICAgICBBU1NFUlQodG8uaXNT
ZXQoKSk7Ci0gICAgICAgIHJlbGlua0p1bXBPckNhbGw8ZmFsc2U+KGFkZHJlc3NPZihmcm9tKSwg
YWRkcmVzc09mKGV4ZWN1dGFibGVDb2RlLCBmcm9tKSwgYWRkcmVzc09mKHRvKSk7Ci0gICAgfQot
ICAgIAogICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVs
IGZyb20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZyb20uaXNTZXQoKSk7CkBA
IC0yOTc3LDMwICsyOTc1LDMyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fanVtcHNUb0xp
bms7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgQUxXQVlTX0lOTElORSBsaW5rKExpbmtSZWNv
cmQmIHJlY29yZCwgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogZnJvbUluc3RydWN0aW9u
OCwgdWludDhfdCogdG8pCisgICAgdHlwZWRlZiB2b2lkKiAoKkNvcHlGdW5jdGlvbikodm9pZCos
IGNvbnN0IHZvaWQqLCBzaXplX3QpOworCisgICAgc3RhdGljIHZvaWQgQUxXQVlTX0lOTElORSBs
aW5rKExpbmtSZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogZnJv
bUluc3RydWN0aW9uOCwgdWludDhfdCogdG8sIENvcHlGdW5jdGlvbiBjb3B5KQogICAgIHsKICAg
ICAgICAgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGludCo+KGZyb21JbnN0cnVjdGlvbjgpOwogICAgICAgICBzd2l0Y2ggKHJlY29yZC5saW5rVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgTGlua0p1bXBOb0NvbmRpdGlvbjoKLSAgICAgICAgICAgIGxp
bmtKdW1wT3JDYWxsPGZhbHNlPihyZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5z
dHJ1Y3Rpb24sIHRvKTsKKyAgICAgICAgICAgIGxpbmtKdW1wT3JDYWxsPGZhbHNlPihyZWludGVy
cHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvLCBjb3B5KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtKdW1wQ29uZGl0aW9uRGlyZWN0OgotICAg
ICAgICAgICAgbGlua0NvbmRpdGlvbmFsQnJhbmNoPHRydWU+KHJlY29yZC5jb25kaXRpb24oKSwg
cmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSwgZnJvbUluc3RydWN0aW9uLCB0byk7CisgICAg
ICAgICAgICBsaW5rQ29uZGl0aW9uYWxCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCBy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvLCBjb3B5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtKdW1wQ29uZGl0aW9uOgotICAg
ICAgICAgICAgbGlua0NvbmRpdGlvbmFsQnJhbmNoPGZhbHNlPihyZWNvcmQuY29uZGl0aW9uKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBmcm9tSW5zdHJ1Y3Rpb24gLSAxLCB0
byk7CisgICAgICAgICAgICBsaW5rQ29uZGl0aW9uYWxCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25k
aXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIGZyb21JbnN0cnVjdGlv
biAtIDEsIHRvLCBjb3B5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtK
dW1wQ29tcGFyZUFuZEJyYW5jaERpcmVjdDoKLSAgICAgICAgICAgIGxpbmtDb21wYXJlQW5kQnJh
bmNoPHRydWU+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3JkLmlzNjRCaXQoKSwgcmVjb3JkLmNv
bXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1
Y3Rpb24sIHRvKTsKKyAgICAgICAgICAgIGxpbmtDb21wYXJlQW5kQnJhbmNoPHRydWU+KHJlY29y
ZC5jb25kaXRpb24oKSwgcmVjb3JkLmlzNjRCaXQoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3Rlcigp
LCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvLCBjb3B5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtKdW1wQ29tcGFyZUFuZEJy
YW5jaDoKLSAgICAgICAgICAgIGxpbmtDb21wYXJlQW5kQnJhbmNoPGZhbHNlPihyZWNvcmQuY29u
ZGl0aW9uKCksIHJlY29yZC5pczY0Qml0KCksIHJlY29yZC5jb21wYXJlUmVnaXN0ZXIoKSwgcmVp
bnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIGZyb21JbnN0cnVjdGlvbiAtIDEsIHRvKTsK
KyAgICAgICAgICAgIGxpbmtDb21wYXJlQW5kQnJhbmNoPGZhbHNlPihyZWNvcmQuY29uZGl0aW9u
KCksIHJlY29yZC5pczY0Qml0KCksIHJlY29yZC5jb21wYXJlUmVnaXN0ZXIoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIGZyb21JbnN0cnVjdGlvbiAtIDEsIHRvLCBjb3B5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtKdW1wVGVzdEJpdERpcmVjdDoK
LSAgICAgICAgICAgIGxpbmtUZXN0QW5kQnJhbmNoPHRydWU+KHJlY29yZC5jb25kaXRpb24oKSwg
cmVjb3JkLmJpdE51bWJlcigpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8pOworICAgICAgICAgICAgbGlu
a1Rlc3RBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuYml0TnVtYmVy
KCksIHJlY29yZC5jb21wYXJlUmVnaXN0ZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9t
KSwgZnJvbUluc3RydWN0aW9uLCB0bywgY29weSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMaW5rSnVtcFRlc3RCaXQ6Ci0gICAgICAgICAgICBsaW5rVGVzdEFuZEJyYW5jaDxm
YWxzZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuYml0TnVtYmVyKCksIHJlY29yZC5jb21w
YXJlUmVnaXN0ZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIGZyb21JbnN0
cnVjdGlvbiAtIDEsIHRvKTsKKyAgICAgICAgICAgIGxpbmtUZXN0QW5kQnJhbmNoPGZhbHNlPihy
ZWNvcmQuY29uZGl0aW9uKCksIHJlY29yZC5iaXROdW1iZXIoKSwgcmVjb3JkLmNvbXBhcmVSZWdp
c3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9u
IC0gMSwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMwNDIsNyArMzA0Miw3IEBAIHBy
b3RlY3RlZDoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxib29sIGlzQ2FsbD4KLSAgICBzdGF0aWMg
dm9pZCBsaW5rSnVtcE9yQ2FsbChpbnQqIGZyb20sIGNvbnN0IGludCogZnJvbUluc3RydWN0aW9u
LCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcE9yQ2FsbChpbnQqIGZyb20sIGNv
bnN0IGludCogZnJvbUluc3RydWN0aW9uLCB2b2lkKiB0bywgQ29weUZ1bmN0aW9uIGNvcHkgPSBw
ZXJmb3JtSklUTWVtY3B5KQogICAgIHsKICAgICAgICAgYm9vbCBsaW5rOwogICAgICAgICBpbnQg
aW1tMjY7CkBAIC0zMDU5LDExICszMDU5LDExIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpbnQg
aW5zbiA9IHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoaXNDYWxsLCBzdGF0aWNfY2FzdDxp
bnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9m
PGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7Ci0gICAgICAgIHBlcmZvcm1KSVRNZW1j
cHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgY29weShmcm9tLCAmaW5zbiwg
c2l6ZW9mKGludCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPGJvb2wgaXNEaXJlY3Q+Ci0gICAg
c3RhdGljIHZvaWQgbGlua0NvbXBhcmVBbmRCcmFuY2goQ29uZGl0aW9uIGNvbmRpdGlvbiwgYm9v
bCBpczY0Qml0LCBSZWdpc3RlcklEIHJ0LCBpbnQqIGZyb20sIGNvbnN0IGludCogZnJvbUluc3Ry
dWN0aW9uLCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ29tcGFyZUFuZEJyYW5jaChD
b25kaXRpb24gY29uZGl0aW9uLCBib29sIGlzNjRCaXQsIFJlZ2lzdGVySUQgcnQsIGludCogZnJv
bSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvLCBDb3B5RnVuY3Rpb24gY29w
eSA9IHBlcmZvcm1KSVRNZW1jcHkpCiAgICAgewogICAgICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwpAQCAtMzA3NiwyMiArMzA3NiwyMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIGlmICh1c2VEaXJlY3QgfHwgaXNEaXJlY3QpIHsKICAgICAgICAgICAg
IGludCBpbnNuID0gY29tcGFyZUFuZEJyYW5jaEltbWVkaWF0ZShpczY0Qml0ID8gRGF0YXNpemVf
NjQgOiBEYXRhc2l6ZV8zMiwgY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxp
bnQ+KG9mZnNldCksIHJ0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011
bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgICAgIHBl
cmZvcm1KSVRNZW1jcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIGNv
cHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIGlmICghaXNEaXJlY3Qp
IHsKICAgICAgICAgICAgICAgICBpbnNuID0gbm9wUHNldWRvKCk7CiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20g
KyAxKSA9PSAoZnJvbSArIDEpKTsKLSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGZy
b20gKyAxLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgICAgIGNvcHkoZnJvbSAr
IDEsICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBpbnQgaW5zbiA9IGNvbXBhcmVBbmRCcmFuY2hJbW1lZGlhdGUoaXM2NEJp
dCA/IERhdGFzaXplXzY0IDogRGF0YXNpemVfMzIsIGludmVydChjb25kaXRpb24pID09IENvbmRp
dGlvbk5FLCAyLCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0
aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7Ci0gICAgICAgICAgICBwZXJm
b3JtSklUTWVtY3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBsaW5r
SnVtcE9yQ2FsbDxmYWxzZT4oZnJvbSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEsIHRvKTsKKyAg
ICAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIGxp
bmtKdW1wT3JDYWxsPGZhbHNlPihmcm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsgMSwgdG8sIGNv
cHkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0RpcmVjdD4KLSAg
ICBzdGF0aWMgdm9pZCBsaW5rQ29uZGl0aW9uYWxCcmFuY2goQ29uZGl0aW9uIGNvbmRpdGlvbiwg
aW50KiBmcm9tLCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8pCisgICAgc3Rh
dGljIHZvaWQgbGlua0NvbmRpdGlvbmFsQnJhbmNoKENvbmRpdGlvbiBjb25kaXRpb24sIGludCog
ZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvLCBDb3B5RnVuY3Rpb24g
Y29weSA9IHBlcmZvcm1KSVRNZW1jcHkpCiAgICAgewogICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwpAQCAtMzEwNCwyMiArMzEwNCwyMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIGlmICh1c2VEaXJlY3QgfHwgaXNEaXJlY3QpIHsKICAgICAgICAg
ICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoc3RhdGljX2Nhc3Q8aW50
PihvZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRV
cFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwotICAgICAgICAg
ICAgcGVyZm9ybUpJVE1lbWNweShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAg
ICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwogICAgICAgICAgICAgaWYgKCFpc0Rp
cmVjdCkgewogICAgICAgICAgICAgICAgIGluc24gPSBub3BQc2V1ZG8oKTsKICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4o
ZnJvbSArIDEpID09IChmcm9tICsgMSkpOwotICAgICAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1j
cHkoZnJvbSArIDEsICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgY29weShm
cm9tICsgMSwgJmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
MiwgaW52ZXJ0KGNvbmRpdGlvbikpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRV
cFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwotICAgICAgICAg
ICAgcGVyZm9ybUpJVE1lbWNweShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwotICAgICAgICAg
ICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KGZyb20gKyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0
byk7CisgICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAg
ICAgICBsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oZnJvbSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEs
IHRvLCBjb3B5KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHRlbXBsYXRlPGJvb2wgaXNEaXJl
Y3Q+Ci0gICAgc3RhdGljIHZvaWQgbGlua1Rlc3RBbmRCcmFuY2goQ29uZGl0aW9uIGNvbmRpdGlv
biwgdW5zaWduZWQgYml0TnVtYmVyLCBSZWdpc3RlcklEIHJ0LCBpbnQqIGZyb20sIGNvbnN0IGlu
dCogZnJvbUluc3RydWN0aW9uLCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBsaW5rVGVzdEFu
ZEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCB1bnNpZ25lZCBiaXROdW1iZXIsIFJlZ2lzdGVy
SUQgcnQsIGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvLCBD
b3B5RnVuY3Rpb24gY29weSA9IHBlcmZvcm1KSVRNZW1jcHkpCiAgICAgewogICAgICAgICBBU1NF
UlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwpAQCAtMzEzMywxNyAr
MzEzMywxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmICh1c2VEaXJlY3QgfHwgaXNEaXJlY3Qp
IHsKICAgICAgICAgICAgIGludCBpbnNuID0gdGVzdEFuZEJyYW5jaEltbWVkaWF0ZShjb25kaXRp
b24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0TnVtYmVyKSwgc3RhdGljX2Nh
c3Q8aW50PihvZmZzZXQpLCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVw
VG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7Ci0gICAgICAgICAg
ICBwZXJmb3JtSklUTWVtY3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAg
ICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICBpZiAoIWlzRGly
ZWN0KSB7CiAgICAgICAgICAgICAgICAgaW5zbiA9IG5vcFBzZXVkbygpOwogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihm
cm9tICsgMSkgPT0gKGZyb20gKyAxKSk7Ci0gICAgICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNw
eShmcm9tICsgMSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgICAgICBjb3B5KGZy
b20gKyAxLCAmaW5zbiwgc2l6ZW9mKGludCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaW50IGluc24gPSB0ZXN0QW5kQnJhbmNoSW1tZWRpYXRlKGludmVy
dChjb25kaXRpb24pID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdE51bWJlciks
IDIsIHJ0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8
aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgICAgIHBlcmZvcm1KSVRN
ZW1jcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIGxpbmtKdW1wT3JD
YWxsPGZhbHNlPihmcm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsgMSwgdG8pOworICAgICAgICAg
ICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgbGlua0p1bXBP
ckNhbGw8ZmFsc2U+KGZyb20gKyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0bywgY29weSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTMyMDEsMTEgKzMyMDEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludCo+KHN0YXRpY19jYXN0PGNoYXIqPihjb2Rl
KSArIGxhYmVsLm1fb2Zmc2V0KTsKICAgICB9CiAKLSAgICBpbnQqIGFkZHJlc3NPZihBc3NlbWJs
ZXJMYWJlbCBsYWJlbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzT2YobV9idWZmZXIu
ZGF0YSgpLCBsYWJlbCk7Ci0gICAgfQotCiAgICAgc3RhdGljIFJlZ2lzdGVySUQgZGlzYXNzZW1i
bGVYT3JTcChpbnQgcmVnKSB7IHJldHVybiByZWcgPT0gMzEgPyBBUk02NFJlZ2lzdGVyczo6c3Ag
OiBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPihyZWcpOyB9CiAgICAgc3RhdGljIFJlZ2lzdGVySUQg
ZGlzYXNzZW1ibGVYT3JacihpbnQgcmVnKSB7IHJldHVybiByZWcgPT0gMzEgPyBBUk02NFJlZ2lz
dGVyczo6enIgOiBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPihyZWcpOyB9CiAgICAgc3RhdGljIFJl
Z2lzdGVySUQgZGlzYXNzZW1ibGVYT3Jack9yU3AoYm9vbCB1c2VaciwgaW50IHJlZykgeyByZXR1
cm4gcmVnID09IDMxID8gKHVzZVpyID8gQVJNNjRSZWdpc3RlcnM6OnpyIDogQVJNNjRSZWdpc3Rl
cnM6OnNwKSA6IHN0YXRpY19jYXN0PFJlZ2lzdGVySUQ+KHJlZyk7IH0KQEAgLTM3ODEsMTAgKzM3
NzYsMTAgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAgICAgfQogCi0gICAgQXNzZW1ibGVyQnVmZmVy
IG1fYnVmZmVyOwogICAgIFZlY3RvcjxMaW5rUmVjb3JkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV9qdW1wc1RvTGluazsKICAgICBpbnQgbV9pbmRleE9mTGFzdFdhdGNocG9pbnQ7CiAgICAg
aW50IG1faW5kZXhPZlRhaWxPZkxhc3RXYXRjaHBvaW50OworICAgIEFzc2VtYmxlckJ1ZmZlciBt
X2J1ZmZlcjsKIAogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IE1BWF9Q
T0lOVEVSX0JJVFMgPSA0ODsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QVJNQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUyLDkg
Kzc1MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludChO
T1ApOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFz
ZSwgc2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KQorICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1bmN0aW9uPgorICAgICAgICBzdGF0aWMgdm9pZCBm
aWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgQ29weUZ1bmN0aW9uIGNvcHkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1v
cnkpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGNvcHkpOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIShzaXplICUgc2l6ZW9mKGludDMyX3QpKSk7CiAKICAgICAgICAgICAgIGludDMy
X3QqIHB0ciA9IHN0YXRpY19jYXN0PGludDMyX3QqPihiYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIz
NjU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjI0Nyw3ICsyMjQ3LDYgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogCi0gICAgdm9pZCogdW5saW5rZWRDb2RlKCkgeyByZXR1cm4gbV9mb3JtYXR0ZXIu
ZGF0YSgpOyB9CiAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0
ZXIuY29kZVNpemUoKTsgfQogCiAgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZz
ZXQoQXNzZW1ibGVyTGFiZWwgY2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAy
MzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODYyLDggKzg2Miw2IEBAIHB1YmxpYzoKICAg
ICAgICAgQXNzZW1ibGVyVHlwZTo6Y2FjaGVGbHVzaChjb2RlLCBzaXplKTsKICAgICB9CiAKLSAg
ICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOwotICAgIAogICAgIHRlbXBsYXRlPFB0clRhZyB0
YWc+CiAgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbDx0YWc+IHRhcmdldCkKICAgICB7CkBAIC05NjIsNiArOTYwLDExIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZW1pdE5vcHMoc2l6ZV90IG1lbW9yeVRvRmlsbFdpdGhOb3BzSW5C
eXRlcykKICAgICB7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1v
cnlUb0ZpbGxXaXRoTm9wc0luQnl0ZXMgJSA0ID09IDApOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVzIC8gNDsgKytpKQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisjZWxzZQogICAgICAgICBBc3NlbWJsZXJCdWZmZXIm
IGJ1ZmZlciA9IG1fYXNzZW1ibGVyLmJ1ZmZlcigpOwogICAgICAgICBzaXplX3Qgc3RhcnRDb2Rl
U2l6ZSA9IGJ1ZmZlci5jb2RlU2l6ZSgpOwogICAgICAgICBzaXplX3QgdGFyZ2V0Q29kZVNpemUg
PSBzdGFydENvZGVTaXplICsgbWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVzOwpAQCAtOTY5LDYg
Kzk3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1v
cnkgPSBmYWxzZTsKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6ZmlsbE5vcHMoc3RhdGljX2Nhc3Q8
Y2hhcio+KGJ1ZmZlci5kYXRhKCkpICsgc3RhcnRDb2RlU2l6ZSwgbWVtb3J5VG9GaWxsV2l0aE5v
cHNJbkJ5dGVzLCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpOwogICAgICAgICBidWZmZXIu
c2V0Q29kZVNpemUodGFyZ2V0Q29kZVNpemUpOworI2VuZGlmCiAgICAgfQogCiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHRhZ1JldHVybkFkZHJlc3MoKSB7IH0KQEAgLTk4Myw2ICs5ODcsMTEgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIoKQogICAgICAg
ICA6IG1fcmFuZG9tU291cmNlKDApCisgICAgICAgICwgbV9hc3NlbWJsZXIoCisjaWYgQ1BVKEFS
TTY0RSkKKyAgICAgICAgICAgICAgcmFuZG9tKCkKKyNlbmRpZgorICAgICAgICAgICAgICAgICkK
ICAgICB7CiAgICAgICAgIGludmFsaWRhdGVBbGxUZW1wUmVnaXN0ZXJzKCk7CiAgICAgfQpAQCAt
OTk4LDYgKzEwMDcsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG1fcmFuZG9tU291cmNlSXNJ
bml0aWFsaXplZCB7IGZhbHNlIH07CiAgICAgV2Vha1JhbmRvbSBtX3JhbmRvbVNvdXJjZTsKK3B1
YmxpYzoKKyAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOworcHJvdGVjdGVkOgogCiAjaWYg
RU5BQkxFKERGR19SRUdJU1RFUl9BTExPQ0FUSU9OX1ZBTElEQVRJT04pCiAgICAgVmVjdG9yPFJl
Z2lzdGVyQWxsb2NhdGlvbk9mZnNldCwgMTA+IG1fcmVnaXN0ZXJBbGxvY2F0aW9uRm9yT2Zmc2V0
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJCdWZmZXIuaAkocmV2aXNpb24gMjM2NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDE2
IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lmIENQVShBUk02NEUpCisjaW5jbHVkZSA8d3Rm
L1B0clRhZy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFz
cyBMaW5rQnVmZmVyOworCiAgICAgc3RydWN0IEFzc2VtYmxlckxhYmVsIHsKICAgICAgICAgQXNz
ZW1ibGVyTGFiZWwoKQogICAgICAgICAgICAgOiBtX29mZnNldChzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpCkBAIC0xNDEsMTEgKzE0NiwzNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKICAgICB9OwogCisjaWYgQ1BVKEFSTTY0RSkK
KyAgICBjbGFzcyBBUk02NEVIYXNoIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFSTTY0RUhhc2go
dW5zaWduZWQgcmFuZG9tTnVtYmVyKQorICAgICAgICAgICAgOiBtX2hhc2gocmFuZG9tTnVtYmVy
KQorICAgICAgICAgICAgLCBtX3JhbmRvbVNlZWQocmFuZG9tTnVtYmVyKQorICAgICAgICB7IH0K
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHVwZGF0ZSh1bnNpZ25lZCB2YWx1ZSwgdWludHB0
cl90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQoKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4odmFsdWUpICsgbV9oYXNoKSBeIChtX2hhc2ggPj4gMzIpLCBzdGF0
aWNfY2FzdDxQdHJUYWc+KGluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgdWludHB0cl90IGhh
c2goKSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KKyAgICAgICAgdW5zaWduZWQgcmFuZG9tU2Vl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZG9tU2VlZDsgfQorICAgIHByaXZhdGU6CisgICAgICAg
IHVpbnRwdHJfdCBtX2hhc2g7CisgICAgICAgIHVuc2lnbmVkIG1fcmFuZG9tU2VlZDsKKyAgICB9
OworI2VuZGlmCisKICAgICBjbGFzcyBBc3NlbWJsZXJCdWZmZXIgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgQXNzZW1ibGVyQnVmZmVyKCkKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyKAorI2lmIENQ
VShBUk02NEUpCisgICAgICAgICAgICB1bnNpZ25lZCByYW5kb21OdW1iZXIKKyNlbmRpZgorICAg
ICAgICAgICAgICAgICkKICAgICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwg
bV9pbmRleCgwKQorI2lmIENQVShBUk02NEUpCisgICAgICAgICAgICAsIG1faGFzaChyYW5kb21O
dW1iZXIpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE2NSwyNSArMTk2LDIz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEobV9pbmRleCAmIChhbGln
bm1lbnQgLSAxKSk7CiAgICAgICAgIH0KIAorI2lmICFDUFUoQVJNNjQpCiAgICAgICAgIHZvaWQg
cHV0Qnl0ZVVuY2hlY2tlZChpbnQ4X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFs
dWUpOyB9CiAgICAgICAgIHZvaWQgcHV0Qnl0ZShpbnQ4X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwo
dmFsdWUpOyB9CiAgICAgICAgIHZvaWQgcHV0U2hvcnRVbmNoZWNrZWQoaW50MTZfdCB2YWx1ZSkg
eyBwdXRJbnRlZ3JhbFVuY2hlY2tlZCh2YWx1ZSk7IH0KICAgICAgICAgdm9pZCBwdXRTaG9ydChp
bnQxNl90IHZhbHVlKSB7IHB1dEludGVncmFsKHZhbHVlKTsgfQotICAgICAgICB2b2lkIHB1dElu
dFVuY2hlY2tlZChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsVW5jaGVja2VkKHZhbHVlKTsg
fQotICAgICAgICB2b2lkIHB1dEludChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsKHZhbHVl
KTsgfQogICAgICAgICB2b2lkIHB1dEludDY0VW5jaGVja2VkKGludDY0X3QgdmFsdWUpIHsgcHV0
SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9CiAgICAgICAgIHZvaWQgcHV0SW50NjQoaW50NjRf
dCB2YWx1ZSkgeyBwdXRJbnRlZ3JhbCh2YWx1ZSk7IH0KLQotICAgICAgICB2b2lkKiBkYXRhKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS5idWZmZXIoKTsK
LSAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHZvaWQgcHV0SW50VW5jaGVja2VkKGludDMyX3Qg
dmFsdWUpIHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9CisgICAgICAgIHZvaWQgcHV0
SW50KGludDMyX3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwodmFsdWUpOyB9CiAKICAgICAgICAgc2l6
ZV90IGNvZGVTaXplKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXg7CiAgICAgICAgIH0KIAorI2lmICFDUFUoQVJNNjQpCiAgICAgICAgIHZvaWQgc2V0Q29kZVNp
emUoc2l6ZV90IGluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXYXJuaW5nOiBPbmx5
IHVzZSB0aGlzIGlmIHlvdSBrbm93IGV4YWN0bHkgd2hhdCB5b3UgYXJlIGRvaW5nLgpAQCAtMTky
LDYgKzIyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9pbmRleCA9IGluZGV4
OwogICAgICAgICAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zdG9yYWdlLmNhcGFjaXR5KCkpOwog
ICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbCgpIGNvbnN0
CiAgICAgICAgIHsKQEAgLTIwOSw2ICsyMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8KICAgICAgICAgLy8gTG9jYWxXcml0ZXIgKkNBTk5PVCogYmUgbWl4ZWQgd2l0aCBvdGhlciB0
eXBlcyBvZiBhY2Nlc3MgdG8gQXNzZW1ibGVyQnVmZmVyLgogICAgICAgICAvLyBBc3NlbWJsZXJC
dWZmZXIgY2Fubm90IGJlIHVzZWQgdW50aWwgaXRzIExvY2FsV3JpdGVyIGdvZXMgb3V0IG9mIHNj
b3BlLgorI2lmICFDUFUoQVJNNjQpIC8vIElmIHdlIGV2ZXIgbmVlZCB0byB1c2UgdGhpcyBvbiBh
cm02NGUsIHdlIHdvdWxkIG5lZWQgdG8gbWFrZSB0aGUgY2hlY2tzdW0gYXdhcmUgb2YgdGhpcy4K
ICAgICAgICAgY2xhc3MgTG9jYWxXcml0ZXIgewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAg
ICBMb2NhbFdyaXRlcihBc3NlbWJsZXJCdWZmZXImIGJ1ZmZlciwgdW5zaWduZWQgcmVxdWlyZWRT
cGFjZSkKQEAgLTI1MSw2ICsyODIsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBtX3JlcXVpcmVkU3BhY2U7CiAjZW5kaWYKICAgICAgICAgfTsKKyNlbmRpZiAvLyAh
Q1BVKEFSTTY0KQorCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgQVJNNjRFSGFzaCBoYXNoKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faGFzaDsKKyAgICAgICAgfQor
I2VuZGlmCisKKyNpZiAhQ1BVKEFSTTY0KSAvLyBJZiB3ZSB3ZXJlIHRvIGRlZmluZSB0aGlzIG9u
IGFybTY0ZSwgd2UnZCBuZWVkIGEgd2F5IHRvIHVwZGF0ZSB0aGUgaGFzaCBhcyB3ZSB3cm90ZSBk
aXJlY3RseSBpbnRvIHRoZSBidWZmZXIuCisgICAgICAgIHZvaWQqIGRhdGEoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLmJ1ZmZlcigpOworICAgICAgICB9
CisjZW5kaWYKKwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnRlZ3JhbFR5cGU+CkBAIC0yNjUsMzUgKzMxMiwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPgogICAgICAgICB2b2lkIHB1dEludGVn
cmFsVW5jaGVja2VkKEludGVncmFsVHlwZSB2YWx1ZSkKICAgICAgICAgeworI2lmIENQVShBUk02
NCkKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHZhbHVlKSA9PSA0LCAiIik7Cisj
aWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIG1faGFzaC51cGRhdGUodmFsdWUsIG1faW5kZXgp
OworI2VuZGlmCisjZW5kaWYKICAgICAgICAgICAgIEFTU0VSVChpc0F2YWlsYWJsZShzaXplb2Yo
SW50ZWdyYWxUeXBlKSkpOwogICAgICAgICAgICAgV1RGOjp1bmFsaWduZWRTdG9yZTxJbnRlZ3Jh
bFR5cGU+KG1fc3RvcmFnZS5idWZmZXIoKSArIG1faW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAg
IG1faW5kZXggKz0gc2l6ZW9mKEludGVncmFsVHlwZSk7CiAgICAgICAgIH0KIAotICAgICAgICB2
b2lkIGFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKCFpc0F2YWlsYWJsZShzaXplKSkKLSAgICAgICAgICAgICAgICBncm93KHNpemUp
OwotCi0gICAgICAgICAgICBtZW1jcHkobV9zdG9yYWdlLmJ1ZmZlcigpICsgbV9pbmRleCwgZGF0
YSwgc2l6ZSk7Ci0gICAgICAgICAgICBtX2luZGV4ICs9IHNpemU7Ci0gICAgICAgIH0KLQorICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZ3JvdyhpbnQgZXh0cmFDYXBhY2l0eSA9IDApCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fc3RvcmFnZS5ncm93KGV4dHJhQ2FwYWNpdHkpOwogICAgICAg
ICB9CiAKLSAgICBwcml2YXRlOgogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBvdXRPZkxpbmVH
cm93KCkKICAgICAgICAgewogICAgICAgICAgICAgbV9zdG9yYWdlLmdyb3coKTsKICAgICAgICAg
fQogCisjaWYgIUNQVShBUk02NCkKICAgICAgICAgZnJpZW5kIExvY2FsV3JpdGVyOworI2VuZGlm
CisgICAgICAgIGZyaWVuZCBMaW5rQnVmZmVyOwogCiAgICAgICAgIEFzc2VtYmxlckRhdGEgbV9z
dG9yYWdlOwogICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworI2lmIENQVShBUk02NEUpCisgICAg
ICAgIEFSTTY0RUhhc2ggbV9oYXNoOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDIzNjU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDE1IEBAIHZv
aWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICBtX2Fzc2VtYmxlclN0
b3JhZ2UgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKS5yZWxlYXNlQXNzZW1i
bGVyRGF0YSgpOwogICAgIHVpbnQ4X3QqIGluRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KG1fYXNzZW1ibGVyU3RvcmFnZS5idWZmZXIoKSk7CiAKKyAgICB1aW50OF90KiBjb2RlT3V0
RGF0YSA9IG1fY29kZS5kYXRhTG9jYXRpb248dWludDhfdCo+KCk7CisjaWYgQ1BVKEFSTTY0RSkK
KyAgICBjb25zdCBBUk02NEVIYXNoIGFzc2VtYmxlckJ1ZmZlckhhc2ggPSBtYWNyb0Fzc2VtYmxl
ci5tX2Fzc2VtYmxlci5idWZmZXIoKS5oYXNoKCk7CisgICAgQVJNNjRFSGFzaCB2ZXJpZnlVbmNv
bXBhY3RlZEhhc2goYXNzZW1ibGVyQnVmZmVySGFzaC5yYW5kb21TZWVkKCkpOworICAgIHVpbnQ4
X3QqIG91dERhdGEgPSBjb2RlT3V0RGF0YTsKKyNlbHNlCiAgICAgQXNzZW1ibGVyRGF0YSBvdXRC
dWZmZXIobV9zaXplKTsKLQogICAgIHVpbnQ4X3QqIG91dERhdGEgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihvdXRCdWZmZXIuYnVmZmVyKCkpOwotICAgIHVpbnQ4X3QqIGNvZGVPdXREYXRh
ID0gbV9jb2RlLmRhdGFMb2NhdGlvbjx1aW50OF90Kj4oKTsKKyNlbmRpZgogI2lmIENQVShBUk02
NCkKICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1bnNpZ25l
ZCk+KG91dERhdGEpID09IG91dERhdGEpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011
bHRpcGxlT2Y8c2l6ZW9mKHVuc2lnbmVkKT4oY29kZU91dERhdGEpID09IGNvZGVPdXREYXRhKTsK
QEAgLTEyMSw2ICsxMjYsMTEgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtD
b2RlKAogICAgIGludCByZWFkUHRyID0gMDsKICAgICBpbnQgd3JpdGVQdHIgPSAwOwogICAgIHVu
c2lnbmVkIGp1bXBDb3VudCA9IGp1bXBzVG9MaW5rLnNpemUoKTsKKworI2lmIENQVShBUk02NEUp
CisgICAgb3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X3RvX3J3KCk7CisjZW5kaWYKKwogICAg
IGlmIChtX3Nob3VsZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgewogICAgICAgICAgICAgaW50IG9mZnNl
dCA9IHJlYWRQdHIgLSB3cml0ZVB0cjsKQEAgLTEzNCw4ICsxNDQsMTggQEAgdm9pZCBMaW5rQnVm
ZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAgICAgICAgICAgQVNTRVJUKCEocmVnaW9u
U2l6ZSAlIDIpKTsKICAgICAgICAgICAgIEFTU0VSVCghKHJlYWRQdHIgJSAyKSk7CiAgICAgICAg
ICAgICBBU1NFUlQoISh3cml0ZVB0ciAlIDIpKTsKLSAgICAgICAgICAgIHdoaWxlIChjb3B5U291
cmNlICE9IGNvcHlFbmQpCi0gICAgICAgICAgICAgICAgKmNvcHlEc3QrKyA9ICpjb3B5U291cmNl
Kys7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcmVhZFB0
cjsKKyNlbmRpZgorICAgICAgICAgICAgd2hpbGUgKGNvcHlTb3VyY2UgIT0gY29weUVuZCkgewor
ICAgICAgICAgICAgICAgIEluc3RydWN0aW9uVHlwZSBpbnNuID0gKmNvcHlTb3VyY2UrKzsKKyNp
ZiBDUFUoQVJNNjRFKQorICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEluc3Ry
dWN0aW9uVHlwZSkgPT0gNCwgIiIpOworICAgICAgICAgICAgICAgIHZlcmlmeVVuY29tcGFjdGVk
SGFzaC51cGRhdGUoaW5zbiwgaW5kZXgpOworICAgICAgICAgICAgICAgIGluZGV4ICs9IHNpemVv
ZihJbnN0cnVjdGlvblR5cGUpOworI2VuZGlmCisgICAgICAgICAgICAgICAgKmNvcHlEc3QrKyA9
IGluc247CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZWNvcmRMaW5rT2Zmc2V0cyhtX2Fz
c2VtYmxlclN0b3JhZ2UsIHJlYWRQdHIsIGp1bXBzVG9MaW5rW2ldLmZyb20oKSwgb2Zmc2V0KTsK
ICAgICAgICAgICAgIHJlYWRQdHIgKz0gcmVnaW9uU2l6ZTsKICAgICAgICAgICAgIHdyaXRlUHRy
ICs9IHJlZ2lvblNpemU7CkBAIC0xNjYsMjkgKzE4Niw3NiBAQCB2b2lkIExpbmtCdWZmZXI6OmNv
cHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgICAgICAgICAgICAgQVNTRVJUKCFNYWNyb0Fzc2Vt
Ymxlcjo6Y2FuQ29tcGFjdChqdW1wc1RvTGlua1tpXS50eXBlKCkpKTsKICAgICAgICAgfQogICAg
IH0KKwogICAgIC8vIENvcHkgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBqdW1wCi0gICAgbWVt
Y3B5KG91dERhdGEgKyB3cml0ZVB0ciwgaW5EYXRhICsgcmVhZFB0ciwgaW5pdGlhbFNpemUgLSBy
ZWFkUHRyKTsKKyAgICB7CisgICAgICAgIEluc3RydWN0aW9uVHlwZSogZHN0ID0gYml0d2lzZV9j
YXN0PEluc3RydWN0aW9uVHlwZSo+KG91dERhdGEgKyB3cml0ZVB0cik7CisgICAgICAgIEluc3Ry
dWN0aW9uVHlwZSogc3JjID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uVHlwZSo+KGluRGF0YSAr
IHJlYWRQdHIpOworICAgICAgICBzaXplX3QgYnl0ZXMgPSBpbml0aWFsU2l6ZSAtIHJlYWRQdHI7
CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZHN0KSAl
IHNpemVvZihJbnN0cnVjdGlvblR5cGUpID09IDApOworICAgICAgICBSRUxFQVNFX0FTU0VSVChi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihzcmMpICUgc2l6ZW9mKEluc3RydWN0aW9uVHlwZSkgPT0g
MCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzICUgc2l6ZW9mKEluc3RydWN0aW9uVHlw
ZSkgPT0gMCk7CisKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHJl
YWRQdHI7CisjZW5kaWYKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ5dGVzOyBp
ICs9IHNpemVvZihJbnN0cnVjdGlvblR5cGUpKSB7CisgICAgICAgICAgICBJbnN0cnVjdGlvblR5
cGUgaW5zbiA9ICpzcmMrKzsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAgICAgdmVyaWZ5VW5j
b21wYWN0ZWRIYXNoLnVwZGF0ZShpbnNuLCBpbmRleCk7CisgICAgICAgICAgICBpbmRleCArPSBz
aXplb2YoSW5zdHJ1Y3Rpb25UeXBlKTsKKyNlbmRpZgorICAgICAgICAgICAgKmRzdCsrID0gaW5z
bjsKKyAgICAgICAgfQorICAgIH0KKworI2lmIENQVShBUk02NEUpCisgICAgaWYgKHZlcmlmeVVu
Y29tcGFjdGVkSGFzaC5oYXNoKCkgIT0gYXNzZW1ibGVyQnVmZmVySGFzaC5oYXNoKCkpIHsKKyAg
ICAgICAgZGF0YUxvZ0xuKCJIYXNoZXMgZG9uJ3QgbWF0Y2g6ICIsIFJhd1BvaW50ZXIoYml0d2lz
ZV9jYXN0PHZvaWQqPih2ZXJpZnlVbmNvbXBhY3RlZEhhc2guaGFzaCgpKSksICIgIiwgUmF3UG9p
bnRlcihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGFzc2VtYmxlckJ1ZmZlckhhc2guaGFzaCgpKSkpOwor
ICAgICAgICBkYXRhTG9nTG4oIkNyYXNoaW5nISIpOworICAgICAgICBDUkFTSCgpOworICAgIH0K
KyNlbmRpZgorCiAgICAgcmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJsZXJTdG9yYWdlLCByZWFk
UHRyLCBpbml0aWFsU2l6ZSwgcmVhZFB0ciAtIHdyaXRlUHRyKTsKICAgICAgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1bXBDb3VudDsgKytpKSB7CisjaWYgQ1BVKEFSTTY0RSkK
KyAgICAgICAgYXV0byBtZW1jcHlGdW5jdGlvbiA9IG1lbWNweTsKKyNlbHNlCisgICAgICAgIGF1
dG8gbWVtY3B5RnVuY3Rpb24gPSBwZXJmb3JtSklUTWVtY3B5OworI2VuZGlmCisKICAgICAgICAg
dWludDhfdCogbG9jYXRpb24gPSBjb2RlT3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLmZyb20oKTsK
ICAgICAgICAgdWludDhfdCogdGFyZ2V0ID0gY29kZU91dERhdGEgKyBqdW1wc1RvTGlua1tpXS50
bygpIC0gZXhlY3V0YWJsZU9mZnNldEZvcihqdW1wc1RvTGlua1tpXS50bygpKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OmxpbmsoanVtcHNUb0xpbmtbaV0sIG91dERhdGEgKyBqdW1wc1RvTGlu
a1tpXS5mcm9tKCksIGxvY2F0aW9uLCB0YXJnZXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
bGluayhqdW1wc1RvTGlua1tpXSwgb3V0RGF0YSArIGp1bXBzVG9MaW5rW2ldLmZyb20oKSwgbG9j
YXRpb24sIHRhcmdldCwgbWVtY3B5RnVuY3Rpb24pOwogICAgIH0KIAotICAgIGp1bXBzVG9MaW5r
LmNsZWFyKCk7Ci0KICAgICBzaXplX3QgY29tcGFjdFNpemUgPSB3cml0ZVB0ciArIGluaXRpYWxT
aXplIC0gcmVhZFB0cjsKKyAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkgeworICAgICAgICBz
aXplX3Qgbm9wU2l6ZUluQnl0ZXMgPSBpbml0aWFsU2l6ZSAtIGNvbXBhY3RTaXplOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcyhvdXREYXRhICsgY29t
cGFjdFNpemUsIG5vcFNpemVJbkJ5dGVzLCBtZW1jcHkpOworICAgIH0KKworI2lmIENQVShBUk02
NEUpCisgICAgb3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X3RvX3J4KCk7CisjZW5kaWYKKwog
ICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpIHsKICAgICAgICAgbV9zaXplID0gY29tcGFjdFNp
emU7CiAgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgc2l6ZV90IG5vcFNpemVJbkJ5dGVzID0gaW5pdGlhbFNpemUgLSBjb21w
YWN0U2l6ZTsKLSAgICAgICAgYm9vbCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkgPSBmYWxz
ZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMob3V0
RGF0YSArIGNvbXBhY3RTaXplLCBub3BTaXplSW5CeXRlcywgaXNDb3B5aW5nVG9FeGVjdXRhYmxl
TWVtb3J5KTsKICAgICB9CiAKKyNpZiAhQ1BVKEFSTTY0RSkKKyAgICBBU1NFUlQoY29kZU91dERh
dGEgIT0gb3V0RGF0YSk7CiAgICAgcGVyZm9ybUpJVE1lbWNweShjb2RlT3V0RGF0YSwgb3V0RGF0
YSwgbV9zaXplKTsKKyNlbHNlCisgICAgQVNTRVJUKGNvZGVPdXREYXRhID09IG91dERhdGEpOwor
I2VuZGlmCisKKyAgICBqdW1wc1RvTGluay5jbGVhcigpOwogCiAjaWYgRFVNUF9MSU5LX1NUQVRJ
U1RJQ1MKICAgICBkdW1wTGlua1N0YXRpc3RpY3MoY29kZU91dERhdGEsIGluaXRpYWxTaXplLCBt
X3NpemUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBT
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzNjU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsOSArMjY2LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAwMCk7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBib29sIGlz
Q29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1
bmN0aW9uPgorICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXpl
LCBDb3B5RnVuY3Rpb24gY29weSkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpc0NvcHlp
bmdUb0V4ZWN1dGFibGVNZW1vcnkpOworICAgICAgICBVTlVTRURfUEFSQU0oY29weSk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCEoc2l6ZSAlIHNpemVvZihpbnQzMl90KSkpOwogCiAgICAgICAg
IGludDMyX3QqIHB0ciA9IHN0YXRpY19jYXN0PGludDMyX3QqPihiYXNlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDEyIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQXNzZW1ibGVyOjpKdW1wVHlwZSBEZWZhdWx0SnVt
cCA9IEFzc2VtYmxlcjo6SnVtcE5vQ29uZGl0aW9uRml4ZWRTaXplOwogCiAgICAgVmVjdG9yPExp
bmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYganVtcHNUb0xpbmsoKSB7IHJldHVy
biBtX2Fzc2VtYmxlci5qdW1wc1RvTGluaygpOyB9Ci0gICAgdm9pZCogdW5saW5rZWRDb2RlKCkg
eyByZXR1cm4gbV9hc3NlbWJsZXIudW5saW5rZWRDb2RlKCk7IH0KICAgICBzdGF0aWMgYm9vbCBj
YW5Db21wYWN0KEp1bXBUeXBlIGp1bXBUeXBlKSB7IHJldHVybiBBc3NlbWJsZXI6OmNhbkNvbXBh
Y3QoanVtcFR5cGUpOyB9CiAgICAgc3RhdGljIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUo
SnVtcFR5cGUganVtcFR5cGUsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRv
KSB7IHJldHVybiBBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZShqdW1wVHlwZSwgZnJvbSwgdG8p
OyB9CiAgICAgc3RhdGljIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUoTGlua1JlY29yZCYg
cmVjb3JkLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4g
QXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUocmVjb3JkLCBmcm9tLCB0byk7IH0KICAgICBzdGF0
aWMgaW50IGp1bXBTaXplRGVsdGEoSnVtcFR5cGUganVtcFR5cGUsIEp1bXBMaW5rVHlwZSBqdW1w
TGlua1R5cGUpIHsgcmV0dXJuIEFzc2VtYmxlcjo6anVtcFNpemVEZWx0YShqdW1wVHlwZSwganVt
cExpbmtUeXBlKTsgfQotICAgIHN0YXRpYyB2b2lkIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1
aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb24sIHVpbnQ4X3QqIHRv
KSB7IHJldHVybiBBc3NlbWJsZXI6OmxpbmsocmVjb3JkLCBmcm9tLCBmcm9tSW5zdHJ1Y3Rpb24s
IHRvKTsgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAgc3RhdGlj
IHZvaWQgbGluayhMaW5rUmVjb3JkJiByZWNvcmQsIHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4
X3QqIGZyb21JbnN0cnVjdGlvbiwgdWludDhfdCogdG8sIENvcHlGdW5jdGlvbiBjb3B5KSB7IHJl
dHVybiBBc3NlbWJsZXI6OmxpbmsocmVjb3JkLCBmcm9tLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvLCBj
b3B5KTsgfQogCiAgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRyID0gVGltZXNFaWdodDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDIzNjU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBWZWN0b3I8TGlua1JlY29yZCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBqdW1wc1RvTGluaygpIHsgcmV0dXJuIG1fYXNzZW1ibGVy
Lmp1bXBzVG9MaW5rKCk7IH0KLSAgICB2b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJldHVybiBtX2Fz
c2VtYmxlci51bmxpbmtlZENvZGUoKTsgfQogICAgIHN0YXRpYyBib29sIGNhbkNvbXBhY3QoSnVt
cFR5cGUganVtcFR5cGUpIHsgcmV0dXJuIEFSTXY3QXNzZW1ibGVyOjpjYW5Db21wYWN0KGp1bXBU
eXBlKTsgfQogICAgIHN0YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBl
IGp1bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1
cm4gQVJNdjdBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZShqdW1wVHlwZSwgZnJvbSwgdG8pOyB9
CiAgICAgc3RhdGljIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUoTGlua1JlY29yZCYgcmVj
b3JkLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4gQVJN
djdBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZShyZWNvcmQsIGZyb20sIHRvKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZp
c2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMzLDkgKzM5MzMsMTAgQEAgcHVibGljOgogICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfTk9QKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgYm9vbCBpc0NvcHlpbmdUb0V4
ZWN1dGFibGVNZW1vcnkpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvcHlGdW5jdGlvbj4KKyAg
ICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgQ29weUZ1bmN0
aW9uIGNvcHkpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oaXNDb3B5aW5nVG9FeGVjdXRh
YmxlTWVtb3J5KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvcHkpOwogI2lmIENQVShYODZfNjQp
CiAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG5vcHNbMTBdWzEwXSA9IHsKICAgICAgICAg
ICAgIC8vIG5vcApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjU3NykKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTgtMDktMjcgIFNhYW0gYmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVmVyaWZ5IHRoZSBjb250ZW50cyBv
ZiBBc3NlbWJsZXJCdWZmZXIgb24gYXJtNjRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAwNTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM4OTE2
NjMwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1B0clRhZy5oOgorICAgICAgICAoV1RGOjp0YWdJbnQpOgorCiAyMDE4LTA5LTI3ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIE1lZGlhUGxheWVyIHNob3Vs
ZCBoYXZlIG1lZGlhUGxheWVyV2FpdGluZ0ZvcktleUNoYW5nZWQoKSAvIGJvb2wgd2FpdGluZ0Zv
cktleSgpIGFjY2Vzc29yCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAkocmV2aXNpb24gMjM2NTc3KQorKysgU291cmNl
L1dURi93dGYvUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsMTMgQEAgaW5s
aW5lIFB0clR5cGUgdW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZQogdGVtcGxhdGU8UHRyVGFnLCB0
eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2lu
dGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgUHRyVHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQ
dHJUeXBlIHB0cikgeyByZXR1cm4gcHRyOyB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBl
PgoraW5saW5lIEludFR5cGUgdGFnSW50KEludFR5cGUgcHRySW50LCBQdHJUYWcpCit7CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoSW50VHlwZSkgPT0gc2l6ZW9mKHVpbnRwdHJfdCksICIiKTsK
KyAgICByZXR1cm4gcHRySW50OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2b2lk
IGFzc2VydElzQ0Z1bmN0aW9uUHRyKFB0clR5cGUpIHsgfQogdGVtcGxhdGU8dHlwZW5hbWUgUHRy
VHlwZT4gdm9pZCBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihQdHJUeXBlKSB7IH0KIApAQCAt
MTg0LDYgKzE5MSw3IEBAIHVzaW5nIFdURjo6cmV0YWdDb2RlUHRyOwogdXNpbmcgV1RGOjpyZW1v
dmVDb2RlUHRyVGFnOwogdXNpbmcgV1RGOjp0YWdDRnVuY3Rpb25QdHI7CiB1c2luZyBXVEY6OnVu
dGFnQ0Z1bmN0aW9uUHRyOwordXNpbmcgV1RGOjp0YWdJbnQ7CiAKIHVzaW5nIFdURjo6YXNzZXJ0
SXNDRnVuY3Rpb25QdHI7CiB1c2luZyBXVEY6OmFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351035</attachid>
            <date>2018-09-27 18:45:31 -0700</date>
            <delta_ts>2018-09-27 21:15:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>34131</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzY1NzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVyIG9u
IGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTE4OTEz
Mi5qczoKKwogMjAxOC0wOS0yNyAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNv
bT4KIAogICAgICAgICBEaXNhYmxlIHRlc3Qgd2l0aG91dCBMTEludCBvbiBBUk12NwpJbmRleDog
SlNUZXN0cy9zdHJlc3MvcmVncmVzcy0xODkxMzIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9z
dHJlc3MvcmVncmVzcy0xODkxMzIuanMJKHJldmlzaW9uIDIzNjU3NykKKysrIEpTVGVzdHMvc3Ry
ZXNzL3JlZ3Jlc3MtMTg5MTMyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorLy9A
IHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQKKwogdHJ5IHsKICAgICB2YXIgYTAgPSAnXHVkODAxJzsK
ICAgICB2YXIgYTEgPSBbXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjM2NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVy
IG9uIGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk02NEFz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6QVJNNjRBc3NlbWJsZXIp
OgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAoSlND
OjpBUk02NEFzc2VtYmxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjps
aW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29tcGFy
ZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0aW9u
YWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRCcmFu
Y2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjplbWl0Tm9wcyk6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIpOgorICAgICAg
ICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFz
aDo6QVJNNjRFSGFzaCk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAg
ICAgIChKU0M6OkFSTTY0RUhhc2g6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpBUk02NEVI
YXNoOjpyYW5kb21TZWVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpB
c3NlbWJsZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnB1dFNob3J0
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpwdXRJbnRVbmNoZWNrZWQpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnB1dEludCk6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckJ1ZmZlcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6
ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50ZWdyYWxV
bmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmFwcGVuZCk6IERlbGV0
ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TUlQU0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpmaWxsTm9wcyk6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcHNUb0xpbmspOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpsaW5rKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6dW5saW5rZWRDb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpqdW1wc1Rv
TGluayk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnVubGlua2VkQ29kZSk6
IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OmZpbGxOb3BzKToKKwogMjAxOC0wOS0yNyAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpPU1JFbnRyeTo6bV9tYWNoaW5lQ29k
ZU9mZnNldCBzaG91bGQgYmUgYSBDb2RlTG9jYXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZpc2lvbiAyMzY1Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyMiw5ICszMjIsMTcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc1pyKFJlZ2lzdGVySUQgcmVnKSB7IHJldHVybiBBUk02NFJlZ2lzdGVy
czo6aXNacihyZWcpOyB9CiAKIHB1YmxpYzoKLSAgICBBUk02NEFzc2VtYmxlcigpCisgICAgQVJN
NjRBc3NlbWJsZXIoCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgdW5zaWduZWQgcmFuZG9tTnVt
YmVyCisjZW5kaWYgCisgICAgICAgICkKICAgICAgICAgOiBtX2luZGV4T2ZMYXN0V2F0Y2hwb2lu
dChJTlRfTUlOKQogICAgICAgICAsIG1faW5kZXhPZlRhaWxPZkxhc3RXYXRjaHBvaW50KElOVF9N
SU4pCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgLCBtX2J1ZmZlcihyYW5kb21OdW1iZXIpCisj
ZW5kaWYKKyAgICAgICAgCiAgICAgewogICAgIH0KICAgICAKQEAgLTE1NTgsMTcgKzE1NjYsMTUg
QEAgcHVibGljOgogICAgICAgICBpbnNuKG5vcFBzZXVkbygpKTsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5
aW5nVG9FeGVjdXRhYmxlTWVtb3J5KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rp
b24+CisgICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIENv
cHlGdW5jdGlvbiBjb3B5KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzaXplICUg
c2l6ZW9mKGludDMyX3QpKSk7CiAgICAgICAgIHNpemVfdCBuID0gc2l6ZSAvIHNpemVvZihpbnQz
Ml90KTsKICAgICAgICAgZm9yIChpbnQzMl90KiBwdHIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4o
YmFzZSk7IG4tLTspIHsKICAgICAgICAgICAgIGludCBpbnNuID0gbm9wUHNldWRvKCk7Ci0gICAg
ICAgICAgICBpZiAoaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KSB7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHB0
cikgPT0gcHRyKTsKLSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHB0cisrLCAmaW5z
biwgc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbWVt
Y3B5KHB0cisrLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHB0cikgPT0gcHRyKTsKKyAg
ICAgICAgICAgIGNvcHkocHRyKyssICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCkBAIC0yNTczLDcgKzI1NzksNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBi
Lm1fb2Zmc2V0IC0gYS5tX29mZnNldDsKICAgICB9CiAKLSAgICB2b2lkKiB1bmxpbmtlZENvZGUo
KSB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgY29kZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci5jb2RlU2l6ZSgpOyB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQg
Z2V0Q2FsbFJldHVybk9mZnNldChBc3NlbWJsZXJMYWJlbCBjYWxsKQpAQCAtMjYxMSwxMyArMjYx
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qdW1wc1RvTGluay5hcHBlbmQoTGlua1JlY29yZChm
cm9tLm1fb2Zmc2V0LCB0by5tX29mZnNldCwgdHlwZSwgY29uZGl0aW9uLCBiaXROdW1iZXIsIGNv
bXBhcmVSZWdpc3RlcikpOwogICAgIH0KIAotICAgIHZvaWQgbGlua0p1bXAoQXNzZW1ibGVyTGFi
ZWwgZnJvbSwgdm9pZCogZXhlY3V0YWJsZUNvZGUsIEFzc2VtYmxlckxhYmVsIHRvKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGZyb20uaXNTZXQoKSk7Ci0gICAgICAgIEFTU0VSVCh0by5pc1NldCgp
KTsKLSAgICAgICAgcmVsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oYWRkcmVzc09mKGZyb20pLCBhZGRy
ZXNzT2YoZXhlY3V0YWJsZUNvZGUsIGZyb20pLCBhZGRyZXNzT2YodG8pKTsKLSAgICB9Ci0gICAg
CiAgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgZnJv
bSwgdm9pZCogdG8pCiAgICAgewogICAgICAgICBBU1NFUlQoZnJvbS5pc1NldCgpKTsKQEAgLTI5
NzcsMzAgKzI5NzUsMzIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9qdW1wc1RvTGluazsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBBTFdBWVNfSU5MSU5FIGxpbmsoTGlua1JlY29yZCYg
cmVjb3JkLCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb244LCB1
aW50OF90KiB0bykKKyAgICB0eXBlZGVmIHZvaWQqICgqQ29weUZ1bmN0aW9uKSh2b2lkKiwgY29u
c3Qgdm9pZCosIHNpemVfdCk7CisKKyAgICBzdGF0aWMgdm9pZCBBTFdBWVNfSU5MSU5FIGxpbmso
TGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5z
dHJ1Y3Rpb244LCB1aW50OF90KiB0bywgQ29weUZ1bmN0aW9uIGNvcHkpCiAgICAgewogICAgICAg
ICBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50
Kj4oZnJvbUluc3RydWN0aW9uOCk7CiAgICAgICAgIHN3aXRjaCAocmVjb3JkLmxpbmtUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBMaW5rSnVtcE5vQ29uZGl0aW9uOgotICAgICAgICAgICAgbGlua0p1
bXBPckNhbGw8ZmFsc2U+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVj
dGlvbiwgdG8pOworICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb25kaXRpb25EaXJlY3Q6Ci0gICAgICAg
ICAgICBsaW5rQ29uZGl0aW9uYWxCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWlu
dGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvKTsKKyAgICAgICAg
ICAgIGxpbmtDb25kaXRpb25hbEJyYW5jaDx0cnVlPihyZWNvcmQuY29uZGl0aW9uKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb25kaXRpb246Ci0gICAgICAg
ICAgICBsaW5rQ29uZGl0aW9uYWxCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVp
bnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIGZyb21JbnN0cnVjdGlvbiAtIDEsIHRvKTsK
KyAgICAgICAgICAgIGxpbmtDb25kaXRpb25hbEJyYW5jaDxmYWxzZT4ocmVjb3JkLmNvbmRpdGlv
bigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0g
MSwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBD
b21wYXJlQW5kQnJhbmNoRGlyZWN0OgotICAgICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8
dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuaXM2NEJpdCgpLCByZWNvcmQuY29tcGFy
ZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlv
biwgdG8pOworICAgICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNv
bmRpdGlvbigpLCByZWNvcmQuaXM2NEJpdCgpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb21wYXJlQW5kQnJhbmNo
OgotICAgICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRp
b24oKSwgcmVjb3JkLmlzNjRCaXQoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVy
cHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8pOworICAg
ICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwg
cmVjb3JkLmlzNjRCaXQoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9j
YXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8sIGNvcHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBUZXN0Qml0RGlyZWN0OgotICAg
ICAgICAgICAgbGlua1Rlc3RBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNv
cmQuYml0TnVtYmVyKCksIHJlY29yZC5jb21wYXJlUmVnaXN0ZXIoKSwgcmVpbnRlcnByZXRfY2Fz
dDxpbnQqPihmcm9tKSwgZnJvbUluc3RydWN0aW9uLCB0byk7CisgICAgICAgICAgICBsaW5rVGVz
dEFuZEJyYW5jaDx0cnVlPihyZWNvcmQuY29uZGl0aW9uKCksIHJlY29yZC5iaXROdW1iZXIoKSwg
cmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBm
cm9tSW5zdHJ1Y3Rpb24sIHRvLCBjb3B5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExpbmtKdW1wVGVzdEJpdDoKLSAgICAgICAgICAgIGxpbmtUZXN0QW5kQnJhbmNoPGZhbHNl
PihyZWNvcmQuY29uZGl0aW9uKCksIHJlY29yZC5iaXROdW1iZXIoKSwgcmVjb3JkLmNvbXBhcmVS
ZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0
aW9uIC0gMSwgdG8pOworICAgICAgICAgICAgbGlua1Rlc3RBbmRCcmFuY2g8ZmFsc2U+KHJlY29y
ZC5jb25kaXRpb24oKSwgcmVjb3JkLmJpdE51bWJlcigpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVy
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBmcm9tSW5zdHJ1Y3Rpb24gLSAx
LCB0bywgY29weSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzA0Miw3ICszMDQyLDcgQEAgcHJvdGVj
dGVkOgogICAgIH0KIAogICAgIHRlbXBsYXRlPGJvb2wgaXNDYWxsPgotICAgIHN0YXRpYyB2b2lk
IGxpbmtKdW1wT3JDYWxsKGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZv
aWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wT3JDYWxsKGludCogZnJvbSwgY29uc3Qg
aW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvLCBDb3B5RnVuY3Rpb24gY29weSA9IHBlcmZv
cm1KSVRNZW1jcHkpCiAgICAgewogICAgICAgICBib29sIGxpbms7CiAgICAgICAgIGludCBpbW0y
NjsKQEAgLTMwNTksMTEgKzMwNTksMTEgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGludCBpbnNu
ID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShpc0NhbGwsIHN0YXRpY19jYXN0PGludD4o
b2Zmc2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5z
dHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgcGVyZm9ybUpJVE1lbWNweShm
cm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0RpcmVjdD4KLSAgICBzdGF0
aWMgdm9pZCBsaW5rQ29tcGFyZUFuZEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCBib29sIGlz
NjRCaXQsIFJlZ2lzdGVySUQgcnQsIGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rp
b24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtDb21wYXJlQW5kQnJhbmNoKENvbmRp
dGlvbiBjb25kaXRpb24sIGJvb2wgaXM2NEJpdCwgUmVnaXN0ZXJJRCBydCwgaW50KiBmcm9tLCBj
b25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5ID0g
cGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9j
YXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBAIC0zMDc2LDIyICszMDc2LDIyIEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCBpc0RpcmVjdCkgewogICAgICAgICAgICAgaW50
IGluc24gPSBjb21wYXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82NCA6
IERhdGFzaXplXzMyLCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4o
b2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlw
bGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwotICAgICAgICAgICAgcGVyZm9y
bUpJVE1lbWNweShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgY29weShm
cm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwogICAgICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewog
ICAgICAgICAgICAgICAgIGluc24gPSBub3BQc2V1ZG8oKTsKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSArIDEp
ID09IChmcm9tICsgMSkpOwotICAgICAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJvbSAr
IDEsICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgY29weShmcm9tICsgMSwg
Jmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGludCBpbnNuID0gY29tcGFyZUFuZEJyYW5jaEltbWVkaWF0ZShpczY0Qml0ID8g
RGF0YXNpemVfNjQgOiBEYXRhc2l6ZV8zMiwgaW52ZXJ0KGNvbmRpdGlvbikgPT0gQ29uZGl0aW9u
TkUsIDIsIHJ0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxl
T2Y8aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgICAgIHBlcmZvcm1K
SVRNZW1jcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIGxpbmtKdW1w
T3JDYWxsPGZhbHNlPihmcm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsgMSwgdG8pOworICAgICAg
ICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgbGlua0p1
bXBPckNhbGw8ZmFsc2U+KGZyb20gKyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0bywgY29weSk7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICB0ZW1wbGF0ZTxib29sIGlzRGlyZWN0PgotICAgIHN0
YXRpYyB2b2lkIGxpbmtDb25kaXRpb25hbEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCBpbnQq
IGZyb20sIGNvbnN0IGludCogZnJvbUluc3RydWN0aW9uLCB2b2lkKiB0bykKKyAgICBzdGF0aWMg
dm9pZCBsaW5rQ29uZGl0aW9uYWxCcmFuY2goQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50KiBmcm9t
LCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5
ID0gcGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBAIC0zMTA0LDIyICszMTA0LDIyIEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCBpc0RpcmVjdCkgewogICAgICAgICAgICAg
aW50IGluc24gPSBjb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShzdGF0aWNfY2FzdDxpbnQ+KG9m
ZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9N
dWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7Ci0gICAgICAgICAgICBw
ZXJmb3JtSklUTWVtY3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBj
b3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7CiAgICAgICAgICAgICAgICAgaW5zbiA9IG5vcFBzZXVkbygpOwogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihmcm9t
ICsgMSkgPT0gKGZyb20gKyAxKSk7Ci0gICAgICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShm
cm9tICsgMSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgICAgICBjb3B5KGZyb20g
KyAxLCAmaW5zbiwgc2l6ZW9mKGludCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaW50IGluc24gPSBjb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZSgyLCBp
bnZlcnQoY29uZGl0aW9uKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9N
dWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7Ci0gICAgICAgICAgICBw
ZXJmb3JtSklUTWVtY3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBs
aW5rSnVtcE9yQ2FsbDxmYWxzZT4oZnJvbSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEsIHRvKTsK
KyAgICAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAg
IGxpbmtKdW1wT3JDYWxsPGZhbHNlPihmcm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsgMSwgdG8s
IGNvcHkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0RpcmVjdD4K
LSAgICBzdGF0aWMgdm9pZCBsaW5rVGVzdEFuZEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCB1
bnNpZ25lZCBiaXROdW1iZXIsIFJlZ2lzdGVySUQgcnQsIGludCogZnJvbSwgY29uc3QgaW50KiBm
cm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtUZXN0QW5kQnJh
bmNoKENvbmRpdGlvbiBjb25kaXRpb24sIHVuc2lnbmVkIGJpdE51bWJlciwgUmVnaXN0ZXJJRCBy
dCwgaW50KiBmcm9tLCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlG
dW5jdGlvbiBjb3B5ID0gcGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQo
IShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBAIC0zMTMzLDE3ICszMTMz
LDE3IEBAIHByb3RlY3RlZDoKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCBpc0RpcmVjdCkgewog
ICAgICAgICAgICAgaW50IGluc24gPSB0ZXN0QW5kQnJhbmNoSW1tZWRpYXRlKGNvbmRpdGlvbiA9
PSBDb25kaXRpb25ORSwgc3RhdGljX2Nhc3Q8aW50PihiaXROdW1iZXIpLCBzdGF0aWNfY2FzdDxp
bnQ+KG9mZnNldCksIHJ0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011
bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgICAgIHBl
cmZvcm1KSVRNZW1jcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIGNv
cHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIGlmICghaXNEaXJlY3Qp
IHsKICAgICAgICAgICAgICAgICBpbnNuID0gbm9wUHNldWRvKCk7CiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20g
KyAxKSA9PSAoZnJvbSArIDEpKTsKLSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGZy
b20gKyAxLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgICAgIGNvcHkoZnJvbSAr
IDEsICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFuY2hJbW1lZGlhdGUoaW52ZXJ0KGNv
bmRpdGlvbikgPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0TnVtYmVyKSwgMiwg
cnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0
cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwotICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNw
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8
ZmFsc2U+KGZyb20gKyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0byk7CisgICAgICAgICAgICBj
b3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBsaW5rSnVtcE9yQ2Fs
bDxmYWxzZT4oZnJvbSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEsIHRvLCBjb3B5KTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMzIwMSwxMSArMzIwMSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGNvZGUpICsg
bGFiZWwubV9vZmZzZXQpOwogICAgIH0KIAotICAgIGludCogYWRkcmVzc09mKEFzc2VtYmxlckxh
YmVsIGxhYmVsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NPZihtX2J1ZmZlci5kYXRh
KCksIGxhYmVsKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNhc3NlbWJsZVhP
clNwKGludCByZWcpIHsgcmV0dXJuIHJlZyA9PSAzMSA/IEFSTTY0UmVnaXN0ZXJzOjpzcCA6IHN0
YXRpY19jYXN0PFJlZ2lzdGVySUQ+KHJlZyk7IH0KICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNh
c3NlbWJsZVhPclpyKGludCByZWcpIHsgcmV0dXJuIHJlZyA9PSAzMSA/IEFSTTY0UmVnaXN0ZXJz
Ojp6ciA6IHN0YXRpY19jYXN0PFJlZ2lzdGVySUQ+KHJlZyk7IH0KICAgICBzdGF0aWMgUmVnaXN0
ZXJJRCBkaXNhc3NlbWJsZVhPclpyT3JTcChib29sIHVzZVpyLCBpbnQgcmVnKSB7IHJldHVybiBy
ZWcgPT0gMzEgPyAodXNlWnIgPyBBUk02NFJlZ2lzdGVyczo6enIgOiBBUk02NFJlZ2lzdGVyczo6
c3ApIDogc3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4ocmVnKTsgfQpAQCAtMzc4MSwxMCArMzc3Niwx
MCBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKICAgICB9CiAKLSAgICBBc3NlbWJsZXJCdWZmZXIgbV9i
dWZmZXI7CiAgICAgVmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X2p1bXBzVG9MaW5rOwogICAgIGludCBtX2luZGV4T2ZMYXN0V2F0Y2hwb2ludDsKICAgICBpbnQg
bV9pbmRleE9mVGFpbE9mTGFzdFdhdGNocG9pbnQ7CisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVm
ZmVyOwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgTUFYX1BPSU5U
RVJfQklUUyA9IDQ4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1B
c3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0FSTUFzc2VtYmxlci5oCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsOSArNzUy
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KE5PUCk7
CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBz
aXplX3Qgc2l6ZSwgYm9vbCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAgICAgIHN0YXRpYyB2b2lkIGZpbGxO
b3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBDb3B5RnVuY3Rpb24gY29weSkKICAgICAgICAg
ewotICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7
CisgICAgICAgICAgICBVTlVTRURfUEFSQU0oY29weSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghKHNpemUgJSBzaXplb2YoaW50MzJfdCkpKTsKIAogICAgICAgICAgICAgaW50MzJfdCog
cHRyID0gc3RhdGljX2Nhc3Q8aW50MzJfdCo+KGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjQ3LDcgKzIyNDcsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB2b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJldHVybiBtX2Zvcm1hdHRlci5kYXRh
KCk7IH0KICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRlci5j
b2RlU2l6ZSgpOyB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChB
c3NlbWJsZXJMYWJlbCBjYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzNjU3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsOCArODYyLDYgQEAgcHVibGljOgogICAgICAg
ICBBc3NlbWJsZXJUeXBlOjpjYWNoZUZsdXNoKGNvZGUsIHNpemUpOwogICAgIH0KIAotICAgIEFz
c2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7Ci0gICAgCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4K
ICAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcCh2b2lkKiBjb2RlLCBKdW1wIGp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsPHRhZz4gdGFyZ2V0KQogICAgIHsKQEAgLTk2Miw2ICs5NjAsMTEgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBlbWl0Tm9wcyhzaXplX3QgbWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVz
KQogICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeVRv
RmlsbFdpdGhOb3BzSW5CeXRlcyAlIDQgPT0gMCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtZW1vcnlUb0ZpbGxXaXRoTm9wc0luQnl0ZXMgLyA0OyArK2kpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyNlbHNlCiAgICAgICAgIEFzc2VtYmxlckJ1ZmZlciYgYnVm
ZmVyID0gbV9hc3NlbWJsZXIuYnVmZmVyKCk7CiAgICAgICAgIHNpemVfdCBzdGFydENvZGVTaXpl
ID0gYnVmZmVyLmNvZGVTaXplKCk7CiAgICAgICAgIHNpemVfdCB0YXJnZXRDb2RlU2l6ZSA9IHN0
YXJ0Q29kZVNpemUgKyBtZW1vcnlUb0ZpbGxXaXRoTm9wc0luQnl0ZXM7CkBAIC05NjksNiArOTcy
LDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSA9
IGZhbHNlOwogICAgICAgICBBc3NlbWJsZXJUeXBlOjpmaWxsTm9wcyhzdGF0aWNfY2FzdDxjaGFy
Kj4oYnVmZmVyLmRhdGEoKSkgKyBzdGFydENvZGVTaXplLCBtZW1vcnlUb0ZpbGxXaXRoTm9wc0lu
Qnl0ZXMsIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgICAgIGJ1ZmZlci5zZXRD
b2RlU2l6ZSh0YXJnZXRDb2RlU2l6ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgdGFnUmV0dXJuQWRkcmVzcygpIHsgfQpAQCAtOTgzLDYgKzk4NywxMSBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDog
bV9yYW5kb21Tb3VyY2UoMCkKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAsIG1fYXNzZW1ibGVy
KHJhbmRvbSgpKQorI2Vsc2UKKyAgICAgICAgLCBtX2Fzc2VtYmxlcigpCisjZW5kaWYKICAgICB7
CiAgICAgICAgIGludmFsaWRhdGVBbGxUZW1wUmVnaXN0ZXJzKCk7CiAgICAgfQpAQCAtOTk4LDYg
KzEwMDcsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG1fcmFuZG9tU291cmNlSXNJbml0aWFs
aXplZCB7IGZhbHNlIH07CiAgICAgV2Vha1JhbmRvbSBtX3JhbmRvbVNvdXJjZTsKK3B1YmxpYzoK
KyAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOworcHJvdGVjdGVkOgogCiAjaWYgRU5BQkxF
KERGR19SRUdJU1RFUl9BTExPQ0FUSU9OX1ZBTElEQVRJT04pCiAgICAgVmVjdG9yPFJlZ2lzdGVy
QWxsb2NhdGlvbk9mZnNldCwgMTA+IG1fcmVnaXN0ZXJBbGxvY2F0aW9uRm9yT2Zmc2V0czsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZm
ZXIuaAkocmV2aXNpb24gMjM2NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDE2IEBACiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2lmIENQVShBUk02NEUpCisjaW5jbHVkZSA8d3RmL1B0clRh
Zy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9VbmFsaWduZWRBY2Nlc3MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFzcyBMaW5r
QnVmZmVyOworCiAgICAgc3RydWN0IEFzc2VtYmxlckxhYmVsIHsKICAgICAgICAgQXNzZW1ibGVy
TGFiZWwoKQogICAgICAgICAgICAgOiBtX29mZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpCkBAIC0xNDEsMTEgKzE0NiwzNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKICAgICB9OwogCisjaWYgQ1BVKEFSTTY0RSkKKyAgICBj
bGFzcyBBUk02NEVIYXNoIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFSTTY0RUhhc2godW5zaWdu
ZWQgcmFuZG9tTnVtYmVyKQorICAgICAgICAgICAgOiBtX2hhc2gocmFuZG9tTnVtYmVyKQorICAg
ICAgICAgICAgLCBtX3JhbmRvbVNlZWQocmFuZG9tTnVtYmVyKQorICAgICAgICB7IH0KKyAgICAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHVwZGF0ZSh1bnNpZ25lZCB2YWx1ZSwgdWludHB0cl90IGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQoKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4odmFsdWUpICsgbV9oYXNoKSBeIChtX2hhc2ggPj4gMzIpLCBzdGF0aWNfY2Fz
dDxQdHJUYWc+KGluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgdWludHB0cl90IGhhc2goKSBj
b25zdCB7IHJldHVybiBtX2hhc2g7IH0KKyAgICAgICAgdW5zaWduZWQgcmFuZG9tU2VlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFuZG9tU2VlZDsgfQorICAgIHByaXZhdGU6CisgICAgICAgIHVpbnRw
dHJfdCBtX2hhc2g7CisgICAgICAgIHVuc2lnbmVkIG1fcmFuZG9tU2VlZDsKKyAgICB9OworI2Vu
ZGlmCisKICAgICBjbGFzcyBBc3NlbWJsZXJCdWZmZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAg
QXNzZW1ibGVyQnVmZmVyKCkKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyKAorI2lmIENQVShBUk02
NEUpCisgICAgICAgICAgICB1bnNpZ25lZCByYW5kb21OdW1iZXIKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICkKICAgICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRl
eCgwKQorI2lmIENQVShBUk02NEUpCisgICAgICAgICAgICAsIG1faGFzaChyYW5kb21OdW1iZXIp
CisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE2NSwyNSArMTk2LDIzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEobV9pbmRleCAmIChhbGlnbm1lbnQg
LSAxKSk7CiAgICAgICAgIH0KIAorI2lmICFDUFUoQVJNNjQpCiAgICAgICAgIHZvaWQgcHV0Qnl0
ZVVuY2hlY2tlZChpbnQ4X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9
CiAgICAgICAgIHZvaWQgcHV0Qnl0ZShpbnQ4X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwodmFsdWUp
OyB9CiAgICAgICAgIHZvaWQgcHV0U2hvcnRVbmNoZWNrZWQoaW50MTZfdCB2YWx1ZSkgeyBwdXRJ
bnRlZ3JhbFVuY2hlY2tlZCh2YWx1ZSk7IH0KICAgICAgICAgdm9pZCBwdXRTaG9ydChpbnQxNl90
IHZhbHVlKSB7IHB1dEludGVncmFsKHZhbHVlKTsgfQotICAgICAgICB2b2lkIHB1dEludFVuY2hl
Y2tlZChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsVW5jaGVja2VkKHZhbHVlKTsgfQotICAg
ICAgICB2b2lkIHB1dEludChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsKHZhbHVlKTsgfQog
ICAgICAgICB2b2lkIHB1dEludDY0VW5jaGVja2VkKGludDY0X3QgdmFsdWUpIHsgcHV0SW50ZWdy
YWxVbmNoZWNrZWQodmFsdWUpOyB9CiAgICAgICAgIHZvaWQgcHV0SW50NjQoaW50NjRfdCB2YWx1
ZSkgeyBwdXRJbnRlZ3JhbCh2YWx1ZSk7IH0KLQotICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS5idWZmZXIoKTsKLSAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgIHZvaWQgcHV0SW50VW5jaGVja2VkKGludDMyX3QgdmFsdWUp
IHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9CisgICAgICAgIHZvaWQgcHV0SW50KGlu
dDMyX3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwodmFsdWUpOyB9CiAKICAgICAgICAgc2l6ZV90IGNv
ZGVTaXplKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7CiAg
ICAgICAgIH0KIAorI2lmICFDUFUoQVJNNjQpCiAgICAgICAgIHZvaWQgc2V0Q29kZVNpemUoc2l6
ZV90IGluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXYXJuaW5nOiBPbmx5IHVzZSB0
aGlzIGlmIHlvdSBrbm93IGV4YWN0bHkgd2hhdCB5b3UgYXJlIGRvaW5nLgpAQCAtMTkyLDYgKzIy
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9pbmRleCA9IGluZGV4OwogICAg
ICAgICAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zdG9yYWdlLmNhcGFjaXR5KCkpOwogICAgICAg
ICB9CisjZW5kaWYKIAogICAgICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbCgpIGNvbnN0CiAgICAg
ICAgIHsKQEAgLTIwOSw2ICsyMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8KICAg
ICAgICAgLy8gTG9jYWxXcml0ZXIgKkNBTk5PVCogYmUgbWl4ZWQgd2l0aCBvdGhlciB0eXBlcyBv
ZiBhY2Nlc3MgdG8gQXNzZW1ibGVyQnVmZmVyLgogICAgICAgICAvLyBBc3NlbWJsZXJCdWZmZXIg
Y2Fubm90IGJlIHVzZWQgdW50aWwgaXRzIExvY2FsV3JpdGVyIGdvZXMgb3V0IG9mIHNjb3BlLgor
I2lmICFDUFUoQVJNNjQpIC8vIElmIHdlIGV2ZXIgbmVlZCB0byB1c2UgdGhpcyBvbiBhcm02NGUs
IHdlIHdvdWxkIG5lZWQgdG8gbWFrZSB0aGUgY2hlY2tzdW0gYXdhcmUgb2YgdGhpcy4KICAgICAg
ICAgY2xhc3MgTG9jYWxXcml0ZXIgewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICBMb2Nh
bFdyaXRlcihBc3NlbWJsZXJCdWZmZXImIGJ1ZmZlciwgdW5zaWduZWQgcmVxdWlyZWRTcGFjZSkK
QEAgLTI1MSw2ICsyODIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBtX3JlcXVpcmVkU3BhY2U7CiAjZW5kaWYKICAgICAgICAgfTsKKyNlbmRpZiAvLyAhQ1BVKEFS
TTY0KQorCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgQVJNNjRFSGFzaCBoYXNoKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNoOyB9CisjZW5kaWYKKworI2lmICFDUFUoQVJNNjQpIC8vIElmIHdlIHdl
cmUgdG8gZGVmaW5lIHRoaXMgb24gYXJtNjRlLCB3ZSdkIG5lZWQgYSB3YXkgdG8gdXBkYXRlIHRo
ZSBoYXNoIGFzIHdlIHdyaXRlIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS5idWZmZXIoKTsgfQorI2VuZGlmCisK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBl
PgpAQCAtMjY1LDM1ICszMDYsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEludGVncmFsVHlwZT4KICAgICAgICAgdm9pZCBwdXRJbnRlZ3JhbFVuY2hlY2tl
ZChJbnRlZ3JhbFR5cGUgdmFsdWUpCiAgICAgICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih2YWx1ZSkgPT0gNCwgIiIpOworI2lmIENQVShBUk02
NEUpCisgICAgICAgICAgICBtX2hhc2gudXBkYXRlKHZhbHVlLCBtX2luZGV4KTsKKyNlbmRpZgor
I2VuZGlmCiAgICAgICAgICAgICBBU1NFUlQoaXNBdmFpbGFibGUoc2l6ZW9mKEludGVncmFsVHlw
ZSkpKTsKICAgICAgICAgICAgIFdURjo6dW5hbGlnbmVkU3RvcmU8SW50ZWdyYWxUeXBlPihtX3N0
b3JhZ2UuYnVmZmVyKCkgKyBtX2luZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICBtX2luZGV4ICs9
IHNpemVvZihJbnRlZ3JhbFR5cGUpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
aXNBdmFpbGFibGUoc2l6ZSkpCi0gICAgICAgICAgICAgICAgZ3JvdyhzaXplKTsKLQotICAgICAg
ICAgICAgbWVtY3B5KG1fc3RvcmFnZS5idWZmZXIoKSArIG1faW5kZXgsIGRhdGEsIHNpemUpOwot
ICAgICAgICAgICAgbV9pbmRleCArPSBzaXplOwotICAgICAgICB9Ci0KKyAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGdyb3coaW50IGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7CiAgICAg
ICAgICAgICBtX3N0b3JhZ2UuZ3JvdyhleHRyYUNhcGFjaXR5KTsKICAgICAgICAgfQogCi0gICAg
cHJpdmF0ZToKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgb3V0T2ZMaW5lR3JvdygpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fc3RvcmFnZS5ncm93KCk7CiAgICAgICAgIH0KIAorI2lmICFD
UFUoQVJNNjQpCiAgICAgICAgIGZyaWVuZCBMb2NhbFdyaXRlcjsKKyNlbmRpZgorICAgICAgICBm
cmllbmQgTGlua0J1ZmZlcjsKIAogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICBBUk02NEVI
YXNoIG1faGFzaDsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZp
c2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTAgKzEwOSwxNSBAQCB2b2lkIExpbmtCdWZm
ZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgbV9hc3NlbWJsZXJTdG9yYWdlID0gbWFj
cm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxlckRhdGEoKTsK
ICAgICB1aW50OF90KiBpbkRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2Fzc2Vt
YmxlclN0b3JhZ2UuYnVmZmVyKCkpOwogCisgICAgdWludDhfdCogY29kZU91dERhdGEgPSBtX2Nv
ZGUuZGF0YUxvY2F0aW9uPHVpbnQ4X3QqPigpOworI2lmIENQVShBUk02NEUpCisgICAgY29uc3Qg
QVJNNjRFSGFzaCBhc3NlbWJsZXJCdWZmZXJIYXNoID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJs
ZXIuYnVmZmVyKCkuaGFzaCgpOworICAgIEFSTTY0RUhhc2ggdmVyaWZ5VW5jb21wYWN0ZWRIYXNo
KGFzc2VtYmxlckJ1ZmZlckhhc2gucmFuZG9tU2VlZCgpKTsKKyAgICB1aW50OF90KiBvdXREYXRh
ID0gY29kZU91dERhdGE7CisjZWxzZQogICAgIEFzc2VtYmxlckRhdGEgb3V0QnVmZmVyKG1fc2l6
ZSk7Ci0KICAgICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
b3V0QnVmZmVyLmJ1ZmZlcigpKTsKLSAgICB1aW50OF90KiBjb2RlT3V0RGF0YSA9IG1fY29kZS5k
YXRhTG9jYXRpb248dWludDhfdCo+KCk7CisjZW5kaWYKICNpZiBDUFUoQVJNNjQpCiAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YodW5zaWduZWQpPihvdXREYXRh
KSA9PSBvdXREYXRhKTsKICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZih1bnNpZ25lZCk+KGNvZGVPdXREYXRhKSA9PSBjb2RlT3V0RGF0YSk7CkBAIC0xMjEsNiAr
MTI2LDExIEBAIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICBp
bnQgcmVhZFB0ciA9IDA7CiAgICAgaW50IHdyaXRlUHRyID0gMDsKICAgICB1bnNpZ25lZCBqdW1w
Q291bnQgPSBqdW1wc1RvTGluay5zaXplKCk7CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIG9zX3Ro
cmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19ydygpOworI2VuZGlmCisKICAgICBpZiAobV9zaG91
bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwganVtcENvdW50OyArK2kpIHsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSByZWFkUHRy
IC0gd3JpdGVQdHI7CkBAIC0xMzQsOCArMTQ0LDE4IEBAIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNv
bXBhY3RBbmRMaW5rQ29kZSgKICAgICAgICAgICAgIEFTU0VSVCghKHJlZ2lvblNpemUgJSAyKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIShyZWFkUHRyICUgMikpOwogICAgICAgICAgICAgQVNTRVJU
KCEod3JpdGVQdHIgJSAyKSk7Ci0gICAgICAgICAgICB3aGlsZSAoY29weVNvdXJjZSAhPSBjb3B5
RW5kKQotICAgICAgICAgICAgICAgICpjb3B5RHN0KysgPSAqY29weVNvdXJjZSsrOworI2lmIENQ
VShBUk02NEUpCisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHJlYWRQdHI7CisjZW5kaWYK
KyAgICAgICAgICAgIHdoaWxlIChjb3B5U291cmNlICE9IGNvcHlFbmQpIHsKKyAgICAgICAgICAg
ICAgICBJbnN0cnVjdGlvblR5cGUgaW5zbiA9ICpjb3B5U291cmNlKys7CisjaWYgQ1BVKEFSTTY0
RSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihJbnN0cnVjdGlvblR5cGUp
ID09IDQsICIiKTsKKyAgICAgICAgICAgICAgICB2ZXJpZnlVbmNvbXBhY3RlZEhhc2gudXBkYXRl
KGluc24sIGluZGV4KTsKKyAgICAgICAgICAgICAgICBpbmRleCArPSBzaXplb2YoSW5zdHJ1Y3Rp
b25UeXBlKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICpjb3B5RHN0KysgPSBpbnNuOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJsZXJTdG9y
YWdlLCByZWFkUHRyLCBqdW1wc1RvTGlua1tpXS5mcm9tKCksIG9mZnNldCk7CiAgICAgICAgICAg
ICByZWFkUHRyICs9IHJlZ2lvblNpemU7CiAgICAgICAgICAgICB3cml0ZVB0ciArPSByZWdpb25T
aXplOwpAQCAtMTY2LDI5ICsxODYsNzYgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFu
ZExpbmtDb2RlKAogICAgICAgICAgICAgICAgIEFTU0VSVCghTWFjcm9Bc3NlbWJsZXI6OmNhbkNv
bXBhY3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSk7CiAgICAgICAgIH0KICAgICB9CisKICAgICAv
LyBDb3B5IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QganVtcAotICAgIG1lbWNweShvdXREYXRh
ICsgd3JpdGVQdHIsIGluRGF0YSArIHJlYWRQdHIsIGluaXRpYWxTaXplIC0gcmVhZFB0cik7Cisg
ICAgeworICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGRzdCA9IGJpdHdpc2VfY2FzdDxJbnN0cnVj
dGlvblR5cGUqPihvdXREYXRhICsgd3JpdGVQdHIpOworICAgICAgICBJbnN0cnVjdGlvblR5cGUq
IHNyYyA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvblR5cGUqPihpbkRhdGEgKyByZWFkUHRyKTsK
KyAgICAgICAgc2l6ZV90IGJ5dGVzID0gaW5pdGlhbFNpemUgLSByZWFkUHRyOworCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGRzdCkgJSBzaXplb2YoSW5z
dHJ1Y3Rpb25UeXBlKSA9PSAwKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oc3JjKSAlIHNpemVvZihJbnN0cnVjdGlvblR5cGUpID09IDApOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChieXRlcyAlIHNpemVvZihJbnN0cnVjdGlvblR5cGUpID09IDApOwor
CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSByZWFkUHRyOworI2Vu
ZGlmCisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBieXRlczsgaSArPSBzaXplb2Yo
SW5zdHJ1Y3Rpb25UeXBlKSkgeworICAgICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlIGluc24gPSAq
c3JjKys7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHZlcmlmeVVuY29tcGFjdGVkSGFz
aC51cGRhdGUoaW5zbiwgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gc2l6ZW9mKEluc3Ry
dWN0aW9uVHlwZSk7CisjZW5kaWYKKyAgICAgICAgICAgICpkc3QrKyA9IGluc247CisgICAgICAg
IH0KKyAgICB9CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIGlmICh2ZXJpZnlVbmNvbXBhY3RlZEhh
c2guaGFzaCgpICE9IGFzc2VtYmxlckJ1ZmZlckhhc2guaGFzaCgpKSB7CisgICAgICAgIGRhdGFM
b2dMbigiSGFzaGVzIGRvbid0IG1hdGNoOiAiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4odmVyaWZ5VW5jb21wYWN0ZWRIYXNoLmhhc2goKSkpLCAiICIsIFJhd1BvaW50ZXIoYml0d2lz
ZV9jYXN0PHZvaWQqPihhc3NlbWJsZXJCdWZmZXJIYXNoLmhhc2goKSkpKTsKKyAgICAgICAgZGF0
YUxvZ0xuKCJDcmFzaGluZyEiKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIHJlY29yZExpbmtPZmZzZXRzKG1fYXNzZW1ibGVyU3RvcmFnZSwgcmVhZFB0ciwgaW5pdGlh
bFNpemUsIHJlYWRQdHIgLSB3cml0ZVB0cik7CiAgICAgICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgeworI2lmIENQVShBUk02NEUpCisgICAgICAgIGF1
dG8gbWVtY3B5RnVuY3Rpb24gPSBtZW1jcHk7CisjZWxzZQorICAgICAgICBhdXRvIG1lbWNweUZ1
bmN0aW9uID0gcGVyZm9ybUpJVE1lbWNweTsKKyNlbmRpZgorCiAgICAgICAgIHVpbnQ4X3QqIGxv
Y2F0aW9uID0gY29kZU91dERhdGEgKyBqdW1wc1RvTGlua1tpXS5mcm9tKCk7CiAgICAgICAgIHVp
bnQ4X3QqIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVtcHNUb0xpbmtbaV0udG8oKSAtIGV4ZWN1
dGFibGVPZmZzZXRGb3IoanVtcHNUb0xpbmtbaV0udG8oKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpsaW5rKGp1bXBzVG9MaW5rW2ldLCBvdXREYXRhICsganVtcHNUb0xpbmtbaV0uZnJvbSgp
LCBsb2NhdGlvbiwgdGFyZ2V0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmsoanVtcHNU
b0xpbmtbaV0sIG91dERhdGEgKyBqdW1wc1RvTGlua1tpXS5mcm9tKCksIGxvY2F0aW9uLCB0YXJn
ZXQsIG1lbWNweUZ1bmN0aW9uKTsKICAgICB9CiAKLSAgICBqdW1wc1RvTGluay5jbGVhcigpOwot
CiAgICAgc2l6ZV90IGNvbXBhY3RTaXplID0gd3JpdGVQdHIgKyBpbml0aWFsU2l6ZSAtIHJlYWRQ
dHI7CisgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpIHsKKyAgICAgICAgc2l6ZV90IG5vcFNp
emVJbkJ5dGVzID0gaW5pdGlhbFNpemUgLSBjb21wYWN0U2l6ZTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMob3V0RGF0YSArIGNvbXBhY3RTaXplLCBu
b3BTaXplSW5CeXRlcywgbWVtY3B5KTsKKyAgICB9CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIG9z
X3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19yeCgpOworI2VuZGlmCisKICAgICBpZiAobV9l
eGVjdXRhYmxlTWVtb3J5KSB7CiAgICAgICAgIG1fc2l6ZSA9IGNvbXBhY3RTaXplOwogICAgICAg
ICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayhtX3NpemUpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHNpemVfdCBub3BTaXplSW5CeXRlcyA9IGluaXRpYWxTaXplIC0gY29tcGFjdFNpemU7Ci0g
ICAgICAgIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5ID0gZmFsc2U7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKG91dERhdGEgKyBjb21w
YWN0U2l6ZSwgbm9wU2l6ZUluQnl0ZXMsIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CiAg
ICAgfQogCisjaWYgIUNQVShBUk02NEUpCisgICAgQVNTRVJUKGNvZGVPdXREYXRhICE9IG91dERh
dGEpOwogICAgIHBlcmZvcm1KSVRNZW1jcHkoY29kZU91dERhdGEsIG91dERhdGEsIG1fc2l6ZSk7
CisjZWxzZQorICAgIEFTU0VSVChjb2RlT3V0RGF0YSA9PSBvdXREYXRhKTsKKyNlbmRpZgorCisg
ICAganVtcHNUb0xpbmsuY2xlYXIoKTsKIAogI2lmIERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAg
ZHVtcExpbmtTdGF0aXN0aWNzKGNvZGVPdXREYXRhLCBpbml0aWFsU2l6ZSwgbV9zaXplKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5o
CShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01J
UFNBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDkgKzI2NiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDApOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
dm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgYm9vbCBpc0NvcHlpbmdUb0V4
ZWN1dGFibGVNZW1vcnkpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvcHlGdW5jdGlvbj4KKyAg
ICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgQ29weUZ1bmN0
aW9uIGNvcHkpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oaXNDb3B5aW5nVG9FeGVjdXRh
YmxlTWVtb3J5KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvcHkpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghKHNpemUgJSBzaXplb2YoaW50MzJfdCkpKTsKIAogICAgICAgICBpbnQzMl90KiBw
dHIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oYmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNp
b24gMjM2NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwxMiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IEFzc2VtYmxlcjo6SnVtcFR5cGUgRGVmYXVsdEp1bXAgPSBBc3NlbWJs
ZXI6Okp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZTsKIAogICAgIFZlY3RvcjxMaW5rUmVjb3JkLCAw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGp1bXBzVG9MaW5rKCkgeyByZXR1cm4gbV9hc3NlbWJs
ZXIuanVtcHNUb0xpbmsoKTsgfQotICAgIHZvaWQqIHVubGlua2VkQ29kZSgpIHsgcmV0dXJuIG1f
YXNzZW1ibGVyLnVubGlua2VkQ29kZSgpOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuQ29tcGFjdChK
dW1wVHlwZSBqdW1wVHlwZSkgeyByZXR1cm4gQXNzZW1ibGVyOjpjYW5Db21wYWN0KGp1bXBUeXBl
KTsgfQogICAgIHN0YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1
bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4g
QXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcFR5cGUsIGZyb20sIHRvKTsgfQogICAgIHN0
YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29u
c3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIEFzc2VtYmxlcjo6
Y29tcHV0ZUp1bXBUeXBlKHJlY29yZCwgZnJvbSwgdG8pOyB9CiAgICAgc3RhdGljIGludCBqdW1w
U2l6ZURlbHRhKEp1bXBUeXBlIGp1bXBUeXBlLCBKdW1wTGlua1R5cGUganVtcExpbmtUeXBlKSB7
IHJldHVybiBBc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEoanVtcFR5cGUsIGp1bXBMaW5rVHlwZSk7
IH0KLSAgICBzdGF0aWMgdm9pZCBsaW5rKExpbmtSZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJv
bSwgY29uc3QgdWludDhfdCogZnJvbUluc3RydWN0aW9uLCB1aW50OF90KiB0bykgeyByZXR1cm4g
QXNzZW1ibGVyOjpsaW5rKHJlY29yZCwgZnJvbSwgZnJvbUluc3RydWN0aW9uLCB0byk7IH0KKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1bmN0aW9uPgorICAgIHN0YXRpYyB2b2lkIGxpbmso
TGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5z
dHJ1Y3Rpb24sIHVpbnQ4X3QqIHRvLCBDb3B5RnVuY3Rpb24gY29weSkgeyByZXR1cm4gQXNzZW1i
bGVyOjpsaW5rKHJlY29yZCwgZnJvbSwgZnJvbUluc3RydWN0aW9uLCB0bywgY29weSk7IH0KIAog
ICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRWlnaHQ7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgVmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiYganVtcHNUb0xpbmsoKSB7IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wc1RvTGlu
aygpOyB9Ci0gICAgdm9pZCogdW5saW5rZWRDb2RlKCkgeyByZXR1cm4gbV9hc3NlbWJsZXIudW5s
aW5rZWRDb2RlKCk7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5Db21wYWN0KEp1bXBUeXBlIGp1bXBU
eXBlKSB7IHJldHVybiBBUk12N0Fzc2VtYmxlcjo6Y2FuQ29tcGFjdChqdW1wVHlwZSk7IH0KICAg
ICBzdGF0aWMgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShKdW1wVHlwZSBqdW1wVHlwZSwg
Y29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIEFSTXY3QXNz
ZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcFR5cGUsIGZyb20sIHRvKTsgfQogICAgIHN0YXRp
YyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3Qg
dWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIEFSTXY3QXNzZW1ibGVy
Ojpjb21wdXRlSnVtcFR5cGUocmVjb3JkLCBmcm9tLCB0byk7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzkzMyw5ICszOTMzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX05PUCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZmlsbE5v
cHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVt
b3J5KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAgc3RhdGljIHZv
aWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIENvcHlGdW5jdGlvbiBjb3B5KQog
ICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBub3BzWzEwXVsxMF0gPSB7CiAgICAgICAgICAgICAvLyBub3AK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVy
QnVmZmVyIG9uIGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QdHJUYWcu
aDoKKyAgICAgICAgKFdURjo6dGFnSW50KToKKwogMjAxOC0wOS0yNyAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVBsYXllciBzaG91bGQgaGF2ZSBtZWRp
YVBsYXllcldhaXRpbmdGb3JLZXlDaGFuZ2VkKCkgLyBib29sIHdhaXRpbmdGb3JLZXkoKSBhY2Nl
c3NvcgpJbmRleDogU291cmNlL1dURi93dGYvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUHRyVGFnLmgJKHJldmlzaW9uIDIzNjU3NykKKysrIFNvdXJjZS9XVEYvd3RmL1B0
clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDEzIEBAIGlubGluZSBQdHJUeXBl
IHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUKIHRlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRy
VHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBl
Pjo6dmFsdWU+PgogaW5saW5lIFB0clR5cGUgdW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIp
IHsgcmV0dXJuIHB0cjsgfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK2lubGluZSBJ
bnRUeXBlIHRhZ0ludChJbnRUeXBlIHB0ckludCwgUHRyVGFnKQoreworICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKEludFR5cGUpID09IHNpemVvZih1aW50cHRyX3QpLCAiIik7CisgICAgcmV0dXJu
IHB0ckludDsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc0NG
dW5jdGlvblB0cihQdHJUeXBlKSB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQg
YXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIoUHRyVHlwZSkgeyB9CiAKQEAgLTE4NCw2ICsxOTEs
NyBAQCB1c2luZyBXVEY6OnJldGFnQ29kZVB0cjsKIHVzaW5nIFdURjo6cmVtb3ZlQ29kZVB0clRh
ZzsKIHVzaW5nIFdURjo6dGFnQ0Z1bmN0aW9uUHRyOwogdXNpbmcgV1RGOjp1bnRhZ0NGdW5jdGlv
blB0cjsKK3VzaW5nIFdURjo6dGFnSW50OwogCiB1c2luZyBXVEY6OmFzc2VydElzQ0Z1bmN0aW9u
UHRyOwogdXNpbmcgV1RGOjphc3NlcnRJc051bGxPckNGdW5jdGlvblB0cjsK
</data>
<flag name="review"
          id="368405"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351048</attachid>
            <date>2018-09-27 21:15:09 -0700</date>
            <delta_ts>2018-09-27 22:34:45 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>35493</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzY1NzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVyIG9u
IGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICAqIHN0cmVzcy9yZWdyZXNzLTE4OTEzMi5qczoK
KwogMjAxOC0wOS0yNyAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBEaXNhYmxlIHRlc3Qgd2l0aG91dCBMTEludCBvbiBBUk12NwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvcmVncmVzcy0xODkxMzIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
cmVncmVzcy0xODkxMzIuanMJKHJldmlzaW9uIDIzNjU3NykKKysrIEpTVGVzdHMvc3RyZXNzL3Jl
Z3Jlc3MtMTg5MTMyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorLy9AIHNraXAg
aWYgJG1lbW9yeUxpbWl0ZWQKKwogdHJ5IHsKICAgICB2YXIgYTAgPSAnXHVkODAxJzsKICAgICB2
YXIgYTEgPSBbXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM2NTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDU0IEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVyQnVmZmVyIG9uIGFy
bTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkw
MDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBNYXJrIExhbS4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oOgor
ICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6QVJNNjRBc3NlbWJsZXIpOgorICAgICAgICAo
SlNDOjpBUk02NEFzc2VtYmxlcjo6ZmlsbE5vcHMpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2Vt
Ymxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rSnVtcE9yQ2Fs
bCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29tcGFyZUFuZEJyYW5jaCk6
CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0aW9uYWxCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6
ZmlsbE5vcHMpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6dW5saW5rZWRDb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyOjplbWl0Tm9wcyk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6QVJNNjRFSGFz
aCk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFS
TTY0RUhhc2g6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpyYW5kb21T
ZWVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpBc3NlbWJsZXJCdWZm
ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OnB1dFNob3J0KToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpwdXRJbnRVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OnB1dEludCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6
aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6ZGF0YSBjb25zdCk6
CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50ZWdyYWxVbmNoZWNrZWQpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAg
ICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpj
b3B5Q29tcGFjdEFuZExpbmtDb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpmaWxsTm9wcyk6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6anVtcHNUb0xpbmspOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TTY0OjpsaW5rKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dW5saW5rZWRD
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpqdW1wc1RvTGluayk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnVubGlua2VkQ29kZSk6IERlbGV0ZWQuCisg
ICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3Nl
bWJsZXI6OmZpbGxOb3BzKToKKwogMjAxOC0wOS0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgREZHOjpPU1JFbnRyeTo6bV9tYWNoaW5lQ29kZU9mZnNldCBzaG91
bGQgYmUgYSBDb2RlTG9jYXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyMiw5ICszMjIsMTcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc1pyKFJlZ2lzdGVySUQgcmVnKSB7IHJldHVybiBBUk02NFJlZ2lzdGVyczo6aXNacihyZWcp
OyB9CiAKIHB1YmxpYzoKLSAgICBBUk02NEFzc2VtYmxlcigpCisgICAgQVJNNjRBc3NlbWJsZXIo
CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgdW5zaWduZWQgcmFuZG9tTnVtYmVyCisjZW5kaWYg
CisgICAgICAgICkKICAgICAgICAgOiBtX2luZGV4T2ZMYXN0V2F0Y2hwb2ludChJTlRfTUlOKQog
ICAgICAgICAsIG1faW5kZXhPZlRhaWxPZkxhc3RXYXRjaHBvaW50KElOVF9NSU4pCisjaWYgQ1BV
KEFSTTY0RSkKKyAgICAgICAgLCBtX2J1ZmZlcihyYW5kb21OdW1iZXIpCisjZW5kaWYKKyAgICAg
ICAgCiAgICAgewogICAgIH0KICAgICAKQEAgLTE1NTgsMTcgKzE1NjYsMTUgQEAgcHVibGljOgog
ICAgICAgICBpbnNuKG5vcFBzZXVkbygpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQg
ZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRh
YmxlTWVtb3J5KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAgc3Rh
dGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIENvcHlGdW5jdGlvbiBj
b3B5KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzaXplICUgc2l6ZW9mKGludDMy
X3QpKSk7CiAgICAgICAgIHNpemVfdCBuID0gc2l6ZSAvIHNpemVvZihpbnQzMl90KTsKICAgICAg
ICAgZm9yIChpbnQzMl90KiBwdHIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oYmFzZSk7IG4tLTsp
IHsKICAgICAgICAgICAgIGludCBpbnNuID0gbm9wUHNldWRvKCk7Ci0gICAgICAgICAgICBpZiAo
aXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5KSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHB0cikgPT0gcHRyKTsK
LSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHB0cisrLCAmaW5zbiwgc2l6ZW9mKGlu
dCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbWVtY3B5KHB0cisrLCAm
aW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRv
TXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHB0cikgPT0gcHRyKTsKKyAgICAgICAgICAgIGNv
cHkocHRyKyssICZpbnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0yNTczLDcgKzI1NzksNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0g
YS5tX29mZnNldDsKICAgICB9CiAKLSAgICB2b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJldHVybiBt
X2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X2J1ZmZlci5jb2RlU2l6ZSgpOyB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVy
bk9mZnNldChBc3NlbWJsZXJMYWJlbCBjYWxsKQpAQCAtMjYxMSwxMyArMjYxNiw2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qdW1wc1RvTGluay5hcHBlbmQoTGlua1JlY29yZChmcm9tLm1fb2Zmc2V0
LCB0by5tX29mZnNldCwgdHlwZSwgY29uZGl0aW9uLCBiaXROdW1iZXIsIGNvbXBhcmVSZWdpc3Rl
cikpOwogICAgIH0KIAotICAgIHZvaWQgbGlua0p1bXAoQXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9p
ZCogZXhlY3V0YWJsZUNvZGUsIEFzc2VtYmxlckxhYmVsIHRvKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGZyb20uaXNTZXQoKSk7Ci0gICAgICAgIEFTU0VSVCh0by5pc1NldCgpKTsKLSAgICAgICAg
cmVsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oYWRkcmVzc09mKGZyb20pLCBhZGRyZXNzT2YoZXhlY3V0
YWJsZUNvZGUsIGZyb20pLCBhZGRyZXNzT2YodG8pKTsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGlj
IHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCogdG8p
CiAgICAgewogICAgICAgICBBU1NFUlQoZnJvbS5pc1NldCgpKTsKQEAgLTI5NzcsMzAgKzI5NzUs
MzIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9qdW1wc1RvTGluazsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBBTFdBWVNfSU5MSU5FIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1aW50
OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb244LCB1aW50OF90KiB0bykK
KyAgICB0eXBlZGVmIHZvaWQqICgqQ29weUZ1bmN0aW9uKSh2b2lkKiwgY29uc3Qgdm9pZCosIHNp
emVfdCk7CisKKyAgICBzdGF0aWMgdm9pZCBBTFdBWVNfSU5MSU5FIGxpbmsoTGlua1JlY29yZCYg
cmVjb3JkLCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5zdHJ1Y3Rpb244LCB1
aW50OF90KiB0bywgQ29weUZ1bmN0aW9uIGNvcHkpCiAgICAgewogICAgICAgICBjb25zdCBpbnQq
IGZyb21JbnN0cnVjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50Kj4oZnJvbUluc3Ry
dWN0aW9uOCk7CiAgICAgICAgIHN3aXRjaCAocmVjb3JkLmxpbmtUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBMaW5rSnVtcE5vQ29uZGl0aW9uOgotICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFs
c2U+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8pOwor
ICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4o
ZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTGlua0p1bXBDb25kaXRpb25EaXJlY3Q6Ci0gICAgICAgICAgICBsaW5rQ29u
ZGl0aW9uYWxCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0
PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rpb24sIHRvKTsKKyAgICAgICAgICAgIGxpbmtDb25k
aXRpb25hbEJyYW5jaDx0cnVlPihyZWNvcmQuY29uZGl0aW9uKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb25kaXRpb246Ci0gICAgICAgICAgICBsaW5rQ29u
ZGl0aW9uYWxCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2Fz
dDxpbnQqPihmcm9tKSAtIDEsIGZyb21JbnN0cnVjdGlvbiAtIDEsIHRvKTsKKyAgICAgICAgICAg
IGxpbmtDb25kaXRpb25hbEJyYW5jaDxmYWxzZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVy
cHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8sIGNvcHkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb21wYXJlQW5kQnJh
bmNoRGlyZWN0OgotICAgICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8dHJ1ZT4ocmVjb3Jk
LmNvbmRpdGlvbigpLCByZWNvcmQuaXM2NEJpdCgpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8pOworICAg
ICAgICAgICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCBy
ZWNvcmQuaXM2NEJpdCgpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50Kj4oZnJvbSksIGZyb21JbnN0cnVjdGlvbiwgdG8sIGNvcHkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBDb21wYXJlQW5kQnJhbmNoOgotICAgICAgICAg
ICAgbGlua0NvbXBhcmVBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3Jk
LmlzNjRCaXQoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGlu
dCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8pOworICAgICAgICAgICAgbGlu
a0NvbXBhcmVBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24oKSwgcmVjb3JkLmlzNjRC
aXQoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZy
b20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8sIGNvcHkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTGlua0p1bXBUZXN0Qml0RGlyZWN0OgotICAgICAgICAgICAgbGlu
a1Rlc3RBbmRCcmFuY2g8dHJ1ZT4ocmVjb3JkLmNvbmRpdGlvbigpLCByZWNvcmQuYml0TnVtYmVy
KCksIHJlY29yZC5jb21wYXJlUmVnaXN0ZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9t
KSwgZnJvbUluc3RydWN0aW9uLCB0byk7CisgICAgICAgICAgICBsaW5rVGVzdEFuZEJyYW5jaDx0
cnVlPihyZWNvcmQuY29uZGl0aW9uKCksIHJlY29yZC5iaXROdW1iZXIoKSwgcmVjb3JkLmNvbXBh
cmVSZWdpc3RlcigpLCByZWludGVycHJldF9jYXN0PGludCo+KGZyb20pLCBmcm9tSW5zdHJ1Y3Rp
b24sIHRvLCBjb3B5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtKdW1w
VGVzdEJpdDoKLSAgICAgICAgICAgIGxpbmtUZXN0QW5kQnJhbmNoPGZhbHNlPihyZWNvcmQuY29u
ZGl0aW9uKCksIHJlY29yZC5iaXROdW1iZXIoKSwgcmVjb3JkLmNvbXBhcmVSZWdpc3RlcigpLCBy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgZnJvbUluc3RydWN0aW9uIC0gMSwgdG8p
OworICAgICAgICAgICAgbGlua1Rlc3RBbmRCcmFuY2g8ZmFsc2U+KHJlY29yZC5jb25kaXRpb24o
KSwgcmVjb3JkLmJpdE51bWJlcigpLCByZWNvcmQuY29tcGFyZVJlZ2lzdGVyKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBmcm9tSW5zdHJ1Y3Rpb24gLSAxLCB0bywgY29weSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzA0Miw3ICszMDQyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0K
IAogICAgIHRlbXBsYXRlPGJvb2wgaXNDYWxsPgotICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wT3JD
YWxsKGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRvKQorICAg
IHN0YXRpYyB2b2lkIGxpbmtKdW1wT3JDYWxsKGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5z
dHJ1Y3Rpb24sIHZvaWQqIHRvLCBDb3B5RnVuY3Rpb24gY29weSA9IHBlcmZvcm1KSVRNZW1jcHkp
CiAgICAgewogICAgICAgICBib29sIGxpbms7CiAgICAgICAgIGludCBpbW0yNjsKQEAgLTMwNTks
MTEgKzMwNTksMTEgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRp
b25hbEJyYW5jaEltbWVkaWF0ZShpc0NhbGwsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXpl
Pihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgcGVyZm9ybUpJVE1lbWNweShmcm9tLCAmaW5zbiwg
c2l6ZW9mKGludCkpOworICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0RpcmVjdD4KLSAgICBzdGF0aWMgdm9pZCBsaW5r
Q29tcGFyZUFuZEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCBib29sIGlzNjRCaXQsIFJlZ2lz
dGVySUQgcnQsIGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rpb24sIHZvaWQqIHRv
KQorICAgIHN0YXRpYyB2b2lkIGxpbmtDb21wYXJlQW5kQnJhbmNoKENvbmRpdGlvbiBjb25kaXRp
b24sIGJvb2wgaXM2NEJpdCwgUmVnaXN0ZXJJRCBydCwgaW50KiBmcm9tLCBjb25zdCBpbnQqIGZy
b21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5ID0gcGVyZm9ybUpJVE1l
bWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
Pih0bykgJiAzKSk7CkBAIC0zMDc2LDIyICszMDc2LDIyIEBAIHByb3RlY3RlZDoKICAgICAgICAg
aWYgKHVzZURpcmVjdCB8fCBpc0RpcmVjdCkgewogICAgICAgICAgICAgaW50IGluc24gPSBjb21w
YXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82NCA6IERhdGFzaXplXzMy
LCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwotICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShm
cm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwg
c2l6ZW9mKGludCkpOwogICAgICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAg
ICAgIGluc24gPSBub3BQc2V1ZG8oKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
b3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSArIDEpID09IChmcm9tICsg
MSkpOwotICAgICAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJvbSArIDEsICZpbnNuLCBz
aXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgY29weShmcm9tICsgMSwgJmluc24sIHNpemVv
ZihpbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlu
dCBpbnNuID0gY29tcGFyZUFuZEJyYW5jaEltbWVkaWF0ZShpczY0Qml0ID8gRGF0YXNpemVfNjQg
OiBEYXRhc2l6ZV8zMiwgaW52ZXJ0KGNvbmRpdGlvbikgPT0gQ29uZGl0aW9uTkUsIDIsIHJ0KTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rp
b25TaXplPihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkoZnJv
bSwgJmluc24sIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIGxpbmtKdW1wT3JDYWxsPGZhbHNl
Pihmcm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsgMSwgdG8pOworICAgICAgICAgICAgY29weShm
cm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFs
c2U+KGZyb20gKyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0bywgY29weSk7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTxib29sIGlzRGlyZWN0PgotICAgIHN0YXRpYyB2b2lkIGxp
bmtDb25kaXRpb25hbEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCBpbnQqIGZyb20sIGNvbnN0
IGludCogZnJvbUluc3RydWN0aW9uLCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ29u
ZGl0aW9uYWxCcmFuY2goQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50KiBmcm9tLCBjb25zdCBpbnQq
IGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5ID0gcGVyZm9ybUpJ
VE1lbWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgJiAzKSk7CkBAIC0zMTA0LDIyICszMTA0LDIyIEBAIHByb3RlY3RlZDoKICAgICAg
ICAgaWYgKHVzZURpcmVjdCB8fCBpc0RpcmVjdCkgewogICAgICAgICAgICAgaW50IGluc24gPSBj
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGlu
c3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7Ci0gICAgICAgICAgICBwZXJmb3JtSklUTWVt
Y3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBjb3B5KGZyb20sICZp
bnNuLCBzaXplb2YoaW50KSk7CiAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CiAgICAgICAg
ICAgICAgICAgaW5zbiA9IG5vcFBzZXVkbygpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihmcm9tICsgMSkgPT0gKGZy
b20gKyAxKSk7Ci0gICAgICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShmcm9tICsgMSwgJmlu
c24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgICAgICBjb3B5KGZyb20gKyAxLCAmaW5zbiwg
c2l6ZW9mKGludCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaW50IGluc24gPSBjb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZSgyLCBpbnZlcnQoY29uZGl0
aW9uKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGlu
c3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7Ci0gICAgICAgICAgICBwZXJmb3JtSklUTWVt
Y3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBsaW5rSnVtcE9yQ2Fs
bDxmYWxzZT4oZnJvbSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEsIHRvKTsKKyAgICAgICAgICAg
IGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIGxpbmtKdW1wT3JD
YWxsPGZhbHNlPihmcm9tICsgMSwgZnJvbUluc3RydWN0aW9uICsgMSwgdG8sIGNvcHkpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBpc0RpcmVjdD4KLSAgICBzdGF0aWMg
dm9pZCBsaW5rVGVzdEFuZEJyYW5jaChDb25kaXRpb24gY29uZGl0aW9uLCB1bnNpZ25lZCBiaXRO
dW1iZXIsIFJlZ2lzdGVySUQgcnQsIGludCogZnJvbSwgY29uc3QgaW50KiBmcm9tSW5zdHJ1Y3Rp
b24sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIGxpbmtUZXN0QW5kQnJhbmNoKENvbmRpdGlv
biBjb25kaXRpb24sIHVuc2lnbmVkIGJpdE51bWJlciwgUmVnaXN0ZXJJRCBydCwgaW50KiBmcm9t
LCBjb25zdCBpbnQqIGZyb21JbnN0cnVjdGlvbiwgdm9pZCogdG8sIENvcHlGdW5jdGlvbiBjb3B5
ID0gcGVyZm9ybUpJVE1lbWNweSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CkBAIC0zMTMzLDE3ICszMTMzLDE3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCBpc0RpcmVjdCkgewogICAgICAgICAgICAg
aW50IGluc24gPSB0ZXN0QW5kQnJhbmNoSW1tZWRpYXRlKGNvbmRpdGlvbiA9PSBDb25kaXRpb25O
RSwgc3RhdGljX2Nhc3Q8aW50PihiaXROdW1iZXIpLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCks
IHJ0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5z
dHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKLSAgICAgICAgICAgIHBlcmZvcm1KSVRNZW1j
cHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIGNvcHkoZnJvbSwgJmlu
c24sIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAg
ICAgICAgICBpbnNuID0gbm9wUHNldWRvKCk7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20gKyAxKSA9PSAoZnJv
bSArIDEpKTsKLSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KGZyb20gKyAxLCAmaW5z
biwgc2l6ZW9mKGludCkpOworICAgICAgICAgICAgICAgIGNvcHkoZnJvbSArIDEsICZpbnNuLCBz
aXplb2YoaW50KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFuY2hJbW1lZGlhdGUoaW52ZXJ0KGNvbmRpdGlvbikgPT0g
Q29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0TnVtYmVyKSwgMiwgcnQpOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+
KGZyb20pID09IGZyb20pOwotICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShmcm9tLCAmaW5z
biwgc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgbGlua0p1bXBPckNhbGw8ZmFsc2U+KGZyb20g
KyAxLCBmcm9tSW5zdHJ1Y3Rpb24gKyAxLCB0byk7CisgICAgICAgICAgICBjb3B5KGZyb20sICZp
bnNuLCBzaXplb2YoaW50KSk7CisgICAgICAgICAgICBsaW5rSnVtcE9yQ2FsbDxmYWxzZT4oZnJv
bSArIDEsIGZyb21JbnN0cnVjdGlvbiArIDEsIHRvLCBjb3B5KTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMzIwMSwxMSArMzIwMSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGNvZGUpICsgbGFiZWwubV9vZmZz
ZXQpOwogICAgIH0KIAotICAgIGludCogYWRkcmVzc09mKEFzc2VtYmxlckxhYmVsIGxhYmVsKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NPZihtX2J1ZmZlci5kYXRhKCksIGxhYmVsKTsK
LSAgICB9Ci0KICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNhc3NlbWJsZVhPclNwKGludCByZWcp
IHsgcmV0dXJuIHJlZyA9PSAzMSA/IEFSTTY0UmVnaXN0ZXJzOjpzcCA6IHN0YXRpY19jYXN0PFJl
Z2lzdGVySUQ+KHJlZyk7IH0KICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNhc3NlbWJsZVhPclpy
KGludCByZWcpIHsgcmV0dXJuIHJlZyA9PSAzMSA/IEFSTTY0UmVnaXN0ZXJzOjp6ciA6IHN0YXRp
Y19jYXN0PFJlZ2lzdGVySUQ+KHJlZyk7IH0KICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBkaXNhc3Nl
bWJsZVhPclpyT3JTcChib29sIHVzZVpyLCBpbnQgcmVnKSB7IHJldHVybiByZWcgPT0gMzEgPyAo
dXNlWnIgPyBBUk02NFJlZ2lzdGVyczo6enIgOiBBUk02NFJlZ2lzdGVyczo6c3ApIDogc3RhdGlj
X2Nhc3Q8UmVnaXN0ZXJJRD4ocmVnKTsgfQpAQCAtMzc4MSwxMCArMzc3NiwxMCBAQCBwcm90ZWN0
ZWQ6CiAjZW5kaWYKICAgICB9CiAKLSAgICBBc3NlbWJsZXJCdWZmZXIgbV9idWZmZXI7CiAgICAg
VmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2p1bXBzVG9MaW5r
OwogICAgIGludCBtX2luZGV4T2ZMYXN0V2F0Y2hwb2ludDsKICAgICBpbnQgbV9pbmRleE9mVGFp
bE9mTGFzdFdhdGNocG9pbnQ7CisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOwogCiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgTUFYX1BPSU5URVJfQklUUyA9IDQ4
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxl
ci5oCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0FSTUFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsOSArNzUyLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KE5PUCk7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwg
Ym9vbCBpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBDb3B5RnVuY3Rpb24+CisgICAgICAgIHN0YXRpYyB2b2lkIGZpbGxOb3BzKHZvaWQqIGJh
c2UsIHNpemVfdCBzaXplLCBDb3B5RnVuY3Rpb24gY29weSkKICAgICAgICAgewotICAgICAgICAg
ICAgVU5VU0VEX1BBUkFNKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CisgICAgICAgICAg
ICBVTlVTRURfUEFSQU0oY29weSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNpemUg
JSBzaXplb2YoaW50MzJfdCkpKTsKIAogICAgICAgICAgICAgaW50MzJfdCogcHRyID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdCo+KGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDU3LDcgKzIwNTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPUF9OT1BfVDJh
IHwgKE9QX05PUF9UMmIgPDwgMTYpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGZpbGxOb3Bz
KHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBib29sIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9y
eSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1bmN0aW9uPgorICAgIHN0YXRpYyB2b2lk
IGZpbGxOb3BzKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBDb3B5RnVuY3Rpb24gY29weSkKICAg
ICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc2l6ZSAlIHNpemVvZihpbnQxNl90KSkpOwog
CkBAIC0yMDY1LDEwICsyMDY2LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBzaXplX3QgbnVt
MzJzID0gc2l6ZSAvIHNpemVvZihpbnQzMl90KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW0zMnM7IGkrKykgewogICAgICAgICAgICAgY29uc3QgaW50MzJfdCBpbnNuID0gbm9w
UHNldWRvMzIoKTsKLSAgICAgICAgICAgIGlmIChpc0NvcHlpbmdUb0V4ZWN1dGFibGVNZW1vcnkp
Ci0gICAgICAgICAgICAgICAgcGVyZm9ybUpJVE1lbWNweShwdHIsICZpbnNuLCBzaXplb2YoaW50
MzJfdCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lbWNweShwdHIsICZp
bnNuLCBzaXplb2YoaW50MzJfdCkpOworICAgICAgICAgICAgY29weShwdHIsICZpbnNuLCBzaXpl
b2YoaW50MzJfdCkpOwogICAgICAgICAgICAgcHRyICs9IHNpemVvZihpbnQzMl90KTsKICAgICAg
ICAgfQogCkBAIC0yMDc3LDEwICsyMDc1LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobnVt
MTZzICogc2l6ZW9mKGludDE2X3QpICsgbnVtMzJzICogc2l6ZW9mKGludDMyX3QpID09IHNpemUp
OwogICAgICAgICBpZiAobnVtMTZzKSB7CiAgICAgICAgICAgICBjb25zdCBpbnQxNl90IGluc24g
PSBub3BQc2V1ZG8xNigpOwotICAgICAgICAgICAgaWYgKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1l
bW9yeSkKLSAgICAgICAgICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHB0ciwgJmluc24sIHNpemVv
ZihpbnQxNl90KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVtY3B5KHB0
ciwgJmluc24sIHNpemVvZihpbnQxNl90KSk7CisgICAgICAgICAgICBjb3B5KHB0ciwgJmluc24s
IHNpemVvZihpbnQxNl90KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIyNDcsNyArMjI0Miw2
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQqIHVubGlua2VkQ29kZSgp
IHsgcmV0dXJuIG1fZm9ybWF0dGVyLmRhdGEoKTsgfQogICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9ybWF0dGVyLmNvZGVTaXplKCk7IH0KIAogICAgIHN0YXRpYyB1bnNp
Z25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEFzc2VtYmxlckxhYmVsIGNhbGwpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2Miw4
ICs4NjIsNiBAQCBwdWJsaWM6CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmNhY2hlRmx1c2goY29k
ZSwgc2l6ZSk7CiAgICAgfQogCi0gICAgQXNzZW1ibGVyVHlwZSBtX2Fzc2VtYmxlcjsKLSAgICAK
ICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQq
IGNvZGUsIEp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiB0YXJnZXQpCiAgICAgewpA
QCAtOTYyLDEzICs5NjAsMTggQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0Tm9wcyhzaXplX3Qg
bWVtb3J5VG9GaWxsV2l0aE5vcHNJbkJ5dGVzKQogICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeVRvRmlsbFdpdGhOb3BzSW5CeXRlcyAlIDQgPT0gMCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZW1vcnlUb0ZpbGxXaXRoTm9wc0lu
Qnl0ZXMgLyA0OyArK2kpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyNlbHNlCiAg
ICAgICAgIEFzc2VtYmxlckJ1ZmZlciYgYnVmZmVyID0gbV9hc3NlbWJsZXIuYnVmZmVyKCk7CiAg
ICAgICAgIHNpemVfdCBzdGFydENvZGVTaXplID0gYnVmZmVyLmNvZGVTaXplKCk7CiAgICAgICAg
IHNpemVfdCB0YXJnZXRDb2RlU2l6ZSA9IHN0YXJ0Q29kZVNpemUgKyBtZW1vcnlUb0ZpbGxXaXRo
Tm9wc0luQnl0ZXM7CiAgICAgICAgIGJ1ZmZlci5lbnN1cmVTcGFjZShtZW1vcnlUb0ZpbGxXaXRo
Tm9wc0luQnl0ZXMpOwotICAgICAgICBib29sIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSA9
IGZhbHNlOwotICAgICAgICBBc3NlbWJsZXJUeXBlOjpmaWxsTm9wcyhzdGF0aWNfY2FzdDxjaGFy
Kj4oYnVmZmVyLmRhdGEoKSkgKyBzdGFydENvZGVTaXplLCBtZW1vcnlUb0ZpbGxXaXRoTm9wc0lu
Qnl0ZXMsIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CisgICAgICAgIEFzc2VtYmxlclR5
cGU6OmZpbGxOb3BzKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXIuZGF0YSgpKSArIHN0YXJ0Q29k
ZVNpemUsIG1lbW9yeVRvRmlsbFdpdGhOb3BzSW5CeXRlcywgbWVtY3B5KTsKICAgICAgICAgYnVm
ZmVyLnNldENvZGVTaXplKHRhcmdldENvZGVTaXplKTsKKyNlbmRpZgogICAgIH0KIAogICAgIEFM
V0FZU19JTkxJTkUgdm9pZCB0YWdSZXR1cm5BZGRyZXNzKCkgeyB9CkBAIC05ODMsNiArOTg2LDEx
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyKCkKICAg
ICAgICAgOiBtX3JhbmRvbVNvdXJjZSgwKQorI2lmIENQVShBUk02NEUpCisgICAgICAgICwgbV9h
c3NlbWJsZXIocmFuZG9tKCkpCisjZWxzZQorICAgICAgICAsIG1fYXNzZW1ibGVyKCkKKyNlbmRp
ZgogICAgIHsKICAgICAgICAgaW52YWxpZGF0ZUFsbFRlbXBSZWdpc3RlcnMoKTsKICAgICB9CkBA
IC05OTgsNiArMTAwNiw5IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgbV9yYW5kb21Tb3VyY2VJ
c0luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAgICBXZWFrUmFuZG9tIG1fcmFuZG9tU291cmNlOwor
cHVibGljOgorICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7Citwcm90ZWN0ZWQ6CiAKICNp
ZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICBWZWN0b3I8
UmVnaXN0ZXJBbGxvY2F0aW9uT2Zmc2V0LCAxMD4gbV9yZWdpc3RlckFsbG9jYXRpb25Gb3JPZmZz
ZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2Vt
YmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMs
MTYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaWYgQ1BVKEFSTTY0RSkKKyNpbmNsdWRlIDx3
dGYvUHRyVGFnLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1VuYWxpZ25lZEFjY2Vzcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNs
YXNzIExpbmtCdWZmZXI7CisKICAgICBzdHJ1Y3QgQXNzZW1ibGVyTGFiZWwgewogICAgICAgICBB
c3NlbWJsZXJMYWJlbCgpCiAgICAgICAgICAgICA6IG1fb2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSkKQEAgLTE0MSwxMSArMTQ2LDM3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OwogICAgIH07CiAKKyNpZiBDUFUoQVJNNjRF
KQorICAgIGNsYXNzIEFSTTY0RUhhc2ggeworICAgIHB1YmxpYzoKKyAgICAgICAgQVJNNjRFSGFz
aCh1bnNpZ25lZCByYW5kb21OdW1iZXIpCisgICAgICAgICAgICA6IG1faGFzaChyYW5kb21OdW1i
ZXIpCisgICAgICAgICAgICAsIG1fcmFuZG9tU2VlZChyYW5kb21OdW1iZXIpCisgICAgICAgIHsg
fQorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdXBkYXRlKHVuc2lnbmVkIHZhbHVlLCB1aW50
cHRyX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faGFzaCA9IHRhZ0ludCgoc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkgKyBtX2hhc2gpIF4gKG1faGFzaCA+PiAzMiksIHN0
YXRpY19jYXN0PFB0clRhZz4oaW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICB1aW50cHRyX3Qg
aGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQorICAgICAgICB1bnNpZ25lZCByYW5kb21T
ZWVkKCkgY29uc3QgeyByZXR1cm4gbV9yYW5kb21TZWVkOyB9CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdWludHB0cl90IG1faGFzaDsKKyAgICAgICAgdW5zaWduZWQgbV9yYW5kb21TZWVkOworICAg
IH07CisjZW5kaWYKKwogICAgIGNsYXNzIEFzc2VtYmxlckJ1ZmZlciB7CiAgICAgcHVibGljOgot
ICAgICAgICBBc3NlbWJsZXJCdWZmZXIoKQorICAgICAgICBBc3NlbWJsZXJCdWZmZXIoCisjaWYg
Q1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHVuc2lnbmVkIHJhbmRvbU51bWJlcgorI2VuZGlmCisg
ICAgICAgICkKICAgICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRl
eCgwKQorI2lmIENQVShBUk02NEUpCisgICAgICAgICAgICAsIG1faGFzaChyYW5kb21OdW1iZXIp
CisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE2NSwyNSArMTk2LDIzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEobV9pbmRleCAmIChhbGlnbm1lbnQg
LSAxKSk7CiAgICAgICAgIH0KIAorI2lmICFDUFUoQVJNNjQpCiAgICAgICAgIHZvaWQgcHV0Qnl0
ZVVuY2hlY2tlZChpbnQ4X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9
CiAgICAgICAgIHZvaWQgcHV0Qnl0ZShpbnQ4X3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwodmFsdWUp
OyB9CiAgICAgICAgIHZvaWQgcHV0U2hvcnRVbmNoZWNrZWQoaW50MTZfdCB2YWx1ZSkgeyBwdXRJ
bnRlZ3JhbFVuY2hlY2tlZCh2YWx1ZSk7IH0KICAgICAgICAgdm9pZCBwdXRTaG9ydChpbnQxNl90
IHZhbHVlKSB7IHB1dEludGVncmFsKHZhbHVlKTsgfQotICAgICAgICB2b2lkIHB1dEludFVuY2hl
Y2tlZChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsVW5jaGVja2VkKHZhbHVlKTsgfQotICAg
ICAgICB2b2lkIHB1dEludChpbnQzMl90IHZhbHVlKSB7IHB1dEludGVncmFsKHZhbHVlKTsgfQog
ICAgICAgICB2b2lkIHB1dEludDY0VW5jaGVja2VkKGludDY0X3QgdmFsdWUpIHsgcHV0SW50ZWdy
YWxVbmNoZWNrZWQodmFsdWUpOyB9CiAgICAgICAgIHZvaWQgcHV0SW50NjQoaW50NjRfdCB2YWx1
ZSkgeyBwdXRJbnRlZ3JhbCh2YWx1ZSk7IH0KLQotICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS5idWZmZXIoKTsKLSAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgIHZvaWQgcHV0SW50VW5jaGVja2VkKGludDMyX3QgdmFsdWUp
IHsgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOyB9CisgICAgICAgIHZvaWQgcHV0SW50KGlu
dDMyX3QgdmFsdWUpIHsgcHV0SW50ZWdyYWwodmFsdWUpOyB9CiAKICAgICAgICAgc2l6ZV90IGNv
ZGVTaXplKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7CiAg
ICAgICAgIH0KIAorI2lmICFDUFUoQVJNNjQpCiAgICAgICAgIHZvaWQgc2V0Q29kZVNpemUoc2l6
ZV90IGluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXYXJuaW5nOiBPbmx5IHVzZSB0
aGlzIGlmIHlvdSBrbm93IGV4YWN0bHkgd2hhdCB5b3UgYXJlIGRvaW5nLgpAQCAtMTkyLDYgKzIy
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9pbmRleCA9IGluZGV4OwogICAg
ICAgICAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zdG9yYWdlLmNhcGFjaXR5KCkpOwogICAgICAg
ICB9CisjZW5kaWYKIAogICAgICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbCgpIGNvbnN0CiAgICAg
ICAgIHsKQEAgLTIwOSw2ICsyMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8KICAg
ICAgICAgLy8gTG9jYWxXcml0ZXIgKkNBTk5PVCogYmUgbWl4ZWQgd2l0aCBvdGhlciB0eXBlcyBv
ZiBhY2Nlc3MgdG8gQXNzZW1ibGVyQnVmZmVyLgogICAgICAgICAvLyBBc3NlbWJsZXJCdWZmZXIg
Y2Fubm90IGJlIHVzZWQgdW50aWwgaXRzIExvY2FsV3JpdGVyIGdvZXMgb3V0IG9mIHNjb3BlLgor
I2lmICFDUFUoQVJNNjQpIC8vIElmIHdlIGV2ZXIgbmVlZCB0byB1c2UgdGhpcyBvbiBhcm02NGUs
IHdlIHdvdWxkIG5lZWQgdG8gbWFrZSB0aGUgY2hlY2tzdW0gYXdhcmUgb2YgdGhpcy4KICAgICAg
ICAgY2xhc3MgTG9jYWxXcml0ZXIgewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICBMb2Nh
bFdyaXRlcihBc3NlbWJsZXJCdWZmZXImIGJ1ZmZlciwgdW5zaWduZWQgcmVxdWlyZWRTcGFjZSkK
QEAgLTI1MSw2ICsyODIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBtX3JlcXVpcmVkU3BhY2U7CiAjZW5kaWYKICAgICAgICAgfTsKKyNlbmRpZiAvLyAhQ1BVKEFS
TTY0KQorCisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgQVJNNjRFSGFzaCBoYXNoKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNoOyB9CisjZW5kaWYKKworI2lmICFDUFUoQVJNNjQpIC8vIElmIHdlIHdl
cmUgdG8gZGVmaW5lIHRoaXMgb24gYXJtNjRlLCB3ZSdkIG5lZWQgYSB3YXkgdG8gdXBkYXRlIHRo
ZSBoYXNoIGFzIHdlIHdyaXRlIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS5idWZmZXIoKTsgfQorI2VuZGlmCisK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBl
PgpAQCAtMjY1LDM1ICszMDYsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEludGVncmFsVHlwZT4KICAgICAgICAgdm9pZCBwdXRJbnRlZ3JhbFVuY2hlY2tl
ZChJbnRlZ3JhbFR5cGUgdmFsdWUpCiAgICAgICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih2YWx1ZSkgPT0gNCwgIiIpOworI2lmIENQVShBUk02
NEUpCisgICAgICAgICAgICBtX2hhc2gudXBkYXRlKHZhbHVlLCBtX2luZGV4KTsKKyNlbmRpZgor
I2VuZGlmCiAgICAgICAgICAgICBBU1NFUlQoaXNBdmFpbGFibGUoc2l6ZW9mKEludGVncmFsVHlw
ZSkpKTsKICAgICAgICAgICAgIFdURjo6dW5hbGlnbmVkU3RvcmU8SW50ZWdyYWxUeXBlPihtX3N0
b3JhZ2UuYnVmZmVyKCkgKyBtX2luZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICBtX2luZGV4ICs9
IHNpemVvZihJbnRlZ3JhbFR5cGUpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
aXNBdmFpbGFibGUoc2l6ZSkpCi0gICAgICAgICAgICAgICAgZ3JvdyhzaXplKTsKLQotICAgICAg
ICAgICAgbWVtY3B5KG1fc3RvcmFnZS5idWZmZXIoKSArIG1faW5kZXgsIGRhdGEsIHNpemUpOwot
ICAgICAgICAgICAgbV9pbmRleCArPSBzaXplOwotICAgICAgICB9Ci0KKyAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGdyb3coaW50IGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7CiAgICAg
ICAgICAgICBtX3N0b3JhZ2UuZ3JvdyhleHRyYUNhcGFjaXR5KTsKICAgICAgICAgfQogCi0gICAg
cHJpdmF0ZToKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgb3V0T2ZMaW5lR3JvdygpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fc3RvcmFnZS5ncm93KCk7CiAgICAgICAgIH0KIAorI2lmICFD
UFUoQVJNNjQpCiAgICAgICAgIGZyaWVuZCBMb2NhbFdyaXRlcjsKKyNlbmRpZgorICAgICAgICBm
cmllbmQgTGlua0J1ZmZlcjsKIAogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICBBUk02NEVI
YXNoIG1faGFzaDsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZp
c2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTAgKzEwOSwxNSBAQCB2b2lkIExpbmtCdWZm
ZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgbV9hc3NlbWJsZXJTdG9yYWdlID0gbWFj
cm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxlckRhdGEoKTsK
ICAgICB1aW50OF90KiBpbkRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2Fzc2Vt
YmxlclN0b3JhZ2UuYnVmZmVyKCkpOwogCisgICAgdWludDhfdCogY29kZU91dERhdGEgPSBtX2Nv
ZGUuZGF0YUxvY2F0aW9uPHVpbnQ4X3QqPigpOworI2lmIENQVShBUk02NEUpCisgICAgY29uc3Qg
QVJNNjRFSGFzaCBhc3NlbWJsZXJCdWZmZXJIYXNoID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJs
ZXIuYnVmZmVyKCkuaGFzaCgpOworICAgIEFSTTY0RUhhc2ggdmVyaWZ5VW5jb21wYWN0ZWRIYXNo
KGFzc2VtYmxlckJ1ZmZlckhhc2gucmFuZG9tU2VlZCgpKTsKKyAgICB1aW50OF90KiBvdXREYXRh
ID0gY29kZU91dERhdGE7CisjZWxzZQogICAgIEFzc2VtYmxlckRhdGEgb3V0QnVmZmVyKG1fc2l6
ZSk7Ci0KICAgICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
b3V0QnVmZmVyLmJ1ZmZlcigpKTsKLSAgICB1aW50OF90KiBjb2RlT3V0RGF0YSA9IG1fY29kZS5k
YXRhTG9jYXRpb248dWludDhfdCo+KCk7CisjZW5kaWYKICNpZiBDUFUoQVJNNjQpCiAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YodW5zaWduZWQpPihvdXREYXRh
KSA9PSBvdXREYXRhKTsKICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZih1bnNpZ25lZCk+KGNvZGVPdXREYXRhKSA9PSBjb2RlT3V0RGF0YSk7CkBAIC0xMjEsNiAr
MTI2LDExIEBAIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKICAgICBp
bnQgcmVhZFB0ciA9IDA7CiAgICAgaW50IHdyaXRlUHRyID0gMDsKICAgICB1bnNpZ25lZCBqdW1w
Q291bnQgPSBqdW1wc1RvTGluay5zaXplKCk7CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIG9zX3Ro
cmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19ydygpOworI2VuZGlmCisKICAgICBpZiAobV9zaG91
bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwganVtcENvdW50OyArK2kpIHsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSByZWFkUHRy
IC0gd3JpdGVQdHI7CkBAIC0xMzQsOCArMTQ0LDE4IEBAIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNv
bXBhY3RBbmRMaW5rQ29kZSgKICAgICAgICAgICAgIEFTU0VSVCghKHJlZ2lvblNpemUgJSAyKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIShyZWFkUHRyICUgMikpOwogICAgICAgICAgICAgQVNTRVJU
KCEod3JpdGVQdHIgJSAyKSk7Ci0gICAgICAgICAgICB3aGlsZSAoY29weVNvdXJjZSAhPSBjb3B5
RW5kKQotICAgICAgICAgICAgICAgICpjb3B5RHN0KysgPSAqY29weVNvdXJjZSsrOworI2lmIENQ
VShBUk02NEUpCisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHJlYWRQdHI7CisjZW5kaWYK
KyAgICAgICAgICAgIHdoaWxlIChjb3B5U291cmNlICE9IGNvcHlFbmQpIHsKKyAgICAgICAgICAg
ICAgICBJbnN0cnVjdGlvblR5cGUgaW5zbiA9ICpjb3B5U291cmNlKys7CisjaWYgQ1BVKEFSTTY0
RSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihJbnN0cnVjdGlvblR5cGUp
ID09IDQsICIiKTsKKyAgICAgICAgICAgICAgICB2ZXJpZnlVbmNvbXBhY3RlZEhhc2gudXBkYXRl
KGluc24sIGluZGV4KTsKKyAgICAgICAgICAgICAgICBpbmRleCArPSBzaXplb2YoSW5zdHJ1Y3Rp
b25UeXBlKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICpjb3B5RHN0KysgPSBpbnNuOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmVjb3JkTGlua09mZnNldHMobV9hc3NlbWJsZXJTdG9y
YWdlLCByZWFkUHRyLCBqdW1wc1RvTGlua1tpXS5mcm9tKCksIG9mZnNldCk7CiAgICAgICAgICAg
ICByZWFkUHRyICs9IHJlZ2lvblNpemU7CiAgICAgICAgICAgICB3cml0ZVB0ciArPSByZWdpb25T
aXplOwpAQCAtMTY2LDI5ICsxODYsNzYgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFu
ZExpbmtDb2RlKAogICAgICAgICAgICAgICAgIEFTU0VSVCghTWFjcm9Bc3NlbWJsZXI6OmNhbkNv
bXBhY3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSk7CiAgICAgICAgIH0KICAgICB9CisKICAgICAv
LyBDb3B5IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QganVtcAotICAgIG1lbWNweShvdXREYXRh
ICsgd3JpdGVQdHIsIGluRGF0YSArIHJlYWRQdHIsIGluaXRpYWxTaXplIC0gcmVhZFB0cik7Cisg
ICAgeworICAgICAgICBJbnN0cnVjdGlvblR5cGUqIGRzdCA9IGJpdHdpc2VfY2FzdDxJbnN0cnVj
dGlvblR5cGUqPihvdXREYXRhICsgd3JpdGVQdHIpOworICAgICAgICBJbnN0cnVjdGlvblR5cGUq
IHNyYyA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvblR5cGUqPihpbkRhdGEgKyByZWFkUHRyKTsK
KyAgICAgICAgc2l6ZV90IGJ5dGVzID0gaW5pdGlhbFNpemUgLSByZWFkUHRyOworCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGRzdCkgJSBzaXplb2YoSW5z
dHJ1Y3Rpb25UeXBlKSA9PSAwKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oc3JjKSAlIHNpemVvZihJbnN0cnVjdGlvblR5cGUpID09IDApOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChieXRlcyAlIHNpemVvZihJbnN0cnVjdGlvblR5cGUpID09IDApOwor
CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSByZWFkUHRyOworI2Vu
ZGlmCisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBieXRlczsgaSArPSBzaXplb2Yo
SW5zdHJ1Y3Rpb25UeXBlKSkgeworICAgICAgICAgICAgSW5zdHJ1Y3Rpb25UeXBlIGluc24gPSAq
c3JjKys7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHZlcmlmeVVuY29tcGFjdGVkSGFz
aC51cGRhdGUoaW5zbiwgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gc2l6ZW9mKEluc3Ry
dWN0aW9uVHlwZSk7CisjZW5kaWYKKyAgICAgICAgICAgICpkc3QrKyA9IGluc247CisgICAgICAg
IH0KKyAgICB9CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIGlmICh2ZXJpZnlVbmNvbXBhY3RlZEhh
c2guaGFzaCgpICE9IGFzc2VtYmxlckJ1ZmZlckhhc2guaGFzaCgpKSB7CisgICAgICAgIGRhdGFM
b2dMbigiSGFzaGVzIGRvbid0IG1hdGNoOiAiLCBSYXdQb2ludGVyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4odmVyaWZ5VW5jb21wYWN0ZWRIYXNoLmhhc2goKSkpLCAiICIsIFJhd1BvaW50ZXIoYml0d2lz
ZV9jYXN0PHZvaWQqPihhc3NlbWJsZXJCdWZmZXJIYXNoLmhhc2goKSkpKTsKKyAgICAgICAgZGF0
YUxvZ0xuKCJDcmFzaGluZyEiKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIHJlY29yZExpbmtPZmZzZXRzKG1fYXNzZW1ibGVyU3RvcmFnZSwgcmVhZFB0ciwgaW5pdGlh
bFNpemUsIHJlYWRQdHIgLSB3cml0ZVB0cik7CiAgICAgICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBqdW1wQ291bnQ7ICsraSkgeworI2lmIENQVShBUk02NEUpCisgICAgICAgIGF1
dG8gbWVtY3B5RnVuY3Rpb24gPSBtZW1jcHk7CisjZWxzZQorICAgICAgICBhdXRvIG1lbWNweUZ1
bmN0aW9uID0gcGVyZm9ybUpJVE1lbWNweTsKKyNlbmRpZgorCiAgICAgICAgIHVpbnQ4X3QqIGxv
Y2F0aW9uID0gY29kZU91dERhdGEgKyBqdW1wc1RvTGlua1tpXS5mcm9tKCk7CiAgICAgICAgIHVp
bnQ4X3QqIHRhcmdldCA9IGNvZGVPdXREYXRhICsganVtcHNUb0xpbmtbaV0udG8oKSAtIGV4ZWN1
dGFibGVPZmZzZXRGb3IoanVtcHNUb0xpbmtbaV0udG8oKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpsaW5rKGp1bXBzVG9MaW5rW2ldLCBvdXREYXRhICsganVtcHNUb0xpbmtbaV0uZnJvbSgp
LCBsb2NhdGlvbiwgdGFyZ2V0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmsoanVtcHNU
b0xpbmtbaV0sIG91dERhdGEgKyBqdW1wc1RvTGlua1tpXS5mcm9tKCksIGxvY2F0aW9uLCB0YXJn
ZXQsIG1lbWNweUZ1bmN0aW9uKTsKICAgICB9CiAKLSAgICBqdW1wc1RvTGluay5jbGVhcigpOwot
CiAgICAgc2l6ZV90IGNvbXBhY3RTaXplID0gd3JpdGVQdHIgKyBpbml0aWFsU2l6ZSAtIHJlYWRQ
dHI7CisgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpIHsKKyAgICAgICAgc2l6ZV90IG5vcFNp
emVJbkJ5dGVzID0gaW5pdGlhbFNpemUgLSBjb21wYWN0U2l6ZTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMob3V0RGF0YSArIGNvbXBhY3RTaXplLCBu
b3BTaXplSW5CeXRlcywgbWVtY3B5KTsKKyAgICB9CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIG9z
X3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19yeCgpOworI2VuZGlmCisKICAgICBpZiAobV9l
eGVjdXRhYmxlTWVtb3J5KSB7CiAgICAgICAgIG1fc2l6ZSA9IGNvbXBhY3RTaXplOwogICAgICAg
ICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayhtX3NpemUpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHNpemVfdCBub3BTaXplSW5CeXRlcyA9IGluaXRpYWxTaXplIC0gY29tcGFjdFNpemU7Ci0g
ICAgICAgIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVtb3J5ID0gZmFsc2U7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKG91dERhdGEgKyBjb21w
YWN0U2l6ZSwgbm9wU2l6ZUluQnl0ZXMsIGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7CiAg
ICAgfQogCisjaWYgIUNQVShBUk02NEUpCisgICAgQVNTRVJUKGNvZGVPdXREYXRhICE9IG91dERh
dGEpOwogICAgIHBlcmZvcm1KSVRNZW1jcHkoY29kZU91dERhdGEsIG91dERhdGEsIG1fc2l6ZSk7
CisjZWxzZQorICAgIEFTU0VSVChjb2RlT3V0RGF0YSA9PSBvdXREYXRhKTsKKyNlbmRpZgorCisg
ICAganVtcHNUb0xpbmsuY2xlYXIoKTsKIAogI2lmIERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAg
ZHVtcExpbmtTdGF0aXN0aWNzKGNvZGVPdXREYXRhLCBpbml0aWFsU2l6ZSwgbV9zaXplKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5o
CShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01J
UFNBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDkgKzI2NiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDApOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
dm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgYm9vbCBpc0NvcHlpbmdUb0V4
ZWN1dGFibGVNZW1vcnkpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvcHlGdW5jdGlvbj4KKyAg
ICBzdGF0aWMgdm9pZCBmaWxsTm9wcyh2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgQ29weUZ1bmN0
aW9uIGNvcHkpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oaXNDb3B5aW5nVG9FeGVjdXRh
YmxlTWVtb3J5KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvcHkpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghKHNpemUgJSBzaXplb2YoaW50MzJfdCkpKTsKIAogICAgICAgICBpbnQzMl90KiBw
dHIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oYmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNp
b24gMjM2NTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwxMiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IEFzc2VtYmxlcjo6SnVtcFR5cGUgRGVmYXVsdEp1bXAgPSBBc3NlbWJs
ZXI6Okp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZTsKIAogICAgIFZlY3RvcjxMaW5rUmVjb3JkLCAw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGp1bXBzVG9MaW5rKCkgeyByZXR1cm4gbV9hc3NlbWJs
ZXIuanVtcHNUb0xpbmsoKTsgfQotICAgIHZvaWQqIHVubGlua2VkQ29kZSgpIHsgcmV0dXJuIG1f
YXNzZW1ibGVyLnVubGlua2VkQ29kZSgpOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuQ29tcGFjdChK
dW1wVHlwZSBqdW1wVHlwZSkgeyByZXR1cm4gQXNzZW1ibGVyOjpjYW5Db21wYWN0KGp1bXBUeXBl
KTsgfQogICAgIHN0YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1
bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4g
QXNzZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcFR5cGUsIGZyb20sIHRvKTsgfQogICAgIHN0
YXRpYyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29u
c3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIEFzc2VtYmxlcjo6
Y29tcHV0ZUp1bXBUeXBlKHJlY29yZCwgZnJvbSwgdG8pOyB9CiAgICAgc3RhdGljIGludCBqdW1w
U2l6ZURlbHRhKEp1bXBUeXBlIGp1bXBUeXBlLCBKdW1wTGlua1R5cGUganVtcExpbmtUeXBlKSB7
IHJldHVybiBBc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEoanVtcFR5cGUsIGp1bXBMaW5rVHlwZSk7
IH0KLSAgICBzdGF0aWMgdm9pZCBsaW5rKExpbmtSZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJv
bSwgY29uc3QgdWludDhfdCogZnJvbUluc3RydWN0aW9uLCB1aW50OF90KiB0bykgeyByZXR1cm4g
QXNzZW1ibGVyOjpsaW5rKHJlY29yZCwgZnJvbSwgZnJvbUluc3RydWN0aW9uLCB0byk7IH0KKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29weUZ1bmN0aW9uPgorICAgIHN0YXRpYyB2b2lkIGxpbmso
TGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiBmcm9tSW5z
dHJ1Y3Rpb24sIHVpbnQ4X3QqIHRvLCBDb3B5RnVuY3Rpb24gY29weSkgeyByZXR1cm4gQXNzZW1i
bGVyOjpsaW5rKHJlY29yZCwgZnJvbSwgZnJvbUluc3RydWN0aW9uLCB0bywgY29weSk7IH0KIAog
ICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRWlnaHQ7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgVmVjdG9yPExpbmtSZWNvcmQsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiYganVtcHNUb0xpbmsoKSB7IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wc1RvTGlu
aygpOyB9Ci0gICAgdm9pZCogdW5saW5rZWRDb2RlKCkgeyByZXR1cm4gbV9hc3NlbWJsZXIudW5s
aW5rZWRDb2RlKCk7IH0KICAgICBzdGF0aWMgYm9vbCBjYW5Db21wYWN0KEp1bXBUeXBlIGp1bXBU
eXBlKSB7IHJldHVybiBBUk12N0Fzc2VtYmxlcjo6Y2FuQ29tcGFjdChqdW1wVHlwZSk7IH0KICAg
ICBzdGF0aWMgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShKdW1wVHlwZSBqdW1wVHlwZSwg
Y29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIEFSTXY3QXNz
ZW1ibGVyOjpjb21wdXRlSnVtcFR5cGUoanVtcFR5cGUsIGZyb20sIHRvKTsgfQogICAgIHN0YXRp
YyBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3Qg
dWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIEFSTXY3QXNzZW1ibGVy
Ojpjb21wdXRlSnVtcFR5cGUocmVjb3JkLCBmcm9tLCB0byk7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjM2NTc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzkzMyw5ICszOTMzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX05PUCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZmlsbE5v
cHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGJvb2wgaXNDb3B5aW5nVG9FeGVjdXRhYmxlTWVt
b3J5KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb3B5RnVuY3Rpb24+CisgICAgc3RhdGljIHZv
aWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIENvcHlGdW5jdGlvbiBjb3B5KQog
ICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGlzQ29weWluZ1RvRXhlY3V0YWJsZU1lbW9yeSk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShjb3B5KTsKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBub3BzWzEwXVsxMF0gPSB7CiAgICAgICAgICAgICAvLyBub3AK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMzY1NzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4LTA5LTI3ICBTYWFtIGJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIFZlcmlmeSB0aGUgY29udGVudHMgb2YgQXNzZW1ibGVy
QnVmZmVyIG9uIGFybTY0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkwMDU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zODkxNjYzMD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICAqIHd0Zi9QdHJUYWcuaDoKKyAg
ICAgICAgKFdURjo6dGFnSW50KToKKwogMjAxOC0wOS0yNyAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVBsYXllciBzaG91bGQgaGF2ZSBtZWRpYVBsYXll
cldhaXRpbmdGb3JLZXlDaGFuZ2VkKCkgLyBib29sIHdhaXRpbmdGb3JLZXkoKSBhY2Nlc3NvcgpJ
bmRleDogU291cmNlL1dURi93dGYvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUHRyVGFnLmgJKHJldmlzaW9uIDIzNjU3NykKKysrIFNvdXJjZS9XVEYvd3RmL1B0clRhZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDEzIEBAIGlubGluZSBQdHJUeXBlIHVudGFn
Q0Z1bmN0aW9uUHRyKFB0clR5cGUKIHRlbXBsYXRlPFB0clRhZywgdHlwZW5hbWUgUHRyVHlwZSwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFs
dWU+PgogaW5saW5lIFB0clR5cGUgdW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIpIHsgcmV0
dXJuIHB0cjsgfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK2lubGluZSBJbnRUeXBl
IHRhZ0ludChJbnRUeXBlIHB0ckludCwgUHRyVGFnKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKEludFR5cGUpID09IHNpemVvZih1aW50cHRyX3QpLCAiIik7CisgICAgcmV0dXJuIHB0cklu
dDsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc0NGdW5jdGlv
blB0cihQdHJUeXBlKSB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0
SXNOdWxsT3JDRnVuY3Rpb25QdHIoUHRyVHlwZSkgeyB9CiAKQEAgLTE4NCw2ICsxOTEsNyBAQCB1
c2luZyBXVEY6OnJldGFnQ29kZVB0cjsKIHVzaW5nIFdURjo6cmVtb3ZlQ29kZVB0clRhZzsKIHVz
aW5nIFdURjo6dGFnQ0Z1bmN0aW9uUHRyOwogdXNpbmcgV1RGOjp1bnRhZ0NGdW5jdGlvblB0cjsK
K3VzaW5nIFdURjo6dGFnSW50OwogCiB1c2luZyBXVEY6OmFzc2VydElzQ0Z1bmN0aW9uUHRyOwog
dXNpbmcgV1RGOjphc3NlcnRJc051bGxPckNGdW5jdGlvblB0cjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>