<?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>122939</bug_id>
          
          <creation_ts>2013-10-16 21:25:01 -0700</creation_ts>
          <short_desc>Baseline JIT and DFG IC code generation should be unified and rationalized</short_desc>
          <delta_ts>2013-10-21 10:09:46 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>122940</dependson>
          <blocked>122739</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940644</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-16 21:25:01 -0700</bug_when>
    <thetext>Currently there&apos;s a bunch of stuff that assumes that an IC corresponds to a byte code index and a machine code return address within the machine code of a CodeBlock.

It&apos;s fine that IC&apos;s are owned by a Codeblocks.  But we want to allow for IC&apos;s to be created in an ad-hoc manner.

It&apos;s fine that an IC is part of the machine code stream of a CodeBlock.  But we want to allow them to be created out-of-line, also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940652</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-16 22:48:41 -0700</bug_when>
    <thetext>Ideally, you&apos;d be able to say something like:

ICGenerator ic(codeBlock, codeOrigin, identifier, type, registersToUse);

ic.generateFastPath(&amp;jit);
ic.generateSlowPath(&amp;jit);
ic.finalize(linkBuffer);
ic.populateStubInfo(stubInfo);

And then be able to call into the fast path and it should work as you&apos;d expect.

This will allow us to further unify baseline and DFG IC code.  And the FTL will be able to just use this, modulo a custom link buffer that would generate the code into the llvm patch point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941447</commentid>
    <comment_count>2</comment_count>
      <attachid>214634</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-18 21:22:07 -0700</bug_when>
    <thetext>Created attachment 214634
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941454</commentid>
    <comment_count>3</comment_count>
      <attachid>214636</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-18 22:14:32 -0700</bug_when>
    <thetext>Created attachment 214636
it&apos;s sort of starting to make sense</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941461</commentid>
    <comment_count>4</comment_count>
      <attachid>214639</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-18 23:06:58 -0700</bug_when>
    <thetext>Created attachment 214639
it&apos;s growing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941530</commentid>
    <comment_count>5</comment_count>
      <attachid>214658</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-19 11:56:23 -0700</bug_when>
    <thetext>Created attachment 214658
it compiles!

And it crashes on *every* test.  It&apos;s an impressive achievement!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941553</commentid>
    <comment_count>6</comment_count>
      <attachid>214664</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-19 13:21:47 -0700</bug_when>
    <thetext>Created attachment 214664
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941555</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-19 13:23:52 -0700</bug_when>
    <thetext>Attachment 214664 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInlineCacheWrapper.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInlineCacheWrapperInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/AssemblyHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGInlineCacheWrapperInlines.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/dfg/DFGInlineCacheWrapper.h:47:  The parameter name &quot;linkBuffer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:58:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:109:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:109:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:110:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:111:  The parameter name &quot;ecmaMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:111:  The parameter name &quot;putKind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 8 in 22 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>941561</commentid>
    <comment_count>8</comment_count>
      <attachid>214666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-19 13:28:24 -0700</bug_when>
    <thetext>Created attachment 214666
the patch

Fix some stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941563</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-19 13:29:32 -0700</bug_when>
    <thetext>Attachment 214666 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInlineCacheWrapper.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInlineCacheWrapperInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/AssemblyHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:58:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:110:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 22 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>941586</commentid>
    <comment_count>10</comment_count>
      <attachid>214666</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-19 14:34:39 -0700</bug_when>
    <thetext>Comment on attachment 214666
the patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:150
&gt;      bool isStrictMode() const { return m_isStrictMode; }
&gt; +    ECMAMode ecmaMode() const { return isStrictMode() ? StrictMode : NotStrictMode; }

Can we just change m_isStrictMode to m_ecmaMode?

&gt; Source/JavaScriptCore/dfg/DFGInlineCacheWrapper.h:49
&gt; +    GeneratorType m_gen;

m_generator?

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:229
&gt; +    for (unsigned i = m_getByIds.size(); i--;)
&gt; +        m_getByIds[i].finalize(linkBuffer);
&gt; +    for (unsigned i = m_putByIds.size(); i--;)
&gt; +        m_putByIds[i].finalize(linkBuffer);

So. Much. Better.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:369
&gt; +    ECMAMode strictModeFor(CodeOrigin codeOrigin)

ecmaModeFor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941590</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-19 14:42:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 214666 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214666&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:150
&gt; &gt;      bool isStrictMode() const { return m_isStrictMode; }
&gt; &gt; +    ECMAMode ecmaMode() const { return isStrictMode() ? StrictMode : NotStrictMode; }
&gt; 
&gt; Can we just change m_isStrictMode to m_ecmaMode?

I&apos;ll leave the CodeBlock changes for later.  A boolean does have one virtue: it&apos;s a byte while an enum will be an int.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGInlineCacheWrapper.h:49
&gt; &gt; +    GeneratorType m_gen;
&gt; 
&gt; m_generator?

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:229
&gt; &gt; +    for (unsigned i = m_getByIds.size(); i--;)
&gt; &gt; +        m_getByIds[i].finalize(linkBuffer);
&gt; &gt; +    for (unsigned i = m_putByIds.size(); i--;)
&gt; &gt; +        m_putByIds[i].finalize(linkBuffer);
&gt; 
&gt; So. Much. Better.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:369
&gt; &gt; +    ECMAMode strictModeFor(CodeOrigin codeOrigin)
&gt; 
&gt; ecmaModeFor?

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941608</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-19 16:12:02 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/157685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941889</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-21 10:09:46 -0700</bug_when>
    <thetext>&gt; &gt; Can we just change m_isStrictMode to m_ecmaMode?
&gt; 
&gt; I&apos;ll leave the CodeBlock changes for later.  A boolean does have one virtue: it&apos;s a byte while an enum will be an int.
&gt; 
You can force enums to be a byte! (in C++11)

enum MyEnum : unsigned char {
// blah blah blah
};</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214634</attachid>
            <date>2013-10-18 21:22:07 -0700</date>
            <delta_ts>2013-10-18 22:14:32 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>9119</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCisK
KyNpZiBFTkFCTEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCisgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCit7CisgICAg
bV9zdHViSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8t
PmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOworfQorCitKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlk
R2VuZXJhdG9yKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIGNvbnN0IFVzZWRSZWdpc3RlcnMmIHVzZWRSZWdpc3RlcnMsCisgICAgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCkKKyAgICA6IEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbikKKyAgICAsIG1fYmFz
ZShiYXNlKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5y
ZWdpc3RlcnNGbHVzaGVkID0gcmVnaXN0ZXJzRmx1c2hlZDsKKyAgICBtX3N0dWJJbmZvLT5wYXRj
aC51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5i
YXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlLnBheWxvYWRHUFIoKSk7CisgICAgbV9z
dHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlLnBheWxv
YWRHUFIoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC52
YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUudGFnR1BSKCkpOworI2VuZGlm
Cit9CisKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikKK3sKKyAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2NhbGwpOworICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNo
ZWNrSW1tVG9DYWxsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigK
KyAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2FsbFJldHVy
bkxvY2F0aW9uKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVDaGVjaykp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisg
ICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9hZE9y
U3RvcmUpKTsKKyNlbHNlCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFnTG9hZE9y
U3RvcmUpKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JT
dG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAg
IGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUp
KTsKKyNlbmRpZgorICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsKKyAg
ICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNh
bGxUb1N0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cigKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9w
cm9wZXJ0eVN0b3JhZ2VMb2FkKSk7Cit9CisKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3RydWN0dXJlQ2hlY2sg
PSBqaXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXls
b2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICBtX3N0cnVjdHVy
ZUltbSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4odW51c2VkUG9pbnRlcikpKTsKKyAgICAKKyAgICBtX3Byb3BlcnR5U3RvcmFnZUxvYWQgPSBt
X2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fYmFzZS5wYXlsb2FkR1BSKCksIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksCisgICAg
ICAgIG1fcmVzdWx0LnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBt
X3RhZ0xvYWRPclN0b3JlID0gaml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNo
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3Jlc3VsdC5wYXlsb2FkR1BSKCks
IDApLCBtX3Jlc3VsdC50YWdHUFIoKSk7CisjZW5kaWYKKyAgICBtX2xvYWRPclN0b3JlID0gaml0
LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhtX3Jlc3VsdC5wYXlsb2FkR1BSKCksIDApLCBtX3Jlc3VsdC5wYXlsb2Fk
R1BSKCkpOworICAgIAorICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cl9oCisjZGVmaW5lIEpJVElubGluZUNhY2hlR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQp
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7Citw
cm90ZWN0ZWQ6CisgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9y
aWdpbik7CisgICAgCitwdWJsaWM6CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKK307CisK
K2NsYXNzIEpJVEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Ig
eworcHJvdGVjdGVkOgorICAgIEpJVEJ5SWRHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayos
IENvZGVPcmlnaW4sIGNvbnN0IFVzZWRSZWdpc3RlcnMmLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwKKyAgICAgICAgYm9vbCByZWdpc3RlcnNGbHVzaGVkKTsKKyAgICAKK3B1
YmxpYzoKKyAgICB2b2lkIHJlcG9ydFNsb3dQYXRoQ2FsbChNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
c2xvd1BhdGhCZWdpbiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCkKKyAgICB7CisgICAgICAg
IG1fc2xvd1BhdGhCZWdpbiA9IHNsb3dQYXRoQmVnaW47CisgICAgICAgIG1fY2FsbCA9IGNhbGw7
CisgICAgfQorICAgIAorICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOworCitwcm90ZWN0
ZWQ6CisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0cnVjdHVyZUltbTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3N0cnVjdHVyZUNoZWNrOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBtX3Byb3BlcnR5U3RvcmFnZUxvYWQ7
CisgICAgQXNzZW1ibGVyTGFiZWwgbV9sb2FkT3JTdG9yZTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIEFzc2VtYmxlckxhYmVsIG1fdGFnTG9hZE9yU3RvcmU7CisjZW5kaWYKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Ns
b3dQYXRoQmVnaW47CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOworfTsKKworY2xh
c3MgSklUR2V0QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBVc2VkUmVnaXN0ZXJzJiB1c2VkUmVnaXN0
ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgYm9vbCBy
ZWdpc3RlcnNGbHVzaGVkKQorICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBj
b2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgcmVnaXN0ZXJzRmx1c2hlZCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOworfTsKKworY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRCeUlk
R2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAorICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBVc2VkUmVn
aXN0ZXJzJiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgYm9vbCByZWdpc3RlcnNGbHVzaGVkLCBFQ01BTW9kZSBlY21hTW9kZSwKKyAg
ICAgICAgUHV0S2luZCBwdXRLaW5kKQorICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJs
b2NrLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgcmVnaXN0ZXJzRmx1
c2hlZCkKKyAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQorICAgICAgICAsIG1fcHV0S2lu
ZChwdXRLaW5kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQVNzZW1ibGVyJik7CisgICAgCisgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBzbG93
UGF0aEZ1bmN0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAg
ICBQdXRLaW5kIG1fcHV0S2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIEpJVElubGluZUNhY2hlR2VuZXJhdG9yX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214636</attachid>
            <date>2013-10-18 22:14:32 -0700</date>
            <delta_ts>2013-10-18 23:06:58 -0700</delta_ts>
            <desc>it&apos;s sort of starting to make sense</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25867</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTc2NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM0LDYgKzMzNCw4IEBACiAJCTBGQjEwNThDMTY3NTQ4
MzMwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTg4MTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxl
ck9TUkV4aXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4OTE2
NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgKi87IH07CiAJCTBGQjEw
NThFMTY3NTQ4M0EwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4QTE2NzU0ODJFMDBGOEFC
NkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGQjE0RTFFMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkIxNEUxQzE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuY3BwICovOyB9OworCQkwRkIxNEUxRjE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
QjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzYxNEY1OUFE
MTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5
IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xNTgwLDYgKzE1ODIsOCBAQAogCQkwRkIxMDU4ODE2NzU0ODJF
MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVyT1NSRXhpdC5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNTg5MTY3NTQ4MkUwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmls
ZXJPU1JFeGl0U2l0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjEwNThB
MTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdFNpdGUuaDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyT1NSRXhpdFNpdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZC
MTRFMUMxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTRFMUQxODEyNEFDRTAwOUI2
QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01pbmlmaWVkSUQuaDsgcGF0aCA9IGRm
Zy9ERkdNaW5pZmllZElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTE5
MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQWxsb2NhdG9yLmg7IHBhdGggPSBkZmcvREZHQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTFBMTZCNjI3NzIwMDNGNjk2QiAvKiBE
RkdDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29t
bW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjg3MCw2ICsyODc0LDggQEAKIAkJCQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUg
LyogSklURGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJMEY0NjgwN0YxNEJBNTcyNzAwQkZFMjcyIC8q
IEpJVEV4Y2VwdGlvbnMuY3BwICovLAogCQkJCTBGNDY4MDgwMTRCQTU3MjcwMEJGRTI3MiAvKiBK
SVRFeGNlcHRpb25zLmggKi8sCisJCQkJMEZCMTRFMUMxODEyNEFDRTAwOUI2QjREIC8qIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcCAqLywKKwkJCQkwRkIxNEUxRDE4MTI0QUNFMDA5QjZCNEQg
LyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkNDODVBMDBFRTc5QTQ3MDAy
ODg2ODIgLyogSklUSW5saW5lcy5oICovLAogCQkJCUJDREQ1MUU5MEZCOERGNzQwMDRBOEJEQyAv
KiBKSVRPcGNvZGVzLmNwcCAqLywKIAkJCQlBNzEyMzZFNDExOTVGMzNDMDBCRDIxNzQgLyogSklU
T3Bjb2RlczMyXzY0LmNwcCAqLywKQEAgLTQ0MTcsNiArNDQyMyw3IEBACiAJCQkJQkM4N0NEQjkx
MDcxMkFENDAwMDYxNENGIC8qIEpTT05PYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NTM0QUFGQjBFNUI3QTk2MDBCOEE0NUIgLyogSlNQcm9maWxlclByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDMTg0RTFCMTdCRURCRDMwMDdDQjYzQSAvKiBKU1Byb21pc2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxNUY2NUUxN0MxOTlDRTAwNzk0RDQwIC8q
IEpTUHJvbWlzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUyMzE3QkVFMjQw
MDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
MTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNTI2OSw2ICs1Mjc2LDcgQEAKIAkJCQkwRjIzNUJEMzE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMRXhpdEFyZ3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkQ1MTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCMTRFMUUxODEyNEFDRTAwOUI2QjREIC8qIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRBMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGMjk5
NkIxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
QTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24g
MTU3NjU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQUlJlZzsgfQogICAgIAogICAgIEdQUlJlZyBn
cHIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQorICAgIEdQUlJlZyB0YWdHUFIoKSBjb25zdCB7
IHJldHVybiBJbnZhbGlkR1BSUmVnOyB9CiAgICAgR1BSUmVnIHBheWxvYWRHUFIoKSBjb25zdCB7
IHJldHVybiBtX2dwcjsgfQogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDExMSArMTQ3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgZW51bSBQcm9wZXJ0eVN0dWJHZXRCeUlkX1QgeyBQcm9w
ZXJ0eVN0dWJHZXRCeUlkIH07Ci0gICAgZW51bSBQcm9wZXJ0eVN0dWJQdXRCeUlkX1QgeyBQcm9w
ZXJ0eVN0dWJQdXRCeUlkIH07Ci0KLSAgICBzdHJ1Y3QgUHJvcGVydHlTdHViQ29tcGlsYXRpb25J
bmZvIHsKLSAgICAgICAgZW51bSBUeXBlIHsgR2V0QnlJZCwgUHV0QnlJZCB9IG1fdHlwZTsKLSAg
ICAKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgaG90UGF0aEJlZ2luOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0
cnVjdHVyZVRvQ29tcGFyZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
c3RydWN0dXJlQ2hlY2s7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsOwotI2Vs
c2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZ2V0RGlzcGxhY2Vt
ZW50TGFiZWwxOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBnZXRE
aXNwbGFjZW1lbnRMYWJlbDI7Ci0jZW5kaWYKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGRvbmU7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjb2xkUGF0aEJlZ2luOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBwdXRE
aXNwbGFjZW1lbnRMYWJlbDsKLSNlbHNlCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFi
ZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDE7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDI7Ci0jZW5kaWYKLSAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBQcm9w
ZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oKQotICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgewotICAgICAgICB9
Ci0jZW5kaWYKLQotCi0gICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKLSAgICAg
ICAgICAgIFByb3BlcnR5U3R1YkdldEJ5SWRfVCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJl
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hl
Y2ssCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJv
cGVydHlTdG9yYWdlTG9hZCwKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwsCi0jZWxzZQotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFi
ZWwxLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxh
Y2VtZW50TGFiZWwyLAotI2VuZGlmCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
ZG9uZSkKLSAgICAgICAgICAgIDogbV90eXBlKEdldEJ5SWQpCi0gICAgICAgICAgICAsIGJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAgICwgc3RydWN0dXJlVG9Db21wYXJl
KHN0cnVjdHVyZVRvQ29tcGFyZSkKLSAgICAgICAgICAgICwgc3RydWN0dXJlQ2hlY2soc3RydWN0
dXJlQ2hlY2spCi0gICAgICAgICAgICAsIHByb3BlcnR5U3RvcmFnZUxvYWQocHJvcGVydHlTdG9y
YWdlTG9hZCkKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgLCBnZXREaXNwbGFjZW1l
bnRMYWJlbChkaXNwbGFjZW1lbnRMYWJlbCkKLSNlbHNlCi0gICAgICAgICAgICAsIGdldERpc3Bs
YWNlbWVudExhYmVsMShkaXNwbGFjZW1lbnRMYWJlbDEpCi0gICAgICAgICAgICAsIGdldERpc3Bs
YWNlbWVudExhYmVsMihkaXNwbGFjZW1lbnRMYWJlbDIpCi0jZW5kaWYKLSAgICAgICAgICAgICwg
ZG9uZShkb25lKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBQcm9wZXJ0eVN0dWJD
b21waWxhdGlvbkluZm8oCi0gICAgICAgICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlkX1QsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyIHN0cnVjdHVyZVRvQ29tcGFyZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNv
bnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQsCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRM
YWJlbCwKLSNlbHNlCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlz
cGxhY2VtZW50TGFiZWwxLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMy
IGRpc3BsYWNlbWVudExhYmVsMiwKLSNlbmRpZgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGRvbmUpCi0gICAgICAgICAgICA6IG1fdHlwZShQdXRCeUlkKQotICAgICAgICAgICAg
LCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICAsIHN0cnVjdHVyZVRv
Q29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBhcmUpCi0gICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNr
KHN0cnVjdHVyZUNoZWNrKQotICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3Bl
cnR5U3RvcmFnZUxvYWQpCi0gICAgICAgICAgICAsIGRvbmUoZG9uZSkKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgLCBwdXREaXNwbGFjZW1lbnRMYWJlbChkaXNwbGFjZW1lbnRMYWJl
bCkKLSNlbHNlCi0gICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMShkaXNwbGFjZW1l
bnRMYWJlbDEpCi0gICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMihkaXNwbGFjZW1l
bnRMYWJlbDIpCi0jZW5kaWYKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBz
bG93Q2FzZUluZm8oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW4sIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwsIFN0cnVjdHVyZVN0dWJJbmZvKiBpbmZvKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwotICAgICAgICAgICAgdGhpcy0+
Y29sZFBhdGhCZWdpbiA9IGNvbGRQYXRoQmVnaW47Ci0gICAgICAgICAgICBzdHViSW5mbyA9IGlu
Zm87Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNsb3dDYXNlSW5mbyhNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24g
PSBjYWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhMaW5rQnVm
ZmVyICZwYXRjaEJ1ZmZlcik7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBCeVZhbENvbXBpbGF0aW9u
SW5mbyB7CiAgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKCkgeyB9CiAgICAgICAgIApAQCAt
Mjg3LDcgKzE4Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7Ci0gICAgICAgIGZyaWVuZCBzdHJ1Y3Qg
UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOwogCiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1i
bGVyOjpKdW1wOwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q7CkBAIC05
MDIsNyArNzk2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNv
cmQ+IG1fY2FsbHM7CiAgICAgICAgIFZlY3RvcjxMYWJlbD4gbV9sYWJlbHM7Ci0gICAgICAgIFZl
Y3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8+IG1fcHJvcGVydHlBY2Nlc3NDb21waWxh
dGlvbkluZm87CisgICAgICAgIFZlY3RvcjxKSVRHZXRCeUlkR2VuZXJhdG9yPiBtX2dldEJ5SWRz
OworICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKICAgICAg
ICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvOwog
ICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBU
YWJsZTsKQEAgLTkxNCw3ICs4MDksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExp
c3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tz
V2l0aENhbGxGcmFtZVJvbGxiYWNrOwogCi0gICAgICAgIHVuc2lnbmVkIG1fcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRJbmRleDsKKyAg
ICAgICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5mb0luZGV4Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgor
CisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAg
IG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZv
LT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKK30KKworSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBVc2VkUmVnaXN0ZXJzJiB1c2VkUmVnaXN0ZXJzLAorICAgIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBib29sIHJlZ2lzdGVyc0ZsdXNoZWQpCisgICAgOiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4pCisgICAgLCBtX2Jh
c2UoYmFzZSkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAgbV9zdHViSW5mby0+cGF0Y2gu
cmVnaXN0ZXJzRmx1c2hlZCA9IHJlZ2lzdGVyc0ZsdXNoZWQ7CisgICAgbV9zdHViSW5mby0+cGF0
Y2gudXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CisgICAgCisgICAgLy8gVGhpcyBpcyBh
IGNvbnZlbmllbmNlIC0gaW4gY2FzZXMgd2hlcmUgdGhlIG9ubHkgcmVnaXN0ZXJzIHlvdSdyZSB1
c2luZyBhcmUgYmFzZS92YWx1ZSwKKyAgICAvLyBpdCBhbGxvd3MgeW91IHRvIHBhc3MgUmVnaXN0
ZXJTZXQoKSBhcyB0aGUgdXNlZFJlZ2lzdGVycyBhcmd1bWVudC4KKyAgICBtX3N0dWJJbmZvLT5w
YXRjaC51c2VkUmVnaXN0ZXJzLnNldChiYXNlKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC51c2Vk
UmVnaXN0ZXJzLnNldCh2YWx1ZSk7CisgICAgCisgICAgbV9zdHViSW5mby0+cGF0Y2guYmFzZUdQ
UiA9IHN0YXRpY19jYXN0PGludDhfdD4oYmFzZS5wYXlsb2FkR1BSKCkpOworICAgIG1fc3R1Yklu
Zm8tPnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZS5wYXlsb2FkR1BS
KCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+cGF0Y2gudmFsdWVU
YWdHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlLnRhZ0dQUigpKTsKKyNlbmRpZgorfQor
Cit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
Cit7CisgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9jYWxsKTsKKyAgICBtX3N0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24g
PSBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0lt
bVRvQ2FsbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2Nh
dGlvbik7CisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1
cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlQ2hlY2spKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAg
ICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2xvYWRPclN0b3Jl
KSk7CisjZWxzZQorICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3Rv
cmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3Jl
KSk7CisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBjYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7Cisj
ZW5kaWYKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9B
c3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2FsbFJldHVybkxv
Y2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7CisgICAgbV9z
dHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9kb25lKSk7CisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9T
dG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisg
ICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVy
dHlTdG9yYWdlTG9hZCkpOworfQorCit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIGJ1dHRlcmZseSkKK3sKKyAg
ICBtX3N0cnVjdHVyZUNoZWNrID0gaml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwK
KyAgICAgICAgbV9zdHJ1Y3R1cmVJbW0sIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CisgICAgCisgICAgbV9wcm9w
ZXJ0eVN0b3JhZ2VMb2FkID0gaml0LmNvbnZlcnRpYmxlTG9hZFB0cigKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgYnV0dGVyZmx5KTsKK30KKwordm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit7CisgICAgZ2VuZXJhdGVGYXN0
UGF0aENoZWNrcyhqaXQsIG1fcmVzdWx0LnBheWxvYWRHUFIoKSk7CisgICAgCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBtX2xvYWRPclN0b3JlID0gaml0LmxvYWQ2NFdpdGhDb21wYWN0QWRkcmVz
c09mZnNldFBhdGNoKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3Jlc3VsdC5w
YXlsb2FkR1BSKCksIDApLCBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpLmxhYmVsKCk7CisjZWxzZQor
ICAgIG1fdGFnTG9hZE9yU3RvcmUgPSBqaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0
UGF0Y2goCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVzdWx0LnBheWxvYWRH
UFIoKSwgMCksIG1fcmVzdWx0LnRhZ0dQUigpKS5sYWJlbCgpOworICAgIG1fbG9hZE9yU3RvcmUg
PSBqaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVzdWx0LnBheWxvYWRHUFIoKSwgMCksIG1fcmVzdWx0LnBh
eWxvYWRHUFIoKSkubGFiZWwoKTsKKyNlbmRpZgorICAgIAorICAgIG1fZG9uZSA9IGppdC5sYWJl
bCgpOworfQorCitKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAorICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFVzZWRS
ZWdpc3RlcnMmIHVzZWRSZWdpc3RlcnMsCisgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBib29sIHJlZ2lzdGVyc0ZsdXNoZWQsCisgICAgRUNN
QU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3Io
Y29kZUJsb2NrLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgcmVnaXN0
ZXJzRmx1c2hlZCkKKyAgICAsIG1fc2NyYXRjaChzY3JhdGNoKQorICAgICwgbV9lY21hTW9kZShl
Y21hTW9kZSkKKyAgICAsIG1fcHV0S2luZChwdXRLaW5kKQoreworICAgIG1fc3R1YkluZm8tPnBh
dGNoLnVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7Cit9CisKK3ZvaWQgSklUUHV0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIGdl
bmVyYXRlRmFzdFBhdGhDaGVja3Moaml0LCBtX3NjcmF0Y2gpOworICAgIAorI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgbV9sb2FkT3JTdG9yZSA9IGppdC5zdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaCgKKyAgICAgICAgbV92YWx1ZS5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fc2NyYXRjaCwgMCkpOworI2Vsc2UKKyAgICBtX3RhZ0xvYWRPclN0b3JlID0gaml0LnN0
b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVlLnRhZ0dQUigpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3NjcmF0Y2gsIDApKTsKKyAgICBtX2xvYWRPclN0b3Jl
ID0gaml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVlLnBh
eWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9zY3JhdGNoLCAwKSk7CisjZW5k
aWYKKyAgICAKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworVl9KSVRPcGVyYXRpb25f
RVNzaUpKSSBKSVRQdXRCeUlkR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAgICBp
ZiAobV9lY21hTW9kZSA9PSBTdHJpY3RNb2RlKSB7CisgICAgICAgIGlmIChtX3B1dEtpbmQgPT0g
RGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsK
KyAgICB9CisgICAgaWYgKG1fcHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3JfaAorI2RlZmluZSBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcl9oCisKKyNpZiBFTkFCTEUoSklUKQorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworcHJvdGVjdGVkOgorICAg
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4pOworICAgIAor
cHVibGljOgorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1fc3R1YkluZm87IH0KKworcHJvdGVjdGVkOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CisgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87Cit9OworCitjbGFzcyBKSVRCeUlk
R2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKK3Byb3RlY3RlZDoK
KyAgICBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBj
b25zdCBVc2VkUmVnaXN0ZXJzJiwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
CisgICAgICAgIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCk7CisgICAgCitwdWJsaWM6CisgICAgdm9p
ZCByZXBvcnRTbG93UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4s
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCisgICAgeworICAgICAgICBtX3Nsb3dQYXRoQmVn
aW4gPSBzbG93UGF0aEJlZ2luOworICAgICAgICBtX2NhbGwgPSBjYWxsOworICAgIH0KKyAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZUNoZWNrLm1fanVtcDsgfQorCisgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVy
Jik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKE1h
Y3JvQXNzZW1ibGVyJiwgR1BSUmVnIGJ1dHRlcmZseSk7CisgICAgCisgICAgSlNWYWx1ZVJlZ3Mg
bV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CisgICAgCisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBtX3N0cnVjdHVyZUltbTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3N0cnVjdHVyZUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyOjpDb252ZXJ0
aWJsZUxvYWRMYWJlbCBtX3Byb3BlcnR5U3RvcmFnZUxvYWQ7CisgICAgQXNzZW1ibGVyTGFiZWwg
bV9sb2FkT3JTdG9yZTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEFzc2VtYmxlckxhYmVs
IG1fdGFnTG9hZE9yU3RvcmU7CisjZW5kaWYKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9k
b25lOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47CisgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOworfTsKKworY2xhc3MgSklUR2V0QnlJZEdlbmVyYXRv
ciA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBVc2VkUmVnaXN0ZXJzJiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgYm9vbCByZWdpc3RlcnNGbHVzaGVkKQorICAg
ICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0
ZXJzLCBiYXNlLCB2YWx1ZSwgcmVnaXN0ZXJzRmx1c2hlZCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworfTsKKworY2xhc3Mg
SklUUHV0QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKK3B1YmxpYzoK
KyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBVc2VkUmVnaXN0ZXJzJiB1c2VkUmVnaXN0ZXJz
LAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNj
cmF0Y2gsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCwKKyAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUs
IFB1dEtpbmQgcHV0S2luZCk7CisgICAgCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CisgICAgCisgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBzbG93UGF0aEZ1
bmN0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgR1BSUmVnIG1fc2NyYXRjaDsKKyAgICBFQ01BTW9k
ZSBtX2VjbWFNb2RlOworICAgIFB1dEtpbmQgbV9wdXRLaW5kOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNCwx
OCArNTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGJhc2VWUmVn
LCBpZGVudCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQotewotICAg
IC8vIEFzIGZvciBwdXRfYnlfaWQsIGdldF9ieV9pZCByZXF1aXJlcyB0aGUgb2Zmc2V0IG9mIHRo
ZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGFjY2VzcyB0byBiZSBwYXRjaGVkLgot
ICAgIC8vIEFkZGl0aW9uYWxseSwgZm9yIGdldF9ieV9pZCB3ZSBuZWVkIHBhdGNoIHRoZSBvZmZz
ZXQgb2YgdGhlIGJyYW5jaCB0byB0aGUgc2xvdyBjYXNlICh3ZSBwYXRjaCB0aGlzIHRvIGp1bXAK
LSAgICAvLyB0byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVzLCBh
bmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQgYXMg
YSBsYWJlbAotICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBvbmUgb2YgdGhlc2UgdHJhbXBvbGll
cyBmaW5kcyBhIG1hdGNoLgotCisgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CkBAIC01MzMsMjUgKzUy
MiwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJlZ1QxLCByZWdUMiwgbV9i
eXRlY29kZU9mZnNldCk7CiAgICAgfQogCi0gICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29t
cGFyZTsKLSAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKAotICAgICAgICBOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwKLSAgICAgICAgVHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSkpOwotICAgIAotICAg
IGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKLSAgICAKLSAgICBDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAK
LSAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBsb2FkNjRXaXRoQ29tcGFjdEFk
ZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVm
YXVsdE9mZnNldCksIHJlZ1QwKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAg
ICAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZCgKLSAgICAgICAg
UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAgICAgUHJvcGVydHlTdHViR2V0
QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVj
aywKLSAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUxvYWQsIGxvYWRXaXRoUGF0Y2gsIGRvbmUp
KTsKKyAgICBKSVRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0KCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCB0cnVlKTsKKyAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUocmVnVDQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTU2MywxMyArNTQxLDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoSW5zdHJ1Y3QKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKICAgICAKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKFdpdGhQcm9maWxlLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIHN0
dWJJbmZvLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNl
SW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsLCBzdHViSW5mbyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTc2NTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYg
KzcxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7
CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0KEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgeworICAg
ICAgICBpZiAocmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSKQorICAgICAgICAgICAgc2V0KHJl
Z3MudGFnR1BSKCkpOworICAgICAgICBzZXQocmVncy5wYXlsb2FkR1BSKCkpOworICAgIH0KKyAg
ICAKICAgICB2b2lkIHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214639</attachid>
            <date>2013-10-18 23:06:58 -0700</date>
            <delta_ts>2013-10-19 11:56:23 -0700</delta_ts>
            <desc>it&apos;s growing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45250</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTc2NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM0LDYgKzMzNCw5IEBACiAJCTBGQjEwNThDMTY3NTQ4
MzMwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTg4MTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxl
ck9TUkV4aXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4OTE2
NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgKi87IH07CiAJCTBGQjEw
NThFMTY3NTQ4M0EwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4QTE2NzU0ODJFMDBGOEFC
NkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGQjE0RTFFMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkIxNEUxQzE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuY3BwICovOyB9OworCQkwRkIxNEUxRjE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
QjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTIwMTgxMjU3MEIw
MDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3NzE0RjU5QjVDMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc2MTRGNTlBRDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1
NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovOyB9
OwogCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTU4MCw2
ICsxNTgzLDkgQEAKIAkJMEZCMTA1ODgxNjc1NDgyRTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhp
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9TUkV4aXQuaDsg
cGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkIxMDU4OTE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlck9TUkV4aXRT
aXRlLmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxMDU4QTE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0U2l0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxl
ck9TUkV4aXRTaXRlLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNEUyMDE4MTI1NzBC
MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlci5oOyBwYXRoID0gZGZnL0RGR0lubGlu
ZUNhY2hlV3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2
QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2QjYyNzcyMDAzRjY5NkIgLyog
REZHQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FsbG9j
YXRvci5oOyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbW1vbi5jcHA7IHBhdGggPSBkZmcv
REZHQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzAsNiArMjg3
Niw4IEBACiAJCQkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5o
ICovLAogCQkJCTBGNDY4MDdGMTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmNwcCAq
LywKIAkJCQkwRjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklURXhjZXB0aW9ucy5oICovLAor
CQkJCTBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAgKi8sCisJCQkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmggKi8sCiAJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMu
aCAqLywKIAkJCQlCQ0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8s
CiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgKi8s
CkBAIC0zNjE2LDggKzM2MjQsNiBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZn
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjlEMzM5
NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLywKLQkJCQkwRjlEMzM5NTE3
RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8sCiAJCQkJQTc3QTQyMzYxN0EwQkJG
RDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJCQkJQTc3QTQyMzcxN0EwQkJG
RDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJCUE3MDREOEZFMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8sCkBAIC0zNzA2LDYgKzM3MTIs
OCBAQAogCQkJCUE3OEE5NzZGMTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuaCAqLywK
IAkJCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8sCiAJ
CQkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLywKKwkJCQkw
RjlEMzM5NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLywKKwkJCQkwRjlE
MzM5NTE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8sCiAJCQkJQTdEODlDRTgx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLywKIAkJCQlBN0Q4OUNFOTE3
QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCAqLywKIAkJCQlBN0Q4OUNFQTE3QTBC
OENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovLApAQCAt
MzcxMyw2ICszNzIxLDcgQEAKIAkJCQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2Vu
ZXJhdGlvbkluZm8uaCAqLywKIAkJCQk4NkVDOURCNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3Jh
cGguY3BwICovLAogCQkJCTg2RUM5REI4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oICov
LAorCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIu
aCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCAqLywKQEAgLTQ0MTcsNiArNDQyNiw3IEBACiAJCQkJQkM4N0NEQjkxMDcx
MkFENDAwMDYxNENGIC8qIEpTT05PYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NTM0
QUFGQjBFNUI3QTk2MDBCOEE0NUIgLyogSlNQcm9maWxlclByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDMTg0RTFCMTdCRURCRDMwMDdDQjYzQSAvKiBKU1Byb21pc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxNUY2NUUxN0MxOTlDRTAwNzk0RDQwIC8qIEpT
UHJvbWlzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUyMzE3QkVFMjQwMDA3
Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTg0
RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNDQ1MSw2ICs0NDYxLDcgQEAKIAkJCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTIx
NjdCQUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjE0RTIx
MTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDJDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1ZhbHVlUmVmLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYXJpYWJs
ZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MjY5LDYgKzUyODAsNyBAQAogCQkJCTBGMjM1
QkQzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkIxNEUxRTE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyMzVCREExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0YyOTk2QjE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NzY2MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYg
KzE0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW50U3RydWN0dXJlKFByaW50U3RyZWFtJiwg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgb3BlcmFuZCk7CiAKICAg
ICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9Cisg
ICAgRUNNQU1vZGUgZWNtYU1vZGUoKSBjb25zdCB7IHJldHVybiBpc1N0cmljdE1vZGUoKSA/IFN0
cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlOyB9CiAKICAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90
SW1tZWRpYXRlKGludCBpbmRleCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdJbmxpbmVDYWNoZVdyYXBwZXJfaAorI2RlZmluZSBERkdJ
bmxpbmVDYWNoZVdyYXBwZXJfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdTbG93UGF0aEdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgR2VuZXJhdG9yVHlwZT4KK3N0cnVjdCBJbmxpbmVDYWNoZVdyYXBwZXIgeworICAgIElubGlu
ZUNhY2hlV3JhcHBlcigpIHsgfQorICAgIAorICAgIElubGluZUNhY2hlV3JhcHBlcihjb25zdCBH
ZW5lcmF0b3JUeXBlJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKKyAgICAgICAg
OiBtX2dlbihnZW4pCisgICAgICAgICwgbV9zbG93UGF0aChzbG93UGF0aCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKKyAgICB7
CisgICAgICAgIG1fZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChtX3Nsb3dQYXRoLT5sYWJlbCgpLCBt
X3Nsb3dQYXRoLT5jYWxsKCkpOworICAgICAgICBtX2dlbi5maW5hbGl6ZShsaW5rQnVmZmVyKTsK
KyAgICB9CisgICAgCisgICAgR2VuZXJhdG9yVHlwZSBtX2dlbjsKKyAgICBTbG93UGF0aEdlbmVy
YXRvciogbV9zbG93UGF0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5saW5lQ2FjaGVXcmFwcGVy
X2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiwyMiArMjIyLDExIEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1f
Y2FsbHNbaV0ubV9jYWxsLCBtX2NhbGxzW2ldLm1fZnVuY3Rpb24pOwogCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9ICptX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zdHVi
SW5mbzsKLSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0
b3ItPmNhbGwoKSk7Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVy
bkxvY2F0aW9uOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7Ci0gICAgICAgIGlu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9zdHJ1Y3R1cmVDaGVjaykpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IGluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9sb2FkT3JTdG9yZSkpOwotI2Vsc2UKLSAgICAgICAgaW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3RhZ0xvYWRPclN0b3JlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fcGF5bG9h
ZExvYWRPclN0b3JlKSk7Ci0jZW5kaWYKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3Nsb3dQYXRoR2VuZXJh
dG9yLT5sYWJlbCgpKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lID0gZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RvbmUpKTsKLSAgICAgICAgaW5mby5wYXRj
aC5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3Byb3BlcnR5U3RvcmFnZUxvYWQpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9nZXRCeUlkcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fZ2V0QnlJZHNbaV0uZmluYWxpemUo
bGlua0J1ZmZlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wdXRCeUlkcy5zaXplKCk7IGkt
LTspCisgICAgICAgIG1fcHV0QnlJZHNbaV0uZmluYWxpemUobGlua0J1ZmZlcik7CisKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIGluZm8gPSAqbV9pbnNbaV0ubV9zdHViSW5mbzsKICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwganVtcCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2p1
bXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
cmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw0OSArNzcsNiBAQCBzdHJ1Y3QgQ2FsbExpbmtS
ZWNvcmQgewogICAgIEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiB9OwogCi1zdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewotICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZUltbSwKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2ssCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLAotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRP
clN0b3JlLAotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbENvbXBhY3QgdGFnTG9hZE9yU3RvcmUsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxDb21wYWN0IHBheWxvYWRMb2FkT3JTdG9yZSwKLSNlbmRpZgotICAgICAgICBT
bG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5lcmF0b3IsCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBkb25lLAotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCi0g
ICAgICAgIDogbV9zdHJ1Y3R1cmVJbW0oc3RydWN0dXJlSW1tKQotICAgICAgICAsIG1fc3RydWN0
dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCi0gICAgICAgICwgbV9wcm9wZXJ0eVN0b3JhZ2VMb2Fk
KHByb3BlcnR5U3RvcmFnZUxvYWQpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgLCBtX2xv
YWRPclN0b3JlKGxvYWRPclN0b3JlKQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
LCBtX3RhZ0xvYWRPclN0b3JlKHRhZ0xvYWRPclN0b3JlKQotICAgICAgICAsIG1fcGF5bG9hZExv
YWRPclN0b3JlKHBheWxvYWRMb2FkT3JTdG9yZSkKLSNlbmRpZgotICAgICAgICAsIG1fc2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhHZW5lcmF0b3IpCi0gICAgICAgICwgbV9kb25lKGRvbmUpCi0g
ICAgICAgICwgbV9zdHViSW5mbyhzdHViSW5mbykKLSAgICB7Ci0gICAgfQotCi0gICAgTWFjcm9B
c3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0cnVjdHVyZUltbTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3N0cnVjdHVyZUNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyOjpD
b252ZXJ0aWJsZUxvYWRMYWJlbCBtX3Byb3BlcnR5U3RvcmFnZUxvYWQ7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBtX2xvYWRPclN0b3Jl
OwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
Q29tcGFjdCBtX3RhZ0xvYWRPclN0b3JlOwotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxD
b21wYWN0IG1fcGF5bG9hZExvYWRPclN0b3JlOwotI2VuZGlmCi0gICAgU2xvd1BhdGhHZW5lcmF0
b3IqIG1fc2xvd1BhdGhHZW5lcmF0b3I7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9u
ZTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKLX07Ci0KIHN0cnVjdCBJblJl
Y29yZCB7CiAgICAgSW5SZWNvcmQoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIGp1bXAsIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aEdlbmVyYXRvciwKQEAgLTI1NCwx
MSArMjExLDE2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkUHJvcGVy
dHlBY2Nlc3MoY29uc3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQmIHJlY29yZCkKKyAgICB2b2lkIGFk
ZEdldEJ5SWQoY29uc3QgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRv
ciogc2xvd1BhdGgpCiAgICAgewotICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKHJl
Y29yZCk7CisgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRH
ZXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
YWRkUHV0QnlJZChjb25zdCBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJh
dG9yKiBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIG1fcHV0QnlJZHMuYXBwZW5kKElubGluZUNh
Y2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQor
CiAgICAgdm9pZCBhZGRJbihjb25zdCBJblJlY29yZCYgcmVjb3JkKQogICAgIHsKICAgICAgICAg
bV9pbnMuYXBwZW5kKHJlY29yZCk7CkBAIC0zODUsNyArMzQ3LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgfTsKICAgICAKLSAgICBWZWN0b3I8UHJv
cGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlBY2Nlc3NlczsKKyAgICBWZWN0b3I8SW5s
aW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzOworICAg
IFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0
QnlJZHM7CiAgICAgVmVjdG9yPEluUmVjb3JkLCA0PiBtX2luczsKICAgICBWZWN0b3I8SlNDYWxs
UmVjb3JkLCA0PiBtX2pzQ2FsbHM7CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+
IG1fZXhpdENvbXBpbGF0aW9uSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5m
by5oCShyZXZpc2lvbiAxNTc2NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2dwciA9PSBJbnZhbGlkR1BSUmVnOyB9CiAgICAg
CiAgICAgR1BSUmVnIGdwcigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9CisgICAgR1BSUmVnIHRh
Z0dQUigpIGNvbnN0IHsgcmV0dXJuIEludmFsaWRHUFJSZWc7IH0KICAgICBHUFJSZWcgcGF5bG9h
ZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw4IEBAIEpJ
VDo6SklUKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVy
KHZtLT5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+
bnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSA6IDApCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KCh1bnNp
Z25lZCktMSkKLSAgICAsIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KFVJTlRfTUFY
KQorICAgICwgbV9nZXRCeUlkSW5kZXgoVUlOVF9NQVgpCisgICAgLCBtX3B1dHRCeUlkSW5kZXgo
VUlOVF9NQVgpCiAgICAgLCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleChVSU5UX01BWCkKICAgICAs
IG1fY2FsbExpbmtJbmZvSW5kZXgoVUlOVF9NQVgpCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAg
LTM1OSw3ICszNjAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogewog
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpOwogCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgg
PSAwOworICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKKyAgICBtX3B1dEJ5SWRJbmRleCA9IDA7CiAg
ICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJbmZvSW5kZXgg
PSAwOwogICAgIApAQCAtNDc1LDcgKzQ3Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAgfQog
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPT0g
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3B1dEJ5SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvLnNpemUoKSk7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIFJFTEVBU0Vf
QVNTRVJUKG51bWJlck9mVmFsdWVQcm9maWxlcyA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkpOwpAQCAtNDg3LDYwICs0OTAsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBQcm9wZXJ0eVN0
dWJDb21waWxhdGlvbkluZm86OmNvcHlUb1N0dWJJbmZvKExpbmtCdWZmZXIgJmxpbmtCdWZmZXIp
Ci17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpKTsKLSAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0
ZWNvZGVJbmRleCk7Ci0gICAgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihjYWxsUmV0dXJuTG9jYXRpb24pOwotCi0gICAgc3R1YkluZm8tPnBhdGNo
LmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVUb0NvbXBhcmUpLCBzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1
YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVjdHVy
ZUNoZWNrKSk7Ci0gICAgCi0gICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Ug
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHN0dWJJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSk7Ci0g
ICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKLSAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9T
dG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1
YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb3BlcnR5
U3RvcmFnZUxvYWQpKTsKLSAgICAKLSAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IEdQUklu
Zm86OnJlZ1QwOwotCi0gICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKLSAgICB1c2VkUmVn
aXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KSAvLyBKU1ZB
TFVFIGNhc2VzCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6Ci0gICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwpKTsKLSAgICAgICAg
c3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRv
TG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHN0
dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNw
bGFjZW1lbnRMYWJlbCkpOwotICAgICAgICBzdHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBHUFJJ
bmZvOjpyZWdUMTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDEpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0jZWxzZSAvLyBKU1ZBTFVFIGNhc2VzCi0gICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRjaC5k
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwyKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRjaC5k
ZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsMSkpOwotICAgICAgICBzdHViSW5mby0+cGF0
Y2gudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZh
bHVlVGFnR1BSID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQ
UkluZm86OnJlZ1QxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUlkOgotICAgICAg
ICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOwotICAgICAg
ICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDEpKTsKLSAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgICAg
IHN0dWJJbmZvLT5wYXRjaC52YWx1ZVRhZ0dQUiA9IEdQUkluZm86OnJlZ1QzOwotICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMu
c2V0KEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8vIEpT
VkFMVUUgY2FzZXMKLSAgICAKLSAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9IHVz
ZWRSZWdpc3RlcnM7Ci0gICAgc3R1YkluZm8tPnBhdGNoLnJlZ2lzdGVyc0ZsdXNoZWQgPSB0cnVl
OwotfQotCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIHsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC03MzMs
OCArNjgyLDExIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+
dG8pKTsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkKLSAgICAgICAgbV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHViSW5mbyhwYXRjaEJ1ZmZlcik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9nZXRCeUlkcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fZ2V0QnlJ
ZHNbaV0uZmluYWxpemUocGF0Y2hCdWZmZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fcHV0
QnlJZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3B1dEJ5SWRzW2ldLmZpbmFsaXplKHBhdGNo
QnVmZmVyKTsKKwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZh
bENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENvZGVMb2NhdGlv
bkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5iYWRUeXBlSnVtcCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTc2NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTExICsxNDcsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBlbnVtIFByb3BlcnR5U3R1YkdldEJ5
SWRfVCB7IFByb3BlcnR5U3R1YkdldEJ5SWQgfTsKLSAgICBlbnVtIFByb3BlcnR5U3R1YlB1dEJ5
SWRfVCB7IFByb3BlcnR5U3R1YlB1dEJ5SWQgfTsKLQotICAgIHN0cnVjdCBQcm9wZXJ0eVN0dWJD
b21waWxhdGlvbkluZm8gewotICAgICAgICBlbnVtIFR5cGUgeyBHZXRCeUlkLCBQdXRCeUlkIH0g
bV90eXBlOwotICAgIAotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBob3RQYXRoQmVnaW47Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjazsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNvbnZl
cnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQ7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZ2V0RGlzcGxhY2VtZW50
TGFiZWw7Ci0jZWxzZQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBn
ZXREaXNwbGFjZW1lbnRMYWJlbDE7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxD
b21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsMjsKLSNlbmRpZgotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZG9uZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRo
QmVnaW47Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbDMyIHB1dERpc3BsYWNlbWVudExhYmVsOwotI2Vsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbDMyIHB1dERpc3BsYWNlbWVudExhYmVsMTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbDMyIHB1dERpc3BsYWNlbWVudExhYmVsMjsKLSNlbmRpZgotICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm87Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygpCi0gICAgICAgICAgICA6IGJ5dGVj
b2RlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICB7
Ci0gICAgICAgIH0KLSNlbmRpZgotCi0KLSAgICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25J
bmZvKAotICAgICAgICAgICAgUHJvcGVydHlTdHViR2V0QnlJZF9ULCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1
cmVUb0NvbXBhcmUsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBz
dHJ1Y3R1cmVDaGVjaywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxv
YWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCwK
LSNlbHNlCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkaXNw
bGFjZW1lbnRMYWJlbDEsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29t
cGFjdCBkaXNwbGFjZW1lbnRMYWJlbDIsCi0jZW5kaWYKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBkb25lKQotICAgICAgICAgICAgOiBtX3R5cGUoR2V0QnlJZCkKLSAgICAgICAg
ICAgICwgYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQotICAgICAgICAgICAgLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUoc3RydWN0dXJlVG9Db21wYXJlKQotICAgICAgICAgICAgLCBzdHJ1Y3R1cmVD
aGVjayhzdHJ1Y3R1cmVDaGVjaykKLSAgICAgICAgICAgICwgcHJvcGVydHlTdG9yYWdlTG9hZChw
cm9wZXJ0eVN0b3JhZ2VMb2FkKQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAsIGdl
dERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNlbWVudExhYmVsKQotI2Vsc2UKLSAgICAgICAgICAg
ICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwxKGRpc3BsYWNlbWVudExhYmVsMSkKLSAgICAgICAgICAg
ICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwyKGRpc3BsYWNlbWVudExhYmVsMikKLSNlbmRpZgotICAg
ICAgICAgICAgLCBkb25lKGRvbmUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKLSAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5
SWRfVCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2ssCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCwKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIGRp
c3BsYWNlbWVudExhYmVsLAotI2Vsc2UKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDEsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwyLAotI2VuZGlmCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSkKLSAgICAgICAgICAgIDogbV90eXBlKFB1dEJ5SWQpCi0g
ICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAgICwg
c3RydWN0dXJlVG9Db21wYXJlKHN0cnVjdHVyZVRvQ29tcGFyZSkKLSAgICAgICAgICAgICwgc3Ry
dWN0dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCi0gICAgICAgICAgICAsIHByb3BlcnR5U3RvcmFn
ZUxvYWQocHJvcGVydHlTdG9yYWdlTG9hZCkKLSAgICAgICAgICAgICwgZG9uZShkb25lKQotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsKGRpc3Bs
YWNlbWVudExhYmVsKQotI2Vsc2UKLSAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwx
KGRpc3BsYWNlbWVudExhYmVsMSkKLSAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwy
KGRpc3BsYWNlbWVudExhYmVsMikKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHNsb3dDYXNlSW5mbyhNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29sZFBhdGhCZWdp
biwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgU3RydWN0dXJlU3R1YkluZm8qIGluZm8pCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAg
ICAgICB0aGlzLT5jb2xkUGF0aEJlZ2luID0gY29sZFBhdGhCZWdpbjsKLSAgICAgICAgICAgIHN0
dWJJbmZvID0gaW5mbzsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2xvd0Nhc2VJbmZvKE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNvcHlUb1N0dWJJ
bmZvKExpbmtCdWZmZXIgJnBhdGNoQnVmZmVyKTsKLSAgICB9OwotCiAgICAgc3RydWN0IEJ5VmFs
Q29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oKSB7IH0KICAg
ICAgICAgCkBAIC0yODcsNyArMTgyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSklU
IDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93
UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKLSAgICAgICAgZnJp
ZW5kIHN0cnVjdCBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm87CiAKICAgICAgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXI6Okp1bXA7CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdDsKQEAgLTkwMiw3ICs3OTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBWZWN0
b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsK
LSAgICAgICAgVmVjdG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mbzsKKyAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRHZW5lcmF0b3I+
IG1fZ2V0QnlJZHM7CisgICAgICAgIFZlY3RvcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiBtX3B1dEJ5
SWRzOwogICAgICAgICBWZWN0b3I8QnlWYWxDb21waWxhdGlvbkluZm8+IG1fYnlWYWxDb21waWxh
dGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8SnVtcFRh
YmxlPiBtX2ptcFRhYmxlOwpAQCAtOTE0LDcgKzgwOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAKLSAgICAgICAgdW5zaWduZWQgbV9w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlJ
ZEluZGV4OworICAgICAgICB1bnNpZ25lZCBtX3B1dEJ5SWRJbmRleDsKICAgICAgICAgdW5zaWdu
ZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fY2FsbExpbmtJ
bmZvSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCit7CisgICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygpOworICAg
IG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOworfQorCitKSVRCeUlkR2VuZXJh
dG9yOjpKSVRCeUlkR2VuZXJhdG9yKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIGNvbnN0IFVzZWRSZWdpc3RlcnMmIHVzZWRSZWdpc3RlcnMsCisgICAg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIGJvb2wgcmVnaXN0ZXJzRmx1c2hl
ZCkKKyAgICA6IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbikK
KyAgICAsIG1fYmFzZShiYXNlKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJ
bmZvLT5wYXRjaC5yZWdpc3RlcnNGbHVzaGVkID0gcmVnaXN0ZXJzRmx1c2hlZDsKKyAgICBtX3N0
dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKKyAgICAKKyAgICAv
LyBUaGlzIGlzIGEgY29udmVuaWVuY2UgLSBpbiBjYXNlcyB3aGVyZSB0aGUgb25seSByZWdpc3Rl
cnMgeW91J3JlIHVzaW5nIGFyZSBiYXNlL3ZhbHVlLAorICAgIC8vIGl0IGFsbG93cyB5b3UgdG8g
cGFzcyBSZWdpc3RlclNldCgpIGFzIHRoZSB1c2VkUmVnaXN0ZXJzIGFyZ3VtZW50LgorICAgIG1f
c3R1YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMuc2V0KGJhc2UpOworICAgIG1fc3R1YkluZm8t
PnBhdGNoLnVzZWRSZWdpc3RlcnMuc2V0KHZhbHVlKTsKKyAgICAKKyAgICBtX3N0dWJJbmZvLT5w
YXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlLnBheWxvYWRHUFIoKSk7Cisg
ICAgbV9zdHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVl
LnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJbmZvLT5w
YXRjaC52YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUudGFnR1BSKCkpOwor
I2VuZGlmCit9CisKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKK3sKKyAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2NhbGwpOworICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5k
ZWx0YUNoZWNrSW1tVG9DYWxsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKKyAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2Fs
bFJldHVybkxvY2F0aW9uKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAg
ICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVD
aGVjaykpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFD
YWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1f
bG9hZE9yU3RvcmUpKTsKKyNlbHNlCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9U
YWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFn
TG9hZE9yU3RvcmUpKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRM
b2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisg
ICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9hZE9y
U3RvcmUpKTsKKyNlbmRpZgorICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4p
KTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5k
ZWx0YUNhbGxUb1N0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cigKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9wcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7Cit9CisKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgYnV0dGVy
Zmx5KQoreworICAgIG1fc3RydWN0dXJlQ2hlY2sgPSBqaXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLAorICAgICAgICBtX3N0cnVjdHVyZUltbSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKKyAgICAK
KyAgICBtX3Byb3BlcnR5U3RvcmFnZUxvYWQgPSBqaXQuY29udmVydGlibGVMb2FkUHRyKAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHkpOworfQorCit2b2lkIEpJVEdldEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3sKKyAgICBn
ZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGppdCwgbV9yZXN1bHQucGF5bG9hZEdQUigpKTsKKyAgICAK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1fbG9hZE9yU3RvcmUgPSBqaXQubG9hZDY0V2l0aENv
bXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fcmVzdWx0LnBheWxvYWRHUFIoKSwgMCksIG1fcmVzdWx0LnBheWxvYWRHUFIoKSkubGFiZWwo
KTsKKyNlbHNlCisgICAgbV90YWdMb2FkT3JTdG9yZSA9IGppdC5sb2FkMzJXaXRoQ29tcGFjdEFk
ZHJlc3NPZmZzZXRQYXRjaCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZXN1
bHQucGF5bG9hZEdQUigpLCAwKSwgbV9yZXN1bHQudGFnR1BSKCkpLmxhYmVsKCk7CisgICAgbV9s
b2FkT3JTdG9yZSA9IGppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZXN1bHQucGF5bG9hZEdQUigpLCAwKSwg
bV9yZXN1bHQucGF5bG9hZEdQUigpKS5sYWJlbCgpOworI2VuZGlmCisgICAgCisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisKK0pJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5l
cmF0b3IoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Y29uc3QgVXNlZFJlZ2lzdGVycyYgdXNlZFJlZ2lzdGVycywKKyAgICBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIGJvb2wgcmVnaXN0ZXJzRmx1c2hl
ZCwKKyAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQorICAgIDogSklUQnlJ
ZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZh
bHVlLCByZWdpc3RlcnNGbHVzaGVkKQorICAgICwgbV9zY3JhdGNoKHNjcmF0Y2gpCisgICAgLCBt
X2VjbWFNb2RlKGVjbWFNb2RlKQorICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCit7CisgICAgbV9z
dHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKK30KKwordm9pZCBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQp
Cit7CisgICAgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQsIG1fc2NyYXRjaCk7CisgICAgCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3JlNjRXaXRoQWRk
cmVzc09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobV9zY3JhdGNoLCAwKSk7CisjZWxzZQorICAgIG1fdGFnTG9hZE9yU3Rv
cmUgPSBqaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIG1fdmFsdWUu
dGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fc2NyYXRjaCwgMCkpOworICAgIG1f
bG9hZE9yU3RvcmUgPSBqaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAg
IG1fdmFsdWUucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3NjcmF0Y2gs
IDApKTsKKyNlbmRpZgorICAgIAorICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCitWX0pJ
VE9wZXJhdGlvbl9FU3NpSkpJIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24o
KQoreworICAgIGlmIChtX2VjbWFNb2RlID09IFN0cmljdE1vZGUpIHsKKyAgICAgICAgaWYgKG1f
cHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplOworICAgIH0KKyAgICBpZiAobV9wdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcl9o
CisjZGVmaW5lIEpJVElubGluZUNhY2hlR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQpCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7Citwcm90
ZWN0ZWQ6CisgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KKyAgICBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqLCBDb2RlT3JpZ2luKTsKKyAgICAKK3B1YmxpYzoKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8oKSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZv
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOworfTsKKworY2xhc3MgSklUQnlJZEdlbmVyYXRvciA6
IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7Citwcm90ZWN0ZWQ6CisgICAgSklUQnlJ
ZEdlbmVyYXRvcigpIHsgfQorCisgICAgSklUQnlJZEdlbmVyYXRvcigKKyAgICAgICAgQ29kZUJs
b2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgVXNlZFJlZ2lzdGVycyYsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLAorICAgICAgICBib29sIHJlZ2lzdGVyc0ZsdXNoZWQpOworICAg
IAorcHVibGljOgorICAgIHZvaWQgcmVwb3J0U2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBzbG93UGF0aEJlZ2luLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgIHsKKyAg
ICAgICAgbV9zbG93UGF0aEJlZ2luID0gc2xvd1BhdGhCZWdpbjsKKyAgICAgICAgbV9jYWxsID0g
Y2FsbDsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1w
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KKworICAgIHZvaWQg
ZmluYWxpemUoTGlua0J1ZmZlciYpOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBidXR0ZXJmbHkpOworICAg
IAorICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKKyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOworICAg
IAorICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbV9zdHJ1Y3R1cmVJbW07CisgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zdHJ1Y3R1cmVDaGVjazsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgbV9wcm9wZXJ0eVN0b3JhZ2VMb2FkOwor
ICAgIEFzc2VtYmxlckxhYmVsIG1fbG9hZE9yU3RvcmU7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBBc3NlbWJsZXJMYWJlbCBtX3RhZ0xvYWRPclN0b3JlOworI2VuZGlmCisgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93
UGF0aEJlZ2luOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKK307CisKK2NsYXNz
IEpJVEdldEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CitwdWJsaWM6
CisgICAgSklUR2V0QnlJZEdlbmVyYXRvcigpIHsgfQorCisgICAgSklUR2V0QnlJZEdlbmVyYXRv
cigKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Y29uc3QgVXNlZFJlZ2lzdGVycyYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCkKKyAgICAgICAg
OiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycywg
YmFzZSwgdmFsdWUsIHJlZ2lzdGVyc0ZsdXNoZWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKK307CisKK2NsYXNzIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CitwdWJsaWM6CisgICAg
SklUUHV0QnlJZEdlbmVyYXRvcigpIHsgfQorCisgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKKyAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3Qg
VXNlZFJlZ2lzdGVycyYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBib29sIHJlZ2lzdGVyc0ZsdXNoZWQs
CisgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpOworICAgIAorICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIAorICAgIFZfSklU
T3BlcmF0aW9uX0VTc2lKSkkgc2xvd1BhdGhGdW5jdGlvbigpOworCitwcml2YXRlOgorICAgIEdQ
UlJlZyBtX3NjcmF0Y2g7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAgICBQdXRLaW5kIG1f
cHV0S2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKKworI2VuZGlmIC8vIEpJVElubGluZUNhY2hlR2VuZXJhdG9yX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDE1NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsMTggKzUxNCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGNv
bXBpbGVHZXRCeUlkSG90UGF0aChiYXNlVlJlZywgaWRlbnQpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUocmVnVDQpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCkKLXsKLSAgICAvLyBBcyBmb3IgcHV0X2J5X2lkLCBnZXRfYnlf
aWQgcmVxdWlyZXMgdGhlIG9mZnNldCBvZiB0aGUgU3RydWN0dXJlIGFuZCB0aGUgb2Zmc2V0IG9m
IHRoZSBhY2Nlc3MgdG8gYmUgcGF0Y2hlZC4KLSAgICAvLyBBZGRpdGlvbmFsbHksIGZvciBnZXRf
YnlfaWQgd2UgbmVlZCBwYXRjaCB0aGUgb2Zmc2V0IG9mIHRoZSBicmFuY2ggdG8gdGhlIHNsb3cg
Y2FzZSAod2UgcGF0Y2ggdGhpcyB0byBqdW1wCi0gICAgLy8gdG8gYXJyYXktbGVuZ3RoIC8gcHJv
dG90eXBlIGFjY2VzcyB0cmFucG9saW5lcywgYW5kIGZpbmFsbHkgd2UgYWxzbyB0aGUgdGhlIHBy
b3BlcnR5LW1hcCBhY2Nlc3Mgb2Zmc2V0IGFzIGEgbGFiZWwKLSAgICAvLyB0byBqdW1wIGJhY2sg
dG8gaWYgb25lIG9mIHRoZXNlIHRyYW1wb2xpZXMgZmluZHMgYSBtYXRjaC4KLQorICAgIAogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogICAgIAogICAg
IGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewpAQCAtNTMzLDI1ICs1MjIsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQgYmFzZQogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0
ZWNvZGVJbmRleChyZWdUMSwgcmVnVDIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIH0KIAotICAg
IERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgUGF0Y2hhYmxlSnVtcCBzdHJ1
Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVU
b0NvbXBhcmUsCi0gICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dW51c2VkUG9pbnRlcikpKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7
Ci0gICAgCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0g
ICAgICAgIGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgCi0gICAgRGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0
aFBhdGNoID0gbG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIEFk
ZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBp
bGF0aW9uSW5mby5hcHBlbmQoCi0gICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygK
LSAgICAgICAgICAgIFByb3BlcnR5U3R1YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIHN0cnVj
dHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCi0gICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkLCBsb2FkV2l0aFBhdGNoLCBkb25lKSk7CisgICAgSklUQnlJZEdlbmVyYXRvciBnZW4o
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdp
c3RlclNldCgpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgdHJ1ZSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHJlZ1Q0KTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC01NjMsMTkgKzU0MSwyMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0CiAgICAgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAot
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCi0gICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihXaXRoUHJvZmlsZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBzdHViSW5mbywgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oV2l0aFByb2ZpbGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAotICAgIG1fcHJv
cGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNhbGwsIHN0dWJJbmZvKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
IGludCB2YWx1ZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKICAgICAv
LyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRo
ZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFm
dGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0
aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKQEAgLTU4NSwyOCArNTY0LDE2IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIC8vIEp1bXAgdG8gYSBz
bG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlm
IHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9D
b21wYXJlOwotICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgIE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLAotICAgICAgICBUcnVzdGVk
SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7Ci0gICAgCi0g
ICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwogICAgIAogICAgIGVtaXRXcml0ZUJhcnJp
ZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdy
aXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVs
IHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLAorICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCB0cnVlLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUo
KSwgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKICAgICAKLSAgICBEYXRhTGFiZWwzMiBz
dG9yZVdpdGhQYXRjaCA9Ci0gICAgICAgIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CisgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgp
OwotICAgIAotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKAotICAg
ICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCi0gICAgICAgICAgICBQcm9wZXJ0eVN0
dWJQdXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVy
ZUNoZWNrLAotICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlTG9hZCwgc3RvcmVXaXRoUGF0Y2gs
IGRvbmUpKTsKKyAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC02MjAsMjUgKzU4NywxMiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luKHRoaXMpOwogICAgIAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1p
emVkQ2FsbDsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAg
IGlmIChkaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcHRpbWl6
ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChkaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAg
IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+
YWRkU3R1YkluZm8oKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcHRp
bWl6ZWRDYWxsLCBzdHViSW5mbywgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAotICAgIC8v
IFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVj
b3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25J
bmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xk
UGF0aEJlZ2luLCBjYWxsLCBzdHViSW5mbyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogLy8gQ29tcGlsZSBhIHN0b3JlIGludG8gYW4gb2Jq
ZWN0J3MgcHJvcGVydHkgc3RvcmFnZS4gIE1heSBvdmVyd3JpdGUgdGhlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTc2NTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDYgKzcxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVn
KSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0KEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgewor
ICAgICAgICBpZiAocmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSKQorICAgICAgICAgICAgc2V0
KHJlZ3MudGFnR1BSKCkpOworICAgICAgICBzZXQocmVncy5wYXlsb2FkR1BSKCkpOworICAgIH0K
KyAgICAKICAgICB2b2lkIHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214658</attachid>
            <date>2013-10-19 11:56:23 -0700</date>
            <delta_ts>2013-10-19 13:21:47 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58954</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTc2NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM0LDYgKzMzNCwxMCBAQAogCQkwRkIxMDU4QzE2NzU0
ODMzMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxMDU4ODE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODkx
Njc1NDgyRTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwICovOyB9OwogCQkwRkIx
MDU4RTE2NzU0ODNBMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1OEExNjc1NDgyRTAwRjhB
QjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkIxNEUxRTE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCMTRFMUMxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcCAqLzsgfTsKKwkJMEZCMTRFMUYxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkIxNEUxRDE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RkIxNEUyMTE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNEUyMDE4MTI1NzBC
MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTRFMjMxODEzMDk1NTAwOUI2QjREIC8q
IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE0RTIyMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1
NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzgxNEY1QzQ2
ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCNTQ2
N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdBMTRGNUM3
RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1ODAsNiArMTU4NCwxMCBA
QAogCQkwRkIxMDU4ODE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdC5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QjEwNTg5MTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwOyBw
YXRoID0gcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQjEwNThBMTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRT
aXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT1NSRXhpdFNp
dGUuaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMTRFMUMxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAv
KiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHSW5saW5lQ2FjaGVXcmFwcGVyLmg7IHBhdGggPSBkZmcvREZHSW5saW5lQ2FjaGVXcmFw
cGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjE0RTIyMTgxMzA5NTUwMDlC
NkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaDsgcGF0aCA9IGRm
Zy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01pbmlmaWVkSUQuaDsgcGF0aCA9IGRmZy9E
RkdNaW5pZmllZElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTE5MTZC
NjI3NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQWxsb2NhdG9yLmg7IHBhdGggPSBkZmcvREZHQWxsb2NhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTFBMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdD
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tbW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjg3MCw2ICsyODc4LDggQEAKIAkJCQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyog
SklURGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJMEY0NjgwN0YxNEJBNTcyNzAwQkZFMjcyIC8qIEpJ
VEV4Y2VwdGlvbnMuY3BwICovLAogCQkJCTBGNDY4MDgwMTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRF
eGNlcHRpb25zLmggKi8sCisJCQkJMEZCMTRFMUMxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcCAqLywKKwkJCQkwRkIxNEUxRDE4MTI0QUNFMDA5QjZCNEQgLyog
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkNDODVBMDBFRTc5QTQ3MDAyODg2
ODIgLyogSklUSW5saW5lcy5oICovLAogCQkJCUJDREQ1MUU5MEZCOERGNzQwMDRBOEJEQyAvKiBK
SVRPcGNvZGVzLmNwcCAqLywKIAkJCQlBNzEyMzZFNDExOTVGMzNDMDBCRDIxNzQgLyogSklUT3Bj
b2RlczMyXzY0LmNwcCAqLywKQEAgLTM2MTYsOCArMzYyNiw2IEBACiAJCTg2RUM5REIzMTMyOERG
NDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAotCQkJCTBGOUQzMzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICov
LAotCQkJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJ
CQlBNzdBNDIzNjE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCAqLywKIAkJ
CQlBNzdBNDIzNzE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmggKi8sCiAJCQkJ
QTcwNEQ4RkUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCAqLywK
QEAgLTM3MDYsNiArMzcxNCw4IEBACiAJCQkJQTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQ
aGFzZS5oICovLAorCQkJCTBGOUQzMzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQu
Y3BwICovLAorCQkJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAq
LywKIAkJCQlBN0Q4OUNFODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwICov
LAogCQkJCUE3RDg5Q0U5MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oICovLAog
CQkJCUE3RDg5Q0VBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHAgKi8sCkBAIC0zNzEzLDYgKzM3MjMsOCBAQAogCQkJCTg2RUM5REI2MTMyOERGODIw
MDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLAogCQkJCTg2RUM5REI3MTMyOERGODIw
MDJCMkFENyAvKiBERkdHcmFwaC5jcHAgKi8sCiAJCQkJODZFQzlEQjgxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0dyYXBoLmggKi8sCisJCQkJMEZCMTRFMjAxODEyNTcwQjAwOUI2QjREIC8qIERGR0lu
bGluZUNhY2hlV3JhcHBlci5oICovLAorCQkJCTBGQjE0RTIyMTgxMzA5NTUwMDlCNkI0RCAvKiBE
RkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggKi8sCiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAw
NkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQlBNzA0RDkwMTE3
QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjJC
REMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8sCkBAIC00NDE3LDYg
KzQ0MjksNyBAQAogCQkJCUJDODdDREI5MTA3MTJBRDQwMDA2MTRDRiAvKiBKU09OT2JqZWN0Lmx1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTUzNEFBRkIwRTVCN0E5NjAwQjhBNDVCIC8qIEpTUHJv
ZmlsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUxQjE3QkVEQkQzMDA3Q0I2
M0EgLyogSlNQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIxNEUxRjE4MTI0QUNFMDA5
QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
MTVGNjVFMTdDMTk5Q0UwMDc5NEQ0MCAvKiBKU1Byb21pc2VDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0MxODRFMjMxN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUxRjE3QkVFMjJFMDA3Q0I2M0EgLyogSlNQcm9t
aXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ0NDksOCArNDQ2MiwxMCBAQAogCQkJ
CTBGMkI2NzAyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY3MDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCMTRFMjMxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzAxMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCMTRFMjExODEyNTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFM0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFs
dWVSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1ZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTUyNjksNiArNTI4NCw3IEBACiAJ
CQkJMEYyMzVCRDMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjIzNUJENTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEODE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjE0
RTFFMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjIzNUJEQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RjI5OTZCMTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWls
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJ
bnRyaW5zaWNSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDE1NzY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsNiArNDY0LDgg
QEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBBc3NlbWJsZXJMYWJl
bCBsYWJlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWw7IH0KKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIEFzc2VtYmxlckxhYmVsIG1fbGFiZWw7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NzY2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ3LDYgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW50U3RydWN0dXJlKFByaW50U3Ry
ZWFtJiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgb3BlcmFuZCk7
CiAKICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2Rl
OyB9CisgICAgRUNNQU1vZGUgZWNtYU1vZGUoKSBjb25zdCB7IHJldHVybiBpc1N0cmljdE1vZGUo
KSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlOyB9CiAKICAgICBpbmxpbmUgYm9vbCBpc0tu
b3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdJbmxpbmVDYWNoZVdyYXBwZXJfaAorI2RlZmlu
ZSBERkdJbmxpbmVDYWNoZVdyYXBwZXJfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFNsb3dQYXRoR2VuZXJhdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBHZW5lcmF0b3JUeXBlPgorc3RydWN0IElubGluZUNhY2hlV3JhcHBlciB7CisgICAgSW5saW5l
Q2FjaGVXcmFwcGVyKCkgeyB9CisgICAgCisgICAgSW5saW5lQ2FjaGVXcmFwcGVyKGNvbnN0IEdl
bmVyYXRvclR5cGUmIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQorICAgICAgICA6
IG1fZ2VuKGdlbikKKyAgICAgICAgLCBtX3Nsb3dQYXRoKHNsb3dQYXRoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKTsKKyAgICAK
KyAgICBHZW5lcmF0b3JUeXBlIG1fZ2VuOworICAgIFNsb3dQYXRoR2VuZXJhdG9yKiBtX3Nsb3dQ
YXRoOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbmxpbmVDYWNoZVdyYXBwZXJfaAorCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVX
cmFwcGVySW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXNfaAorI2RlZmluZSBERkdJbmxpbmVD
YWNoZVdyYXBwZXJJbmxpbmVzX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHaW5saW5lQ2FjaGVXcmFwcGVyLmgiCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBHZW5lcmF0b3JUeXBlPgordm9pZCBJbmxpbmVDYWNoZVdyYXBwZXI8R2VuZXJhdG9yVHlwZT46
OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgbV9nZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKG1fc2xvd1BhdGgtPmxhYmVsKCksIG1fc2xvd1BhdGgtPmNhbGwoKSk7CisgICAg
bV9nZW4uZmluYWxpemUobGlua0J1ZmZlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5saW5lQ2Fj
aGVXcmFwcGVySW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTc2NjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHRmFpbGVkRmluYWxp
emVyLmgiCisjaW5jbHVkZSAiREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIgogI2luY2x1
ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRl
ICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKQEAgLTIyMiwyMiArMjIzLDExIEBAIHZvaWQgSklUQ29t
cGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jYWxscy5zaXplKCk7ICsraSkKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fY2FsbHNb
aV0ubV9jYWxsLCBtX2NhbGxzW2ldLm1fZnVuY3Rpb24pOwogCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgaW5mbyA9ICptX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zdHViSW5mbzsK
LSAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNh
bGwoKSk7Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0
aW9uOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7Ci0gICAgICAgIGluZm8ucGF0
Y2guZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9zdHJ1Y3R1cmVDaGVjaykpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNz
ZXNbaV0ubV9sb2FkT3JTdG9yZSkpOwotI2Vsc2UKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNh
bGxUb1RhZ0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3Rh
Z0xvYWRPclN0b3JlKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9h
ZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fcGF5bG9hZExvYWRP
clN0b3JlKSk7Ci0jZW5kaWYKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNl
ID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5s
YWJlbCgpKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lID0gZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RvbmUpKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0
YUNhbGxUb1N0b3JhZ2VMb2FkID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3By
b3BlcnR5U3RvcmFnZUxvYWQpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9nZXRC
eUlkcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fZ2V0QnlJZHNbaV0uZmluYWxpemUobGlua0J1
ZmZlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wdXRCeUlkcy5zaXplKCk7IGktLTspCisg
ICAgICAgIG1fcHV0QnlJZHNbaV0uZmluYWxpemUobGlua0J1ZmZlcik7CisKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9pbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIGluZm8gPSAqbV9pbnNbaV0ubV9zdHViSW5mbzsKICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwganVtcCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2p1bXApOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNp
b24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKICNpbmNsdWRlICJERkdEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR0lubGluZUNhY2hlV3JhcHBlci5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUu
aCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCiAjaW5jbHVkZSAiREZH
UmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkdQUkluZm8u
aCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgpAQCAtNzcsNDkgKzc5LDYgQEAgc3RydWN0IENh
bGxMaW5rUmVjb3JkIHsKICAgICBGdW5jdGlvblB0ciBtX2Z1bmN0aW9uOwogfTsKIAotc3RydWN0
IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVJbW0sCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrLAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCwKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFj
dCBsb2FkT3JTdG9yZSwKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xvYWRPclN0b3JlLAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBwYXlsb2FkTG9hZE9yU3RvcmUsCi0jZW5kaWYKLSAg
ICAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoR2VuZXJhdG9yLAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSwKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvKQotICAgICAgICA6IG1fc3RydWN0dXJlSW1tKHN0cnVjdHVyZUltbSkKLSAgICAgICAgLCBt
X3N0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQotICAgICAgICAsIG1fcHJvcGVydHlTdG9y
YWdlTG9hZChwcm9wZXJ0eVN0b3JhZ2VMb2FkKQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICwgbV9sb2FkT3JTdG9yZShsb2FkT3JTdG9yZSkKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgICwgbV90YWdMb2FkT3JTdG9yZSh0YWdMb2FkT3JTdG9yZSkKLSAgICAgICAgLCBtX3Bh
eWxvYWRMb2FkT3JTdG9yZShwYXlsb2FkTG9hZE9yU3RvcmUpCi0jZW5kaWYKLSAgICAgICAgLCBt
X3Nsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoR2VuZXJhdG9yKQotICAgICAgICAsIG1fZG9uZShk
b25lKQotICAgICAgICAsIG1fc3R1YkluZm8oc3R1YkluZm8pCi0gICAgewotICAgIH0KLQotICAg
IE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbV9zdHJ1Y3R1cmVJbW07Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zdHJ1Y3R1cmVDaGVjazsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgbV9wcm9wZXJ0eVN0b3JhZ2VMb2FkOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgbV9sb2Fk
T3JTdG9yZTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgbV90YWdMb2FkT3JTdG9yZTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsQ29tcGFjdCBtX3BheWxvYWRMb2FkT3JTdG9yZTsKLSNlbmRpZgotICAgIFNsb3dQYXRo
R2VuZXJhdG9yKiBtX3Nsb3dQYXRoR2VuZXJhdG9yOwotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX2RvbmU7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87Ci19OwotCiBzdHJ1
Y3QgSW5SZWNvcmQgewogICAgIEluUmVjb3JkKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBqdW1wLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5lcmF0b3IsCkBA
IC0yNTQsMTEgKzIxMywxNiBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGFk
ZFByb3BlcnR5QWNjZXNzKGNvbnN0IFByb3BlcnR5QWNjZXNzUmVjb3JkJiByZWNvcmQpCisgICAg
dm9pZCBhZGRHZXRCeUlkKGNvbnN0IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhH
ZW5lcmF0b3IqIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFw
cGVuZChyZWNvcmQpOworICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBw
ZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIGFkZFB1dEJ5SWQoY29uc3QgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0
aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAgICBtX3B1dEJ5SWRzLmFwcGVuZChJ
bmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwor
ICAgIH0KKwogICAgIHZvaWQgYWRkSW4oY29uc3QgSW5SZWNvcmQmIHJlY29yZCkKICAgICB7CiAg
ICAgICAgIG1faW5zLmFwcGVuZChyZWNvcmQpOwpAQCAtMzg1LDcgKzM0OSw4IEBAIHByaXZhdGU6
CiAgICAgICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIH07CiAgICAgCi0gICAgVmVj
dG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7CisgICAgVmVj
dG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlk
czsKKyAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+LCA0
PiBtX3B1dEJ5SWRzOwogICAgIFZlY3RvcjxJblJlY29yZCwgND4gbV9pbnM7CiAgICAgVmVjdG9y
PEpTQ2FsbFJlY29yZCwgND4gbV9qc0NhbGxzOwogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRp
b25JbmZvPiBtX2V4aXRDb21waWxhdGlvbkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1
NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxh
YmVsID0gbV9qaXQubGFiZWwoKTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGltaXpl
ZENhbGw7Ci0gICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbikpIHsKKyAgICBpZiAobV9qaXQuaXNTdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAgICAgICAgICAg
IG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAg
ICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5
LDEwMyArMjA5LDQzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNN
b2RlIHNwaWxsTW9kZSkKIHsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2pp
dC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHNwaWxsTW9kZSAhPSBOZWVkVG9TcGlsbCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9q
aXQpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21w
YXJlOwotICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9q
aXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6Q29u
dmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNv
bnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFi
ZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NP
ZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIDApLCByZXN1bHRHUFIp
OwotICAgIAotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgp
OwotCi0gICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKLSAgICBpZiAoIXNs
b3dQYXRoVGFyZ2V0LmlzU2V0KCkpIHsKLSAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwo
Ci0gICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBzdHViSW5mbywgYmFzZUdQUiwKLSAgICAgICAgICAgIGlk
ZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOworICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCiAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOwotICAgICAgICBzbG93UGF0aCA9IHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRHUFIsIHN0dWJJbmZvLCBiYXNlR1BSLAotICAgICAgICAgICAgaWRl
bnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxNb2RlKTsKLSAgICB9Ci0gICAgUmVn
aXN0ZXJTZXQgY3VycmVudGx5VXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnMoKTsKLSAgICBB
U1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQoYmFzZUdQUikpOwotICAgIEFTU0VSVChj
dXJyZW50bHlVc2VkUmVnaXN0ZXJzLmdldChyZXN1bHRHUFIpKTsKLSAgICAKLSAgICBzdHViSW5m
by0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47Ci0gICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1
ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVzdWx0R1BSKTsKLSAgICBzdHViSW5mby0+cGF0
Y2gudXNlZFJlZ2lzdGVycyA9IGN1cnJlbnRseVVzZWRSZWdpc3RlcnM7Ci0gICAgc3R1YkluZm8t
PnBhdGNoLnJlZ2lzdGVyc0ZsdXNoZWQgPSBzcGlsbE1vZGUgIT0gTmVlZFRvU3BpbGw7Ci0KLSAg
ICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQo
Ci0gICAgICAgICAgICBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLCBwcm9wZXJ0
eVN0b3JhZ2VMb2FkLCBsb2FkV2l0aFBhdGNoLAotICAgICAgICAgICAgc2xvd1BhdGguZ2V0KCks
IGRvbmVMYWJlbCwgc3R1YkluZm8pKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgCisgICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9
IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdEdQUiwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsCisgICAgICAgIGlk
ZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9kZSk7CisgICAgCisgICAgbV9q
aXQuYWRkR2V0QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2
YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhU
YXJnZXQpCiB7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZFN0dWJJbmZvKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0
ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgc3Ry
dWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSkpOwotCiAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxl
TG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0aWJs
ZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0
b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKLQotICAgIEpJVENvbXBp
bGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotICAgIAotICAgIFZfSklUT3Bl
cmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkQ2FsbDsKLSAgICBpZiAobV9qaXQuc3RyaWN0TW9kZUZv
cihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKSkgewotICAgICAgICBpZiAocHV0S2luZCA9PSBE
aXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxs
ID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7
Ci0gICAgfQotICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Ci0gICAgaWYg
KCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7Ci0gICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhD
YWxsKAotICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2subV9qdW1wLCB0aGlzLCBvcHRpbWl6ZWRD
YWxsLCBOb1Jlc3VsdCwgc3R1YkluZm8sIHZhbHVlR1BSLCBiYXNlR1BSLAotICAgICAgICAgICAg
aWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3Jh
dGNoR1BSLCBmYWxzZSwgbV9qaXQuc3RyaWN0TW9kZUZvcihjb2RlT3JpZ2luKSwgcHV0S2luZCk7
CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworICAgIAorICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCiAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOwotICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3B0aW1pemVk
Q2FsbCwgTm9SZXN1bHQsIHN0dWJJbmZvLCB2YWx1ZUdQUiwgYmFzZUdQUiwKLSAgICAgICAgICAg
IGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwotICAgIH0KLSAgICBSZWdpc3RlclNl
dCBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVycygpOwotICAgIGN1cnJlbnRs
eVVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaEdQUik7Ci0gICAgQVNTRVJUKGN1cnJlbnRseVVz
ZWRSZWdpc3RlcnMuZ2V0KGJhc2VHUFIpKTsKLSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lz
dGVycy5nZXQodmFsdWVHUFIpKTsKLSAgICAKLSAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW47Ci0gICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4
X3Q+KGJhc2VHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0
PGludDhfdD4odmFsdWVHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0g
Y3VycmVudGx5VXNlZFJlZ2lzdGVyczsKLSAgICBzdHViSW5mby0+cGF0Y2gucmVnaXN0ZXJzRmx1
c2hlZCA9IGZhbHNlOwotICAgIAotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKAotICAgICAg
ICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKLSAgICAgICAgICAgIHN0cnVjdHVyZVRvQ29tcGFyZSwg
c3RydWN0dXJlQ2hlY2ssIHByb3BlcnR5U3RvcmFnZUxvYWQsCi0gICAgICAgICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsQ29tcGFjdChzdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgc2xvd1BhdGgu
Z2V0KCksIGRvbmVMYWJlbCwKLSAgICAgICAgICAgIHN0dWJJbmZvKSk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIAorICAgIE93blB0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1
ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7
CisKKyAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwogICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKQEAgLTI5NjIsOSArMjkw
Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsKICAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkKLSAg
ICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LnN0cmljdE1vZGVGb3Iobm9kZS0+Y29k
ZU9yaWdpbikgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5
VmFsRGlyZWN0Tm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5jb2RlT3Jp
Z2luKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxE
aXJlY3ROb25TdHJpY3QsIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuc3RyaWN0TW9kZUZvcihu
b2RlLT5jb2RlT3JpZ2luKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0IDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3QsIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOworICAgICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24obV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPmNvZGVPcmlnaW4p
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwg
YXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAx
NTc2NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTksMTMgKzM1OSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pOwogICAgIH0KICAgICAK
LSAgICBib29sIHN0cmljdE1vZGVGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIGJvb2wg
aXNTdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlm
ICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gY29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpOwogICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKS0+
aXNTdHJpY3RNb2RlKCk7CiAgICAgfQogICAgIAorICAgIEVDTUFNb2RlIHN0cmljdE1vZGVGb3Io
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzU3RyaWN0TW9k
ZUZvcihjb2RlT3JpZ2luKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlOworICAgIH0KKyAg
ICAKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQ
UkluZm8uaAkocmV2aXNpb24gMTU3NjU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9H
UFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQUlJlZzsgfQog
ICAgIAogICAgIEdQUlJlZyBncHIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQorICAgIEdQUlJl
ZyB0YWdHUFIoKSBjb25zdCB7IHJldHVybiBJbnZhbGlkR1BSUmVnOyB9CiAgICAgR1BSUmVnIHBh
eWxvYWRHUFIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQogICAgIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NzY2MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsOCBA
QCBKSVQ6OkpJVChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnBy
ZXRlcih2bS0+aW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxv
Y2stPm51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldCgo
dW5zaWduZWQpLTEpCi0gICAgLCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleChVSU5U
X01BWCkKKyAgICAsIG1fZ2V0QnlJZEluZGV4KFVJTlRfTUFYKQorICAgICwgbV9wdXRCeUlkSW5k
ZXgoVUlOVF9NQVgpCiAgICAgLCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleChVSU5UX01BWCkKICAg
ICAsIG1fY2FsbExpbmtJbmZvSW5kZXgoVUlOVF9NQVgpCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
QEAgLTM1OSw3ICszNjAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ewogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpOwogCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXggPSAwOworICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKKyAgICBtX3B1dEJ5SWRJbmRleCA9IDA7
CiAgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJbmZvSW5k
ZXggPSAwOwogICAgIApAQCAtNDc1LDcgKzQ3Nyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgMCk7CiAgICAg
fQogCi0gICAgUkVMRUFTRV9BU1NFUlQobV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgg
PT0gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3B1dEJ5SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGls
YXRpb25JbmZvLnNpemUoKSk7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIFJFTEVB
U0VfQVNTRVJUKG51bWJlck9mVmFsdWVQcm9maWxlcyA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCkpOwpAQCAtNDg3LDYwICs0OTAsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBQcm9wZXJ0
eVN0dWJDb21waWxhdGlvbkluZm86OmNvcHlUb1N0dWJJbmZvKExpbmtCdWZmZXIgJmxpbmtCdWZm
ZXIpCi17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsKLSAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IENvZGVPcmlnaW4o
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihjYWxsUmV0dXJuTG9jYXRpb24pOwotCi0gICAgc3R1YkluZm8tPnBh
dGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1cmVUb0NvbXBhcmUpLCBzdHVi
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0cnVj
dHVyZUNoZWNrKSk7Ci0gICAgCi0gICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihjb2xkUGF0aEJlZ2luKSk7
Ci0gICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKLSAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxs
VG9TdG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb3Bl
cnR5U3RvcmFnZUxvYWQpKTsKLSAgICAKLSAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IEdQ
UkluZm86OnJlZ1QwOwotCi0gICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKLSAgICB1c2Vk
UmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KSAvLyBK
U1ZBTFVFIGNhc2VzCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6Ci0g
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwpKTsKLSAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXRE
aXNwbGFjZW1lbnRMYWJlbCkpOwotICAgICAgICBzdHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBH
UFJJbmZvOjpyZWdUMTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDEp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZWxzZSAvLyBKU1ZBTFVFIGNhc2VzCi0gICAgc3dp
dGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwyKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsMSkpOwotICAgICAgICBzdHViSW5mby0+
cGF0Y2gudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICAgICAgc3R1YkluZm8tPnBhdGNo
LnZhbHVlVGFnR1BSID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0
KEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUlkOgotICAg
ICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsMikpOwotICAg
ICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbDEpKTsK
LSAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZVRhZ0dQUiA9IEdQUkluZm86OnJlZ1QzOwotICAgICAg
ICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgIHVzZWRSZWdpc3Rl
cnMuc2V0KEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8v
IEpTVkFMVUUgY2FzZXMKLSAgICAKLSAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9
IHVzZWRSZWdpc3RlcnM7Ci0gICAgc3R1YkluZm8tPnBhdGNoLnJlZ2lzdGVyc0ZsdXNoZWQgPSB0
cnVlOwotfQotCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC03
MzMsOCArNjgyLDExIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkK
ICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRl
ci0+dG8pKTsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkKLSAgICAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHViSW5mbyhwYXRjaEJ1ZmZlcik7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9nZXRCeUlkcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fZ2V0
QnlJZHNbaV0uZmluYWxpemUocGF0Y2hCdWZmZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1f
cHV0QnlJZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3B1dEJ5SWRzW2ldLmZpbmFsaXplKHBh
dGNoQnVmZmVyKTsKKwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9i
eVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENvZGVMb2Nh
dGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5iYWRUeXBlSnVtcCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTc2NjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVk
ZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJMZWdhY3lQcm9maWxl
ci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMTQ3LDExMSArMTQ4LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgZW51bSBQcm9wZXJ0eVN0dWJHZXRCeUlk
X1QgeyBQcm9wZXJ0eVN0dWJHZXRCeUlkIH07Ci0gICAgZW51bSBQcm9wZXJ0eVN0dWJQdXRCeUlk
X1QgeyBQcm9wZXJ0eVN0dWJQdXRCeUlkIH07Ci0KLSAgICBzdHJ1Y3QgUHJvcGVydHlTdHViQ29t
cGlsYXRpb25JbmZvIHsKLSAgICAgICAgZW51bSBUeXBlIHsgR2V0QnlJZCwgUHV0QnlJZCB9IG1f
dHlwZTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgaG90UGF0aEJlZ2luOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgc3RydWN0dXJlQ2hlY2s7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDb252ZXJ0
aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGdldERpc3BsYWNlbWVudExh
YmVsOwotI2Vsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZ2V0
RGlzcGxhY2VtZW50TGFiZWwxOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29t
cGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDI7Ci0jZW5kaWYKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGRvbmU7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjb2xkUGF0aEJl
Z2luOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFi
ZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDsKLSNlbHNlCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDE7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpEYXRhTGFiZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDI7Ci0jZW5kaWYKLSAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAg
ICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oKQotICAgICAgICAgICAgOiBieXRlY29k
ZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0jZW5kaWYKLQotCi0gICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5m
bygKLSAgICAgICAgICAgIFByb3BlcnR5U3R1YkdldEJ5SWRfVCwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJl
VG9Db21wYXJlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgc3Ry
dWN0dXJlQ2hlY2ssCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2Fk
TGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCwKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwsCi0j
ZWxzZQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxh
Y2VtZW50TGFiZWwxLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBh
Y3QgZGlzcGxhY2VtZW50TGFiZWwyLAotI2VuZGlmCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgZG9uZSkKLSAgICAgICAgICAgIDogbV90eXBlKEdldEJ5SWQpCi0gICAgICAgICAg
ICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAgICwgc3RydWN0dXJl
VG9Db21wYXJlKHN0cnVjdHVyZVRvQ29tcGFyZSkKLSAgICAgICAgICAgICwgc3RydWN0dXJlQ2hl
Y2soc3RydWN0dXJlQ2hlY2spCi0gICAgICAgICAgICAsIHByb3BlcnR5U3RvcmFnZUxvYWQocHJv
cGVydHlTdG9yYWdlTG9hZCkKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgLCBnZXRE
aXNwbGFjZW1lbnRMYWJlbChkaXNwbGFjZW1lbnRMYWJlbCkKLSNlbHNlCi0gICAgICAgICAgICAs
IGdldERpc3BsYWNlbWVudExhYmVsMShkaXNwbGFjZW1lbnRMYWJlbDEpCi0gICAgICAgICAgICAs
IGdldERpc3BsYWNlbWVudExhYmVsMihkaXNwbGFjZW1lbnRMYWJlbDIpCi0jZW5kaWYKLSAgICAg
ICAgICAgICwgZG9uZShkb25lKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBQcm9w
ZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCi0gICAgICAgICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlk
X1QsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQsCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNw
bGFjZW1lbnRMYWJlbCwKLSNlbHNlCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsMzIgZGlzcGxhY2VtZW50TGFiZWwxLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsMiwKLSNlbmRpZgotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGRvbmUpCi0gICAgICAgICAgICA6IG1fdHlwZShQdXRCeUlkKQotICAg
ICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICAsIHN0
cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBhcmUpCi0gICAgICAgICAgICAsIHN0cnVj
dHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQotICAgICAgICAgICAgLCBwcm9wZXJ0eVN0b3JhZ2VM
b2FkKHByb3BlcnR5U3RvcmFnZUxvYWQpCi0gICAgICAgICAgICAsIGRvbmUoZG9uZSkKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgLCBwdXREaXNwbGFjZW1lbnRMYWJlbChkaXNwbGFj
ZW1lbnRMYWJlbCkKLSNlbHNlCi0gICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMShk
aXNwbGFjZW1lbnRMYWJlbDEpCi0gICAgICAgICAgICAsIHB1dERpc3BsYWNlbWVudExhYmVsMihk
aXNwbGFjZW1lbnRMYWJlbDIpCi0jZW5kaWYKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzbG93Q2FzZUluZm8oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW4s
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIFN0cnVjdHVyZVN0dWJJbmZvKiBpbmZvKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwotICAgICAgICAg
ICAgdGhpcy0+Y29sZFBhdGhCZWdpbiA9IGNvbGRQYXRoQmVnaW47Ci0gICAgICAgICAgICBzdHVi
SW5mbyA9IGluZm87Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNsb3dDYXNlSW5mbyhNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsUmV0dXJu
TG9jYXRpb24gPSBjYWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjb3B5VG9TdHViSW5m
byhMaW5rQnVmZmVyICZwYXRjaEJ1ZmZlcik7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBCeVZhbENv
bXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKCkgeyB9CiAgICAg
ICAgIApAQCAtMjg3LDcgKzE4Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpJVCA6
IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1Bh
dGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7Ci0gICAgICAgIGZyaWVu
ZCBzdHJ1Y3QgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOwogCiAgICAgICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wOwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Q7CkBAIC05MDIsNyArNzk3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgVmVjdG9y
PENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAgIFZlY3RvcjxMYWJlbD4gbV9sYWJlbHM7Ci0g
ICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8+IG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3RvcjxKSVRHZXRCeUlkR2VuZXJhdG9yPiBt
X2dldEJ5SWRzOworICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlk
czsKICAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJs
ZT4gbV9qbXBUYWJsZTsKQEAgLTkxNCw3ICs4MTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogCi0gICAgICAgIHVuc2lnbmVkIG1fcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRJ
bmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXg7CiAgICAgICAgIHVuc2lnbmVk
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5m
b0luZGV4OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAgICA6IG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2stPmFk
ZFN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47Cit9
CisKK0pJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsCisgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIGJvb2wg
cmVnaXN0ZXJzRmx1c2hlZCkKKyAgICA6IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKGNvZGVCbG9j
aywgY29kZU9yaWdpbikKKyAgICAsIG1fYmFzZShiYXNlKQorICAgICwgbV92YWx1ZSh2YWx1ZSkK
K3sKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5yZWdpc3RlcnNGbHVzaGVkID0gcmVnaXN0ZXJzRmx1
c2hlZDsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVy
czsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgLSBpbiBjYXNlcyB3aGVyZSB0
aGUgb25seSByZWdpc3RlcnMgeW91J3JlIHVzaW5nIGFyZSBiYXNlL3ZhbHVlLAorICAgIC8vIGl0
IGFsbG93cyB5b3UgdG8gcGFzcyBSZWdpc3RlclNldCgpIGFzIHRoZSB1c2VkUmVnaXN0ZXJzIGFy
Z3VtZW50LgorICAgIG1fc3R1YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMuc2V0KGJhc2UpOwor
ICAgIG1fc3R1YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMuc2V0KHZhbHVlKTsKKyAgICAKKyAg
ICBtX3N0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlLnBh
eWxvYWRHUFIoKSk7CisgICAgbV9zdHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KHZhbHVlLnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBtX3N0dWJJbmZvLT5wYXRjaC52YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PGludDhfdD4odmFs
dWUudGFnR1BSKCkpOworI2VuZGlmCit9CisKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxp
emUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2NhbGwpOworICAgIG1fc3R1
YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3Ry
dWN0dXJlSW1tKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5k
ZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cigKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9zdHJ1Y3R1cmVDaGVjaykpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9zdHViSW5m
by0+cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKKyNlbHNlCisgICAgbV9zdHViSW5mby0+cGF0
Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fdGFnTG9hZE9yU3RvcmUpKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0
YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKKyNlbmRpZgorICAgIG1fc3R1YkluZm8tPnBhdGNoLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKAorICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X3Nsb3dQYXRoQmVnaW4pKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBjYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7Cit9CisKK3ZvaWQgSklU
QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYgaml0
LCBHUFJSZWcgYnV0dGVyZmx5KQoreworICAgIG1fc3RydWN0dXJlQ2hlY2sgPSBqaXQucGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICBtX3N0cnVjdHVyZUltbSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9p
bnRlcikpKTsKKyAgICAKKyAgICBtX3Byb3BlcnR5U3RvcmFnZUxvYWQgPSBqaXQuY29udmVydGli
bGVMb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UucGF5bG9h
ZEdQUigpLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBidXR0ZXJmbHkpOworfQorCit2
b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
IGppdCkKK3sKKyAgICBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGppdCwgbV92YWx1ZS5wYXlsb2Fk
R1BSKCkpOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9sb2FkT3JTdG9yZSA9IGpp
dC5sb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobV92YWx1ZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVlLnBheWxvYWRH
UFIoKSkubGFiZWwoKTsKKyNlbHNlCisgICAgbV90YWdMb2FkT3JTdG9yZSA9IGppdC5sb2FkMzJX
aXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV92YWx1ZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVlLnRhZ0dQUigpKS5sYWJlbCgp
OworICAgIG1fbG9hZE9yU3RvcmUgPSBqaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0
UGF0Y2goCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fdmFsdWUucGF5bG9hZEdQ
UigpLCAwKSwgbV92YWx1ZS5wYXlsb2FkR1BSKCkpLmxhYmVsKCk7CisjZW5kaWYKKyAgICAKKyAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0
QnlJZEdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIGJvb2wgcmVnaXN0ZXJz
Rmx1c2hlZCwKKyAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQorICAgIDog
SklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMsIGJh
c2UsIHZhbHVlLCByZWdpc3RlcnNGbHVzaGVkKQorICAgICwgbV9zY3JhdGNoKHNjcmF0Y2gpCisg
ICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQorICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCit7Cisg
ICAgbV9zdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKK30KKwor
dm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
JiBqaXQpCit7CisgICAgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhqaXQsIG1fc2NyYXRjaCk7Cisg
ICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3JlNjRX
aXRoQWRkcmVzc09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9zY3JhdGNoLCAwKSkubGFiZWwoKTsKKyNlbHNlCisgICAg
bV90YWdMb2FkT3JTdG9yZSA9IGppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCgKKyAg
ICAgICAgbV92YWx1ZS50YWdHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9zY3JhdGNo
LCAwKSkubGFiZWwoKTsKKyAgICBtX2xvYWRPclN0b3JlID0gaml0LnN0b3JlMzJXaXRoQWRkcmVz
c09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MobV9zY3JhdGNoLCAwKSkubGFiZWwoKTsKKyNlbmRpZgorICAgIAorICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCitWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIEpJVFB1dEJ5
SWRHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQoreworICAgIGlmIChtX2VjbWFNb2RlID09
IFN0cmljdE1vZGUpIHsKKyAgICAgICAgaWYgKG1fcHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgIH0KKyAgICBpZiAo
bV9wdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShK
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcl9oCisjZGVmaW5lIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisj
aW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNs
dWRlICJQdXRLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisK
K2NsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKK3Byb3RlY3RlZDoKKyAgICBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcigpIHsgfQorICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVC
bG9jayosIENvZGVPcmlnaW4pOworICAgIAorcHVibGljOgorICAgIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KKworcHJvdGVjdGVkOgor
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1
YkluZm87Cit9OworCitjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yIHsKK3Byb3RlY3RlZDoKKyAgICBKSVRCeUlkR2VuZXJhdG9yKCkgeyB9CisK
KyAgICBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBj
b25zdCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLAor
ICAgICAgICBib29sIHJlZ2lzdGVyc0ZsdXNoZWQpOworICAgIAorcHVibGljOgorICAgIHZvaWQg
cmVwb3J0U2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luLCBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgIHsKKyAgICAgICAgbV9zbG93UGF0aEJlZ2lu
ID0gc2xvd1BhdGhCZWdpbjsKKyAgICAgICAgbV9jYWxsID0gY2FsbDsKKyAgICB9CisgICAgCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KKworICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYp
OworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNy
b0Fzc2VtYmxlciYsIEdQUlJlZyBidXR0ZXJmbHkpOworICAgIAorICAgIEpTVmFsdWVSZWdzIG1f
YmFzZTsKKyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgbV9zdHJ1Y3R1cmVJbW07CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgbV9zdHJ1Y3R1cmVDaGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGli
bGVMb2FkTGFiZWwgbV9wcm9wZXJ0eVN0b3JhZ2VMb2FkOworICAgIEFzc2VtYmxlckxhYmVsIG1f
bG9hZE9yU3RvcmU7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBBc3NlbWJsZXJMYWJlbCBt
X3RhZ0xvYWRPclN0b3JlOworI2VuZGlmCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9u
ZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKK307CisKK2NsYXNzIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
OiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgSklUR2V0QnlJZEdlbmVy
YXRvcigpIHsgfQorCisgICAgSklUR2V0QnlJZEdlbmVyYXRvcigKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBib29sIHJlZ2lzdGVyc0ZsdXNoZWQpCisgICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2Rl
QmxvY2ssIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCByZWdpc3RlcnNG
bHVzaGVkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJik7Cit9OworCitjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIDogcHVibGlj
IEpJVEJ5SWRHZW5lcmF0b3IgeworcHVibGljOgorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSB7
IH0KKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IHNjcmF0Y2gsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCwKKyAgICAgICAgRUNNQU1vZGUgZWNtYU1v
ZGUsIFB1dEtpbmQgcHV0S2luZCk7CisgICAgCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJik7CisgICAgCisgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBzbG93UGF0
aEZ1bmN0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgR1BSUmVnIG1fc2NyYXRjaDsKKyAgICBFQ01B
TW9kZSBtX2VjbWFNb2RlOworICAgIFB1dEtpbmQgbV9wdXRLaW5kOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
NCwxOCArNTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGJhc2VW
UmVnLCBpZGVudCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVH
ZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQotewot
ICAgIC8vIEFzIGZvciBwdXRfYnlfaWQsIGdldF9ieV9pZCByZXF1aXJlcyB0aGUgb2Zmc2V0IG9m
IHRoZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGFjY2VzcyB0byBiZSBwYXRjaGVk
LgotICAgIC8vIEFkZGl0aW9uYWxseSwgZm9yIGdldF9ieV9pZCB3ZSBuZWVkIHBhdGNoIHRoZSBv
ZmZzZXQgb2YgdGhlIGJyYW5jaCB0byB0aGUgc2xvdyBjYXNlICh3ZSBwYXRjaCB0aGlzIHRvIGp1
bXAKLSAgICAvLyB0byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVz
LCBhbmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQg
YXMgYSBsYWJlbAotICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBvbmUgb2YgdGhlc2UgdHJhbXBv
bGllcyBmaW5kcyBhIG1hdGNoLgotCisgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CkBAIC01MzMsMjUg
KzUyMiwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJlZ1QxLCByZWdUMiwg
bV9ieXRlY29kZU9mZnNldCk7CiAgICAgfQogCi0gICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRv
Q29tcGFyZTsKLSAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJh
bmNoUHRyV2l0aFBhdGNoKAotICAgICAgICBOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwKLSAgICAgICAgVHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSkpOwotICAgIAot
ICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKLSAgICAKLSAgICBDb252ZXJ0aWJsZUxv
YWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgY29udmVydGlibGVMb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICAKLSAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBsb2FkNjRXaXRoQ29tcGFj
dEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlk
RGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
LSAgICAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZCgKLSAgICAg
ICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAgICAgUHJvcGVydHlTdHVi
R2V0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVD
aGVjaywKLSAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUxvYWQsIGxvYWRXaXRoUGF0Y2gsIGRv
bmUpKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0KCksCisgICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCB0cnVlKTsKKyAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKKworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocmVnVDQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKQEAgLTU2MywxOSArNTQxLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNl
VlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxl
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIHN0dWJJbmZvLCByZWdUMCwg
aWRlbnQtPmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihXaXRoUHJvZmls
ZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIGlkZW50LT5pbXBsKCkpOwogCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29s
ZFBhdGhCZWdpbiwgY2FsbCwgc3R1YkluZm8pOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBiYXNlVlJlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzhdLnUub3BlcmFuZDsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0
b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZl
IGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJh
dGUgY29kZQpAQCAtNTg1LDYwICs1NjQsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KEluc3RydWN0aW9uKgogCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhl
IGJhc2Ugb2JqZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5v
dCBtYXRjaC4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKLQotICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgUGF0Y2hhYmxl
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAg
ICAgTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsCi0gICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1
cmVDaGVjayk7CiAgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1Qy
LCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MpOwogCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9
Ci0gICAgICAgIGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgCi0gICAgRGF0YUxhYmVsMzIgc3RvcmVXaXRo
UGF0Y2ggPQotICAgICAgICBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMSwgQWRk
cmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOworICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
T2Zmc2V0KSwgUmVnaXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLAorICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QyLCB0cnVlLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgZGly
ZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKICAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwo
KTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgCi0gICAgbV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCi0gICAgICAgIFByb3BlcnR5U3R1YkNvbXBp
bGF0aW9uSW5mbygKLSAgICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWQsIG1fYnl0ZWNvZGVP
ZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCi0gICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2VMb2FkLCBzdG9yZVdpdGhQYXRjaCwgZG9uZSkpOworICAgIG1fcHV0QnlJ
ZHMuYXBwZW5kKGdlbik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgdW5zaWdu
ZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUub3BlcmFuZDsKIAogICAgIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VWUmVnKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAotICAgIFZfSklUT3Bl
cmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkQ2FsbDsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpKSB7Ci0gICAgICAgIGlmIChkaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRD
YWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChkaXJlY3QpCi0gICAgICAgICAgICBvcHRp
bWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxsLCBzdHViSW5mbywgcmVnVDEsIHJlZ1QwLCBp
ZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICBn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVu
dC0+aW1wbCgpKTsKIAotICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhp
cyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICBtX3Byb3Bl
cnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
KytdLnNsb3dDYXNlSW5mbyhjb2xkUGF0aEJlZ2luLCBjYWxsLCBzdHViSW5mbyk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogLy8gQ29tcGls
ZSBhIHN0b3JlIGludG8gYW4gb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZS4gIE1heSBvdmVyd3Jp
dGUgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZp
c2lvbiAxNTc2NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgc2V0Qml0
KEdQUkluZm86OnRvSW5kZXgocmVnKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0KEpTVmFs
dWVSZWdzIHJlZ3MpCisgICAgeworICAgICAgICBpZiAocmVncy50YWdHUFIoKSAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgc2V0KHJlZ3MudGFnR1BSKCkpOworICAgICAgICBzZXQocmVn
cy5wYXlsb2FkR1BSKCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldEdQUkJ5SW5kZXgodW5z
aWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214664</attachid>
            <date>2013-10-19 13:21:47 -0700</date>
            <delta_ts>2013-10-19 13:28:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80865</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3Njc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDEzLTEwLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmFzZWxpbmUgSklUIGFuZCBERkcgSUMgY29kZSBnZW5lcmF0aW9uIHNob3VsZCBiZSB1bmlmaWVk
