<?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>21783</bug_id>
          
          <creation_ts>2008-10-21 23:41:23 -0700</creation_ts>
          <short_desc>Need more granular control over allocation of executable memory</short_desc>
          <delta_ts>2008-12-07 15:55:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96141</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-10-21 23:41:23 -0700</bug_when>
    <thetext>Currently fastMalloc automagically makes all pages executable to be win2k3 compatible and this is obviously less than ideal.

We only *need* executable memory for the final piece of memory that the JitCodeBuffer produces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96146</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-10-22 00:36:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/6309878&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101633</commentid>
    <comment_count>2</comment_count>
      <attachid>25808</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-06 01:24:50 -0800</bug_when>
    <thetext>Created attachment 25808
Patch o&apos; doom

First pass at this forsaken thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101757</commentid>
    <comment_count>3</comment_count>
      <attachid>25808</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-07 14:04:01 -0800</bug_when>
    <thetext>Comment on attachment 25808
Patch o&apos; doom

&gt; ExecutablePool::Allocation alloc = {(char*)mmap(NULL, n, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0), n};

You don&apos;t need to cast the result of a void* memory allocation, but it seems to be our style to do so. This should be a C++ style cast.

&gt;class ExecutablePool : public RefCounted&lt;ExecutablePool&gt; {
&gt;    struct Allocation {
&gt;        char* pages;
&gt;        size_t size;
&gt;    };
&gt;    typedef Vector&lt;Allocation, 2&gt; AllocationList;

Do we rely on implicit private: at the beginning of class definitions?

&gt;          if (n &lt; (size_t)(m_end - m_freePtr)) {

Another C style cast that should be changed.

&gt;         if ((allocSize - n) &gt; (size_t)(m_end - m_freePtr)) {

Another.

&gt;      if ((((size_t)-1) - ExecutableAllocator::pageSize) &lt;= request)

You should be using std::numeric_limits&lt;size_t&gt;::max() instead of casting -1 to a size_t.

Other than that, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101765</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-07 15:45:20 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; You don&apos;t need to cast the result of a void* memory allocation, but it seems to
&gt; be our style to do so. This should be a C++ style cast.

Cameron, I think you&apos;re mistaken. You do have to cast void* in C++, even though you don&apos;t in plain C because it&apos;s a &quot;universal donor&quot; in C.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101768</commentid>
    <comment_count>5</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-07 15:51:18 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; You don&apos;t need to cast the result of a void* memory allocation, but it seems to
&gt; &gt; be our style to do so. This should be a C++ style cast.
&gt; 
&gt; Cameron, I think you&apos;re mistaken. You do have to cast void* in C++, even though
&gt; you don&apos;t in plain C because it&apos;s a &quot;universal donor&quot; in C.

Yeah, I am not sure why I said that. Of course you need to cast in C++.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101770</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-07 15:55:40 -0800</bug_when>
    <thetext>Landed with changes requested by Sam and Cameron

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
	M	JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj
	M	JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
	M	JavaScriptCore/assembler/AssemblerBuffer.h
	M	JavaScriptCore/assembler/MacroAssembler.h
	M	JavaScriptCore/assembler/X86Assembler.h
	M	JavaScriptCore/bytecode/CodeBlock.cpp
	M	JavaScriptCore/bytecode/CodeBlock.h
	M	JavaScriptCore/bytecode/Instruction.h
	M	JavaScriptCore/interpreter/Interpreter.cpp
	M	JavaScriptCore/interpreter/Interpreter.h
	A	JavaScriptCore/jit/ExecutableAllocator.cpp
	A	JavaScriptCore/jit/ExecutableAllocator.h
	A	JavaScriptCore/jit/ExecutableAllocatorMMAP.cpp
	A	JavaScriptCore/jit/ExecutableAllocatorWin.cpp
	M	JavaScriptCore/jit/JIT.cpp
	M	JavaScriptCore/jit/JIT.h
	M	JavaScriptCore/jit/JITPropertyAccess.cpp
	M	JavaScriptCore/parser/Nodes.cpp
	M	JavaScriptCore/runtime/JSGlobalData.h
	M	JavaScriptCore/runtime/RegExp.cpp
	M	JavaScriptCore/runtime/RegExp.h
	M	JavaScriptCore/runtime/RegExpConstructor.cpp
	M	JavaScriptCore/runtime/RegExpPrototype.cpp
	M	JavaScriptCore/runtime/StringPrototype.cpp
	M	JavaScriptCore/wrec/WREC.cpp
	M	JavaScriptCore/wrec/WRECGenerator.h
	M	JavaScriptCore/wtf/FastMalloc.cpp
	M	JavaScriptCore/wtf/FastMalloc.h
	M	JavaScriptCore/wtf/TCSystemAlloc.cpp
Committed r39083

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25808</attachid>
            <date>2008-12-06 01:24:50 -0800</date>
            <delta_ts>2008-12-07 14:04:01 -0800</delta_ts>
            <desc>Patch o&apos; doom</desc>
            <filename>executable-allocator.patch</filename>
            <type>text/plain</type>
            <size>55251</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2NzJmMDRmLi4xM2JlMjczIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEg
QEAKKzIwMDgtMTItMDUgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNjMwOTg3OD4gTmVlZCBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3Zl
ciBhbGxvY2F0aW9uIG9mIGV4ZWN1dGFibGUgbWVtb3J5ICgyMTc4MykKKyAgICAgICAgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc4Mz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkoT09QUykKKworICAgICAgICBBZGQgYSBuZXcgYWxsb2NhdG9yIGZvciB1
c2UgYnkgdGhlIEpJVCB0aGF0IHByb3ZpZGVzIGV4ZWN1dGFibGUgcGFnZXMsIHNvCisgICAgICAg
IHdlIGNhbiBnZXQgcmlkIG9mIHRoZSBjdXJyZW50IGhhY2sgdGhhdCBtYWtlcyB0aGUgZW50aXJl
IGhlYXAgZXhlY3V0YWJsZS4KKworICAgICAgICAxLTIlIHByb2dyZXNzaW9uIG9uIFN1blNwaWRl
ci12OCwgMSUgb24gU3VuU3BpZGVyLiAgUmVkdWNlcyBtZW1vcnkgdXNhZ2UgYXMgd2VsbCEKKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL2pzYy9qc2MudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4
ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlcjo6Y29weUNvZGUpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoK
KyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpzaXplKToKKyAgICAgICAgKEpTQzo6WDg2QXNz
ZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OmRlcmVmU3RydWN0dXJl
cyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6fkludGVycHJldGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRl
cnByZXRlci5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hp
bmVUcmFtcG9saW5lcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmludGlhbGlzZVBhZ2VTaXplKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OnN5c3Rl
bUFsbG9jKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UpOgor
ICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlUG9vbDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6
OmFsbG9jKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6On5FeGVjdXRhYmxlUG9vbCk6
CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVQb29sOjphdmFpbGFibGUpOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlUG9vbDo6RXhlY3V0YWJsZVBvb2wpOgorICAgICAgICAoSlNDOjpFeGVjdXRh
YmxlUG9vbDo6cG9vbEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRv
cjo6RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0
b3I6OnBvb2xGb3JTaXplKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OnNpemVGb3JB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW4pOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFJlcGxhY2Up
OgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpwb29sRm9yU2l6ZSk6CisgICAgICAgICogcnVudGltZS9S
ZWdFeHAuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHA6OlJlZ0V4cCk6CisgICAgICAgIChKU0M6
OlJlZ0V4cDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjp+UmVnRXhwKToKKyAgICAg
ICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RSZWdFeHApOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29t
cGlsZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNNYXRjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVu
Y1NlYXJjaCk6CisgICAgICAgICogd3JlYy9XUkVDLmNwcDoKKyAgICAgICAgKEpTQzo6V1JFQzo6
R2VuZXJhdG9yOjpjb21waWxlUmVnRXhwKToKKyAgICAgICAgKiB3cmVjL1dSRUNHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAgICogd3RmL0Zhc3RNYWxs
b2MuaDoKKyAgICAgICAgKiB3dGYvVENTeXN0ZW1BbGxvYy5jcHA6CisgICAgICAgIChUcnlNbWFw
KToKKyAgICAgICAgKFRyeVZpcnR1YWxBbGxvYyk6CisgICAgICAgIChUcnlEZXZNZW0pOgorICAg
ICAgICAoVENNYWxsb2NfU3lzdGVtUmVsZWFzZSk6CisKIDIwMDgtMTItMDUgIEdhdmluIEJhcnJh
Y2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9s
aXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvaiBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oKaW5kZXggODhkNzdiNi4uZmEwMDhhYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagor
KysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qCkBAIC0zMzMsNiArMzMzLDE0IEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGludGVycHJldGVyXENh
bGxGcmFtZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxpbnRlcnByZXRlclxDYWxsRnJhbWUuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQ2xhc3NJbmZv
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzU3LDYgKzM2NSwxMCBAQAogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXENv
bXBsZXRpb24uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxDb21wbGV0aW9uLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpAQCAtNDM3LDE0ICs0NDksNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbnRlcnByZXRlclxDYWxsRnJhbWUuY3BwIg0KLQkJCQk+
DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJw
cmV0ZXJcQ2FsbEZyYW1lLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KQEAgLTUwMSwxMCArNTA1LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxDb21wbGV0aW9u
LmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJ1bnRpbWVcSW50ZXJwcmV0ZXIuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0x
MjQyLDYyICsxMjQyLDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caml0XEpJVC5jcHAiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1
cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlX1BHT3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxU
b29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlXaG9sZVByb2dyYW1P
cHRpbWl6YXRpb249ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
Ci0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklU
Q2FsbC5jcHAiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJS
ZWxlYXNlX1BHT3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCINCi0JCQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249ImZhbHNlIg0K
LQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MuY3BwIg0K
LQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZV9QR098
V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiDQotCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJmYWxzZSINCi0JCQkJCS8+DQot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caml0XEpJVEFyaXRobWV0aWMuY3BwIg0KLQkJCQk+DQotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQotCQkJCQk+
DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJV2hv
bGVQcm9ncmFtT3B0aW1pemF0aW9uPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEpJVC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5caml0XEpJVElubGluZU1ldGhvZHMuaCINCi0JCQkJPg0KLQkJCTwvRmls
ZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXEV2YWxDb2Rl
Q2FjaGUuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMzE0LDE5ICsxMjU4LDE5IEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caW50ZXJwcmV0ZXJcSW50ZXJwcmV0ZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJcSW50ZXJwcmV0
ZXIuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGludGVycHJldGVyXEludGVycHJldGVyLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIg0KIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW50ZXJwcmV0ZXJcSW50
ZXJwcmV0ZXIuaCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTEzODIs
MTEgKzEzMjYsMTEgQEAKIAkJCU5hbWU9ImFzc2VtYmxlciINCiAJCQk+DQogCQkJPEZpbGUNCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxhc3NlbWJsZXJcWDg2QXNzZW1ibGVyLmgiDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5cYXNzZW1ibGVyXEFzc2VtYmxlckJ1ZmZlci5oIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYXNzZW1ibGVy
XEFzc2VtYmxlckJ1ZmZlci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGFzc2VtYmxlclxY
ODZBc3NlbWJsZXIuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KQEAgLTEz
OTcsNjMgKzEzNDEsMTIyIEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3cmVjXENoYXJhY3Rl
ckNsYXNzLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCi0NCiAJCQk8RmlsZQ0KLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHdyZWNcV1JFQ1BhcnNlci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHdyZWNcQ2hhcmFjdGVyQ2xhc3MuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCi0NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHdyZWNcV1JFQ0Z1bmN0b3JzLmNwcCINCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3cmVjXENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KLQ0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3JlY1xXUkVDR2VuZXJhdG9yLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3
cmVjXENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCi0N
CiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHdyZWNcQ2hhcmFjdGVyQ2xhc3Mu
aCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3cmVjXFF1YW50aWZpZXIuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHdyZWNcV1JF
Qy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlx3cmVjXFdSRUMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHdyZWNcV1JFQ0Z1bmN0b3JzLmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCi0NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHdyZWNcV1JF
Q0Z1bmN0b3JzLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQotDQogCQkJPEZpbGUNCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlx3cmVjXFF1YW50aWZpZXIuaCINCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlx3cmVjXFdSRUNHZW5lcmF0b3IuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KLQ0KIAkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3JlY1xXUkVDR2VuZXJhdG9yLmgiDQog
CQkJCT4NCiAJCQk8L0ZpbGU+DQotDQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
Llx3cmVjXFdSRUNQYXJzZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KLQ0KIAkJCTxGaWxl
DQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3JlY1xDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9y
LmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3cmVjXFdSRUNQYXJzZXIuaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9ImppdCIN
CisJCQk+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3cmVjXENoYXJhY3Rl
ckNsYXNzQ29uc3RydWN0b3IuaCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklULmNw
cCINCiAJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2Vf
UEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iZmFsc2UiDQorCQkJCQkv
Pg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHdyZWNcV1JFQy5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5caml0XEpJVC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5cd3JlY1xXUkVDLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGppdFxKSVRBcml0aG1ldGljLmNwcCINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CisJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXph
dGlvbj0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRDYWxsLmNw
cCINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2Vf
UEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iZmFsc2UiDQorCQkJCQkv
Pg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRJbmxpbmVNZXRob2RzLmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUUHJv
cGVydHlBY2Nlc3MuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJ
TmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJm
YWxzZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0K
IAkJPC9GaWx0ZXI+DQogCTwvRmlsZXM+DQogCTxHbG9iYWxzPg0KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9qc2MvanNjLnZjcHJvaiBiL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9qc2MvanNjLnZjcHJvagppbmRleCBhMTg1Mjgz
Li4wYjNhMDA2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovanNjL2pzYy52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL2pzYy9qc2MudmNwcm9qCkBAIC0zOSw3ICszOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQog
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0
b3JpZXM9IiZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxvYmpcSmF2YVNjcmlwdENvcmVcJChDb25maWd1cmF0aW9uTmFtZSlcRGVy
aXZlZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsmcXVvdDsuLi8uLi9vcy13aW4zMi8mcXVvdDs7Li4v
Li4vcGNyZS87Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi93cmVjLzsuLi8uLi9wYXJzZXIvOy4uLy4u
L3J1bnRpbWUvOy4uLy4uL1ZNLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4u
Ly4uL3d0Zi87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2J5dGVjb21waWxlci87JnF1b3Q7JChXZWJL
aXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcaWN1JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVz
RGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7Oy4uLy4uLy4uL2ljdS9pbmNsdWRlOyZxdW90OyQo
V2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVk
ZURpcmVjdG9yaWVzPSImcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZSZxdW90OzsmcXVv
dDskKFdlYktpdE91dHB1dERpcilcb2JqXEphdmFTY3JpcHRDb3JlXCQoQ29uZmlndXJhdGlvbk5h
bWUpXERlcml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87JnF1b3Q7Li4vLi4vb3Mtd2luMzIvJnF1
b3Q7Oy4uLy4uL3BjcmUvOy4uLy4uL2Fzc2VtYmxlci87Li4vLi4vd3JlYy87Li4vLi4vcGFyc2Vy
LzsuLi8uLi9ydW50aW1lLzsuLi8uLi9WTS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVycHJl
dGVyLzsuLi8uLi93dGYvOy4uLy4uL2RlYnVnZ2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOyZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXGljdSZxdW90OzsmcXVvdDskKFdlYktpdExp
YnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OzsuLi8uLi8uLi9pY3UvaW5jbHVkZTsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OzsuLi8uLi9qaXQvIg0KIAkJ
CQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19TVERfQyINCiAJCQkvPg0KIAkJCTxUb29sDQpA
QCAtMTA5LDcgKzEwOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxvYmpc
SmF2YVNjcmlwdENvcmVcJChDb25maWd1cmF0aW9uTmFtZSlcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7
Oy4uLy4uLzsmcXVvdDsuLi8uLi9vcy13aW4zMi8mcXVvdDs7Li4vLi4vcGNyZS87Li4vLi4vYXNz
ZW1ibGVyLzsuLi8uLi93cmVjLzsuLi8uLi9wYXJzZXIvOy4uLy4uL3J1bnRpbWUvOy4uLy4uL1ZN
LzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0Zi87Li4vLi4vZGVi
dWdnZXIvOy4uLy4uL2J5dGVjb21waWxlci87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGlu
Y2x1ZGVcaWN1JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJl
YWRzJnF1b3Q7Oy4uLy4uLy4uL2ljdS9pbmNsdWRlOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGly
KVxpbmNsdWRlJnF1b3Q7Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERp
cilcb2JqXEphdmFTY3JpcHRDb3JlXCQoQ29uZmlndXJhdGlvbk5hbWUpXERlcml2ZWRTb3VyY2Vz
XCZxdW90OzsuLi8uLi87JnF1b3Q7Li4vLi4vb3Mtd2luMzIvJnF1b3Q7Oy4uLy4uL3BjcmUvOy4u
Ly4uL2Fzc2VtYmxlci87Li4vLi4vd3JlYy87Li4vLi4vcGFyc2VyLzsuLi8uLi9ydW50aW1lLzsu
Li8uLi9WTS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4u
Ly4uL2RlYnVnZ2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOyZxdW90OyQoV2ViS2l0TGlicmFyaWVz
RGlyKVxpbmNsdWRlXGljdSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVk
ZVxwdGhyZWFkcyZxdW90OzsuLi8uLi8uLi9pY3UvaW5jbHVkZTsmcXVvdDskKFdlYktpdExpYnJh
cmllc0RpcilcaW5jbHVkZSZxdW90OzsuLi8uLi9qaXQvIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz0iX19TVERfQyINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTc4LDcgKzE3OCw3IEBA
CiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFk
ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcSmF2YVNjcmlwdENvcmVcJChD
b25maWd1cmF0aW9uTmFtZSlcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsmcXVvdDsuLi8u
Li9vcy13aW4zMi8mcXVvdDs7Li4vLi4vcGNyZS87Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi93cmVj
LzsuLi8uLi9wYXJzZXIvOy4uLy4uL3J1bnRpbWUvOy4uLy4uL1ZNLzsuLi8uLi9ieXRlY29kZS87
Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0Zi87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2J5dGVj
b21waWxlci87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcaWN1JnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7Oy4uLy4uLy4u
L2ljdS9pbmNsdWRlOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7Ig0K
KwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcb2JqXEphdmFTY3JpcHRD
b3JlXCQoQ29uZmlndXJhdGlvbk5hbWUpXERlcml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87JnF1
b3Q7Li4vLi4vb3Mtd2luMzIvJnF1b3Q7Oy4uLy4uL3BjcmUvOy4uLy4uL2Fzc2VtYmxlci87Li4v
Li4vd3JlYy87Li4vLi4vcGFyc2VyLzsuLi8uLi9ydW50aW1lLzsuLi8uLi9WTS87Li4vLi4vYnl0
ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL2RlYnVnZ2VyLzsuLi8u
Li9ieXRlY29tcGlsZXIvOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXGljdSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90Ozsu
Li8uLi8uLi9pY3UvaW5jbHVkZTsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZx
dW90OzsuLi8uLi9qaXQvIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19TVERfQyIN
CiAJCQkvPg0KIAkJCTxUb29sDQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmY2M2M1Yi4uYmExNTI5MSAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xNTIsNiArMTUyLDggQEAKIAkJQTcyNzAwOTAwREFDNkJCQzAw
RTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTcyNzAwNzgwREFDNjA1NjAwRTU0OEQ3IC8qIEpTTm90QW5PYmpl
Y3QuY3BwICovOyB9OwogCQlBNzI3MDFCOTBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVs
cGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcy
NzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCAqLzsgfTsKIAkJQTcy
N0ZGNkIwREEzMDkyMjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcyN0ZGNjYwREEzMDUz
QjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwICovOyB9OworCQlBNzY2QjQ0
RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAg
Ki87IH07CiAJCUJDMDJFOTBEMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwNTBF
MTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oICovOyB9OwogCQlCQzAyRTkwRjBF
MTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJv
clByb3RvdHlwZS5oICovOyB9OwogCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMwMkU5MDkwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IuaCAqLzsgfTsKQEAgLTYyOSw2ICs2MzEsOCBAQAogCQlBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4
RDcgLyogRXhjZXB0aW9uSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeGNlcHRpb25IZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MjdG
RjY1MERBMzA1M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcyN0ZGNjYwREEzMDUzQjAwRTU0OEQ3IC8qIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3RTQyQzE4MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RhdGljU2NvcGVPYmplY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNDJDMTkwRTM5Mzg4MzAwNjVBNTQ0IC8qIEpTU3Rh
dGljU2NvcGVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTdGF0aWNTY29wZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
RTg5NDMxMENEMDYwMjQwMDM2NzE3OSAvKiBKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyNiw2ICs5MzAsOCBAQAogCQkJCTg2
Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggKi8sCiAJCQkJMTQy
OUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgKi8sCiAJCQkJMTQyOUQ5MkUwRUQyMkQ3
MDAwQjg5NjE5IC8qIEpJVC5oICovLAorCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBF
eGVjdXRhYmxlQWxsb2NhdG9yLmggKi8sCisJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8q
IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBqaXQ7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTYzNyw2ICsxNjQzLDcgQEAKIAkJCQk5NkE3NDY0
MTBFRERGNzA2MDA5MDQ3NzkgLyogRXNjYXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDMzZF
RUEwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTk3OSw2ICsxOTg2LDcgQEAKIAkJCQk4NkNDODVBMzBF
RTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkNDODVD
NDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZBOTBFRDAwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyLmgKaW5kZXggNGFjZTNmNi4uNTRmZTNkMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaApAQCAtMzEsMTEgKzMxLDEzIEBACiAjaWYgRU5BQkxF
KEFTU0VNQkxFUikKIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEFsbG9jYXRv
cjsKICAgICBjbGFzcyBBc3NlbWJsZXJCdWZmZXIgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGlubGluZUNhcGFjaXR5ID0gMjU2OwogICAgIHB1YmxpYzoKQEAgLTEwOSwxNyArMTExLDE3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyOwogICAgICAgICB9
CiAKLSAgICAgICAgaW50IHNpemUoKQorICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBtX3NpemU7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
KiBleGVjdXRhYmxlQ29weSgpCisgICAgICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFi
bGVQb29sKiBhbGxvY2F0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9zaXplKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBX
VEY6OmZhc3RNYWxsb2NFeGVjdXRhYmxlKG1fc2l6ZSk7CisgICAgICAgICAgICB2b2lkKiByZXN1
bHQgPSBhbGxvY2F0b3ItPmFsbG9jKG1fc2l6ZSk7CiAKICAgICAgICAgICAgIGlmICghcmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAppbmRleCA3YjU0ODExLi4xMWRjZWU2IDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaApAQCAtNTMsOSArNTMsMTAgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAgICAgCi0gICAgdm9pZCogY29weUNvZGUoKQorICAgIHNpemVfdCBzaXplKCkg
eyByZXR1cm4gbV9hc3NlbWJsZXIuc2l6ZSgpOyB9CisgICAgdm9pZCogY29weUNvZGUoRXhlY3V0
YWJsZVBvb2wqIGFsbG9jYXRvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5l
eGVjdXRhYmxlQ29weSgpOworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNv
cHkoYWxsb2NhdG9yKTsKICAgICB9CiAKICAgICAvLyBBZGRyZXNzOgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oCmluZGV4IDVmMzIwYTQuLjVmY2MzNDIgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAorKysgYi9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKQEAgLTIxMCw2ICsyMTAsOCBAQCBwdWJsaWM6
CiAgICAgewogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXIuc2l6ZSgpOyB9CisgICAgCiAgICAgdm9pZCBpbnQzKCkKICAgICB7CiAgICAgICAgIG1fYnVm
ZmVyLnB1dEJ5dGUoT1BfSU5UMyk7CkBAIC0xMTEzLDkgKzExMTUsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPih3aGVyZSlbLTFdID0gKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGRlc3RpbmF0aW9uKSAtIHdoZXJlKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCogZXhlY3V0YWJsZUNvcHkoKQorICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFi
bGVQb29sKiBhbGxvY2F0b3IpCiAgICAgewotICAgICAgICB2b2lkKiBjb3B5ID0gbV9idWZmZXIu
ZXhlY3V0YWJsZUNvcHkoKTsKKyAgICAgICAgdm9pZCogY29weSA9IG1fYnVmZmVyLmV4ZWN1dGFi
bGVDb3B5KGFsbG9jYXRvcik7CiAgICAgICAgIEFTU0VSVChjb3B5KTsKICAgICAgICAgcmV0dXJu
IGNvcHk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcCBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggYmU0
YTEwZS4uNTk3NTViOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC05
NjAsMTEgKzk2MCw4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgICAgIGRlcmVmU3Ry
dWN0dXJlcygmaW5zdHJ1Y3Rpb25zW2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnNbaV1dKTsKICAg
ICB9CiAKLSAgICBmb3IgKHNpemVfdCBzaXplID0gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMu
c2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgIGZvciAoc2l6ZV90IHNpemUgPSBw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQog
ICAgICAgICBkZXJlZlN0cnVjdHVyZXMoJmluc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uc1tpXS5ieXRlY29kZUluZGV4XSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uc1tpXS5zdHViUm91dGluZSkKLSAgICAgICAgICAgIFdURjo6ZmFzdEZyZWVFeGVj
dXRhYmxlKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldLnN0dWJSb3V0aW5lKTsKLSAgICB9
CiAKICAgICBmb3IgKHNpemVfdCBzaXplID0gY2FsbExpbmtJbmZvcy5zaXplKCksIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gJmNh
bGxMaW5rSW5mb3NbaV07CkBAIC05NzQsOSArOTcxLDYgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2Nr
KCkKIAogI2lmIEVOQUJMRShKSVQpIAogICAgIHVubGlua0NhbGxlcnMoKTsKLQotICAgIGlmIChj
dGlDb2RlKQotICAgICAgICBXVEY6OmZhc3RGcmVlRXhlY3V0YWJsZShjdGlDb2RlKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBi
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGQzM2NlODMuLjFmNjMz
ZTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0zNzMsNiArMzczLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEV2YWxDb2RlQ2FjaGUgZXZhbENvZGVDYWNoZTsKIAog
ICAgICAgICBTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZTsKKyAgICAgICAgUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBqaXRBbGxvY2F0b3I7CiAgICAgcHJpdmF0ZToKICNpZiAhZGVmaW5lZChOREVCVUcp
IHx8IEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUq
LCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3Rv
cjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCA3NzRlODU1Li5lZDliYTcyIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTEwOSw5ICsxMDksNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5mby51
LnByb3RvLT5kZXJlZigpOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
IChpbmZvLnN0dWJSb3V0aW5lKQotICAgICAgICAgICAgICAgICAgICBXVEY6OmZhc3RGcmVlRXhl
Y3V0YWJsZShpbmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZDEy
NjE4ZS4uMGJkZWFiMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcApAQCAtNjUwLDkgKzY1MCw2IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmluaXRpYWxpemUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogCiBJbnRlcnByZXRlcjo6fkludGVycHJldGVyKCkKIHsK
LSNpZiBFTkFCTEUoSklUKQotICAgIEpJVDo6ZnJlZUNUSU1hY2hpbmVUcmFtcG9saW5lcyh0aGlz
KTsKLSNlbmRpZgogfQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaCBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmgKaW5kZXggNjQ2OTZjMC4uNjNkNTIzZSAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCkBAIC0zMzMsNiArMzMzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFNhbXBsaW5nVG9vbCogbV9zYW1wbGVyOwogCiAjaWYgRU5BQkxFKEpJVCkK
KyAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOwogICAgICAg
ICB2b2lkKiBtX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGluZTsKICAgICAgICAgdm9pZCogbV9jdGlT
dHJpbmdMZW5ndGhUcmFtcG9saW5lOwogICAgICAgICB2b2lkKiBtX2N0aVZpcnR1YWxDYWxsUHJl
TGluazsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWJlZDJhCi0tLSAvZGV2L251bGwKKysrIGIv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorCisjaWYg
RU5BQkxFKEFTU0VNQkxFUikKKworI2lmIEhBVkUoTU1BUCkKKyNpbmNsdWRlIDxzeXMvbW1hbi5o
PgorI2VsaWYgUExBVEZPUk0oV0lOX09TKQorI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgSlNDIHsKKworICAgIHNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpwYWdl
U2l6ZSA9IDA7CisKKyNpZiBIQVZFKE1NQVApCisKKyAgICB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmludGlhbGlzZVBhZ2VTaXplKCkKKyAgICB7CisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OnBhZ2VTaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgICB9CisKKyAgICBFeGVjdXRhYmxlUG9v
bDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IG4pCisgICAg
eworICAgICAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyA9IHsoY2hhciopbW1h
cChOVUxMLCBuLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLCBNQVBfUFJJVkFU
RSB8IE1BUF9BTk9OLCAtMSwgMCksIG59OworICAgICAgICByZXR1cm4gYWxsb2M7CisgICAgfQor
CisgICAgdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShjb25zdCBFeGVjdXRhYmxl
UG9vbDo6QWxsb2NhdGlvbiYgYWxsb2MpIAorICAgIHsgCisgICAgICAgIGlmIChtdW5tYXAoYWxs
b2MucGFnZXMsIGFsbG9jLnNpemUpKQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisjZWxpZiBIQVZFKFZJUlRVQUxBTExPQykKKyAgICB2b2lkIEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmludGlhbGlzZVBhZ2VTaXplKCkKKyAgICB7CisgICAgICAgIFNZU1RFTV9JTkZP
IHN5c3RlbV9pbmZvOworICAgICAgICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7CisgICAg
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6
ZTsKKyAgICB9CisKKyAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9v
bDo6c3lzdGVtQWxsb2Moc2l6ZV90IG4pCisgICAgeworICAgICAgICBFeGVjdXRhYmxlUG9vbDo6
QWxsb2NhdGlvbiBhbGxvYyA9IHtyZWludGVycHJldF9jYXN0PGNoYXIqPihWaXJ0dWFsQWxsb2Mo
MCwgbiwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFKSks
IG59OworICAgICAgICByZXR1cm4gYWxsb2M7CisgICAgfQorICAgIAorICAgIHZvaWQgRXhlY3V0
YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoY29uc3QgRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24m
IGFsbG9jKQorICAgIHsgCisgICAgICAgIFZpcnR1YWxGcmVlKGFsbG9jLnBhZ2VzLCAwLCBNRU1f
UkVMRUFTRSk7IAorICAgIH0KKyNlbmRpZgorICAgIAorfQorCisjZW5kaWYgLy8gSEFWRShBU1NF
TUJMRVIpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmMyMDZiCi0tLSAvZGV2L251bGwKKysrIGIvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApAQCAtMCwwICsxLDE2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEV4
ZWN1dGFibGVBbGxvY2F0b3JfaAorI2RlZmluZSBFeGVjdXRhYmxlQWxsb2NhdG9yX2gKKworI2lm
IEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKKyNkZWZpbmUgSklUX0FMTE9DQVRPUl9QQUdFX01BU0sgKEV4
ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplIC0gMSkKKyNkZWZpbmUgSklUX0FMTE9DQVRPUl9M
QVJHRV9BTExPQ19TSVpFIChFeGVjdXRhYmxlQWxsb2NhdG9yOjpwYWdlU2l6ZSAqIDQpCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZDb3VudGVk
PEV4ZWN1dGFibGVQb29sPiB7CisgICAgc3RydWN0IEFsbG9jYXRpb24geworICAgICAgICBjaGFy
KiBwYWdlczsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgfTsKKyAgICB0eXBlZGVmIFZlY3Rv
cjxBbGxvY2F0aW9uLCAyPiBBbGxvY2F0aW9uTGlzdDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gY3JlYXRlKHNpemVfdCBuKSB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRXhlY3V0YWJsZVBvb2wobikpOworICAgIH0KKworICAgIHZvaWQqIGFs
bG9jKHNpemVfdCBuKSB7CisgICAgICAgIGlmIChuIDwgKHNpemVfdCkobV9lbmQgLSBtX2ZyZWVQ
dHIpKSB7CisgICAgICAgICAgICBjaGFyKiByZXN1bHQgPSBtX2ZyZWVQdHI7CisgICAgICAgICAg
ICAvLyBlbnN1cmUgbV9mcmVlUHRyIGlzIHdvcmQgYWxpZ25lZC4KKyAgICAgICAgICAgIG1fZnJl
ZVB0ciArPSBuICsgKHNpemVvZih2b2lkKikgLSBuICYgKHNpemVvZih2b2lkKikgLSAxKSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8gSW5zdWZm
aWNpZW50IHNwYWNlIHRvIGFsbG9jYXRlIGluIHRoZSBleGlzdGluZyBwb29sCisgICAgICAgIC8v
IHNvIHdlIG5lZWQgYWxsb2NhdGUgaW50byBhIG5ldyBwb29sCisgICAgICAgIHJldHVybiBwb29s
QWxsb2NhdGUobik7CisgICAgfQorICAgIAorICAgIH5FeGVjdXRhYmxlUG9vbCgpCisgICAgewor
ICAgICAgICBBbGxvY2F0aW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wb29scy5lbmQo
KTsKKyAgICAgICAgZm9yIChBbGxvY2F0aW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgcHRyID0gbV9w
b29scy5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgICAgIEV4ZWN1dGFibGVQ
b29sOjpzeXN0ZW1SZWxlYXNlKCpwdHIpOworICAgIH0KKworICAgIHNpemVfdCBhdmFpbGFibGUo
KSBjb25zdCB7IHJldHVybiAobV9wb29scy5zaXplKCkgPiAxKSA/IDAgOiBtX2VuZCAtIG1fZnJl
ZVB0cjsgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgQWxsb2NhdGlvbiBzeXN0ZW1BbGxvYyhzaXpl
X3Qgbik7CisgICAgc3RhdGljIHZvaWQgc3lzdGVtUmVsZWFzZShjb25zdCBBbGxvY2F0aW9uJiBh
bGxvYyk7CisKKyAgICBFeGVjdXRhYmxlUG9vbChzaXplX3QgbikKKyAgICB7CisgICAgICAgIHNp
emVfdCBhbGxvY1NpemUgPSBzaXplRm9yQWxsb2NhdGlvbihuKTsKKyAgICAgICAgQWxsb2NhdGlv
biBtZW0gPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOworICAgICAgICBtX3Bvb2xzLmFwcGVuZCht
ZW0pOworICAgICAgICBtX2ZyZWVQdHIgPSBtZW0ucGFnZXM7CisgICAgICAgIGlmICghbV9mcmVl
UHRyKQorICAgICAgICAgICAgQ1JBU0goKTsgLy8gRmFpbGVkIHRvIGFsbG9jYXRlCisgICAgICAg
IG1fZW5kID0gbV9mcmVlUHRyICsgYWxsb2NTaXplOworICAgIH0KKworICAgIHN0YXRpYyBpbmxp
bmUgc2l6ZV90IHNpemVGb3JBbGxvY2F0aW9uKHNpemVfdCByZXF1ZXN0KTsKKworICAgIHZvaWQq
IHBvb2xBbGxvY2F0ZShzaXplX3QgbikKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY1NpemUg
PSBzaXplRm9yQWxsb2NhdGlvbihuKTsKKyAgICAgICAgCisgICAgICAgIEFsbG9jYXRpb24gcmVz
dWx0ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKKyAgICAgICAgaWYgKCFyZXN1bHQucGFnZXMp
CisgICAgICAgICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2ZyZWVQdHIpOworICAgICAgICBpZiAoKGFsbG9jU2l6
ZSAtIG4pID4gKHNpemVfdCkobV9lbmQgLSBtX2ZyZWVQdHIpKSB7CisgICAgICAgICAgICAvLyBS
ZXBsYWNlIGFsbG9jYXRpb24gcG9vbAorICAgICAgICAgICAgbV9mcmVlUHRyID0gcmVzdWx0LnBh
Z2VzICsgbjsKKyAgICAgICAgICAgIG1fZW5kID0gcmVzdWx0LnBhZ2VzICsgYWxsb2NTaXplOwor
ICAgICAgICB9CisKKyAgICAgICAgbV9wb29scy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5wYWdlczsKKyAgICB9CisKKyAgICBjaGFyKiBtX2ZyZWVQdHI7CisgICAgY2hh
ciogbV9lbmQ7CisgICAgQWxsb2NhdGlvbkxpc3QgbV9wb29sczsKK307CisKK2NsYXNzIEV4ZWN1
dGFibGVBbGxvY2F0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBzaXplX3QgcGFnZVNpemU7Cisg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICBpZiAoIXBhZ2VTaXplKQor
ICAgICAgICAgICAgaW50aWFsaXNlUGFnZVNpemUoKTsKKyAgICAgICAgbV9zbWFsbEFsbG9jYXRp
b25Qb29sID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9D
X1NJWkUpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IHBvb2xGb3JT
aXplKHNpemVfdCBuKSB7CisgICAgICAgIC8vIFRyeSB0byBmaXQgaW4gdGhlIGV4aXN0aW5nIHNt
YWxsIGFsbG9jYXRvcgorICAgICAgICBpZiAobiA8IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+YXZh
aWxhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOworCisg
ICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzIGxhcmdlLCB3ZSBqdXN0IHByb3ZpZGUgYSB1bnNo
YXJlZCBhbGxvY2F0b3IKKyAgICAgICAgaWYgKG4gPiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9D
X1NJWkUpCisgICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShuKTsKKwor
ICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYWxsb2NhdG9yCisgICAgICAgIFJlZlB0cjxFeGVjdXRh
YmxlUG9vbD4gYWxsb2NhdG9yID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShKSVRfQUxMT0NBVE9S
X0xBUkdFX0FMTE9DX1NJWkUpOworCisgICAgICAgIC8vIElmIHRoZSBuZXcgYWxsb2NhdG9yIHdp
bGwgcmVzdWx0IGluIG1vcmUgZnJlZSBzcGFjZSB0aGFuIGluCisgICAgICAgIC8vIHRoZSBjdXJy
ZW50IHNtYWxsIGFsbG9jYXRvciwgdGhlbiB3ZSB3aWxsIHVzZSBpdCBpbnN0ZWFkCisgICAgICAg
IGlmICgoYWxsb2NhdG9yLT5hdmFpbGFibGUoKSAtIG4pID4gbV9zbWFsbEFsbG9jYXRpb25Qb29s
LT5hdmFpbGFibGUoKSkKKyAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IGFsbG9j
YXRvcjsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5yZWxlYXNlKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwor
ICAgIHN0YXRpYyB2b2lkIGludGlhbGlzZVBhZ2VTaXplKCk7Cit9OworCitpbmxpbmUgc2l6ZV90
IEV4ZWN1dGFibGVQb29sOjpzaXplRm9yQWxsb2NhdGlvbihzaXplX3QgcmVxdWVzdCkKK3sKKyAg
ICBpZiAoKCgoc2l6ZV90KS0xKSAtIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplKSA8PSBy
ZXF1ZXN0KQorICAgICAgICBDUkFTSCgpOyAvLyBBbGxvY2F0aW9uIGlzIHRvbyBsYXJnZQorICAg
IAorICAgIC8vIFJvdW5kIHVwIHRvIG5leHQgcGFnZSBib3VuZGFyeQorICAgIHNpemVfdCBzaXpl
ID0gcmVxdWVzdCArIEpJVF9BTExPQ0FUT1JfUEFHRV9NQVNLOworICAgIHNpemUgPSBzaXplICYg
fkpJVF9BTExPQ0FUT1JfUEFHRV9NQVNLOworICAgIEFTU0VSVChzaXplID49IHJlcXVlc3QpOwor
ICAgIHJldHVybiBzaXplOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQor
CisjZW5kaWYgLy8gIWRlZmluZWQoRXhlY3V0YWJsZUFsbG9jYXRvcikKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5k
ZXggNTBmNTQxNi4uMGZkMzA1MSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTE5OTAsNyArMTk5MCw5IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZSgpCiAKICAgICBBU1NFUlQobV9qbXBUYWJsZS5pc0Vt
cHR5KCkpOwogCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisgICAgUmVm
UHRyPEV4ZWN1dGFibGVQb29sPiBhbGxvY2F0b3IgPSBtX2dsb2JhbERhdGEtPnBvb2xGb3JTaXpl
KF9fIHNpemUoKSk7CisgICAgbV9jb2RlQmxvY2stPmppdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsK
KyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yLmdldCgpKTsKIAog
ICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJh
dGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CkBAIC0yMjE2LDggKzIyMTgsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoKQogICAgIF9fIGptcF9yKFg4
Njo6ZWF4KTsKIAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUg
Y29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUg
b2JqZWN0LgotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisgICAgbV9p
bnRlcnByZXRlci0+bV9leGVjdXRhYmxlUG9vbCA9IG1fZ2xvYmFsRGF0YS0+cG9vbEZvclNpemUo
X18gc2l6ZSgpKTsKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkobV9pbnRlcnBy
ZXRlci0+bV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7CiAKICAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgYXJyYXlfZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwogICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBhcnJheV9mYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJ
bnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC0yMjQxLDExICsy
MjQzLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKCkK
ICAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsID0gWDg2QXNzZW1ibGVyOjpnZXRS
ZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1YWxDYWxsQmVnaW4pOwogfQogCi12b2lkIEpJVDo6
ZnJlZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIpCi17Ci0g
ICAgV1RGOjpmYXN0RnJlZUV4ZWN1dGFibGUoaW50ZXJwcmV0ZXItPm1fY3RpQXJyYXlMZW5ndGhU
cmFtcG9saW5lKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVy
KFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVnaXN0ZXJJRCBkc3QpCiB7
CiAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlh
YmxlT2JqZWN0LCBkc3QpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDA1OWY4MjAuLjRlZGJjMWUgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKQEAgLTM1OCw3ICszNTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEpJVCBq
aXQoZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5l
VHJhbXBvbGluZXMoKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgdm9pZCBmcmVlQ1RJTWFj
aGluZVRyYW1wb2xpbmVzKEludGVycHJldGVyKik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcGF0
Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3MpOwogICAgICAgICBzdGF0
aWMgdm9pZCBwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcyk7
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBhNGNiYTBmLi4x
MWJiZTg2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTI4
NSw3ICsyODUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZQogICAgICAgICBmYWlsdXJlSnVt
cCA9IF9fIGptcCgpOwogICAgIH0KIAotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29w
eSgpOworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+aml0
QWxsb2NhdG9yLmdldCgpKTsKIAogICAgIGlmIChmYWlsdXJlQ2FzZXMuc2l6ZSgpKQogICAgICAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUp1bXAsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKQEAgLTM0Nyw3ICsz
NDcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKHZvaWQq
IHJldHVybkFkZHJlc3MpCiAgICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOwogICAg
IEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7CiAKLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0
YWJsZUNvcHkoKTsKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxv
Y2stPmppdEFsbG9jYXRvci5nZXQoKSk7CiAKICAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3Jt
YXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93
IGNhc2Ugcm91dGluZS4KICAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRT
bG93Q2FzZUNhbGw7CkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZFNlbGYoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHYK
ICAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4
LCBYODY6OmVheCk7CiAgICAgX18gcmV0KCk7CiAKLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0
YWJsZUNvcHkoKTsKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxv
Y2stPmppdEFsbG9jYXRvci5nZXQoKSk7CiAKICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
ZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9v
cF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CiAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZh
aWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3Bf
Z2V0X2J5X2lkX3NlbGZfZmFpbCkpOwpAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBw
cm90b3R5cGVTCiAKICAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwogCi0gICAgdm9pZCog
Y29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFi
bGVDb3B5KG1fY29kZUJsb2NrLT5qaXRBbGxvY2F0b3IuZ2V0KCkpOwogCiAgICAgLy8gVXNlIHRo
ZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0
aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluZm8uY2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0
dXJlKiBwcm90b3R5cGVTCiAKICAgICBfXyByZXQoKTsKIAotICAgIHZvaWQqIGNvZGUgPSBfXyBl
eGVjdXRhYmxlQ29weSgpOworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weShtX2Nv
ZGVCbG9jay0+aml0QWxsb2NhdG9yLmdldCgpKTsKIAogICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBmYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7CiAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBQb2x5bW9ycGhpYwogICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpT
VmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKICAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGpt
cCgpOwogCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisgICAgdm9pZCog
Y29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KG1fY29kZUJsb2NrLT5qaXRBbGxvY2F0b3IuZ2V0KCkp
OwogICAgIEFTU0VSVChjb2RlKTsKIAogICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlv
biB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2Fz
ZSByb3V0aW5lLgpAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpCiAK
ICAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwogCi0gICAgdm9pZCogY29kZSA9IF9fIGV4
ZWN1dGFibGVDb3B5KCk7CisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KG1fY29k
ZUJsb2NrLT5qaXRBbGxvY2F0b3IuZ2V0KCkpOwogCiAgICAgLy8gVXNlIHRoZSByZXBhdGNoIGlu
Zm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwg
c2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwpAQCAtNTY1LDcg
KzU2NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpCiAgICAgX18gbW92bF9tcihjYWNoZWRP
ZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOwogICAgIEptcFNy
YyBzdWNjZXNzID0gX18gam1wKCk7CiAKLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNv
cHkoKTsKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxvY2stPmpp
dEFsbG9jYXRvci5nZXQoKSk7CiAKICAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KICAgICB2b2lkKiBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CkBAIC02MjIsNyArNjIyLDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4KICAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7CiAgICAgSm1wU3JjIHN1Y2Nlc3Mg
PSBfXyBqbXAoKTsKIAotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworICAg
IHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+aml0QWxsb2NhdG9y
LmdldCgpKTsKIAogICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRo
ZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgog
ICAgIHZvaWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKQEAg
LTY2OSw3ICs2NjksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbgogICAgIF9fIG1vdmxfbXIo
Y2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKICAg
ICBfXyByZXQoKTsKIAotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworICAg
IHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+aml0QWxsb2NhdG9y
LmdldCgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWNrZXRzT2ZGYWlsLnNp
emUoKTsgKytpKQogICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYnVja2V0c09mRmFp
bFtpXSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlf
aWRfcHJvdG9fZmFpbCkpOwpAQCAtNjkyLDcgKzY5Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5SWRSZXBsYWNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zm
c2V0CiAgICAgX18gbW92bF9ybShYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFs
dWUqKSwgWDg2OjplYXgpOwogICAgIF9fIHJldCgpOwogCi0gICAgdm9pZCogY29kZSA9IF9fIGV4
ZWN1dGFibGVDb3B5KCk7CisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KG1fY29k
ZUJsb2NrLT5qaXRBbGxvY2F0b3IuZ2V0KCkpOwogICAgIAogICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUs
IGZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlf
b3BfcHV0X2J5X2lkX2ZhaWwpKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCmluZGV4IDMyMzYyN2Uu
LmQ1N2I0MzIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcApAQCAtMzEyLDcgKzMxMiw3IEBAIFJl
Z2lzdGVySUQqIFN0cmluZ05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkCiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0g
ICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9wYXR0ZXJuLCBtX2Zs
YWdzKTsKKyAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0
b3IuZ2xvYmFsRGF0YSgpLCBtX3BhdHRlcm4sIG1fZmxhZ3MpOwogICAgIGlmICghcmVnRXhwLT5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFN5bnRh
eEVycm9yLCAoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAiICsgVVN0cmluZyhyZWdFeHAt
PmVycm9yTWVzc2FnZSgpKSkuVVRGOFN0cmluZygpLmNfc3RyKCkpOwogICAgIGlmIChkc3QgPT0g
Z2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCmluZGV4IDZiNGJhYTQuLjQ1NTcxN2MgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlICJDb2xsZWN0b3IuaCIKKyNpbmNsdWRl
ICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAKIHN0
cnVjdCBPcGFxdWVKU0NsYXNzOwpAQCAtMTIwLDggKzEyMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBIZWFwIGhlYXA7CiAKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9v
bD4gcG9vbEZvclNpemUoc2l6ZV90IG4pIHsgcmV0dXJuIG1fYWxsb2NhdG9yUG9vbC5wb29sRm9y
U2l6ZShuKTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEpTR2xvYmFsRGF0YShib29sIGlzU2hh
cmVkID0gZmFsc2UpOworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIG1fYWxsb2NhdG9yUG9v
bDsKIAogICAgICAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiYgc2hhcmVkSW5zdGFuY2VJbnRlcm5h
bCgpOwogICAgIH07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5j
cHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKaW5kZXggNGNjYmU0YS4uZjk1
MmVhZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcApAQCAtMzcsNyArMzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHVzaW5nIG5hbWVzcGFjZSBXUkVDOwogI2VuZGlmCiAKLWlubGluZSBSZWdF
eHA6OlJlZ0V4cChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKQoraW5saW5lIFJlZ0V4cDo6UmVnRXhw
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybikKICAgICA6
IG1fcGF0dGVybihwYXR0ZXJuKQogICAgICwgbV9mbGFnQml0cygwKQogICAgICwgbV9yZWdFeHAo
MCkKQEAgLTQ1LDcgKzQ1LDcgQEAgaW5saW5lIFJlZ0V4cDo6UmVnRXhwKGNvbnN0IFVTdHJpbmcm
IHBhdHRlcm4pCiAgICAgLCBtX251bVN1YnBhdHRlcm5zKDApCiB7CiAjaWYgRU5BQkxFKFdSRUMp
Ci0gICAgbV93cmVjRnVuY3Rpb24gPSBHZW5lcmF0b3I6OmNvbXBpbGVSZWdFeHAocGF0dGVybiwg
Jm1fbnVtU3VicGF0dGVybnMsICZtX2NvbnN0cnVjdGlvbkVycm9yKTsKKyAgICBtX3dyZWNGdW5j
dGlvbiA9IEdlbmVyYXRvcjo6Y29tcGlsZVJlZ0V4cChnbG9iYWxEYXRhLCBwYXR0ZXJuLCAmbV9u
dW1TdWJwYXR0ZXJucywgJm1fY29uc3RydWN0aW9uRXJyb3IsIG1fZXhlY3V0YWJsZVBvb2wpOwog
ICAgIGlmIChtX3dyZWNGdW5jdGlvbikKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZhbGwgdGhy
b3VnaCB0byBub24tV1JFQyBjYXNlLgpAQCAtNTQsMTIgKzU0LDEyIEBAIGlubGluZSBSZWdFeHA6
OlJlZ0V4cChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKQogICAgICAgICBKU1JlZ0V4cERvTm90SWdu
b3JlQ2FzZSwgSlNSZWdFeHBTaW5nbGVMaW5lLCAmbV9udW1TdWJwYXR0ZXJucywgJm1fY29uc3Ry
dWN0aW9uRXJyb3IpOwogfQogCi1QYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwOjpjcmVhdGUoY29u
c3QgVVN0cmluZyYgcGF0dGVybikKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHA6OmNyZWF0ZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4pCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZWdFeHAocGF0dGVybikpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVnRXhwKGdsb2JhbERhdGEsIHBhdHRlcm4pKTsKIH0KIAotaW5saW5lIFJlZ0V4cDo6
UmVnRXhwKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKQoraW5s
aW5lIFJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmlu
ZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYgZmxhZ3MpCiAgICAgOiBtX3BhdHRlcm4ocGF0dGVy
bikKICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAgICAgLCBtX2ZsYWdCaXRzKDApCkBAIC04Niw3ICs4
Niw3IEBAIGlubGluZSBSZWdFeHA6OlJlZ0V4cChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBjb25z
dCBVU3RyaW5nJiBmbGFncykKICAgICB9CiAKICNpZiBFTkFCTEUoV1JFQykKLSAgICBtX3dyZWNG
dW5jdGlvbiA9IEdlbmVyYXRvcjo6Y29tcGlsZVJlZ0V4cChwYXR0ZXJuLCAmbV9udW1TdWJwYXR0
ZXJucywgJm1fY29uc3RydWN0aW9uRXJyb3IsIChtX2ZsYWdCaXRzICYgSWdub3JlQ2FzZSksICht
X2ZsYWdCaXRzICYgTXVsdGlsaW5lKSk7CisgICAgbV93cmVjRnVuY3Rpb24gPSBHZW5lcmF0b3I6
OmNvbXBpbGVSZWdFeHAoZ2xvYmFsRGF0YSwgcGF0dGVybiwgJm1fbnVtU3VicGF0dGVybnMsICZt
X2NvbnN0cnVjdGlvbkVycm9yLCBtX2V4ZWN1dGFibGVQb29sLCAobV9mbGFnQml0cyAmIElnbm9y
ZUNhc2UpLCAobV9mbGFnQml0cyAmIE11bHRpbGluZSkpOwogICAgIGlmIChtX3dyZWNGdW5jdGlv
bikKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub24tV1JFQyBjYXNl
LgpAQCAtOTUsMTggKzk1LDE0IEBAIGlubGluZSBSZWdFeHA6OlJlZ0V4cChjb25zdCBVU3RyaW5n
JiBwYXR0ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFncykKICAgICAgICAgaWdub3JlQ2FzZU9wdGlv
biwgbXVsdGlsaW5lT3B0aW9uLCAmbV9udW1TdWJwYXR0ZXJucywgJm1fY29uc3RydWN0aW9uRXJy
b3IpOwogfQogCi1QYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwOjpjcmVhdGUoY29uc3QgVVN0cmlu
ZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYgZmxhZ3MpCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVn
RXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0
ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFncykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJl
Z0V4cChwYXR0ZXJuLCBmbGFncykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVnRXhwKGds
b2JhbERhdGEsIHBhdHRlcm4sIGZsYWdzKSk7CiB9CiAKIFJlZ0V4cDo6flJlZ0V4cCgpCiB7CiAg
ICAganNSZWdFeHBGcmVlKG1fcmVnRXhwKTsKLSNpZiBFTkFCTEUoV1JFQykKLSAgICBpZiAobV93
cmVjRnVuY3Rpb24pCi0gICAgICAgIFdURjo6ZmFzdEZyZWVFeGVjdXRhYmxlKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KG1fd3JlY0Z1bmN0aW9uKSk7Ci0jZW5kaWYKIH0KIAogaW50IFJlZ0V4cDo6
bWF0Y2goY29uc3QgVVN0cmluZyYgcywgaW50IHN0YXJ0T2Zmc2V0LCBPd25BcnJheVB0cjxpbnQ+
KiBvdmVjdG9yKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKaW5kZXggYmMxODNkNS4uNTk0M2IxYSAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJV
U3RyaW5nLmgiCiAjaW5jbHVkZSAiV1JFQy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0
b3IuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKQEAgLTM0LDggKzM1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdF
eHAgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWdFeHA+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlZ0V4cD4gY3JlYXRlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4pOwot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZShjb25zdCBVU3RyaW5nJiBw
YXR0ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFncyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFJlZ0V4cD4gY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYg
cGF0dGVybik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZ0V4cD4gY3JlYXRlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgY29uc3QgVVN0cmlu
ZyYgZmxhZ3MpOwogICAgICAgICB+UmVnRXhwKCk7CiAKICAgICAgICAgYm9vbCBnbG9iYWwoKSBj
b25zdCB7IHJldHVybiBtX2ZsYWdCaXRzICYgR2xvYmFsOyB9CkBAIC01Miw4ICs1Myw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4
cChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKTsKLSAgICAgICAgUmVnRXhwKGNvbnN0IFVTdHJpbmcm
IHBhdHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICAgICAgUmVnRXhwKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybik7CisgICAgICAgIFJlZ0V4
cChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0
IFVTdHJpbmcmIGZsYWdzKTsKIAogICAgICAgICB2b2lkIGNvbXBpbGUoKTsKIApAQCAtNjgsNiAr
NjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShXUkVDKQogICAgICAgICBXUkVD
OjpDb21waWxlZFJlZ0V4cCBtX3dyZWNGdW5jdGlvbjsKKyAgICAgICAgUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOwogI2VuZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAppbmRleCBkMTU3MjlhLi5mYjc0NWU1
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcApAQCAt
MzMxLDcgKzMzMSw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogICAgIFVTdHJpbmcgcGF0dGVybiA9IGFyZzAtPmlzVW5k
ZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAtPnRvU3RyaW5nKGV4ZWMpOwogICAgIFVTdHJp
bmcgZmxhZ3MgPSBhcmcxLT5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcxLT50b1N0
cmluZyhleGVjKTsKIAotICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRl
KHBhdHRlcm4sIGZsYWdzKTsKKyAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBSZWdFeHA6OmNy
ZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFyZWdF
eHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IsIFVTdHJpbmcoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAiKS5hcHBlbmQocmVnRXhw
LT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVs
ZWFzZSgpKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAppbmRl
eCBmNGQ1YjQ3Li5lOTMyMjQ0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90
b3R5cGUuY3BwCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY0NvbXBp
bGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwKICAgICB9
IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSBhcmdzLmlzRW1wdHkoKSA/IFVTdHJp
bmcoIiIpIDogYXJnMC0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIFVTdHJpbmcgZmxhZ3MgPSBh
cmcxLT5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcxLT50b1N0cmluZyhleGVjKTsK
LSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUocGF0dGVybiwgZmxhZ3MpOworICAgICAg
ICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBm
bGFncyk7CiAgICAgfQogCiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAppbmRleCA2MDFmYmQwLi5mOWJkMGI4IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBAIC00MTIsNyAr
NDEyLDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY28KICAgICAgICAgICogIElmIHJlZ2V4cCBp
cyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQg
aXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lv
biBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6
OmNyZWF0ZShhMC0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0
ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC0+dG9TdHJpbmcoZXhlYykpOwogICAgIH0KICAgICBS
ZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsKQEAgLTQ2Miw3ICs0
NjIsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgYwogICAgICAgICAgKiAgSWYgcmVnZXhwIGlz
IG5vdCBhbiBvYmplY3Qgd2hvc2UgW1tDbGFzc11dIHByb3BlcnR5IGlzICJSZWdFeHAiLCBpdCBp
cwogICAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9u
IG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4cDo6
Y3JlYXRlKGEwLT50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRl
KCZleGVjLT5nbG9iYWxEYXRhKCksIGEwLT50b1N0cmluZyhleGVjKSk7CiAgICAgfQogICAgIFJl
Z0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3JlYy9XUkVDLmNwcCBiL0phdmFTY3JpcHRDb3JlL3dyZWMvV1JFQy5j
cHAKaW5kZXggMDcwNmYxMC4uMDRkN2NkNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3Jl
Yy9XUkVDLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93cmVjL1dSRUMuY3BwCkBAIC0zMCw2ICsz
MCw4IEBACiAKICNpbmNsdWRlICJDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1ZGUgIldSRUNGdW5jdG9ycy5oIgogI2luY2x1ZGUgIldS
RUNQYXJzZXIuaCIKICNpbmNsdWRlICJwY3JlX2ludGVybmFsLmgiCkBAIC00MSw3ICs0Myw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV1JFQyB7CiAvLyBUaGlzIGxpbWl0IGNvbWVzIGZy
b20gdGhlIGxpbWl0IHNldCBpbiBQQ1JFCiBzdGF0aWMgY29uc3QgaW50IE1heFBhdHRlcm5TaXpl
ID0gKDEgPDwgMTYpOwogCi1Db21waWxlZFJlZ0V4cCBHZW5lcmF0b3I6OmNvbXBpbGVSZWdFeHAo
Y29uc3QgVVN0cmluZyYgcGF0dGVybiwgdW5zaWduZWQqIG51bVN1YnBhdHRlcm5zX3B0ciwgY29u
c3QgY2hhcioqIGVycm9yX3B0ciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGluZSkKK0Nv
bXBpbGVkUmVnRXhwIEdlbmVyYXRvcjo6Y29tcGlsZVJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkKiBudW1TdWJwYXR0ZXJuc19w
dHIsIGNvbnN0IGNoYXIqKiBlcnJvcl9wdHIsIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4mIGFsbG9j
YXRvciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGluZSkKIHsKICAgICBpZiAocGF0dGVy
bi5zaXplKCkgPiBNYXhQYXR0ZXJuU2l6ZSkgewogICAgICAgICAqZXJyb3JfcHRyID0gIlJlZ3Vs
YXIgZXhwcmVzc2lvbiB0b28gbGFyZ2UuIjsKQEAgLTc4LDcgKzgwLDggQEAgQ29tcGlsZWRSZWdF
eHAgR2VuZXJhdG9yOjpjb21waWxlUmVnRXhwKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIHVuc2ln
bmVkKiBudW1TdWIKICAgICB9CiAKICAgICAqbnVtU3VicGF0dGVybnNfcHRyID0gcGFyc2VyLm51
bVN1YnBhdHRlcm5zKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGlsZWRSZWdF
eHA+KGdlbmVyYXRvci5jb3B5Q29kZSgpKTsKKyAgICBhbGxvY2F0b3IgPSBnbG9iYWxEYXRhLT5w
b29sRm9yU2l6ZShnZW5lcmF0b3Iuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDb21waWxlZFJlZ0V4cD4oZ2VuZXJhdG9yLmNvcHlDb2RlKGFsbG9jYXRvci5nZXQoKSkpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V1JFQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvd3JlYy9XUkVDR2VuZXJhdG9yLmggYi9KYXZhU2NyaXB0Q29yZS93cmVjL1dSRUNHZW5lcmF0
b3IuaAppbmRleCA3OTk3NGI4Li4zYmM0ZWM2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93
cmVjL1dSRUNHZW5lcmF0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93cmVjL1dSRUNHZW5lcmF0
b3IuaApAQCAtMzYsNyArMzYsMTEgQEAKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CiAjaW5jbHVkZSAiV1JFQy5oIgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdSRUMgewor
bmFtZXNwYWNlIEpTQyB7IAorCisgICAgY2xhc3MgSlNHbG9iYWxEYXRhOworCisgICAgbmFtZXNw
YWNlIFdSRUMgewogCiAgICAgY2xhc3MgQ2hhcmFjdGVyUmFuZ2U7CiAgICAgY2xhc3MgR2VuZXJh
dGVBdG9tRnVuY3RvcjsKQEAgLTUxLDggKzU1LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXUkVDIHsKIAogICAgICAgICBlbnVtIFBhcmVudGhlc2VzVHlwZSB7IENhcHR1cmluZywgTm9u
Q2FwdHVyaW5nLCBBc3NlcnRpb24sIEludmVydGVkQXNzZXJ0aW9uLCBFcnJvciB9OwogCi0gICAg
ICAgIHN0YXRpYyBDb21waWxlZFJlZ0V4cCBjb21waWxlUmVnRXhwKGNvbnN0IFVTdHJpbmcmIHBh
dHRlcm4sIHVuc2lnbmVkKiBudW1TdWJwYXR0ZXJuc19wdHIsIGNvbnN0IGNoYXIqKiBlcnJvcl9w
dHIsIGJvb2wgaWdub3JlQ2FzZSA9IGZhbHNlLCBib29sIG11bHRpbGluZSA9IGZhbHNlKTsKLQor
ICAgICAgICBzdGF0aWMgQ29tcGlsZWRSZWdFeHAgY29tcGlsZVJlZ0V4cChKU0dsb2JhbERhdGEq
LCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25lZCogbnVtU3VicGF0dGVybnNfcHRyLCBj
b25zdCBjaGFyKiogZXJyb3JfcHRyLCBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+JiBhbGxvY2F0b3Is
IGJvb2wgaWdub3JlQ2FzZSA9IGZhbHNlLCBib29sIG11bHRpbGluZSA9IGZhbHNlKTsKKyAgICAK
ICAgICAgICAgR2VuZXJhdG9yKFBhcnNlciYgcGFyc2VyKQogICAgICAgICAgICAgOiBtX3BhcnNl
cihwYXJzZXIpCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0
TWFsbG9jLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAppbmRleCA4N2Q2
ODk2Li5hMzUxZjVmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5j
cHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3BwCkBAIC0yMzksMjggKzIz
OSw2IEBAIEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzKCkKICAgICBy
ZXR1cm4gc3RhdGlzdGljczsKIH0KIAotI2lmIEhBVkUoVklSVFVBTEFMTE9DKQotdm9pZCogZmFz
dE1hbGxvY0V4ZWN1dGFibGUoc2l6ZV90IG4pCi17Ci0gICAgcmV0dXJuIFZpcnR1YWxBbGxvYygw
LCBuLCBNRU1fQ09NTUlUIHwgTUVNX1JFU0VSVkUsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUpOwot
fQotCi12b2lkIGZhc3RGcmVlRXhlY3V0YWJsZSh2b2lkKiBwKQoteyAKLSAgICBWaXJ0dWFsRnJl
ZShwLCAwLCBNRU1fUkVMRUFTRSk7IAotfQotI2Vsc2UKLXZvaWQqIGZhc3RNYWxsb2NFeGVjdXRh
YmxlKHNpemVfdCBuKQotewotICAgIHJldHVybiBmYXN0TWFsbG9jKG4pOwotfQotCi12b2lkIGZh
c3RGcmVlRXhlY3V0YWJsZSh2b2lkKiBwKQoteyAKLSAgICBmYXN0RnJlZShwKTsKLX0KLSNlbmRp
ZgotCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2lmIFBMQVRGT1JNKERBUldJTikKQEAgLTM0MDYs
MTYgKzMzODQsNiBAQCB2b2lkKiByZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBuZXdfc2l6
ZSkgewogICB9CiB9CiAKLXZvaWQqIGZhc3RNYWxsb2NFeGVjdXRhYmxlKHNpemVfdCBuKQotewot
ICAgIHJldHVybiBtYWxsb2M8ZmFsc2U+KG4pOwotfQotCi12b2lkIGZhc3RGcmVlRXhlY3V0YWJs
ZSh2b2lkKiBwKQoteyAKLSAgICBmcmVlKHApOwotfQotCiAjaWZkZWYgV1RGX0NIQU5HRVMKICN1
bmRlZiBkb19tYWxsb2MKICNlbHNlCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvRmFz
dE1hbGxvYy5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaAppbmRleCBmNWE2MzA3
Li5mMTI2NGFjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmgKQEAgLTQxLDkgKzQxLDYgQEAgbmFt
ZXNwYWNlIFdURiB7CiAKICAgICB2b2lkIGZhc3RGcmVlKHZvaWQqIHApOwogCi0gICAgdm9pZCog
ZmFzdE1hbGxvY0V4ZWN1dGFibGUoc2l6ZV90IG4pOwotICAgIHZvaWQgZmFzdEZyZWVFeGVjdXRh
YmxlKHZvaWQqIHApOwotCiAjaWZuZGVmIE5ERUJVRyAgICAKICAgICB2b2lkIGZhc3RNYWxsb2NG
b3JiaWQoKTsKICAgICB2b2lkIGZhc3RNYWxsb2NBbGxvdygpOwpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvd3RmL1RDU3lzdGVtQWxsb2MuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RDU3lz
dGVtQWxsb2MuY3BwCmluZGV4IDQ1ODdiYTAuLmJjZTdlMzEgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9UQ1N5c3RlbUFsbG9jLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVENT
eXN0ZW1BbGxvYy5jcHAKQEAgLTUxLDE0ICs1MSw2IEBACiAjaW5jbHVkZSAiVENTcGluTG9jay5o
IgogI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCiAKLSNpZiBIQVZFKE1NQVApCi1zdGF0aWMgY29u
c3QgaW50IGNQcm90RmxhZ3MgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFCi0jaWYgRU5BQkxFKEFT
U0VNQkxFUikgJiYgKFBMQVRGT1JNKEdUSykgfHwgKFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0o
WDg2XzY0KSkgfHwgUExBVEZPUk0oUVQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBQUk9UX0VYRUMKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwotI2Vu
ZGlmCi0KICNpZm5kZWYgTUFQX0FOT05ZTU9VUwogI2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9B
Tk9OCiAjZW5kaWYKQEAgLTE3OCw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCogVHJ5TW1hcChzaXpl
X3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgewogICAgIGV4
dHJhID0gYWxpZ25tZW50IC0gcGFnZXNpemU7CiAgIH0KICAgdm9pZCogcmVzdWx0ID0gbW1hcChO
VUxMLCBzaXplICsgZXh0cmEsCi0gICAgICAgICAgICAgICAgICAgICAgY1Byb3RGbGFncywKKyAg
ICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogICAgICAgICAgICAg
ICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsCiAgICAgICAgICAgICAgICAgICAg
ICAgLTEsIDApOwogICBpZiAocmVzdWx0ID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KE1BUF9G
QUlMRUQpKSB7CkBAIC0yMzIsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQqIFRyeVZpcnR1YWxBbGxv
YyhzaXplX3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKICAg
fQogICB2b2lkKiByZXN1bHQgPSBWaXJ0dWFsQWxsb2MoTlVMTCwgc2l6ZSArIGV4dHJhLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX1JFU0VSVkUgfCBNRU1fQ09NTUlUIHwgTUVN
X1RPUF9ET1dOLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0VfRVhFQ1VURV9S
RUFEV1JJVEUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9SRUFEV1JJVEUp
OwogCiAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewogICAgIFZpcnR1YWxBbGxvY19mYWlsdXJlID0g
dHJ1ZTsKQEAgLTMxMCw3ICszMDIsNyBAQCBzdGF0aWMgdm9pZCogVHJ5RGV2TWVtKHNpemVfdCBz
aXplLCBzaXplX3QgKmFjdHVhbF9zaXplLCBzaXplX3QgYWxpZ25tZW50KSB7CiAgICAgZGV2bWVt
X2ZhaWx1cmUgPSB0cnVlOwogICAgIHJldHVybiBOVUxMOwogICB9Ci0gIHZvaWQgKnJlc3VsdCA9
IG1tYXAoMCwgc2l6ZSArIGV4dHJhLCBjUHJvdEZsYWdzLAorICB2b2lkICpyZXN1bHQgPSBtbWFw
KDAsIHNpemUgKyBleHRyYSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKICAgICAgICAgICAgICAg
ICAgICAgICBNQVBfU0hBUkVELCBwaHlzbWVtX2ZkLCBwaHlzbWVtX2Jhc2UpOwogICBpZiAocmVz
dWx0ID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KE1BUF9GQUlMRUQpKSB7CiAgICAgZGV2bWVt
X2ZhaWx1cmUgPSB0cnVlOwpAQCAtNDI5LDcgKzQyMSw3IEBAIHZvaWQgVENNYWxsb2NfU3lzdGVt
UmVsZWFzZSh2b2lkKiBzdGFydCwgc2l6ZV90IGxlbmd0aCkKICNlbmRpZgogCiAjaWYgSEFWRShN
TUFQKQotICB2b2lkICpuZXdBZGRyZXNzID0gbW1hcChzdGFydCwgbGVuZ3RoLCBjUHJvdEZsYWdz
LCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTfE1BUF9GSVhFRCwgLTEsIDApOworICB2b2lkICpu
ZXdBZGRyZXNzID0gbW1hcChzdGFydCwgbGVuZ3RoLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBN
QVBfUFJJVkFURXxNQVBfQU5PTllNT1VTfE1BUF9GSVhFRCwgLTEsIDApOwogICBVTlVTRURfUEFS
QU0obmV3QWRkcmVzcyk7CiAgIC8vIElmIHRoZSBtbWFwIGZhaWxlZCB0aGVuIHRoYXQncyBvaywg
d2UganVzdCB3b24ndCByZXR1cm4gdGhlIG1lbW9yeSB0byB0aGUgc3lzdGVtLgogICBBU1NFUlQo
bmV3QWRkcmVzcyA9PSBzdGFydCB8fCBuZXdBZGRyZXNzID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KE1BUF9GQUlMRUQpKTsK
</data>
<flag name="review"
          id="12093"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>