IGFuZCByYXRpb25hbGl6ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMjkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlIHRoZSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciwg
d2hpY2ggdGFrZXMgYSBDb2RlQmxvY2sgYW5kIGEgQ29kZU9yaWdpbiBwbHVzCisgICAgICAgIHNv
bWUgcmVnaXN0ZXIgaW5mbyBhbmQgY3JlYXRlcyBKSVQgaW5saW5lIGNhY2hlcyBmb3IgeW91LiBV
c2VkIHRoaXMgdG8gZXZlbiBmdXJodGVyCisgICAgICAgIHVuaWZ5IHRoZSBiYXNlbGluZSBhbmQg
REZHIElDcy4gSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gdXNlIHRoaXMgZm9yIEZUTCBJQ3MuIEFuZCBt
eSBob3BlCisgICAgICAgIGlzIHRoYXQgd2UnbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIGNhc2Nh
ZGluZyBJQ3M6IGFuIElDIGZvciBzb21lIGluc3RydWN0aW9uIG1heSByZWFsaXplCisgICAgICAg
IHRoYXQgaXQgbmVlZHMgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgZ2V0X2J5X2lkLCBzbyB3aXRo
IHRoaXMgZ2VuZXJhdG9yIGl0IHdpbGwgYmUgYWJsZQorICAgICAgICB0byBjcmVhdGUgYW4gSUMg
ZXZlbiB0aG91Z2ggaXQgd2Fzbid0IGFzc29jaWF0ZWQgd2l0aCBhIGdldF9ieV9pZCBieXRlY29k
ZSBpbnN0cnVjdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29t
cGFjdDo6bGFiZWwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmVjbWFNb2RlKToKKyAgICAgICAgKiBkZmcvREZHSW5saW5lQ2FjaGVX
cmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OklubGluZUNhY2hlV3JhcHBlcjo6
SW5saW5lQ2FjaGVXcmFwcGVyKToKKyAgICAgICAgKiBkZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVy
SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjo6OmZpbmFsaXplKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6YWRkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmFkZFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6aXNTdHJpY3RNb2RlRm9yKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpzdHJpY3RNb2RlRm9yKToKKyAgICAgICAgKiBqaXQvR1BSSW5m
by5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6dGFnR1BSKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJh
dG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6
ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5j
dGlvbik6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6c3R1YkluZm8p
OgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6cmVwb3J0U2xvd1BhdGhDYWxsKToKKyAgICAg
ICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhKdW1wKToKKyAgICAgICAgKEpTQzo6
SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
clNldDo6c2V0KToKKwogMjAxMy0xMC0xOSAgTmFkYXYgUm90ZW0gIDxucm90ZW1AYXBwbGUuY29t
PgogCiAgICAgICAgIERGRyBkb21pbmF0b3JzOiBkb2N1bWVudCBhbmQgcmVuYW1lIHN0dWZmLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU3NjU4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMjYsNiArMjI2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklU
Q29kZS5jcHAKICAgICBqaXQvSklURGlzYXNzZW1ibGVyLmNwcAogICAgIGppdC9KSVRFeGNlcHRp
b25zLmNwcAorICAgIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKICAgICBqaXQvSklU
T3Bjb2Rlcy5jcHAKICAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcAogICAgIGppdC9KSVRPcGVy
YXRpb25zLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDE1NzY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNiArMjgwLDggQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmggXApAQCAtNjMwLDYgKzYzMiw4IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU3NjU4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3OCw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQ29kZS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XEpJVERpc2Fzc2VtYmxlci5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmNwcCIgLz4NCkBAIC03NzUsNiArNzc2
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRDb21waWxhdGlvbkVmZm9y
dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVREaXNhc3NlbWJsZXIu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbldyYXBwZXJzLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbnMuaCIgLz4N
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU3NjU4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw2ICszMzQsMTAgQEAKIAkJMEZCMTA1OEMxNjc1
NDgzMzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODgxNjc1NDgyRTAwRjhBQjZFIC8qIFByb2Zp
bGVyT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTg5
MTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCAqLzsgfTsKIAkJMEZC
MTA1OEUxNjc1NDgzQTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNThBMTY3NTQ4MkUwMEY4
QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTRFMUUxODEyNEFDRTAwOUI2QjREIC8qIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAgKi87IH07CisJCTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZCMTRFMjExODEyNTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjAxODEyNTcw
QjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAv
KiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5s
aW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0
NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0
NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVD
N0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTgwLDYgKzE1ODQsMTAg
QEAKIAkJMEZCMTA1ODgxNjc1NDgyRTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9TUkV4aXQuaDsgcGF0aCA9IHBy
b2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkIxMDU4OTE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlck9TUkV4aXRTaXRlLmNwcDsg
cGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkIxMDU4QTE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0
U2l0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9TUkV4aXRT
aXRlLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQg
LyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0lubGluZUNhY2hlV3JhcHBlci5oOyBwYXRoID0gZGZnL0RGR0lubGluZUNhY2hlV3Jh
cHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNEUyMjE4MTMwOTU1MDA5
QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHBhdGggPSBk
ZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcv
REZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2
QjYyNzcyMDAzRjY5NkIgLyogREZHQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FsbG9jYXRvci5oOyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZH
Q29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbW1v
bi5jcHA7IHBhdGggPSBkZmcvREZHQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI4NzAsNiArMjg3OCw4IEBACiAJCQkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8q
IEpJVERpc2Fzc2VtYmxlci5oICovLAogCQkJCTBGNDY4MDdGMTRCQTU3MjcwMEJGRTI3MiAvKiBK
SVRFeGNlcHRpb25zLmNwcCAqLywKIAkJCQkwRjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklU
RXhjZXB0aW9ucy5oICovLAorCQkJCTBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAgKi8sCisJCQkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8q
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggKi8sCiAJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4
NjgyIC8qIEpJVElubGluZXMuaCAqLywKIAkJCQlCQ0RENTFFOTBGQjhERjc0MDA0QThCREMgLyog
SklUT3Bjb2Rlcy5jcHAgKi8sCiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9w
Y29kZXMzMl82NC5jcHAgKi8sCkBAIC0zNjE2LDggKzM2MjYsNiBAQAogCQk4NkVDOURCMzEzMjhE
RjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQkwRjlEMzM5NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAq
LywKLQkJCQkwRjlEMzM5NTE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8sCiAJ
CQkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJ
CQkJQTc3QTQyMzcxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJ
CUE3MDREOEZFMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8s
CkBAIC0zNzA2LDYgKzM3MTQsOCBAQAogCQkJCUE3OEE5NzZGMTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCAqLywKKwkJCQkwRjlEMzM5NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0
LmNwcCAqLywKKwkJCQkwRjlEMzM5NTE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0Lmgg
Ki8sCiAJCQkJQTdEODlDRTgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAq
LywKIAkJCQlBN0Q4OUNFOTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCAqLywK
IAkJCQlBN0Q4OUNFQTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuY3BwICovLApAQCAtMzcxMyw2ICszNzIzLDggQEAKIAkJCQk4NkVDOURCNjEzMjhERjgy
MDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJCQk4NkVDOURCNzEzMjhERjgy
MDAyQjJBRDcgLyogREZHR3JhcGguY3BwICovLAogCQkJCTg2RUM5REI4MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHcmFwaC5oICovLAorCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKKwkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTcwNEQ5MDEx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYy
QkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovLApAQCAtNDQxNyw2
ICs0NDI5LDcgQEAKIAkJCQlCQzg3Q0RCOTEwNzEyQUQ0MDAwNjE0Q0YgLyogSlNPTk9iamVjdC5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1MzRBQUZCMEU1QjdBOTYwMEI4QTQ1QiAvKiBKU1By
b2ZpbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODRFMUIxN0JFREJEMzAwN0NC
NjNBIC8qIEpTUHJvbWlzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCMTRFMUYxODEyNEFDRTAw
OUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QzE1RjY1RTE3QzE5OUNFMDA3OTRENDAgLyogSlNQcm9taXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDMTg0RTIzMTdCRUUyNDAwMDdDQjYzQSAvKiBKU1Byb21pc2VDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODRFMUYxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJv
bWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDQ5LDggKzQ0NjIsMTAgQEAKIAkJ
CQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXku
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1Zh
bHVlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MjY5LDYgKzUyODQsNyBAQAog
CQkJCTBGMjM1QkQzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkIx
NEUxRTE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyMzVCREExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0YyOTk2QjE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFp
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAxNTc2NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDYgKzQ2NCw4
IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgQXNzZW1ibGVyTGFi
ZWwgbGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsOyB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTc2NjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Nyw2ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmludFN0cnVjdHVyZShQcmludFN0
cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IG9wZXJhbmQp
OwogCiAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9k
ZTsgfQorICAgIEVDTUFNb2RlIGVjbWFNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNTdHJpY3RNb2Rl
KCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZTsgfQogCiAgICAgaW5saW5lIGJvb2wgaXNL
bm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5saW5lQ2FjaGVXcmFwcGVyX2gKKyNkZWZp
bmUgREZHSW5saW5lQ2FjaGVXcmFwcGVyX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgR2VuZXJhdG9yVHlwZT4KK3N0cnVjdCBJbmxpbmVDYWNoZVdyYXBwZXIgeworICAgIElubGlu
ZUNhY2hlV3JhcHBlcigpIHsgfQorICAgIAorICAgIElubGluZUNhY2hlV3JhcHBlcihjb25zdCBH
ZW5lcmF0b3JUeXBlJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKKyAgICAgICAg
OiBtX2dlbihnZW4pCisgICAgICAgICwgbV9zbG93UGF0aChzbG93UGF0aCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcik7CisgICAg
CisgICAgR2VuZXJhdG9yVHlwZSBtX2dlbjsKKyAgICBTbG93UGF0aEdlbmVyYXRvciogbV9zbG93
UGF0aDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5saW5lQ2FjaGVXcmFwcGVyX2gKKworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hl
V3JhcHBlcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzX2gKKyNkZWZpbmUgREZHSW5saW5l
Q2FjaGVXcmFwcGVySW5saW5lc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR2lubGluZUNhY2hlV3JhcHBlci5oIgorI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9y
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgR2VuZXJhdG9yVHlwZT4KK3ZvaWQgSW5saW5lQ2FjaGVXcmFwcGVyPEdlbmVyYXRvclR5cGU+
OjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIG1fZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChtX3Nsb3dQYXRoLT5sYWJlbCgpLCBtX3Nsb3dQYXRoLT5jYWxsKCkpOworICAg
IG1fZ2VuLmZpbmFsaXplKGxpbmtCdWZmZXIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0lubGluZUNh
Y2hlV3JhcHBlcklubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFs
aXplci5oIgorI2luY2x1ZGUgIkRGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHSklURmluYWxpemVyLmgiCiAjaW5jbHVk
ZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCkBAIC0yMjIsMjIgKzIyMywxMSBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxz
W2ldLm1fY2FsbCwgbV9jYWxsc1tpXS5tX2Z1bmN0aW9uKTsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIGluZm8gPSAqbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc3R1YkluZm87
Ci0gICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5j
YWxsKCkpOwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2Nh
dGlvbjsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAgICBpbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fc3RydWN0dXJlQ2hlY2spKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vz
c2VzW2ldLm1fbG9hZE9yU3RvcmUpKTsKLSNlbHNlCi0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFD
YWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV90
YWdMb2FkT3JTdG9yZSkpOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExv
YWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3BheWxvYWRMb2Fk
T3JTdG9yZSkpOwotI2VuZGlmCi0gICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+
bGFiZWwoKSkpOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kb25lKSk7Ci0gICAgICAgIGluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TdG9yYWdlTG9hZCA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9w
cm9wZXJ0eVN0b3JhZ2VMb2FkKSk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ2V0
QnlJZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX2dldEJ5SWRzW2ldLmZpbmFsaXplKGxpbmtC
dWZmZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fcHV0QnlJZHMuc2l6ZSgpOyBpLS07KQor
ICAgICAgICBtX3B1dEJ5SWRzW2ldLmZpbmFsaXplKGxpbmtCdWZmZXIpOworCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBpbmZvID0gKm1faW5zW2ldLm1fc3R1YkluZm87CiAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGp1bXAgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9qdW1wKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDE1NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE0IEBACiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiREZHRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIK
KyNpbmNsdWRlICJERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgogI2luY2x1ZGUgIkRG
R1JlZ2lzdGVyQmFuay5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZv
LmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKQEAgLTc3LDQ5ICs3OSw2IEBAIHN0cnVjdCBD
YWxsTGlua1JlY29yZCB7CiAgICAgRnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKIH07CiAKLXN0cnVj
dCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7Ci0gICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlSW1tLAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjaywKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQsCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBh
Y3QgbG9hZE9yU3RvcmUsCi0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCB0YWdMb2FkT3JTdG9yZSwKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgcGF5bG9hZExvYWRPclN0b3JlLAotI2VuZGlmCi0g
ICAgICAgIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aEdlbmVyYXRvciwKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmUsCi0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbykKLSAgICAgICAgOiBtX3N0cnVjdHVyZUltbShzdHJ1Y3R1cmVJbW0pCi0gICAgICAgICwg
bV9zdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykKLSAgICAgICAgLCBtX3Byb3BlcnR5U3Rv
cmFnZUxvYWQocHJvcGVydHlTdG9yYWdlTG9hZCkKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAsIG1fbG9hZE9yU3RvcmUobG9hZE9yU3RvcmUpCi0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICAsIG1fdGFnTG9hZE9yU3RvcmUodGFnTG9hZE9yU3RvcmUpCi0gICAgICAgICwgbV9w
YXlsb2FkTG9hZE9yU3RvcmUocGF5bG9hZExvYWRPclN0b3JlKQotI2VuZGlmCi0gICAgICAgICwg
bV9zbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aEdlbmVyYXRvcikKLSAgICAgICAgLCBtX2RvbmUo
ZG9uZSkKLSAgICAgICAgLCBtX3N0dWJJbmZvKHN0dWJJbmZvKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1fc3RydWN0dXJlSW1tOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc3RydWN0dXJlQ2hlY2s7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIG1fcHJvcGVydHlTdG9yYWdlTG9hZDsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IG1fbG9h
ZE9yU3RvcmU7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpE
YXRhTGFiZWxDb21wYWN0IG1fdGFnTG9hZE9yU3RvcmU7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgbV9wYXlsb2FkTG9hZE9yU3RvcmU7Ci0jZW5kaWYKLSAgICBTbG93UGF0
aEdlbmVyYXRvciogbV9zbG93UGF0aEdlbmVyYXRvcjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9kb25lOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwotfTsKLQogc3Ry
dWN0IEluUmVjb3JkIHsKICAgICBJblJlY29yZCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAganVtcCwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoR2VuZXJhdG9yLApA
QCAtMjU0LDExICsyMTMsMTYgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi0gICAgdm9pZCBh
ZGRQcm9wZXJ0eUFjY2Vzcyhjb25zdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCYgcmVjb3JkKQorICAg
IHZvaWQgYWRkR2V0QnlJZChjb25zdCBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRo
R2VuZXJhdG9yKiBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5h
cHBlbmQocmVjb3JkKTsKKyAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFw
cGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBhZGRQdXRCeUlkKGNvbnN0IEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1Bh
dGhHZW5lcmF0b3IqIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgbV9wdXRCeUlkcy5hcHBlbmQo
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsK
KyAgICB9CisKICAgICB2b2lkIGFkZEluKGNvbnN0IEluUmVjb3JkJiByZWNvcmQpCiAgICAgewog
ICAgICAgICBtX2lucy5hcHBlbmQocmVjb3JkKTsKQEAgLTM4NSw3ICszNDksOCBAQCBwcml2YXRl
OgogICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICB9OwogICAgIAotICAgIFZl
Y3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOworICAgIFZl
Y3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJ
ZHM7CisgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwg
ND4gbV9wdXRCeUlkczsKICAgICBWZWN0b3I8SW5SZWNvcmQsIDQ+IG1faW5zOwogICAgIFZlY3Rv
cjxKU0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0
aW9uSW5mbz4gbV9leGl0Q29tcGlsYXRpb25JbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
NTc2NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTI5ICsxOTcsNTcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVVSW50MwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRHZXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUs
IEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQogewotICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRTdHViSW5m
bygpOworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiksCisgICAgICAgIEpTVmFsdWVSZWdzKHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHNwaWxsTW9kZSAhPSBOZWVkVG9TcGlsbCk7
CiAgICAgCi0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7
Ci0gICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5w
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aChtX2ppdCk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHBy
b3BlcnR5U3RvcmFnZUxvYWQgPSBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
c3VsdFBheWxvYWRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xv
YWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHBheWxvYWRMb2FkV2l0aFBhdGNoID0gbV9qaXQu
bG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmVzdWx0UGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCisgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOworICAgIHNsb3dDYXNlcy5hcHBl
bmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAKLSAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9u
ZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLQogICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4g
c2xvd1BhdGg7CiAgICAgaWYgKGJhc2VUYWdHUFJPck5vbmUgPT0gSW52YWxpZEdQUlJlZykgewot
ICAgICAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpIHsKLSAgICAgICAgICAgIHNsb3dQ
YXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLm1fanVt
cCwgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAotICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHN0dWJJbmZvLAotICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpLCBiYXNlUGF5
bG9hZEdQUiwKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrLm1f
anVtcCk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0KTsKLSAg
ICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAotICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHN0dWJJbmZvLAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpLCBiYXNl
UGF5bG9hZEdQUiwKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1i
ZXIpKTsKLSAgICAgICAgfQorICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgZ2VuLnN0
dWJJbmZvKCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihKU1ZhbHVlOjpDZWxs
VGFnKSwgYmFzZVBheWxvYWRHUFIsCisgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZp
ZXJOdW1iZXIpKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0Lmlz
U2V0KCkpIHsKLSAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUNoZWNrLm1fanVtcCwgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLAotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5
bG9hZEdQUiksIHN0dWJJbmZvLCBiYXNlVGFnR1BST3JOb25lLAotICAgICAgICAgICAgICAgIGJh
c2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrLm1fanVtcCk7Ci0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0KTsKLSAgICAgICAgICAgIHNs
b3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHN0dWJJbmZvLCBiYXNlVGFnR1BST3JOb25l
LAotICAgICAgICAgICAgICAgIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZp
ZXJOdW1iZXIpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBSZWdpc3RlclNldCBjdXJyZW50bHlV
c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVycygpOwotICAgIEFTU0VSVChjdXJyZW50bHlVc2Vk
UmVnaXN0ZXJzLmdldChiYXNlUGF5bG9hZEdQUikpOwotICAgIEFTU0VSVChjdXJyZW50bHlVc2Vk
UmVnaXN0ZXJzLmdldChyZXN1bHRUYWdHUFIpKTsKLSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJl
Z2lzdGVycy5nZXQocmVzdWx0UGF5bG9hZEdQUikpOwotICAgIAotICAgIHN0dWJJbmZvLT5jb2Rl
T3JpZ2luID0gY29kZU9yaWdpbjsKLSAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IHN0YXRp
Y19jYXN0PGludDhfdD4oYmFzZVBheWxvYWRHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1
ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgc3R1Yklu
Zm8tPnBhdGNoLnZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihyZXN1bHRUYWdHUFIp
OwotICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0gY3VycmVudGx5VXNlZFJlZ2lz
dGVyczsKLSAgICBzdHViSW5mby0+cGF0Y2gucmVnaXN0ZXJzRmx1c2hlZCA9IHNwaWxsTW9kZSAh
PSBOZWVkVG9TcGlsbDsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKAotICAgICAgICBQ
cm9wZXJ0eUFjY2Vzc1JlY29yZCgKLSAgICAgICAgICAgIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3Ry
dWN0dXJlQ2hlY2ssIHByb3BlcnR5U3RvcmFnZUxvYWQsCi0gICAgICAgICAgICB0YWdMb2FkV2l0
aFBhdGNoLCBwYXlsb2FkTG9hZFdpdGhQYXRjaCwgc2xvd1BhdGguZ2V0KCksIGRvbmVMYWJlbCwK
LSAgICAgICAgICAgIHN0dWJJbmZvKSk7CisgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZVRhZ0dQUk9yTm9uZSwKKyAgICAgICAgICAgIGJhc2VQYXls
b2FkR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICB9CisgICAgCisg
ICAgbV9qaXQuYWRkR2V0QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2Fk
R1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFs
dWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRL
aW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogewotICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRTdHViSW5m
bygpOworICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVl
VXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7CisgICAgCisg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBj
b2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNl
UGF5bG9hZEdQUiksCisgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIpLCBzY3JhdGNoR1BSLCBmYWxzZSwKKyAgICAgICAgbV9qaXQuc3RyaWN0TW9kZUZvcihj
b2RlT3JpZ2luKSwgcHV0S2luZCk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0
ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgc3Ry
dWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKKyAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKKyAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogCi0gICAgd3JpdGVCYXJyaWVyKGJhc2VQYXlsb2FkR1BS
LCB2YWx1ZVRhZ0dQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
Y3JhdGNoR1BSKTsKKyAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xv
d1BhdGhDYWxsKAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCksIE5vUmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVUYWdHUFIsCisgICAgICAgIHZhbHVl
UGF5bG9hZEdQUiwgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJl
cikpOwogCi0gICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3Rv
cmFnZUxvYWQgPSBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZVBheWxvYWRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiB0YWdTdG9yZVdpdGhQYXRjaCA9IG1faml0
LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpKTsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgcGF5bG9hZFN0
b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVQ
YXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0KLSAgICBKSVRD
b21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLSAgICBWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJIG9wdGltaXplZENhbGw7Ci0gICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikpIHsKLSAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGly
ZWN0KQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwot
ICAgIH0KLSAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOwotICAgIGlmICgh
c2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkgewotICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKLSAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNrLm1fanVtcCwgdGhpcywgb3B0aW1pemVkQ2Fs
bCwgTm9SZXN1bHQsIHN0dWJJbmZvLCB2YWx1ZVRhZ0dQUiwKLSAgICAgICAgICAgIHZhbHVlUGF5
bG9hZEdQUiwgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc3RydWN0dXJlQ2hlY2subV9qdW1wKTsKLSAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7Ci0gICAgICAgIHNsb3dQYXRoID0g
c2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcHRpbWl6ZWRDYWxs
LCBOb1Jlc3VsdCwgc3R1YkluZm8sIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsCi0gICAg
ICAgICAgICBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7
Ci0gICAgfQotICAgIFJlZ2lzdGVyU2V0IGN1cnJlbnRseVVzZWRSZWdpc3RlcnMgPSB1c2VkUmVn
aXN0ZXJzKCk7Ci0gICAgY3VycmVudGx5VXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoR1BSKTsK
LSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQoYmFzZVBheWxvYWRHUFIpKTsK
LSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQodmFsdWVUYWdHUFIpKTsKLSAg
ICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQodmFsdWVQYXlsb2FkR1BSKSk7Ci0K
LSAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47Ci0gICAgc3R1YkluZm8tPnBh
dGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VQYXlsb2FkR1BSKTsKLSAgICBz
dHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlUGF5bG9h
ZEdQUik7Ci0gICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8aW50
OF90Pih2YWx1ZVRhZ0dQUik7Ci0gICAgc3R1YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMgPSBj
dXJyZW50bHlVc2VkUmVnaXN0ZXJzOwotICAgIHN0dWJJbmZvLT5wYXRjaC5yZWdpc3RlcnNGbHVz
aGVkID0gZmFsc2U7Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKLSAgICAgICAgUHJv
cGVydHlBY2Nlc3NSZWNvcmQoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVj
dHVyZUNoZWNrLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLAotICAgICAgICAgICAgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbENvbXBhY3QodGFnU3RvcmVXaXRoUGF0Y2gubGFiZWwoKSksCi0gICAgICAgICAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChwYXlsb2FkU3RvcmVXaXRoUGF0Y2gubGFi
ZWwoKSksCi0gICAgICAgICAgICBzbG93UGF0aC5nZXQoKSwgZG9uZUxhYmVsLCBzdHViSW5mbykp
OworICAgIG1faml0LmFkZFB1dEJ5SWQoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CiAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNTc2NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTAzICsyMDksNDMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVVSW50MwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRHZXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyBy
ZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQogewotICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRTdHViSW5mbygp
OworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3BpbGxNb2RlICE9IE5lZWRUb1NwaWxsKTsK
KyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgSklUQ29tcGlsZXI6OlBhdGNo
YWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSkp
OwotICAgIAotICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0
b3JhZ2VMb2FkID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdpdGhQYXRjaCA9IG1f
aml0LmxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okxh
YmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBPd25QdHI8U2xvd1BhdGhHZW5l
cmF0b3I+IHNsb3dQYXRoOwotICAgIGlmICghc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkgewotICAg
ICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHN0cnVjdHVyZUNoZWNr
Lm1fanVtcCwgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIsIHN0dWJJ
bmZvLCBiYXNlR1BSLAotICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVy
KSwgc3BpbGxNb2RlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrLm1f
anVtcCk7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBpZiAoc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRh
cmdldCk7Ci0gICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdEdQUiwgc3R1Yklu
Zm8sIGJhc2VHUFIsCi0gICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIp
LCBzcGlsbE1vZGUpOwotICAgIH0KLSAgICBSZWdpc3RlclNldCBjdXJyZW50bHlVc2VkUmVnaXN0
ZXJzID0gdXNlZFJlZ2lzdGVycygpOwotICAgIEFTU0VSVChjdXJyZW50bHlVc2VkUmVnaXN0ZXJz
LmdldChiYXNlR1BSKSk7Ci0gICAgQVNTRVJUKGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0KHJl
c3VsdEdQUikpOwotICAgIAotICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsK
LSAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQ
Uik7Ci0gICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90Pihy
ZXN1bHRHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0gY3VycmVudGx5
VXNlZFJlZ2lzdGVyczsKLSAgICBzdHViSW5mby0+cGF0Y2gucmVnaXN0ZXJzRmx1c2hlZCA9IHNw
aWxsTW9kZSAhPSBOZWVkVG9TcGlsbDsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKAot
ICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKLSAgICAgICAgICAgIHN0cnVjdHVyZVRvQ29t
cGFyZSwgc3RydWN0dXJlQ2hlY2ssIHByb3BlcnR5U3RvcmFnZUxvYWQsIGxvYWRXaXRoUGF0Y2gs
Ci0gICAgICAgICAgICBzbG93UGF0aC5nZXQoKSwgZG9uZUxhYmVsLCBzdHViSW5mbykpOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAKKyAgICBPd25QdHI8
U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwKKyAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVy
KSwgc3BpbGxNb2RlKTsKKyAgICAKKyAgICBtX2ppdC5hZGRHZXRCeUlkKGdlbiwgc2xvd1BhdGgu
Z2V0KCkpOwogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5k
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKLSAgICAK
LSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBK
SVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0LnBhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0Nv
bXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHVudXNlZFBvaW50ZXIpKSk7Ci0KICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIs
IHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7CiAK
LSAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9h
ZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTY0
V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgMCkpOwotCi0gICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0
LmxhYmVsKCk7Ci0gICAgCi0gICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcHRpbWl6ZWRDYWxs
OwotICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
KSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAg
ICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RP
cHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9Ci0gICAgT3duUHRyPFNsb3dQYXRo
R2VuZXJhdG9yPiBzbG93UGF0aDsKLSAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpIHsK
LSAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVD
aGVjay5tX2p1bXAsIHRoaXMsIG9wdGltaXplZENhbGwsIE5vUmVzdWx0LCBzdHViSW5mbywgdmFs
dWVHUFIsIGJhc2VHUFIsCi0gICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1i
ZXIpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrLm1fanVtcCk7Cisg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBj
b2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAorICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGZhbHNlLCBtX2ppdC5zdHJpY3RN
b2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCht
X2ppdCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBp
ZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93
UGF0aFRhcmdldCk7Ci0gICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBOb1Jlc3VsdCwgc3R1YkluZm8sIHZh
bHVlR1BSLCBiYXNlR1BSLAotICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVt
YmVyKSk7Ci0gICAgfQotICAgIFJlZ2lzdGVyU2V0IGN1cnJlbnRseVVzZWRSZWdpc3RlcnMgPSB1
c2VkUmVnaXN0ZXJzKCk7Ci0gICAgY3VycmVudGx5VXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNo
R1BSKTsKLSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQoYmFzZUdQUikpOwot
ICAgIEFTU0VSVChjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmdldCh2YWx1ZUdQUikpOwotICAgIAot
ICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKLSAgICBzdHViSW5mby0+cGF0
Y2guYmFzZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUik7Ci0gICAgc3R1YkluZm8t
PnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZUdQUik7Ci0gICAgc3R1
YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMgPSBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzOwotICAg
IHN0dWJJbmZvLT5wYXRjaC5yZWdpc3RlcnNGbHVzaGVkID0gZmFsc2U7Ci0gICAgCi0gICAgbV9q
aXQuYWRkUHJvcGVydHlBY2Nlc3MoCi0gICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKAotICAg
ICAgICAgICAgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywgcHJvcGVydHlTdG9y
YWdlTG9hZCwKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHN0b3Jl
V2l0aFBhdGNoLmxhYmVsKCkpLCBzbG93UGF0aC5nZXQoKSwgZG9uZUxhYmVsLAotICAgICAgICAg
ICAgc3R1YkluZm8pKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgCisgICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBO
b1Jlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLAorICAgICAgICBpZGVu
dGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKKworICAgIG1faml0LmFkZFB1dEJ5SWQoZ2Vu
LCBzbG93UGF0aC5nZXQoKSk7CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGgucmVs
ZWFzZSgpKTsKIH0KIApAQCAtMjk2Miw5ICsyOTAyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdw
cigpOwogICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
bV9qaXQuc3RyaWN0TW9kZUZvcihub2RlLT5jb2RlT3JpZ2luKSA/IG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3QsIGFyZzFHUFIs
IGFyZzJHUFIsIGFyZzNHUFIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQu
aXNTdHJpY3RNb2RlRm9yKG5vZGUtPmNvZGVPcmlnaW4pID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgYXJnMUdQUiwgYXJn
MkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihtX2ppdC5zdHJpY3RNb2RlRm9yKG5vZGUtPmNvZGVPcmlnaW4pID8gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgYXJnMUdQUiwgYXJn
MkdQUiwgYXJnM0dQUik7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5pc1N0
cmljdE1vZGVGb3Iobm9kZS0+Y29kZU9yaWdpbikgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICBh
bHJlYWR5SGFuZGxlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE1NzY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OSwxMyArMzU5
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3IoY29kZU9yaWdpbik7CiAgICAgfQogICAgIAotICAgIGJvb2wgc3RyaWN0TW9kZUZvcihDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCisgICAgYm9vbCBpc1N0cmljdE1vZGVGb3IoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKICAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAg
ICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKICAgICB9CiAgICAg
CisgICAgRUNNQU1vZGUgc3RyaWN0TW9kZUZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAg
eworICAgICAgICByZXR1cm4gaXNTdHJpY3RNb2RlRm9yKGNvZGVPcmlnaW4pID8gU3RyaWN0TW9k
ZSA6IE5vdFN0cmljdE1vZGU7CisgICAgfQorICAgIAogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pOwogICAgIAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNTc2NTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biBtX2dwciA9PSBJbnZhbGlkR1BSUmVnOyB9CiAgICAgCiAgICAgR1BSUmVnIGdwcigpIGNvbnN0
IHsgcmV0dXJuIG1fZ3ByOyB9CisgICAgR1BSUmVnIHRhZ0dQUigpIGNvbnN0IHsgcmV0dXJuIElu
dmFsaWRHUFJSZWc7IH0KICAgICBHUFJSZWcgcGF5bG9hZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Z3ByOyB9CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw4IEBAIEpJVDo6SklUKFZNKiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiAgICAgLCBtX2ludGVycHJldGVyKHZtLT5pbnRlcnByZXRlcikKICAgICAs
IG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+bnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSA6
IDApCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KCh1bnNpZ25lZCktMSkKLSAgICAsIG1fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KFVJTlRfTUFYKQorICAgICwgbV9nZXRCeUlkSW5kZXgo
VUlOVF9NQVgpCisgICAgLCBtX3B1dEJ5SWRJbmRleChVSU5UX01BWCkKICAgICAsIG1fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4KFVJTlRfTUFYKQogICAgICwgbV9jYWxsTGlua0luZm9JbmRleChVSU5U
X01BWCkKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMzU5LDcgKzM2MCw4IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiB7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAKLSAgICBt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7CisgICAgbV9nZXRCeUlkSW5kZXgg
PSAwOworICAgIG1fcHV0QnlJZEluZGV4ID0gMDsKICAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC00NzUsNyArNDc3
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCAwKTsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FTU0VSVChtX3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRp
b25JbmZvLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlkSW5kZXggPT0gbV9n
ZXRCeUlkcy5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1f
cHV0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4
ID09IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCiAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzID09IG1fY29kZUJsb2NrLT5udW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CkBAIC00ODcsNjAg
KzQ5MCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbzo6Y29weVRv
U3R1YkluZm8oTGlua0J1ZmZlciAmbGlua0J1ZmZlcikKLXsKLSAgICBBU1NFUlQoYnl0ZWNvZGVJ
bmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgIHN0dWJJ
bmZvLT5jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KTsKLSAgICBzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxSZXR1cm5M
b2NhdGlvbik7Ci0KLSAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9IE1h
Y3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlv
bk9mKHN0cnVjdHVyZVRvQ29tcGFyZSksIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24pOwot
ICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RydWN0dXJlQ2hlY2spKTsKLSAgICAKLSAgICBzdHVi
SW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGNvbGRQYXRoQmVnaW4pKTsKLSAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFD
YWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHVi
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkpOwot
ICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvcGVydHlTdG9yYWdlTG9hZCkpOwotICAgIAotICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gR1BSSW5mbzo6cmVnVDA7Ci0KLSAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzOwotICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1Qw
KTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpIC8vIEpTVkFMVUUgY2FzZXMKLSAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgIGNhc2UgR2V0QnlJZDoKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihn
ZXREaXNwbGFjZW1lbnRMYWJlbCkpOwotICAgICAgICBzdHViSW5mby0+cGF0Y2gudmFsdWVHUFIg
PSBHUFJJbmZvOjpyZWdUMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUlkOgotICAg
ICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNlbWVudExhYmVsKSk7Ci0gICAgICAg
IHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICB1c2Vk
UmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNl
bHNlIC8vIEpTVkFMVUUgY2FzZXMKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgR2V0
QnlJZDoKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUg
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHN0dWJJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1lbnRMYWJl
bDIpKTsKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50
TGFiZWwxKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IEdQUkluZm86OnJl
Z1QwOwotICAgICAgICBzdHViSW5mby0+cGF0Y2gudmFsdWVUYWdHUFIgPSBHUFJJbmZvOjpyZWdU
MTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFB1dEJ5SWQ6Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNh
bGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cHV0RGlzcGxhY2VtZW50TGFiZWwyKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNh
bGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHB1dERpc3BsYWNlbWVudExhYmVsMSkpOwotICAgICAgICBzdHViSW5mby0+cGF0Y2gudmFs
dWVHUFIgPSBHUFJJbmZvOjpyZWdUMjsKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlVGFn
R1BSID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86
OnJlZ1QyKTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmVnVDMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLy8gSlNWQUxVRSBjYXNlcwotICAgIAotICAgIHN0
dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKLSAgICBzdHViSW5m
by0+cGF0Y2gucmVnaXN0ZXJzRmx1c2hlZCA9IHRydWU7Ci19Ci0KIENvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKQEAgLTczMyw4ICs2ODIsMTEgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhpdGVyLT5mcm9tLCBGdW5jdGlvblB0cihpdGVyLT50bykpOwogICAgIH0KIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUo
KTsgKytpKQotICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlU
b1N0dWJJbmZvKHBhdGNoQnVmZmVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dldEJ5SWRz
LnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9nZXRCeUlkc1tpXS5maW5hbGl6ZShwYXRjaEJ1ZmZl
cik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wdXRCeUlkcy5zaXplKCk7IGktLTspCisgICAg
ICAgIG1fcHV0QnlJZHNbaV0uZmluYWxpemUocGF0Y2hCdWZmZXIpOworCiAgICAgbV9jb2RlQmxv
Y2stPnNldE51bWJlck9mQnlWYWxJbmZvcyhtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcCA9IENvZGVM
b2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W2ldLmJhZFR5cGVKdW1wKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDE1NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCisjaW5j
bHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCkBA
IC0xNDcsMTExICsxNDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH07CiAK
LSAgICBlbnVtIFByb3BlcnR5U3R1YkdldEJ5SWRfVCB7IFByb3BlcnR5U3R1YkdldEJ5SWQgfTsK
LSAgICBlbnVtIFByb3BlcnR5U3R1YlB1dEJ5SWRfVCB7IFByb3BlcnR5U3R1YlB1dEJ5SWQgfTsK
LQotICAgIHN0cnVjdCBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8gewotICAgICAgICBlbnVt
IFR5cGUgeyBHZXRCeUlkLCBQdXRCeUlkIH0gbV90eXBlOwotICAgIAotICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJu
TG9jYXRpb247Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBob3RQYXRoQmVnaW47Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjazsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFn
ZUxvYWQ7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbENvbXBhY3QgZ2V0RGlzcGxhY2VtZW50TGFiZWw7Ci0jZWxzZQotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDE7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsMjsK
LSNlbmRpZgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW47Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIHB1dERpc3BsYWNlbWVudExhYmVsOwot
I2Vsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIHB1dERpc3BsYWNlbWVu
dExhYmVsMTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIHB1dERpc3BsYWNl
bWVudExhYmVsMjsKLSNlbmRpZgotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm87
Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9u
SW5mbygpCi0gICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICB7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0KLSAgICAg
ICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAgICAgUHJvcGVydHlTdHVi
R2V0QnlJZF9ULCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmUsCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjaywKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
Q29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCwKLSNlbHNlCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbDEsCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbDIsCi0jZW5k
aWYKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lKQotICAgICAgICAgICAg
OiBtX3R5cGUoR2V0QnlJZCkKLSAgICAgICAgICAgICwgYnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KQotICAgICAgICAgICAgLCBzdHJ1Y3R1cmVUb0NvbXBhcmUoc3RydWN0dXJlVG9Db21wYXJl
KQotICAgICAgICAgICAgLCBzdHJ1Y3R1cmVDaGVjayhzdHJ1Y3R1cmVDaGVjaykKLSAgICAgICAg
ICAgICwgcHJvcGVydHlTdG9yYWdlTG9hZChwcm9wZXJ0eVN0b3JhZ2VMb2FkKQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNlbWVu
dExhYmVsKQotI2Vsc2UKLSAgICAgICAgICAgICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwxKGRpc3Bs
YWNlbWVudExhYmVsMSkKLSAgICAgICAgICAgICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwyKGRpc3Bs
YWNlbWVudExhYmVsMikKLSNlbmRpZgotICAgICAgICAgICAgLCBkb25lKGRvbmUpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKLSAg
ICAgICAgICAgIFByb3BlcnR5U3R1YlB1dEJ5SWRfVCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21w
YXJlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJl
Q2hlY2ssCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwg
cHJvcGVydHlTdG9yYWdlTG9hZCwKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsLAotI2Vsc2UKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDEsCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwy
LAotI2VuZGlmCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSkKLSAgICAg
ICAgICAgIDogbV90eXBlKFB1dEJ5SWQpCi0gICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKLSAgICAgICAgICAgICwgc3RydWN0dXJlVG9Db21wYXJlKHN0cnVjdHVyZVRv
Q29tcGFyZSkKLSAgICAgICAgICAgICwgc3RydWN0dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCi0g
ICAgICAgICAgICAsIHByb3BlcnR5U3RvcmFnZUxvYWQocHJvcGVydHlTdG9yYWdlTG9hZCkKLSAg
ICAgICAgICAgICwgZG9uZShkb25lKQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAs
IHB1dERpc3BsYWNlbWVudExhYmVsKGRpc3BsYWNlbWVudExhYmVsKQotI2Vsc2UKLSAgICAgICAg
ICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwxKGRpc3BsYWNlbWVudExhYmVsMSkKLSAgICAgICAg
ICAgICwgcHV0RGlzcGxhY2VtZW50TGFiZWwyKGRpc3BsYWNlbWVudExhYmVsMikKLSNlbmRpZgot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNsb3dDYXNlSW5mbyhNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgY29sZFBhdGhCZWdpbiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwg
U3RydWN0dXJlU3R1YkluZm8qIGluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICB0aGlzLT5jb2xkUGF0aEJlZ2luID0gY29s
ZFBhdGhCZWdpbjsKLSAgICAgICAgICAgIHN0dWJJbmZvID0gaW5mbzsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgc2xvd0Nhc2VJbmZvKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGNvcHlUb1N0dWJJbmZvKExpbmtCdWZmZXIgJnBhdGNoQnVmZmVyKTsK
LSAgICB9OwotCiAgICAgc3RydWN0IEJ5VmFsQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgQnlW
YWxDb21waWxhdGlvbkluZm8oKSB7IH0KICAgICAgICAgCkBAIC0yODcsNyArMTgzLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTdHViQ2FsbDsKLSAgICAgICAgZnJpZW5kIHN0cnVjdCBQcm9wZXJ0eVN0dWJDb21waWxh
dGlvbkluZm87CiAKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXA7CiAgICAgICAg
IHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDsKQEAgLTkwMiw3ICs3OTcsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAg
ICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKLSAgICAgICAgVmVjdG9yPFByb3BlcnR5U3R1YkNv
bXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbzsKKyAgICAgICAg
VmVjdG9yPEpJVEdldEJ5SWRHZW5lcmF0b3I+IG1fZ2V0QnlJZHM7CisgICAgICAgIFZlY3RvcjxK
SVRQdXRCeUlkR2VuZXJhdG9yPiBtX3B1dEJ5SWRzOwogICAgICAgICBWZWN0b3I8QnlWYWxDb21w
aWxhdGlvbkluZm8+IG1fYnlWYWxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvOwogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwpAQCAtOTE0LDcgKzgx
MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNr
czsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2s7CiAKLSAgICAgICAgdW5zaWduZWQgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7
CisgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlJZEluZGV4OworICAgICAgICB1bnNpZ25lZCBtX3B1
dEJ5SWRJbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7CiAg
ICAgICAgIHVuc2lnbmVkIG1fY2FsbExpbmtJbmZvSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoSklUKQor
CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAg
IG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZv
LT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKK30KKworSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgYm9vbCByZWdpc3RlcnNGbHVzaGVkKQorICAgIDogSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luKQorICAgICwgbV9iYXNl
KGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAgIG1fc3R1YkluZm8tPnBhdGNoLnJl
Z2lzdGVyc0ZsdXNoZWQgPSByZWdpc3RlcnNGbHVzaGVkOworICAgIG1fc3R1YkluZm8tPnBhdGNo
LnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOworICAgIAorICAgIC8vIFRoaXMgaXMgYSBj
b252ZW5pZW5jZSAtIGluIGNhc2VzIHdoZXJlIHRoZSBvbmx5IHJlZ2lzdGVycyB5b3UncmUgdXNp
bmcgYXJlIGJhc2UvdmFsdWUsCisgICAgLy8gaXQgYWxsb3dzIHlvdSB0byBwYXNzIFJlZ2lzdGVy
U2V0KCkgYXMgdGhlIHVzZWRSZWdpc3RlcnMgYXJndW1lbnQuCisgICAgbV9zdHViSW5mby0+cGF0
Y2gudXNlZFJlZ2lzdGVycy5zZXQoYmFzZSk7CisgICAgbV9zdHViSW5mby0+cGF0Y2gudXNlZFJl
Z2lzdGVycy5zZXQodmFsdWUpOworICAgIAorICAgIG1fc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2UucGF5bG9hZEdQUigpKTsKKyAgICBtX3N0dWJJbmZv
LT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUucGF5bG9hZEdQUigp
KTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIG1fc3R1YkluZm8tPnBhdGNoLnZhbHVlVGFn
R1BSID0gc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZS50YWdHUFIoKSk7CisjZW5kaWYKK30KKwor
dm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQor
eworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fY2FsbCk7CisgICAgbV9zdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0g
Y2FsbFJldHVybkxvY2F0aW9uOworICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2hlY2tJbW1U
b0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRp
b24pOworICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3N0cnVjdHVyZUNoZWNrKSk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0
b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAg
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkp
OworI2Vsc2UKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3Jl
ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV90YWdMb2FkT3JTdG9yZSkp
OworICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2FsbFJl
dHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOworI2Vu
ZGlmCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2Nh
dGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOworICAgIG1fc3R1
YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fZG9uZSkpOworICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU3Rv
cmFnZUxvYWQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAg
ICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5
U3RvcmFnZUxvYWQpKTsKK30KKwordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoQ2hlY2tzKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBidXR0ZXJmbHkpCit7CisgICAg
bV9zdHJ1Y3R1cmVDaGVjayA9IGppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9iYXNlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisg
ICAgICAgIG1fc3RydWN0dXJlSW1tLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSkpOworICAgIAorICAgIG1fcHJvcGVy
dHlTdG9yYWdlTG9hZCA9IGppdC5jb252ZXJ0aWJsZUxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5wYXlsb2FkR1BSKCksIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIGJ1dHRlcmZseSk7Cit9CisKK3ZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIGdlbmVyYXRlRmFzdFBh
dGhDaGVja3Moaml0LCBtX3ZhbHVlLnBheWxvYWRHUFIoKSk7CisgICAgCisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBtX2xvYWRPclN0b3JlID0gaml0LmxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09m
ZnNldFBhdGNoKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3ZhbHVlLnBheWxv
YWRHUFIoKSwgMCksIG1fdmFsdWUucGF5bG9hZEdQUigpKS5sYWJlbCgpOworI2Vsc2UKKyAgICBt
X3RhZ0xvYWRPclN0b3JlID0gaml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNo
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3ZhbHVlLnBheWxvYWRHUFIoKSwg
MCksIG1fdmFsdWUudGFnR1BSKCkpLmxhYmVsKCk7CisgICAgbV9sb2FkT3JTdG9yZSA9IGppdC5s
b2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MobV92YWx1ZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVlLnBheWxvYWRHUFIo
KSkubGFiZWwoKTsKKyNlbmRpZgorICAgIAorICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQor
CitKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAorICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLAorICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc2NyYXRjaCwgYm9vbCByZWdpc3RlcnNGbHVzaGVkLAorICAgIEVDTUFNb2RlIGVjbWFN
b2RlLCBQdXRLaW5kIHB1dEtpbmQpCisgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywg
Y29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHJlZ2lzdGVyc0ZsdXNoZWQp
CisgICAgLCBtX3NjcmF0Y2goc2NyYXRjaCkKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCisg
ICAgLCBtX3B1dEtpbmQocHV0S2luZCkKK3sKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC51c2VkUmVn
aXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOworfQorCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6Omdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3sKKyAgICBnZW5lcmF0ZUZhc3RQ
YXRoQ2hlY2tzKGppdCwgbV9zY3JhdGNoKTsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IG1fbG9hZE9yU3RvcmUgPSBqaXQuc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAg
ICAgIG1fdmFsdWUucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3NjcmF0
Y2gsIDApKS5sYWJlbCgpOworI2Vsc2UKKyAgICBtX3RhZ0xvYWRPclN0b3JlID0gaml0LnN0b3Jl
MzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVlLnRhZ0dQUigpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3NjcmF0Y2gsIDApKS5sYWJlbCgpOworICAgIG1fbG9hZE9y
U3RvcmUgPSBqaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIG1fdmFs
dWUucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3NjcmF0Y2gsIDApKS5s
YWJlbCgpOworI2VuZGlmCisgICAgCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKK1Zf
SklUT3BlcmF0aW9uX0VTc2lKSkkgSklUUHV0QnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlv
bigpCit7CisgICAgaWYgKG1fZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSkgeworICAgICAgICBpZiAo
bV9wdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemU7CisgICAgfQorICAgIGlmIChtX3B1dEtpbmQgPT0gRGlyZWN0KQorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
X2gKKyNkZWZpbmUgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3JfaAorCisjaWYgRU5BQkxFKEpJVCkK
KworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IgeworcHJvdGVjdGVkOgorICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CisgICAg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbik7CisgICAgCitw
dWJsaWM6CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkgY29uc3QgeyByZXR1cm4g
bV9zdHViSW5mbzsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKK307CisKK2NsYXNzIEpJVEJ5SWRH
ZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworcHJvdGVjdGVkOgor
ICAgIEpJVEJ5SWRHZW5lcmF0b3IoKSB7IH0KKworICAgIEpJVEJ5SWRHZW5lcmF0b3IoCisgICAg
ICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCisgICAgICAgIGJvb2wgcmVnaXN0ZXJzRmx1c2hl
ZCk7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCByZXBvcnRTbG93UGF0aENhbGwoTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCisg
ICAgeworICAgICAgICBtX3Nsb3dQYXRoQmVnaW4gPSBzbG93UGF0aEJlZ2luOworICAgICAgICBt
X2NhbGwgPSBjYWxsOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
UGF0aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrLm1fanVtcDsgfQorCisg
ICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKE1hY3JvQXNzZW1ibGVyJiwgR1BSUmVnIGJ1dHRlcmZs
eSk7CisgICAgCisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFs
dWU7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0cnVjdHVyZUlt
bTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3N0cnVjdHVyZUNoZWNrOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBtX3Byb3BlcnR5U3RvcmFn
ZUxvYWQ7CisgICAgQXNzZW1ibGVyTGFiZWwgbV9sb2FkT3JTdG9yZTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIEFzc2VtYmxlckxhYmVsIG1fdGFnTG9hZE9yU3RvcmU7CisjZW5kaWYKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3Nsb3dQYXRoQmVnaW47CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOworfTsK
KworY2xhc3MgSklUR2V0QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsK
K3B1YmxpYzoKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKCkgeyB9CisKKyAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCkKKyAg
ICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgdXNlZFJlZ2lz
dGVycywgYmFzZSwgdmFsdWUsIHJlZ2lzdGVyc0ZsdXNoZWQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKK307CisKK2NsYXNz
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CitwdWJsaWM6
CisgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpIHsgfQorCisgICAgSklUUHV0QnlJZEdlbmVyYXRv
cigKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgYm9vbCByZWdpc3RlcnNGbHVz
aGVkLAorICAgICAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKTsKKyAgICAK
KyAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICAKKyAgICBW
X0pJVE9wZXJhdGlvbl9FU3NpSkpJIHNsb3dQYXRoRnVuY3Rpb24oKTsKKworcHJpdmF0ZToKKyAg
ICBHUFJSZWcgbV9zY3JhdGNoOworICAgIEVDTUFNb2RlIG1fZWNtYU1vZGU7CisgICAgUHV0S2lu
ZCBtX3B1dEtpbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCisKKyNlbmRpZiAvLyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDQwICs0NzYsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKLSAgICBjb21waWxlR2V0QnlJZEhvdFBhdGgoaWRlbnQpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocmVnVDQpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2dl
dF9ieV9pZCksIGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KIAotdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKLXsKICAgICBpZiAoKmlkZW50ID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcmVnVDIpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRl
eChyZWdUMiwgcmVnVDMsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIH0KIAotICAgIERhdGFMYWJl
bFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVj
ayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUs
Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9p
bnRlcikpKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7Ci0gICAgCi0g
ICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIGNv
bnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgCi0gICAgRGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoVGFn
ID0gbG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIEFkZHJlc3Mo
cmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMSk7Ci0gICAgRGF0YUxhYmVs
Q29tcGFjdCBsb2FkV2l0aFBhdGNoUGF5bG9hZCA9IGxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09m
ZnNldFBhdGNoKAotICAgICAgICBBZGRyZXNzKHJlZ1QwLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zm
c2V0KSwgcmVnVDApOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAg
IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKAotICAgICAgICBQcm9wZXJ0
eVN0dWJDb21waWxhdGlvbkluZm8oCi0gICAgICAgICAgICBQcm9wZXJ0eVN0dWJHZXRCeUlkLCBt
X2J5dGVjb2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLAotICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlTG9hZCwgbG9hZFdpdGhQYXRjaFBheWxvYWQsIGxvYWRX
aXRoUGF0Y2hUYWcsIGRvbmUpKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0
KCksCisgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHRydWUpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHJlZ1Q0KTsKKyAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BD
T0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTUyMSwxMyArNTAz
LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKKyAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAg
ICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1
YkluZm8oKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxl
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIHN0dWJJbmZvLCByZWdUMSwg
cmVnVDAsIGlkZW50LT5pbXBsKCkpOwotCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29s
ZFBhdGhCZWdpbiwgY2FsbCwgc3R1YkluZm8pOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oV2l0aFByb2ZpbGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisgICAgCisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01
NDMsMzEgKzUyNywxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24q
CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAg
ICAKLSAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwotICAgIFBhdGNoYWJsZUp1
bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAg
IE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0dXJlVG9Db21wYXJlLAotICAgICAgICBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJl
Q2hlY2spOwotICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdUMSwg
cmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNj
ZXNzKTsKLQotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQot
ICAgICAgICBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDEpOwotICAgIAotICAgIC8vIFBheWxvYWQuCi0gICAgRGF0YUxh
YmVsMzIgc3RvcmVXaXRoUGF0Y2gxID0KLSAgICAgICAgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2gocmVnVDIsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsK
LSAgICAvLyBUYWcuCi0gICAgRGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2gyID0KLSAgICAgICAg
c3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDMsIEFkZHJlc3MocmVnVDEsIHBhdGNo
UHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
LSAgICAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZCgKLSAgICAg
ICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAgICAgUHJvcGVydHlTdHVi
UHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVD
aGVjaywKLSAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUxvYWQsIHN0b3JlV2l0aFBhdGNoMSwg
c3RvcmVXaXRoUGF0Y2gyLCBkb25lKSk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVn
VDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MpOworICAgIAorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJT
ZXQoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgcmVnVDEsIHRydWUsCisgICAgICAgIG1fY29kZUJsb2NrLT5lY21h
TW9kZSgpLCBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOworICAgIAorICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgIAorICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTU4MSwyNSArNTUxLDEyIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0
aW1pemVkQ2FsbDsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAg
ICAgIGlmIChkaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcHRp
bWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChkaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwot
ICAgIH0KKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJ
ZEluZGV4KytdOwogICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRTdHViSW5mbygpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCisg
ICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMywgcmVn
VDIsIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxsLCBzdHViSW5mbywgcmVnVDMsIHJlZ1QyLCByZWdU
MSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOwotCi0gICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9m
IHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9ybWF0aW9u
LgotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNhbGwsIHN0dWJJ
bmZvKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQogCiAvLyBDb21waWxlIGEgc3RvcmUgaW50byBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdl
LiAgTWF5IG92ZXJ3cml0ZSBiYXNlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1NzY2MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MTQsMTggKzUxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlv
bioKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGNvbXBpbGVHZXRCeUlkSG90UGF0aChi
YXNlVlJlZywgaWRlbnQpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocmVnVDQpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjpjb21w
aWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2VWUmVnLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCkK
LXsKLSAgICAvLyBBcyBmb3IgcHV0X2J5X2lkLCBnZXRfYnlfaWQgcmVxdWlyZXMgdGhlIG9mZnNl
dCBvZiB0aGUgU3RydWN0dXJlIGFuZCB0aGUgb2Zmc2V0IG9mIHRoZSBhY2Nlc3MgdG8gYmUgcGF0
Y2hlZC4KLSAgICAvLyBBZGRpdGlvbmFsbHksIGZvciBnZXRfYnlfaWQgd2UgbmVlZCBwYXRjaCB0
aGUgb2Zmc2V0IG9mIHRoZSBicmFuY2ggdG8gdGhlIHNsb3cgY2FzZSAod2UgcGF0Y2ggdGhpcyB0
byBqdW1wCi0gICAgLy8gdG8gYXJyYXktbGVuZ3RoIC8gcHJvdG90eXBlIGFjY2VzcyB0cmFucG9s
aW5lcywgYW5kIGZpbmFsbHkgd2UgYWxzbyB0aGUgdGhlIHByb3BlcnR5LW1hcCBhY2Nlc3Mgb2Zm
c2V0IGFzIGEgbGFiZWwKLSAgICAvLyB0byBqdW1wIGJhY2sgdG8gaWYgb25lIG9mIHRoZXNlIHRy
YW1wb2xpZXMgZmluZHMgYSBtYXRjaC4KLQorICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewpAQCAtNTMz
LDI1ICs1MjIsMTUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZQog
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChyZWdUMSwgcmVn
VDIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIH0KIAotICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1
cmVUb0NvbXBhcmU7Ci0gICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsCi0gICAgICAgIFRy
dXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKLSAg
ICAKLSAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7Ci0gICAgCi0gICAgQ29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIGNvbnZlcnRpYmxlTG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgCi0gICAgRGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbG9hZDY0V2l0aENv
bXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCi0gICAgICAgIEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0
QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVs
KCk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCi0g
ICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygKLSAgICAgICAgICAgIFByb3BlcnR5
U3R1YkdldEJ5SWQsIG1fYnl0ZWNvZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0
dXJlQ2hlY2ssCi0gICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBsb2FkV2l0aFBhdGNo
LCBkb25lKSk7CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldCgpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgdHJ1ZSk7CisgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUocmVnVDQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTU2MywxOSArNTQyLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1
Y3QKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Cisg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+
YWRkU3R1YkluZm8oKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxlLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIHN0dWJJbmZvLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihXaXRoUHJvZmlsZSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5p
bXBsKCkpOwogCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29sZFBhdGhCZWdpbiwgY2Fs
bCwgc3R1YkluZm8pOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhd
LnUub3BlcmFuZDsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQpAQCAtNTg1
LDYwICs1NjUsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgog
CiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJhc2Ugb2JqZWN0IGlz
IGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBtYXRjaC4KICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIERhdGFM
YWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVD
aGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBh
cmUsCi0gICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2Vk
UG9pbnRlcikpKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAgICAg
CiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxk
RmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwogCi0gICAg
Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIGNvbnZl
cnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgCi0gICAgRGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPQotICAgICAg
ICBzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgcGF0
Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0
ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlZ1QyLCB0cnVlLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgZGlyZWN0ID8gRGlyZWN0IDog
Tm90RGlyZWN0KTsKICAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZCgKLSAg
ICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAgICAgICAgUHJvcGVydHlT
dHViUHV0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1
cmVDaGVjaywKLSAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUxvYWQsIHN0b3JlV2l0aFBhdGNo
LCBkb25lKSk7CisgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGludCBiYXNlVlJlZyA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKLSAgICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0u
dS5vcGVyYW5kOwogCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZVZSZWcp
OwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhp
cyk7CiAgICAgCi0gICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcHRpbWl6ZWRDYWxsOwotICAg
IGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgaWYgKGRpcmVjdCkK
LSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGRp
cmVjdCkKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGltaXplZENh
bGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgfQotICAgIAotICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygp
OworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5k
ZXgrK107CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHN0
dWJJbmZvLCByZWdUMSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oCisgICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5m
bygpLCByZWdUMSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOwogCi0gICAgLy8gVHJhY2sgdGhlIGxv
Y2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGlu
Zm9ybWF0aW9uLgotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xvd0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNh
bGwsIHN0dWJJbmZvKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQogCiAvLyBDb21waWxlIGEgc3RvcmUgaW50byBhbiBvYmplY3QncyBwcm9wZXJ0
eSBzdG9yYWdlLiAgTWF5IG92ZXJ3cml0ZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1NzY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTMgQEAg
cHVibGljOgogICAgICAgICBzZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBzZXQoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7CisgICAgICAgIGlmIChy
ZWdzLnRhZ0dQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBzZXQocmVncy50YWdH
UFIoKSk7CisgICAgICAgIHNldChyZWdzLnBheWxvYWRHUFIoKSk7CisgICAgfQorICAgIAogICAg
IHZvaWQgc2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214666</attachid>
            <date>2013-10-19 13:28:24 -0700</date>
            <delta_ts>2013-10-19 14:34:39 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>81221</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3Njc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDEzLTEwLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmFzZWxpbmUgSklUIGFuZCBERkcgSUMgY29kZSBnZW5lcmF0aW9uIHNob3VsZCBiZSB1bmlmaWVk
IGFuZCByYXRpb25hbGl6ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMjkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlIHRoZSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciwg
d2hpY2ggdGFrZXMgYSBDb2RlQmxvY2sgYW5kIGEgQ29kZU9yaWdpbiBwbHVzCisgICAgICAgIHNv
bWUgcmVnaXN0ZXIgaW5mbyBhbmQgY3JlYXRlcyBKSVQgaW5saW5lIGNhY2hlcyBmb3IgeW91LiBV
c2VkIHRoaXMgdG8gZXZlbiBmdXJodGVyCisgICAgICAgIHVuaWZ5IHRoZSBiYXNlbGluZSBhbmQg
REZHIElDcy4gSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gdXNlIHRoaXMgZm9yIEZUTCBJQ3MuIEFuZCBt
eSBob3BlCisgICAgICAgIGlzIHRoYXQgd2UnbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIGNhc2Nh
ZGluZyBJQ3M6IGFuIElDIGZvciBzb21lIGluc3RydWN0aW9uIG1heSByZWFsaXplCisgICAgICAg
IHRoYXQgaXQgbmVlZHMgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgZ2V0X2J5X2lkLCBzbyB3aXRo
IHRoaXMgZ2VuZXJhdG9yIGl0IHdpbGwgYmUgYWJsZQorICAgICAgICB0byBjcmVhdGUgYW4gSUMg
ZXZlbiB0aG91Z2ggaXQgd2Fzbid0IGFzc29jaWF0ZWQgd2l0aCBhIGdldF9ieV9pZCBieXRlY29k
ZSBpbnN0cnVjdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29t
cGFjdDo6bGFiZWwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmVjbWFNb2RlKToKKyAgICAgICAgKiBkZmcvREZHSW5saW5lQ2FjaGVX
cmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OklubGluZUNhY2hlV3JhcHBlcjo6
SW5saW5lQ2FjaGVXcmFwcGVyKToKKyAgICAgICAgKiBkZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVy
SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjo6OmZpbmFsaXplKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6YWRkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmFkZFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6aXNTdHJpY3RNb2RlRm9yKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpzdHJpY3RNb2RlRm9yKToKKyAgICAgICAgKiBqaXQvR1BSSW5m
by5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6dGFnR1BSKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJh
dG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6
ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5j
dGlvbik6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6c3R1YkluZm8p
OgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6cmVwb3J0U2xvd1BhdGhDYWxsKToKKyAgICAg
ICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhKdW1wKToKKyAgICAgICAgKEpTQzo6
SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
clNldDo6c2V0KToKKwogMjAxMy0xMC0xOSAgTmFkYXYgUm90ZW0gIDxucm90ZW1AYXBwbGUuY29t
PgogCiAgICAgICAgIERGRyBkb21pbmF0b3JzOiBkb2N1bWVudCBhbmQgcmVuYW1lIHN0dWZmLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU3NjU4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMjYsNiArMjI2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklU
Q29kZS5jcHAKICAgICBqaXQvSklURGlzYXNzZW1ibGVyLmNwcAogICAgIGppdC9KSVRFeGNlcHRp
b25zLmNwcAorICAgIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKICAgICBqaXQvSklU
T3Bjb2Rlcy5jcHAKICAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcAogICAgIGppdC9KSVRPcGVy
YXRpb25zLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDE1NzY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNiArMjgwLDggQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmggXApAQCAtNjMwLDYgKzYzMiw4IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU3NjU4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3OCw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQ29kZS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XEpJVERpc2Fzc2VtYmxlci5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmNwcCIgLz4NCkBAIC03NzUsNiArNzc2
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRDb21waWxhdGlvbkVmZm9y
dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVREaXNhc3NlbWJsZXIu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbldyYXBwZXJzLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbnMuaCIgLz4N
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU3NjU4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw2ICszMzQsMTAgQEAKIAkJMEZCMTA1OEMxNjc1
NDgzMzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTA1ODgxNjc1NDgyRTAwRjhBQjZFIC8qIFByb2Zp
bGVyT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNTg5
MTY3NTQ4MkUwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCAqLzsgfTsKIAkJMEZC
MTA1OEUxNjc1NDgzQTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjEwNThBMTY3NTQ4MkUwMEY4
QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCMTRFMUUxODEyNEFDRTAwOUI2QjREIC8qIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAgKi87IH07CisJCTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZCMTRFMjExODEyNTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTRFMjAxODEyNTcw
QjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAv
KiBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5s
aW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0
NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0
NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVD
N0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTgwLDYgKzE1ODQsMTAg
QEAKIAkJMEZCMTA1ODgxNjc1NDgyRTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9TUkV4aXQuaDsgcGF0aCA9IHBy
b2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkIxMDU4OTE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlck9TUkV4aXRTaXRlLmNwcDsg
cGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkIxMDU4QTE2NzU0ODJFMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0
U2l0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9TUkV4aXRT
aXRlLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjE0RTFEMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQg
LyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0lubGluZUNhY2hlV3JhcHBlci5oOyBwYXRoID0gZGZnL0RGR0lubGluZUNhY2hlV3Jh
cHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkIxNEUyMjE4MTMwOTU1MDA5
QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmg7IHBhdGggPSBk
ZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZElELmg7IHBhdGggPSBkZmcv
REZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxOTE2
QjYyNzcyMDAzRjY5NkIgLyogREZHQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FsbG9jYXRvci5oOyBwYXRoID0gZGZnL0RGR0FsbG9jYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZH
Q29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbW1v
bi5jcHA7IHBhdGggPSBkZmcvREZHQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI4NzAsNiArMjg3OCw4IEBACiAJCQkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8q
IEpJVERpc2Fzc2VtYmxlci5oICovLAogCQkJCTBGNDY4MDdGMTRCQTU3MjcwMEJGRTI3MiAvKiBK
SVRFeGNlcHRpb25zLmNwcCAqLywKIAkJCQkwRjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklU
RXhjZXB0aW9ucy5oICovLAorCQkJCTBGQjE0RTFDMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAgKi8sCisJCQkJMEZCMTRFMUQxODEyNEFDRTAwOUI2QjREIC8q
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggKi8sCiAJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4
NjgyIC8qIEpJVElubGluZXMuaCAqLywKIAkJCQlCQ0RENTFFOTBGQjhERjc0MDA0QThCREMgLyog
SklUT3Bjb2Rlcy5jcHAgKi8sCiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9w
Y29kZXMzMl82NC5jcHAgKi8sCkBAIC0zNjE2LDggKzM2MjYsNiBAQAogCQk4NkVDOURCMzEzMjhE
RjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQkwRjlEMzM5NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAq
LywKLQkJCQkwRjlEMzM5NTE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi8sCiAJ
CQkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJ
CQkJQTc3QTQyMzcxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJ
CUE3MDREOEZFMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8s
CkBAIC0zNzA2LDYgKzM3MTQsOCBAQAogCQkJCUE3OEE5NzZGMTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCAqLywKKwkJCQkwRjlEMzM5NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0
LmNwcCAqLywKKwkJCQkwRjlEMzM5NTE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0Lmgg
Ki8sCiAJCQkJQTdEODlDRTgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAq
LywKIAkJCQlBN0Q4OUNFOTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCAqLywK
IAkJCQlBN0Q4OUNFQTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuY3BwICovLApAQCAtMzcxMyw2ICszNzIzLDggQEAKIAkJCQk4NkVDOURCNjEzMjhERjgy
MDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJCQk4NkVDOURCNzEzMjhERjgy
MDAyQjJBRDcgLyogREZHR3JhcGguY3BwICovLAogCQkJCTg2RUM5REI4MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHcmFwaC5oICovLAorCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKKwkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTcwNEQ5MDEx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYy
QkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovLApAQCAtNDQxNyw2
ICs0NDI5LDcgQEAKIAkJCQlCQzg3Q0RCOTEwNzEyQUQ0MDAwNjE0Q0YgLyogSlNPTk9iamVjdC5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1MzRBQUZCMEU1QjdBOTYwMEI4QTQ1QiAvKiBKU1By
b2ZpbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODRFMUIxN0JFREJEMzAwN0NC
NjNBIC8qIEpTUHJvbWlzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCMTRFMUYxODEyNEFDRTAw
OUI2QjREIC8qIEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QzE1RjY1RTE3QzE5OUNFMDA3OTRENDAgLyogSlNQcm9taXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDMTg0RTIzMTdCRUUyNDAwMDdDQjYzQSAvKiBKU1Byb21pc2VDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODRFMUYxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJv
bWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDQ5LDggKzQ0NjIsMTAgQEAKIAkJ
CQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXku
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQjE0RTIxMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1Zh
bHVlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MjY5LDYgKzUyODQsNyBAQAog
CQkJCTBGMjM1QkQzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkIx
NEUxRTE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyMzVCREExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0YyOTk2QjE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFp
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAxNTc2NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDYgKzQ2NCw4
IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgQXNzZW1ibGVyTGFi
ZWwgbGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsOyB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICBBc3NlbWJsZXJMYWJlbCBtX2xhYmVsOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTc2NjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Nyw2ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmludFN0cnVjdHVyZShQcmludFN0
cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IG9wZXJhbmQp
OwogCiAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9k
ZTsgfQorICAgIEVDTUFNb2RlIGVjbWFNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNTdHJpY3RNb2Rl
KCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZTsgfQogCiAgICAgaW5saW5lIGJvb2wgaXNL
bm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW5saW5lQ2FjaGVXcmFwcGVyX2gKKyNkZWZp
bmUgREZHSW5saW5lQ2FjaGVXcmFwcGVyX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgR2VuZXJhdG9yVHlwZT4KK3N0cnVjdCBJbmxpbmVDYWNoZVdyYXBwZXIgeworICAgIElubGlu
ZUNhY2hlV3JhcHBlcigpIHsgfQorICAgIAorICAgIElubGluZUNhY2hlV3JhcHBlcihjb25zdCBH
ZW5lcmF0b3JUeXBlJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKKyAgICAgICAg
OiBtX2dlbihnZW4pCisgICAgICAgICwgbV9zbG93UGF0aChzbG93UGF0aCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOworICAgIAorICAgIEdlbmVy
YXRvclR5cGUgbV9nZW47CisgICAgU2xvd1BhdGhHZW5lcmF0b3IqIG1fc2xvd1BhdGg7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0lubGluZUNhY2hlV3JhcHBlcl9oCisKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
SW5saW5lQ2FjaGVXcmFwcGVySW5saW5lc19oCisjZGVmaW5lIERGR0lubGluZUNhY2hlV3JhcHBl
cklubGluZXNfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdJbmxpbmVD
YWNoZVdyYXBwZXIuaCIKKyNpbmNsdWRlICJERkdTbG93UGF0aEdlbmVyYXRvci5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdlbmVyYXRv
clR5cGU+Cit2b2lkIElubGluZUNhY2hlV3JhcHBlcjxHZW5lcmF0b3JUeXBlPjo6ZmluYWxpemUo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBtX2dlbi5yZXBvcnRTbG93UGF0aENhbGwo
bV9zbG93UGF0aC0+bGFiZWwoKSwgbV9zbG93UGF0aC0+Y2FsbCgpKTsKKyAgICBtX2dlbi5maW5h
bGl6ZShsaW5rQnVmZmVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbmxpbmVDYWNoZVdyYXBwZXJJ
bmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDE1NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKKyNp
bmNsdWRlICJERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR0pJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRDb21waWxlci5oIgpAQCAtMjIyLDIyICsyMjMsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxz
LnNpemUoKTsgKytpKQogICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5tX2NhbGws
IG1fY2FsbHNbaV0ubV9mdW5jdGlvbik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9wcm9wZXJ0eUFjY2Vzc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBpbmZvID0gKm1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3N0dWJJbmZvOwotICAgICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKTsKLSAg
ICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAg
ICAgIGluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc3RydWN0
dXJlSW1tKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2Nh
dGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3N0cnVj
dHVyZUNoZWNrKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2xv
YWRPclN0b3JlKSk7Ci0jZWxzZQotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9h
ZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdGFnTG9hZE9yU3Rv
cmUpKTsKLSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9wYXlsb2FkTG9hZE9yU3RvcmUpKTsK
LSNlbmRpZgotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsK
LSAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0
eUFjY2Vzc2VzW2ldLm1fZG9uZSkpOwotICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3Rv
cmFnZUxvYWQgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fcHJvcGVydHlTdG9y
YWdlTG9hZCkpOwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dldEJ5SWRzLnNpemUo
KTsgaS0tOykKKyAgICAgICAgbV9nZXRCeUlkc1tpXS5maW5hbGl6ZShsaW5rQnVmZmVyKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3B1dEJ5SWRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9w
dXRCeUlkc1tpXS5maW5hbGl6ZShsaW5rQnVmZmVyKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2lucy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
aW5mbyA9ICptX2luc1tpXS5tX3N0dWJJbmZvOwogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBq
dW1wID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fanVtcCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTc2NjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkRGR0Rpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHSW5saW5lQ2FjaGVXcmFwcGVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKICNpbmNsdWRlICJERkdSZWdpc3RlckJh
bmsuaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1
ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCkBAIC03Nyw0OSArNzksNiBAQCBzdHJ1Y3QgQ2FsbExpbmtSZWNv
cmQgewogICAgIEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiB9OwogCi1zdHJ1Y3QgUHJvcGVydHlB
Y2Nlc3NSZWNvcmQgewotICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZUltbSwKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2ssCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRPclN0
b3JlLAotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgdGFnTG9hZE9yU3RvcmUsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpE
YXRhTGFiZWxDb21wYWN0IHBheWxvYWRMb2FkT3JTdG9yZSwKLSNlbmRpZgotICAgICAgICBTbG93
UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5lcmF0b3IsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBkb25lLAotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCi0gICAg
ICAgIDogbV9zdHJ1Y3R1cmVJbW0oc3RydWN0dXJlSW1tKQotICAgICAgICAsIG1fc3RydWN0dXJl
Q2hlY2soc3RydWN0dXJlQ2hlY2spCi0gICAgICAgICwgbV9wcm9wZXJ0eVN0b3JhZ2VMb2FkKHBy
b3BlcnR5U3RvcmFnZUxvYWQpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgLCBtX2xvYWRP
clN0b3JlKGxvYWRPclN0b3JlKQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgLCBt
X3RhZ0xvYWRPclN0b3JlKHRhZ0xvYWRPclN0b3JlKQotICAgICAgICAsIG1fcGF5bG9hZExvYWRP
clN0b3JlKHBheWxvYWRMb2FkT3JTdG9yZSkKLSNlbmRpZgotICAgICAgICAsIG1fc2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhHZW5lcmF0b3IpCi0gICAgICAgICwgbV9kb25lKGRvbmUpCi0gICAg
ICAgICwgbV9zdHViSW5mbyhzdHViSW5mbykKLSAgICB7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbFB0ciBtX3N0cnVjdHVyZUltbTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3N0cnVjdHVyZUNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDb252
ZXJ0aWJsZUxvYWRMYWJlbCBtX3Byb3BlcnR5U3RvcmFnZUxvYWQ7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBtX2xvYWRPclN0b3JlOwot
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29t
cGFjdCBtX3RhZ0xvYWRPclN0b3JlOwotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21w
YWN0IG1fcGF5bG9hZExvYWRPclN0b3JlOwotI2VuZGlmCi0gICAgU2xvd1BhdGhHZW5lcmF0b3Iq
IG1fc2xvd1BhdGhHZW5lcmF0b3I7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKLX07Ci0KIHN0cnVjdCBJblJlY29y
ZCB7CiAgICAgSW5SZWNvcmQoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IGp1bXAsIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aEdlbmVyYXRvciwKQEAgLTI1NCwxMSAr
MjEzLDE2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkUHJvcGVydHlB
Y2Nlc3MoY29uc3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQmIHJlY29yZCkKKyAgICB2b2lkIGFkZEdl
dEJ5SWQoY29uc3QgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciog
c2xvd1BhdGgpCiAgICAgewotICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKHJlY29y
ZCk7CisgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRC
eUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgYWRk
UHV0QnlJZChjb25zdCBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9y
KiBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIG1fcHV0QnlJZHMuYXBwZW5kKElubGluZUNhY2hl
V3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAg
ICAgdm9pZCBhZGRJbihjb25zdCBJblJlY29yZCYgcmVjb3JkKQogICAgIHsKICAgICAgICAgbV9p
bnMuYXBwZW5kKHJlY29yZCk7CkBAIC0zODUsNyArMzQ5LDggQEAgcHJpdmF0ZToKICAgICAgICAg
Q29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgfTsKICAgICAKLSAgICBWZWN0b3I8UHJvcGVy
dHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlBY2Nlc3NlczsKKyAgICBWZWN0b3I8SW5saW5l
Q2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzOworICAgIFZl
Y3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlJ
ZHM7CiAgICAgVmVjdG9yPEluUmVjb3JkLCA0PiBtX2luczsKICAgICBWZWN0b3I8SlNDYWxsUmVj
b3JkLCA0PiBtX2pzQ2FsbHM7CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG1f
ZXhpdENvbXBpbGF0aW9uSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU3NjYwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3LDEyOSArMTk3LDU3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlVUludDMKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFz
ZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BS
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRh
cmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKIHsKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKKyAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVP
cmlnaW4sIHVzZWRSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9y
Tm9uZSwgYmFzZVBheWxvYWRHUFIpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIs
IHJlc3VsdFBheWxvYWRHUFIpLCBzcGlsbE1vZGUgIT0gTmVlZFRvU3BpbGwpOwogICAgIAotICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwotICAgIEpJVENv
bXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQucGF0Y2hhYmxlQnJh
bmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVU
b0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHVudXNlZFBvaW50ZXIpKSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwog
ICAgIAotICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkID0gbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VQYXlsb2FkR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRQYXlsb2Fk
R1BSKTsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCB0YWdMb2FkV2l0aFBhdGNo
ID0gbV9qaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBwYXlsb2FkTG9hZFdpdGhQYXRjaCA9IG1faml0LmxvYWQzMldpdGhD
b21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxv
YWRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQorICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1f
aml0LmxhYmVsKCk7Ci0KICAgICBPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOwog
ICAgIGlmIChiYXNlVGFnR1BST3JOb25lID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgaWYg
KCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7Ci0gICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBzdHViSW5mbywKLSAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSwgYmFzZVBheWxvYWRHUFIsCi0g
ICAgICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7Ci0gICAgICAgICAgICBz
bG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBzdHViSW5mbywKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSwgYmFzZVBheWxvYWRHUFIs
Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIGdlbi5zdHViSW5mbygpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZyksIGJhc2VQ
YXlsb2FkR1BSLAorICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7Ci0g
ICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBz
dHViSW5mbywgYmFzZVRhZ0dQUk9yTm9uZSwKLSAgICAgICAgICAgICAgICBiYXNlUGF5bG9hZEdQ
UiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOwotICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7Ci0gICAgICAgICAgICBzbG93UGF0aCA9IHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIs
IHJlc3VsdFBheWxvYWRHUFIpLCBzdHViSW5mbywgYmFzZVRhZ0dQUk9yTm9uZSwKLSAgICAgICAg
ICAgICAgICBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgUmVnaXN0ZXJTZXQgY3VycmVudGx5VXNlZFJlZ2lzdGVy
cyA9IHVzZWRSZWdpc3RlcnMoKTsKLSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5n
ZXQoYmFzZVBheWxvYWRHUFIpKTsKLSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5n
ZXQocmVzdWx0VGFnR1BSKSk7Ci0gICAgQVNTRVJUKGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0
KHJlc3VsdFBheWxvYWRHUFIpKTsKLSAgICAKLSAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW47Ci0gICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4
X3Q+KGJhc2VQYXlsb2FkR1BSKTsKLSAgICBzdHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0
aWNfY2FzdDxpbnQ4X3Q+KHJlc3VsdFBheWxvYWRHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC52
YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVzdWx0VGFnR1BSKTsKLSAgICBzdHVi
SW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9IGN1cnJlbnRseVVzZWRSZWdpc3RlcnM7Ci0gICAg
c3R1YkluZm8tPnBhdGNoLnJlZ2lzdGVyc0ZsdXNoZWQgPSBzcGlsbE1vZGUgIT0gTmVlZFRvU3Bp
bGw7Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKLSAgICAgICAgUHJvcGVydHlBY2Nl
c3NSZWNvcmQoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNr
LCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLAotICAgICAgICAgICAgdGFnTG9hZFdpdGhQYXRjaCwgcGF5
bG9hZExvYWRXaXRoUGF0Y2gsIHNsb3dQYXRoLmdldCgpLCBkb25lTGFiZWwsCi0gICAgICAgICAg
ICBzdHViSW5mbykpOworICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLAorICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VUYWdHUFJPck5vbmUsCisgICAgICAgICAgICBiYXNlUGF5bG9hZEdQUiwgaWRl
bnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgfQorICAgIAorICAgIG1faml0LmFk
ZEdldEJ5SWQoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVn
IHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5k
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKKyAgICB3
cml0ZUJhcnJpZXIoYmFzZVBheWxvYWRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVVzZSwgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgIAorICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwg
dXNlZFJlZ2lzdGVycygpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZVBheWxvYWRHUFIp
LAorICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgc2Ny
YXRjaEdQUiwgZmFsc2UsCisgICAgICAgIG1faml0LnN0cmljdE1vZGVGb3IoY29kZU9yaWdpbiks
IHB1dEtpbmQpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJl
VG9Db21wYXJlOwotICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNr
ID0gbV9qaXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKSk7CisgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgobV9qaXQpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKIAotICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwgdmFsdWVUYWdH
UFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7
CisgICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBOb1Jlc3Vs
dCwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlVGFnR1BSLAorICAgICAgICB2YWx1ZVBheWxvYWRHUFIs
IGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKIAotICAg
IEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0g
bV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2Fk
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBKSVRD
b21waWxlcjo6RGF0YUxhYmVsMzIgdGFnU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0
aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHBheWxvYWRTdG9yZVdpdGhQYXRj
aCA9IG1faml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlUGF5bG9hZEdQUiwg
SklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotCi0gICAgSklUQ29tcGlsZXI6Okxh
YmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7Ci0gICAgVl9KSVRPcGVyYXRpb25fRVNzaUpK
SSBvcHRpbWl6ZWRDYWxsOwotICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pKSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAg
ICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHB1dEtpbmQg
PT0gRGlyZWN0KQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0aW1p
emVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9Ci0gICAg
T3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKLSAgICBpZiAoIXNsb3dQYXRoVGFy
Z2V0LmlzU2V0KCkpIHsKLSAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICBzdHJ1Y3R1cmVDaGVjay5tX2p1bXAsIHRoaXMsIG9wdGltaXplZENhbGwsIE5vUmVzdWx0
LCBzdHViSW5mbywgdmFsdWVUYWdHUFIsCi0gICAgICAgICAgICB2YWx1ZVBheWxvYWRHUFIsIGJh
c2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKHN0cnVjdHVyZUNoZWNrLm1fanVtcCk7Ci0gICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOwotICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKLSAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3B0aW1pemVkQ2FsbCwgTm9SZXN1bHQs
IHN0dWJJbmZvLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLAotICAgICAgICAgICAgYmFz
ZVBheWxvYWRHUFIsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwotICAgIH0KLSAg
ICBSZWdpc3RlclNldCBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVycygpOwot
ICAgIGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaEdQUik7Ci0gICAgQVNTRVJU
KGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0KGJhc2VQYXlsb2FkR1BSKSk7Ci0gICAgQVNTRVJU
KGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0KHZhbHVlVGFnR1BSKSk7Ci0gICAgQVNTRVJUKGN1
cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0KHZhbHVlUGF5bG9hZEdQUikpOwotCi0gICAgc3R1Yklu
Zm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwotICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlUGF5bG9hZEdQUik7Ci0gICAgc3R1YkluZm8tPnBh
dGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZVBheWxvYWRHUFIpOwotICAg
IHN0dWJJbmZvLT5wYXRjaC52YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PGludDhfdD4odmFsdWVU
YWdHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0gY3VycmVudGx5VXNl
ZFJlZ2lzdGVyczsKLSAgICBzdHViSW5mby0+cGF0Y2gucmVnaXN0ZXJzRmx1c2hlZCA9IGZhbHNl
OwotCi0gICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoCi0gICAgICAgIFByb3BlcnR5QWNjZXNz
UmVjb3JkKAotICAgICAgICAgICAgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywg
cHJvcGVydHlTdG9yYWdlTG9hZCwKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxD
b21wYWN0KHRhZ1N0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLAotICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbENvbXBhY3QocGF5bG9hZFN0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLAotICAg
ICAgICAgICAgc2xvd1BhdGguZ2V0KCksIGRvbmVMYWJlbCwgc3R1YkluZm8pKTsKKyAgICBtX2pp
dC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU3NjYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA5LDEwMyArMjA5LDQzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlVUludDMKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdl
dCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKIHsKLSAgICBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKKyAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmln
aW4sIHVzZWRSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCisgICAgICAgIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHNwaWxsTW9kZSAhPSBOZWVkVG9TcGlsbCk7CisgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgobV9qaXQpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQ
dHIgc3RydWN0dXJlVG9Db21wYXJlOwotICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0
cnVjdHVyZUNoZWNrID0gbV9qaXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKLSAgICAKLSAg
ICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9
Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkNjRX
aXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIDApLCByZXN1bHRHUFIpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFi
ZWwgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93
UGF0aDsKLSAgICBpZiAoIXNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpIHsKLSAgICAgICAgc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVDaGVjay5tX2p1bXAsIHRo
aXMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0R1BSLCBzdHViSW5mbywgYmFzZUdQ
UiwKLSAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9k
ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOworICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0
LmlzU2V0KCkpCiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOwotICAg
ICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRHUFIsIHN0dWJJbmZvLCBiYXNlR1BS
LAotICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSwgc3BpbGxNb2Rl
KTsKLSAgICB9Ci0gICAgUmVnaXN0ZXJTZXQgY3VycmVudGx5VXNlZFJlZ2lzdGVycyA9IHVzZWRS
ZWdpc3RlcnMoKTsKLSAgICBBU1NFUlQoY3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQoYmFzZUdQ
UikpOwotICAgIEFTU0VSVChjdXJyZW50bHlVc2VkUmVnaXN0ZXJzLmdldChyZXN1bHRHUFIpKTsK
LSAgICAKLSAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47Ci0gICAgc3R1Yklu
Zm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VHUFIpOwotICAgIHN0
dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVzdWx0R1BSKTsK
LSAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9IGN1cnJlbnRseVVzZWRSZWdpc3Rl
cnM7Ci0gICAgc3R1YkluZm8tPnBhdGNoLnJlZ2lzdGVyc0ZsdXNoZWQgPSBzcGlsbE1vZGUgIT0g
TmVlZFRvU3BpbGw7Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcygKLSAgICAgICAgUHJv
cGVydHlBY2Nlc3NSZWNvcmQoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVj
dHVyZUNoZWNrLCBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBsb2FkV2l0aFBhdGNoLAotICAgICAgICAg
ICAgc2xvd1BhdGguZ2V0KCksIGRvbmVMYWJlbCwgc3R1YkluZm8pKTsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgCisgICAgT3duUHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdEdQUiwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsCisgICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlciksIHNwaWxsTW9k
ZSk7CisgICAgCisgICAgbV9qaXQuYWRkR2V0QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVn
IGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hH
UFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZFN0dWJJbmZvKCk7Ci0gICAgCi0gICAgSklUQ29t
cGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgSklUQ29tcGlsZXI6
OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJX
aXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2lu
dGVyKSkpOwotCiAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgSklUQ29t
cGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAg
ICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmU2NFdpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDAp
KTsKLQotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwot
ICAgIAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkQ2FsbDsKLSAgICBpZiAo
bV9qaXQuc3RyaWN0TW9kZUZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKSkgewotICAgICAg
ICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIG9w
dGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgfQotICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4g
c2xvd1BhdGg7Ci0gICAgaWYgKCFzbG93UGF0aFRhcmdldC5pc1NldCgpKSB7Ci0gICAgICAgIHNs
b3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc3RydWN0dXJlQ2hlY2subV9qdW1w
LCB0aGlzLCBvcHRpbWl6ZWRDYWxsLCBOb1Jlc3VsdCwgc3R1YkluZm8sIHZhbHVlR1BSLCBiYXNl
R1BSLAotICAgICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChzdHJ1Y3R1cmVDaGVjay5tX2p1bXApOworICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwg
dXNlZFJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBmYWxzZSwgbV9qaXQuc3RyaWN0TW9kZUZvcihjb2Rl
T3JpZ2luKSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworICAg
IAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNsb3dQYXRo
VGFyZ2V0LmlzU2V0KCkpCiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQp
OwotICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3B0aW1pemVkQ2FsbCwgTm9SZXN1bHQsIHN0dWJJbmZvLCB2YWx1ZUdQUiwgYmFz
ZUdQUiwKLSAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwotICAg
IH0KLSAgICBSZWdpc3RlclNldCBjdXJyZW50bHlVc2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVy
cygpOwotICAgIGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaEdQUik7Ci0gICAg
QVNTRVJUKGN1cnJlbnRseVVzZWRSZWdpc3RlcnMuZ2V0KGJhc2VHUFIpKTsKLSAgICBBU1NFUlQo
Y3VycmVudGx5VXNlZFJlZ2lzdGVycy5nZXQodmFsdWVHUFIpKTsKLSAgICAKLSAgICBzdHViSW5m
by0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47Ci0gICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1
ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4odmFsdWVHUFIpOwotICAgIHN0dWJJbmZvLT5wYXRj
aC51c2VkUmVnaXN0ZXJzID0gY3VycmVudGx5VXNlZFJlZ2lzdGVyczsKLSAgICBzdHViSW5mby0+
cGF0Y2gucmVnaXN0ZXJzRmx1c2hlZCA9IGZhbHNlOwotICAgIAotICAgIG1faml0LmFkZFByb3Bl
cnR5QWNjZXNzKAotICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZCgKLSAgICAgICAgICAgIHN0
cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssIHByb3BlcnR5U3RvcmFnZUxvYWQsCi0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChzdG9yZVdpdGhQYXRjaC5s
YWJlbCgpKSwgc2xvd1BhdGguZ2V0KCksIGRvbmVMYWJlbCwKLSAgICAgICAgICAgIHN0dWJJbmZv
KSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIAorICAg
IE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdl
bi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgaWRlbnRpZmllclVJRChp
ZGVudGlmaWVyTnVtYmVyKSk7CisKKyAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGgu
Z2V0KCkpOwogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9
CiAKQEAgLTI5NjIsOSArMjkwMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsKICAgICAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbERpcmVjdCkKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LnN0cmlj
dE1vZGVGb3Iobm9kZS0+Y29kZU9yaWdpbikgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdFN0cmlj
dCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBh
cmczR1BSKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9k
ZUZvcihub2RlLT5jb2RlT3JpZ2luKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0IDog
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3QsIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNH
UFIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9q
aXQuc3RyaWN0TW9kZUZvcihub2RlLT5jb2RlT3JpZ2luKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNH
UFIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuaXNTdHJpY3RNb2RlRm9y
KG5vZGUtPmNvZGVPcmlnaW4pID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxyZWFkeUhhbmRs
ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCShyZXZpc2lvbiAxNTc2NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksMTMgKzM1OSwxOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmln
aW4pOwogICAgIH0KICAgICAKLSAgICBib29sIHN0cmljdE1vZGVGb3IoQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQorICAgIGJvb2wgaXNTdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikK
ICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAg
ICAgICByZXR1cm4gY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOwogICAgICAgICByZXR1cm4g
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgfQogICAgIAorICAgIEVDTUFN
b2RlIHN0cmljdE1vZGVGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzU3RyaWN0TW9kZUZvcihjb2RlT3JpZ2luKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJp
Y3RNb2RlOworICAgIH0KKyAgICAKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZUZvcihj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24gMTU3NjU4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcg
QEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0g
SW52YWxpZEdQUlJlZzsgfQogICAgIAogICAgIEdQUlJlZyBncHIoKSBjb25zdCB7IHJldHVybiBt
X2dwcjsgfQorICAgIEdQUlJlZyB0YWdHUFIoKSBjb25zdCB7IHJldHVybiBJbnZhbGlkR1BSUmVn
OyB9CiAgICAgR1BSUmVnIHBheWxvYWRHUFIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQogICAg
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1
NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsOCBAQCBKSVQ6OkpJVChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
KQogICAgICwgbV9pbnRlcnByZXRlcih2bS0+aW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPm51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgOiAwKQogICAgICwg
bV9ieXRlY29kZU9mZnNldCgodW5zaWduZWQpLTEpCi0gICAgLCBtX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25JbmRleChVSU5UX01BWCkKKyAgICAsIG1fZ2V0QnlJZEluZGV4KFVJTlRfTUFYKQor
ICAgICwgbV9wdXRCeUlkSW5kZXgoVUlOVF9NQVgpCiAgICAgLCBtX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleChVSU5UX01BWCkKICAgICAsIG1fY2FsbExpbmtJbmZvSW5kZXgoVUlOVF9NQVgpCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKQEAgLTM1OSw3ICszNjAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogewogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogCi0gICAgbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOworICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKKyAgICBt
X3B1dEJ5SWRJbmRleCA9IDA7CiAgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAg
IG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogICAgIApAQCAtNDc1LDcgKzQ3Nyw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGp1bXAoKSwgMCk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BU1NFUlQobV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uSW5kZXggPT0gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXpl
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6
ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQogICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mVmFsdWVQcm9maWxlcyA9PSBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpOwpAQCAtNDg3LDYwICs0OTAsNiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm86OmNvcHlUb1N0dWJJbmZvKExp
bmtCdWZmZXIgJmxpbmtCdWZmZXIpCi17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICBzdHViSW5mby0+Y29kZU9y
aWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7Ci0gICAgc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsUmV0dXJuTG9jYXRpb24pOwot
Ci0gICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxl
cjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihzdHJ1Y3R1
cmVUb0NvbXBhcmUpLCBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKTsKLSAgICBzdHViSW5m
by0+cGF0Y2guZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHN0cnVjdHVyZUNoZWNrKSk7Ci0gICAgCi0gICAgc3R1YkluZm8tPnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
Zihjb2xkUGF0aEJlZ2luKSk7Ci0gICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKLSAgICBzdHViSW5m
by0+cGF0Y2guZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHByb3BlcnR5U3RvcmFnZUxvYWQpKTsKLSAgICAKLSAgICBzdHViSW5mby0+
cGF0Y2guYmFzZUdQUiA9IEdQUkluZm86OnJlZ1QwOwotCi0gICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVyczsKLSAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMCk7Ci0KLSNpZiBV
U0UoSlNWQUxVRTY0KSAvLyBKU1ZBTFVFIGNhc2VzCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2Vt
ZW50TGFiZWwpKTsKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gR1BSSW5mbzo6
cmVnVDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAgc3R1Yklu
Zm8tPnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOwotICAgICAgICBzdHViSW5mby0+
cGF0Y2gudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5z
ZXQoR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZWxzZSAvLyBKU1ZB
TFVFIGNhc2VzCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEdldEJ5SWQ6Ci0gICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxhY2VtZW50TGFiZWwyKSk7Ci0gICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3BsYWNlbWVudExhYmVsMSkpOwot
ICAgICAgICBzdHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlVGFnR1BSID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAg
IHVzZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQdXRCeUlkOgotICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoc3R1Yklu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1dERpc3BsYWNl
bWVudExhYmVsMikpOwotICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2Fk
TG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHN0
dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihwdXREaXNw
bGFjZW1lbnRMYWJlbDEpKTsKLSAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gR1BS
SW5mbzo6cmVnVDI7Ci0gICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZVRhZ0dQUiA9IEdQUklu
Zm86OnJlZ1QzOwotICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotI2VuZGlmIC8vIEpTVkFMVUUgY2FzZXMKLSAgICAKLSAgICBzdHViSW5mby0+cGF0
Y2gudXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7Ci0gICAgc3R1YkluZm8tPnBhdGNoLnJl
Z2lzdGVyc0ZsdXNoZWQgPSB0cnVlOwotfQotCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZh
dGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICNpZiBFTkFCTEUoVkFM
VUVfUFJPRklMRVIpCkBAIC03MzMsOCArNjgyLDExIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6
cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJv
bSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkKLSAg
ICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHViSW5mbyhw
YXRjaEJ1ZmZlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9nZXRCeUlkcy5zaXplKCk7IGkt
LTspCisgICAgICAgIG1fZ2V0QnlJZHNbaV0uZmluYWxpemUocGF0Y2hCdWZmZXIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fcHV0QnlJZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3B1dEJ5
SWRzW2ldLmZpbmFsaXplKHBhdGNoQnVmZmVyKTsKKwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1i
ZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1w
KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5iYWRUeXBl
SnVtcCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTc2NjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkpJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNs
dWRlICJMZWdhY3lQcm9maWxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMTQ3LDExMSAr
MTQ4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgZW51bSBQ
cm9wZXJ0eVN0dWJHZXRCeUlkX1QgeyBQcm9wZXJ0eVN0dWJHZXRCeUlkIH07Ci0gICAgZW51bSBQ
cm9wZXJ0eVN0dWJQdXRCeUlkX1QgeyBQcm9wZXJ0eVN0dWJQdXRCeUlkIH07Ci0KLSAgICBzdHJ1
Y3QgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgZW51bSBUeXBlIHsgR2V0
QnlJZCwgUHV0QnlJZCB9IG1fdHlwZTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaG90UGF0aEJlZ2luOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2s7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0
IGdldERpc3BsYWNlbWVudExhYmVsOwotI2Vsc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbENvbXBhY3QgZ2V0RGlzcGxhY2VtZW50TGFiZWwxOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsQ29tcGFjdCBnZXREaXNwbGFjZW1lbnRMYWJlbDI7Ci0jZW5kaWYKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmU7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBjb2xkUGF0aEJlZ2luOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDsKLSNlbHNlCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDE7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMiBwdXREaXNwbGFjZW1lbnRMYWJlbDI7
Ci0jZW5kaWYKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvOwotCi0jaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oKQotICAg
ICAgICAgICAgOiBieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSkKLSAgICAgICAgewotICAgICAgICB9Ci0jZW5kaWYKLQotCi0gICAgICAgIFByb3BlcnR5
U3R1YkNvbXBpbGF0aW9uSW5mbygKLSAgICAgICAgICAgIFByb3BlcnR5U3R1YkdldEJ5SWRfVCwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2ssCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCwKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlz
cGxhY2VtZW50TGFiZWwsCi0jZWxzZQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwxLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwyLAotI2VuZGlmCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZSkKLSAgICAgICAgICAgIDogbV90eXBlKEdl
dEJ5SWQpCi0gICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgICAgICwgc3RydWN0dXJlVG9Db21wYXJlKHN0cnVjdHVyZVRvQ29tcGFyZSkKLSAgICAgICAg
ICAgICwgc3RydWN0dXJlQ2hlY2soc3RydWN0dXJlQ2hlY2spCi0gICAgICAgICAgICAsIHByb3Bl
cnR5U3RvcmFnZUxvYWQocHJvcGVydHlTdG9yYWdlTG9hZCkKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgLCBnZXREaXNwbGFjZW1lbnRMYWJlbChkaXNwbGFjZW1lbnRMYWJlbCkKLSNl
bHNlCi0gICAgICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsMShkaXNwbGFjZW1lbnRMYWJl
bDEpCi0gICAgICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsMihkaXNwbGFjZW1lbnRMYWJl
bDIpCi0jZW5kaWYKLSAgICAgICAgICAgICwgZG9uZShkb25lKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCi0gICAgICAgICAgICBQ
cm9wZXJ0eVN0dWJQdXRCeUlkX1QsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZSwKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3Rv
cmFnZUxvYWQsCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCwKLSNlbHNlCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwxLAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsMiwKLSNlbmRpZgot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmUpCi0gICAgICAgICAgICA6IG1f
dHlwZShQdXRCeUlkKQotICAgICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgICAgICAsIHN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBhcmUpCi0g
ICAgICAgICAgICAsIHN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQotICAgICAgICAgICAg
LCBwcm9wZXJ0eVN0b3JhZ2VMb2FkKHByb3BlcnR5U3RvcmFnZUxvYWQpCi0gICAgICAgICAgICAs
IGRvbmUoZG9uZSkKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgLCBwdXREaXNwbGFj
ZW1lbnRMYWJlbChkaXNwbGFjZW1lbnRMYWJlbCkKLSNlbHNlCi0gICAgICAgICAgICAsIHB1dERp
c3BsYWNlbWVudExhYmVsMShkaXNwbGFjZW1lbnRMYWJlbDEpCi0gICAgICAgICAgICAsIHB1dERp
c3BsYWNlbWVudExhYmVsMihkaXNwbGFjZW1lbnRMYWJlbDIpCi0jZW5kaWYKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzbG93Q2FzZUluZm8oTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGNvbGRQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIFN0cnVjdHVyZVN0
dWJJbmZvKiBpbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24g
PSBjYWxsOwotICAgICAgICAgICAgdGhpcy0+Y29sZFBhdGhCZWdpbiA9IGNvbGRQYXRoQmVnaW47
Ci0gICAgICAgICAgICBzdHViSW5mbyA9IGluZm87Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IHNsb3dDYXNlSW5mbyhNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBjb3B5VG9TdHViSW5mbyhMaW5rQnVmZmVyICZwYXRjaEJ1ZmZlcik7Ci0gICAgfTsKLQog
ICAgIHN0cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIEJ5VmFsQ29tcGlsYXRp
b25JbmZvKCkgeyB9CiAgICAgICAgIApAQCAtMjg3LDcgKzE4Myw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNh
bGw7Ci0gICAgICAgIGZyaWVuZCBzdHJ1Y3QgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOwog
CiAgICAgICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyOjpKdW1wOwogICAgICAgICB1c2luZyBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Q7CkBAIC05MDIsNyArNzk3LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAgIFZlY3RvcjxM
YWJlbD4gbV9sYWJlbHM7Ci0gICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlvbklu
Zm8+IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3RvcjxKSVRH
ZXRCeUlkR2VuZXJhdG9yPiBtX2dldEJ5SWRzOworICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdl
bmVyYXRvcj4gbV9wdXRCeUlkczsKICAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZv
PiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAg
ICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKQEAgLTkxNCw3ICs4MTAsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAg
IEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogCi0gICAg
ICAgIHVuc2lnbmVkIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1
bnNpZ25lZCBtX2dldEJ5SWRJbmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXg7
CiAgICAgICAgIHVuc2lnbmVkIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4OwogICAgICAgICB1bnNp
Z25lZCBtX2NhbGxMaW5rSW5mb0luZGV4OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKKyAgICBtX3N0dWJJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mby0+Y29kZU9yaWdp
biA9IGNvZGVPcmlnaW47Cit9CisKK0pJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3Io
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCkKKyAgICA6IEpJVElubGluZUNhY2hl
R2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbikKKyAgICAsIG1fYmFzZShiYXNlKQorICAg
ICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5yZWdpc3RlcnNGbHVz
aGVkID0gcmVnaXN0ZXJzRmx1c2hlZDsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0
ZXJzID0gdXNlZFJlZ2lzdGVyczsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgY29udmVuaWVuY2Ug
LSBpbiBjYXNlcyB3aGVyZSB0aGUgb25seSByZWdpc3RlcnMgeW91J3JlIHVzaW5nIGFyZSBiYXNl
L3ZhbHVlLAorICAgIC8vIGl0IGFsbG93cyB5b3UgdG8gcGFzcyBSZWdpc3RlclNldCgpIGFzIHRo
ZSB1c2VkUmVnaXN0ZXJzIGFyZ3VtZW50LgorICAgIG1fc3R1YkluZm8tPnBhdGNoLnVzZWRSZWdp
c3RlcnMuc2V0KGJhc2UpOworICAgIG1fc3R1YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMuc2V0
KHZhbHVlKTsKKyAgICAKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nh
c3Q8aW50OF90PihiYXNlLnBheWxvYWRHUFIoKSk7CisgICAgbV9zdHViSW5mby0+cGF0Y2gudmFs
dWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlLnBheWxvYWRHUFIoKSk7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC52YWx1ZVRhZ0dQUiA9IHN0YXRp
Y19jYXN0PGludDhfdD4odmFsdWUudGFnR1BSKCkpOworI2VuZGlmCit9CisKK3ZvaWQgSklUQnlJ
ZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBDb2Rl
TG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2NhbGwpOworICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5M
b2NhdGlvbjsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gTWFj
cm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICBt
X3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVDaGVjaykpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKKyNlbHNlCisg
ICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNz
ZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2Nh
dGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFnTG9hZE9yU3RvcmUpKTsKKyAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKKyNlbmRpZgorICAgIG1f
c3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRj
aC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKAorICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2RvbmUpKTsKKyAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgY2FsbFJl
dHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eVN0b3JhZ2VMb2Fk
KSk7Cit9CisKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhN
YWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgYnV0dGVyZmx5KQoreworICAgIG1fc3RydWN0dXJl
Q2hlY2sgPSBqaXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFz
ZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICBtX3N0
cnVjdHVyZUltbSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odW51c2VkUG9pbnRlcikpKTsKKyAgICAKKyAgICBtX3Byb3BlcnR5U3RvcmFnZUxv
YWQgPSBqaXQuY29udmVydGlibGVMb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhtX2Jhc2UucGF5bG9hZEdQUigpLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBi
dXR0ZXJmbHkpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3sKKyAgICBnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKGpp
dCwgbV92YWx1ZS5wYXlsb2FkR1BSKCkpOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
bV9sb2FkT3JTdG9yZSA9IGppdC5sb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV92YWx1ZS5wYXlsb2FkR1BSKCksIDAp
LCBtX3ZhbHVlLnBheWxvYWRHUFIoKSkubGFiZWwoKTsKKyNlbHNlCisgICAgbV90YWdMb2FkT3JT
dG9yZSA9IGppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV92YWx1ZS5wYXlsb2FkR1BSKCksIDApLCBtX3ZhbHVl
LnRhZ0dQUigpKS5sYWJlbCgpOworICAgIG1fbG9hZE9yU3RvcmUgPSBqaXQubG9hZDMyV2l0aENv
bXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fdmFsdWUucGF5bG9hZEdQUigpLCAwKSwgbV92YWx1ZS5wYXlsb2FkR1BSKCkpLmxhYmVsKCk7
CisjZW5kaWYKKyAgICAKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworSklUUHV0QnlJ
ZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywKKyAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0
Y2gsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCwKKyAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2lu
ZCBwdXRLaW5kKQorICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4s
IHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCByZWdpc3RlcnNGbHVzaGVkKQorICAgICwgbV9z
Y3JhdGNoKHNjcmF0Y2gpCisgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQorICAgICwgbV9wdXRL
aW5kKHB1dEtpbmQpCit7CisgICAgbV9zdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycy5jbGVh
cihzY3JhdGNoKTsKK30KKwordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit7CisgICAgZ2VuZXJhdGVGYXN0UGF0aENoZWNrcyhq
aXQsIG1fc2NyYXRjaCk7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2xvYWRPclN0
b3JlID0gaml0LnN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVl
LnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9zY3JhdGNoLCAwKSkubGFi
ZWwoKTsKKyNlbHNlCisgICAgbV90YWdMb2FkT3JTdG9yZSA9IGppdC5zdG9yZTMyV2l0aEFkZHJl
c3NPZmZzZXRQYXRjaCgKKyAgICAgICAgbV92YWx1ZS50YWdHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobV9zY3JhdGNoLCAwKSkubGFiZWwoKTsKKyAgICBtX2xvYWRPclN0b3JlID0gaml0
LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKAorICAgICAgICBtX3ZhbHVlLnBheWxvYWRH
UFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9zY3JhdGNoLCAwKSkubGFiZWwoKTsKKyNl
bmRpZgorICAgIAorICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCitWX0pJVE9wZXJhdGlv
bl9FU3NpSkpJIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQoreworICAg
IGlmIChtX2VjbWFNb2RlID09IFN0cmljdE1vZGUpIHsKKyAgICAgICAgaWYgKG1fcHV0S2luZCA9
PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
OworICAgIH0KKyAgICBpZiAobV9wdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcl9oCisjZGVmaW5l
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBDb2RlQmxvY2s7CisKK2NsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKK3Byb3Rl
Y3RlZDoKKyAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQorICAgIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4pOworICAgIAorcHVibGljOgorICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87
IH0KKworcHJvdGVjdGVkOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgU3RydWN0
dXJlU3R1YkluZm8qIG1fc3R1YkluZm87Cit9OworCitjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDog
cHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKK3Byb3RlY3RlZDoKKyAgICBKSVRCeUlk
R2VuZXJhdG9yKCkgeyB9CisKKyAgICBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxv
Y2sqLCBDb2RlT3JpZ2luLCBjb25zdCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLAorICAgICAgICBib29sIHJlZ2lzdGVyc0ZsdXNoZWQpOworICAgIAor
cHVibGljOgorICAgIHZvaWQgcmVwb3J0U2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBzbG93UGF0aEJlZ2luLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgIHsKKyAgICAg
ICAgbV9zbG93UGF0aEJlZ2luID0gc2xvd1BhdGhCZWdpbjsKKyAgICAgICAgbV9jYWxsID0gY2Fs
bDsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KKworICAgIHZvaWQgZmlu
YWxpemUoTGlua0J1ZmZlciYpOworICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBidXR0ZXJmbHkpOworICAgIAor
ICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKKyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOworICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbV9zdHJ1Y3R1cmVJbW07CisgICAgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zdHJ1Y3R1cmVDaGVjazsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgbV9wcm9wZXJ0eVN0b3JhZ2VMb2FkOworICAg
IEFzc2VtYmxlckxhYmVsIG1fbG9hZE9yU3RvcmU7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBBc3NlbWJsZXJMYWJlbCBtX3RhZ0xvYWRPclN0b3JlOworI2VuZGlmCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fZG9uZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0
aEJlZ2luOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKK307CisKK2NsYXNzIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CitwdWJsaWM6Cisg
ICAgSklUR2V0QnlJZEdlbmVyYXRvcigpIHsgfQorCisgICAgSklUR2V0QnlJZEdlbmVyYXRvcigK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBib29sIHJlZ2lzdGVyc0ZsdXNoZWQpCisgICAgICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMsIGJhc2Us
IHZhbHVlLCByZWdpc3RlcnNGbHVzaGVkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7Cit9OworCitjbGFzcyBKSVRQdXRCeUlk
R2VuZXJhdG9yIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgeworcHVibGljOgorICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IoKSB7IH0KKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCisgICAgICAg
IENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBKU1ZhbHVlUmVncyBiYXNlLAorICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNj
cmF0Y2gsIGJvb2wgcmVnaXN0ZXJzRmx1c2hlZCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgIAor
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIAorICAgIFZf
SklUT3BlcmF0aW9uX0VTc2lKSkkgc2xvd1BhdGhGdW5jdGlvbigpOworCitwcml2YXRlOgorICAg
IEdQUlJlZyBtX3NjcmF0Y2g7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAgICBQdXRLaW5k
IG1fcHV0S2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKworI2VuZGlmIC8vIEpJVElubGluZUNhY2hlR2VuZXJhdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCShyZXZpc2lvbiAxNTc2NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsNDAgKzQ3NiwyMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgCiAgICAgZW1p
dExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwotICAgIGNvbXBpbGVHZXRCeUlkSG90UGF0aChpZGVudCk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0
X2J5X2lkKSwgZHN0LCByZWdUMSwgcmVnVDApOwotfQogCi12b2lkIEpJVDo6Y29tcGlsZUdldEJ5
SWRIb3RQYXRoKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KQotewogICAgIGlmICgqaWRlbnQgPT0g
bV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCByZWdUMik7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4
KHJlZ1QyLCByZWdUMywgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgfQogCi0gICAgRGF0YUxhYmVs
UHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNr
ID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICBOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwK
LSAgICAgICAgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2lu
dGVyKSkpOwotICAgIAotICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKLSAgICAKLSAg
ICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgY29u
dmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICAKLSAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2hUYWcg
PSBsb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgQWRkcmVzcyhy
ZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QxKTsKLSAgICBEYXRhTGFiZWxD
b21wYWN0IGxvYWRXaXRoUGF0Y2hQYXlsb2FkID0gbG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zm
c2V0UGF0Y2goCi0gICAgICAgIEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZz
ZXQpLCByZWdUMCk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAg
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoCi0gICAgICAgIFByb3BlcnR5
U3R1YkNvbXBpbGF0aW9uSW5mbygKLSAgICAgICAgICAgIFByb3BlcnR5U3R1YkdldEJ5SWQsIG1f
Ynl0ZWNvZGVPZmZzZXQsIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3RydWN0dXJlQ2hlY2ssCi0gICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VMb2FkLCBsb2FkV2l0aFBhdGNoUGF5bG9hZCwgbG9hZFdp
dGhQYXRjaFRhZywgZG9uZSkpOworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgdHJ1ZSk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocmVnVDQpOworICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENP
REVfTEVOR1RIKG9wX2dldF9ieV9pZCksIGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNTIxLDEzICs1MDMs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdAogICAgIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VWUmVnKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CiAKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOworICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAg
IAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRTdHVi
SW5mbygpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGUsIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCBy
ZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihXaXRoUHJvZmlsZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBzdHVi
SW5mbywgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKLQotICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrK10uc2xv
d0Nhc2VJbmZvKGNvbGRQYXRoQmVnaW4sIGNhbGwsIHN0dWJJbmZvKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTUzOCw2OCAr
NTIwLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICAK
ICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgZGlyZWN0
ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUub3BlcmFuZDsKICAgICAKICAgICBlbWl0TG9hZDIo
YmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIAotICAgIERhdGFMYWJl
bFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVj
ayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUs
Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9p
bnRlcikpKTsKLSAgICAKLSAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7Ci0gICAgCi0g
ICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDIsIHJlZ1QxLCByZWdUMiwgU2hvdWxkRmls
dGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotCi0gICAgQ29u
dmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIGNvbnZlcnRp
YmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgCi0gICAgLy8gUGF5bG9hZC4KLSAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQ
YXRjaDEgPQotICAgICAgICBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMiwgQWRk
cmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOwotICAgIC8vIFRhZy4KLSAg
ICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaDIgPQotICAgICAgICBzdG9yZTMyV2l0aEFkZHJl
c3NPZmZzZXRQYXRjaChyZWdUMywgQWRkcmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9m
ZnNldCkpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fcHJv
cGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKAotICAgICAgICBQcm9wZXJ0eVN0dWJD
b21waWxhdGlvbkluZm8oCi0gICAgICAgICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVj
b2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIHN0cnVjdHVyZUNoZWNrLAotICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlTG9hZCwgc3RvcmVXaXRoUGF0Y2gxLCBzdG9yZVdpdGhQYXRjaDIs
IGRvbmUpKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1Qz
LCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7
CisgICAgCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldCgpLAorICAgICAgICBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
LCByZWdUMSwgdHJ1ZSwKKyAgICAgICAgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIGRpcmVjdCA/
IERpcmVjdCA6IE5vdERpcmVjdCk7CisgICAgCisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgCisgICAgbV9w
dXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgIGludCBk
aXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCiAgICAgbGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCi0gICAgVl9KSVRPcGVyYXRp
b25fRVNzaUpKSSBvcHRpbWl6ZWRDYWxsOwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNTdHJpY3RN
b2RlKCkpIHsKLSAgICAgICAgaWYgKGRpcmVjdCkKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwg
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGRpcmVjdCkKLSAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgfQorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAgICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbigKKyAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QzLCByZWdUMiwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKICAgICAKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHN0dWJJbmZvLCByZWdU
MywgcmVnVDIsIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7Ci0KLSAgICAvLyBUcmFjayB0
aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0
Y2ggaW5mb3JtYXRpb24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29sZFBhdGhCZWdp
biwgY2FsbCwgc3R1YkluZm8pOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiB9CiAKIC8vIENvbXBpbGUgYSBzdG9yZSBpbnRvIGFuIG9iamVjdCdzIHBy
b3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIGJhc2UuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU3NjYw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxNCwxOCArNTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKEluc3RydWN0aW9uKgogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgY29tcGlsZUdl
dEJ5SWRIb3RQYXRoKGJhc2VWUmVnLCBpZGVudCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShyZWdUNCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQot
dm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50KQotewotICAgIC8vIEFzIGZvciBwdXRfYnlfaWQsIGdldF9ieV9pZCByZXF1
aXJlcyB0aGUgb2Zmc2V0IG9mIHRoZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGFj
Y2VzcyB0byBiZSBwYXRjaGVkLgotICAgIC8vIEFkZGl0aW9uYWxseSwgZm9yIGdldF9ieV9pZCB3
ZSBuZWVkIHBhdGNoIHRoZSBvZmZzZXQgb2YgdGhlIGJyYW5jaCB0byB0aGUgc2xvdyBjYXNlICh3
ZSBwYXRjaCB0aGlzIHRvIGp1bXAKLSAgICAvLyB0byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUg
YWNjZXNzIHRyYW5wb2xpbmVzLCBhbmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHkt
bWFwIGFjY2VzcyBvZmZzZXQgYXMgYSBsYWJlbAotICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBv
bmUgb2YgdGhlc2UgdHJhbXBvbGllcyBmaW5kcyBhIG1hdGNoLgotCisgICAgCiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCpp
ZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7CkBAIC01MzMsMjUgKzUyMiwxNSBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQ
YXRoKGludCBiYXNlCiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUlu
ZGV4KHJlZ1QxLCByZWdUMiwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgfQogCi0gICAgRGF0YUxh
YmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNo
ZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICBOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFy
ZSwKLSAgICAgICAgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQ
b2ludGVyKSkpOwotICAgIAotICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKLSAgICAK
LSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAg
Y29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAKLSAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2gg
PSBsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCgKLSAgICAgICAgQWRkcmVzcyhy
ZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKLSAgICAKLSAgICBMYWJl
bCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25J
bmZvLmFwcGVuZCgKLSAgICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKAotICAgICAg
ICAgICAgUHJvcGVydHlTdHViR2V0QnlJZCwgbV9ieXRlY29kZU9mZnNldCwgc3RydWN0dXJlVG9D
b21wYXJlLCBzdHJ1Y3R1cmVDaGVjaywKLSAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUxvYWQs
IGxvYWRXaXRoUGF0Y2gsIGRvbmUpKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVy
U2V0KCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCB0
cnVlKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOworCisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShyZWdUNCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtNTYzLDE5ICs1NDIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChJbnN0cnVjdAogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2VW
UmVnKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGUs
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgc3R1YkluZm8sIHJlZ1QwLCBp
ZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxl
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25J
bmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhjb2xk
UGF0aEJlZ2luLCBjYWxsLCBzdHViSW5mbyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGJhc2VWUmVnID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWVWUmVnID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3Rv
cmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUg
YmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0
ZSBjb2RlCkBAIC01ODUsNjAgKzU2NSwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVpdGhlciB0aGUg
YmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBpZiB0aGUgU3RydWN0dXJlIGRvZXMgbm90
IG1hdGNoLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwotCi0gICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBQYXRjaGFibGVK
dW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAg
ICBOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZVRvQ29tcGFyZSwKLSAgICAgICAgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPih1bnVzZWRQb2ludGVyKSkpOwotICAgIAotICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVy
ZUNoZWNrKTsKICAgICAKICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIs
IHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcyk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0K
LSAgICAgICAgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICAKLSAgICBEYXRhTGFiZWwzMiBzdG9yZVdpdGhQ
YXRjaCA9Ci0gICAgICAgIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CisgICAgSklUUHV0QnlJZEdl
bmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVP
ZmZzZXQpLCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksCisgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDIsIHRydWUsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBkaXJl
Y3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOwogICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgp
OworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIAotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm8uYXBwZW5kKAotICAgICAgICBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oCi0gICAgICAg
ICAgICBQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBzdHJ1Y3R1cmVUb0Nv
bXBhcmUsIHN0cnVjdHVyZUNoZWNrLAotICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlTG9hZCwg
c3RvcmVXaXRoUGF0Y2gsIGRvbmUpKTsKKyAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
aW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgIHVuc2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbih0aGlzKTsKICAgICAKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGlt
aXplZENhbGw7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAg
ICBpZiAoZGlyZWN0KQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0aW1p
emVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoZGlyZWN0KQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAg
ICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9jb2RlQmxvY2st
PmFkZFN0dWJJbmZvKCk7CisgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlk
c1ttX3B1dEJ5SWRJbmRleCsrXTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0
aW1pemVkQ2FsbCwgc3R1YkluZm8sIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKLSAgICAv
LyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJl
Y292ZXIgcGF0Y2ggaW5mb3JtYXRpb24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mb1ttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oY29s
ZFBhdGhCZWdpbiwgY2FsbCwgc3R1YkluZm8pOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIC8vIENvbXBpbGUgYSBzdG9yZSBpbnRvIGFuIG9i
amVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIHRoZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTU3NjU4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw2ICs3MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHNldEJpdChHUFJJbmZvOjp0b0luZGV4KHJl
ZykpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldChKU1ZhbHVlUmVncyByZWdzKQorICAgIHsK
KyAgICAgICAgaWYgKHJlZ3MudGFnR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IHNldChyZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgc2V0KHJlZ3MucGF5bG9hZEdQUigpKTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBzZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwo=
</data>
<flag name="review"
          id="237232"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>