<?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>138671</bug_id>
          
          <creation_ts>2014-11-12 14:28:16 -0800</creation_ts>
          <short_desc>Reduce amount of cut-and-paste needed for probe mechanism implementations</short_desc>
          <delta_ts>2014-11-14 12:28:25 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>138681</dependson>
    
    <dependson>138708</dependson>
          <blocked>138660</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1048261</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-12 14:28:16 -0800</bug_when>
    <thetext>The present implementation requires that each MacroAssembler implementation provide their own copy of all of the probe implementations even when most of it is identical.  This patch reimplements the common parts into MacroAssemblerProbe.h and have each target specific MacroAssembler implementation inherit from it instead.  The target specific MacroAssembler only needs to implement a few target specific methods that are expected by and documented in MacroAssemblerProbe.h.  MacroAssembler ports that do not care to implement the probe mechanism simply need no inherit from MacroAssemblerProbe.

In this patch, I also fill out some missing xmm registers in the X86_64&apos;s FP register list.  Also simplified the X86 and X86_64 ports to use the same port implementation.

This is all done in preparation to add printing functionality in JITted code for debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048264</commentid>
    <comment_count>1</comment_count>
      <attachid>241444</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-12 14:40:02 -0800</bug_when>
    <thetext>Created attachment 241444
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048265</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-12 14:42:12 -0800</bug_when>
    <thetext>Attachment 241444 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/X86Assembler.h:131:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/X86Assembler.h:143:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerProbe.h:39:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerProbe.h:42:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp:102:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp:104:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp:110:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp:112:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp:118:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp:120:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:37:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:40:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:45:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:52:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:58:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:61:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:63:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp:37:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp:39:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp:45:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp:47:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp:53:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp:55:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/ARMAssembler.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 25 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048292</commentid>
    <comment_count>3</comment_count>
      <attachid>241444</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-11-12 16:06:25 -0800</bug_when>
    <thetext>Comment on attachment 241444
the patch.

Let&apos;s not build up a side definition of the CPU in the probing machinery -- instead, let&apos;s use the shared definition provided by the assembler.

(1) The assembler header should define the canonical list of registers in a macro.

(2) The definition of the register namespaces should use the canonical list.

(3) The probe should use the canonical list.

(4) The probe should treat FP registers as 64bit values, as the assembler does. This eliminates some abstractions like GPRegValue and FPRegValue. 

(5) If there&apos;s some need for a global definition of an &quot;Assembler&quot; type, that should bear the name &quot;Assembler&quot;, rather than being specialized with a probe-related name. However, I&apos;ll note that the MacroAssembler class defines its assembler type as a dependent type, so there&apos;s probably no need for a global type name.

(6) Let&apos;s call CPUInfo CPUState, since that&apos;s a little clearer about recording the temporary state of the CPU, and let&apos;s put it in its own header, and remove the redeclaration of RegisterID and FPRegisterID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048608</commentid>
    <comment_count>4</comment_count>
      <attachid>241531</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-13 19:33:05 -0800</bug_when>
    <thetext>Created attachment 241531
alternate implementation based on Geoff&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048613</commentid>
    <comment_count>5</comment_count>
      <attachid>241534</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-13 19:43:12 -0800</bug_when>
    <thetext>Created attachment 241534
alternate implementation based on Geoff&apos;s suggestions + a missing ChangeLog comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048614</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-13 19:46:05 -0800</bug_when>
    <thetext>Attachment 241534 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:843:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:846:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:860:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:873:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:885:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:891:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:40:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:45:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:52:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:54:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86Common.cpp:60:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Total errors found: 11 in 11 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>1048787</commentid>
    <comment_count>7</comment_count>
      <attachid>241534</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-11-14 10:45:50 -0800</bug_when>
    <thetext>Comment on attachment 241534
alternate implementation based on Geoff&apos;s suggestions + a missing ChangeLog comment.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048836</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-14 12:26:54 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r176134: &lt;http://trac.webkit.org/r176134&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241444</attachid>
            <date>2014-11-12 14:40:02 -0800</date>
            <delta_ts>2014-11-13 19:33:05 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-138671.patch</filename>
            <type>text/plain</type>
            <size>45171</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2MDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDE0LTExLTEyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWR1Y2UgYW1vdW50IG9mIGN1dC1hbmQtcGFzdGUgbmVlZGVkIGZvciBwcm9iZSBtZWNoYW5pc20g
aW1wbGVtZW50YXRpb25zLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4NjcxPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBleGlz
dGluZyBjb2RlIHJlcXVpcmVzIHRoYXQgZWFjaCBNYWNyb0Fzc2VtYmxlciBpbXBsZW1lbnRhdGlv
biBwcm92aWRlCisgICAgICAgIHRoZWlyIG93biBjb3B5IG9mIGFsbCBvZiB0aGUgcHJvYmUgaW1w
bGVtZW50YXRpb25zIGV2ZW4gd2hlbiBtb3N0IG9mIGl0IGlzCisgICAgICAgIGlkZW50aWNhbC4g
IFRoaXMgcGF0Y2ggcmVpbXBsZW1lbnRzIHRoZSBjb21tb24gcGFydHMgaW50byBNYWNyb0Fzc2Vt
YmxlclByb2JlLmgKKyAgICAgICAgYW5kIGhhdmUgZWFjaCB0YXJnZXQgc3BlY2lmaWMgTWFjcm9B
c3NlbWJsZXIgaW1wbGVtZW50YXRpb24gaW5oZXJpdCBmcm9tIGl0CisgICAgICAgIGluc3RlYWQu
ICBUaGUgdGFyZ2V0IHNwZWNpZmljIE1hY3JvQXNzZW1ibGVyIG9ubHkgbmVlZHMgdG8gaW1wbGVt
ZW50IGEgZmV3CisgICAgICAgIHRhcmdldCBzcGVjaWZpYyBtZXRob2RzIHRoYXQgYXJlIGV4cGVj
dGVkIGJ5IGFuZCBkb2N1bWVudGVkIGluCisgICAgICAgIE1hY3JvQXNzZW1ibGVyUHJvYmUuaC4g
IE1hY3JvQXNzZW1ibGVyIHBvcnRzIHRoYXQgZG8gbm90IGNhcmUgdG8gaW1wbGVtZW50CisgICAg
ICAgIHRoZSBwcm9iZSBtZWNoYW5pc20gc2ltcGx5IG5lZWQgbm90IGluaGVyaXQgZnJvbSBNYWNy
b0Fzc2VtYmxlclByb2JlLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkgYWxzbyBmaWxsIG91
dCBzb21lIG1pc3NpbmcgeG1tIHJlZ2lzdGVycyBpbiB0aGUgWDg2XzY0CisgICAgICAgIHByb2Jl
J3MgRlAgcmVnaXN0ZXIgbGlzdC4gIEFsc28gc2ltcGxpZmllZCB0aGUgWDg2IGFuZCBYODZfNjQg
cG9ydHMgdG8gdXNlCisgICAgICAgIHRoZSBzYW1lIHBvcnQgaW1wbGVtZW50YXRpb24uCisKKyAg
ICAgICAgVGhpcyBpcyBhbGwgZG9uZSBpbiBwcmVwYXJhdGlvbiB0byBhZGQgcHJpbnRpbmcgZnVu
Y3Rpb25hbGl0eSBpbiBKSVR0ZWQgY29kZQorICAgICAgICBmb3IgZGVidWdnaW5nLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNz
ZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnByaW50Q1BVUmVnaXN0ZXJzKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OlByb2JlQ29udGV4dDo6ZHVtcENQVVJlZ2lzdGVy
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpQcm9iZUNvbnRl
eHQ6OmR1bXApOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TS5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmNwcDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cHJpbnRDUFVSZWdpc3RlcnMpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpQcm9iZUNvbnRleHQ6OmR1bXBDUFVSZWdpc3Rl
cnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpQcm9iZUNv
bnRleHQ6OmR1bXApOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTXY3Lmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJvYmUuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUHJvYmU8TWFzbT46OnByaW50SW5kZW50
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJQcm9iZTxNYXNtPjo6cHJpbnRDUFUpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclByb2JlPE1hc20+OjpQcm9iZUNvbnRleHQ6OnBy
aW50KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODY6OnRydXN0ZWRJbW0zMkZyb21QdHIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cHJvYmUpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uOjpwcmludENQVVJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpwcm9iZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpQcm9iZUNvbnRleHQ6OmR1bXBDUFVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6UHJvYmVDb250ZXh0OjpkdW1wKTog
RGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6OnRydXN0ZWRJbW02NEZyb21QdHIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cHJvYmUpOiBEZWxldGVkLgorICAgICAgICAq
IGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnNYODZDb21t
b24uaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnNYODZfNjQuaDoKKwogMjAxNC0xMS0xMiAgQW5k
cmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgZ2V0X2J5
X2lkIGZvciBicmFja2V0IGFjY2VzcyB3aXRoIGNvbnN0YW50IHN0cmluZyBzdWJzY3JpcHQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc2MDI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsNiArMTU5Niw3IEBACiAJCUZFQTA4NjIxMTgyQjdB
MDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1
Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3Bl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4
QzEyMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwogCQlG
RUI1OEMxNTE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUI1OEMxMzE4N0I4QjE2MDA5
OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkVCRDNCMkExQTEwMkM2NjAwM0YxMTc3IC8qIE1hY3Jv
QXNzZW1ibGVyUHJvYmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFQkQzQjI3MUExMDJDNjYwMDNGMTE3NyAvKiBNYWNyb0Fzc2VtYmxlclByb2JlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEMjg3
QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJ
bnRPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkIxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsgfTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8q
IFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzMwOSw2ICszMzEwLDcgQEAKIAkJ
RkVBMDg2MUYxODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z2dlclByaW1pdGl2ZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNThDMTIxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFu
ZGxpbmdTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJv
ckhhbmRsaW5nU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMx
MzE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9ySGFuZGxpbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRUJEM0IyNzFBMTAyQzY2MDAzRjExNzcgLyogTWFjcm9Bc3NlbWJsZXJQ
cm9iZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclBy
b2JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRDI4N0IxMTVFQzlBNTcwMERB
ODE2MSAvKiBMTEludE9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
TEludE9wY29kZS5oOyBwYXRoID0gbGxpbnQvTExJbnRPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhdGNoZG9nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoZG9nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTYzLDYgKzQ5NjUsNyBAQAogCQkJCTg2QUREMTQ0
MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggKi8sCiAJCQkJODYzQjIz
REYwRkM2MEU2MjAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovLAogCQkJCTg2
QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCAqLywKKwkJCQlG
RUJEM0IyNzFBMTAyQzY2MDAzRjExNzcgLyogTWFjcm9Bc3NlbWJsZXJQcm9iZS5oICovLAogCQkJ
CTg2QUU2NEE2MTM1RTVFMUMwMDk2MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oICovLAogCQkJ
CTg2MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovLAogCQkJ
CTg2MDE2MUUxMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovLApA
QCAtNTk4Nyw2ICs1OTkwLDcgQEAKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAw
NzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZD
NTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkVCRDNCMkExQTEwMkM2NjAwM0YxMTc3IC8qIE1hY3JvQXNzZW1ibGVyUHJvYmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2NEE5MTM1RTVFMUMwMDk2MzAxMiAvKiBNYWNyb0Fz
c2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTQwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCShy
ZXZpc2lvbiAxNzYwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFz
c2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMiBAQAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShNQVNNX1BST0JF
KQorICAgIHR5cGVkZWYgY2xhc3MgQVJNQXNzZW1ibGVyIFByb2JlQXNzZW1ibGVyOworICAgIHR5
cGVkZWYgdm9pZCogR1BSZWdWYWx1ZTsKKyAgICB0eXBlZGVmIGRvdWJsZSBGUFJlZ1ZhbHVlOwor
I2VuZGlmCisKICAgICB0eXBlZGVmIHVpbnQzMl90IEFSTVdvcmQ7CiAKICAgICBuYW1lc3BhY2Ug
QVJNUmVnaXN0ZXJzIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
djdBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTXY3QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3NjAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkK
K3R5cGVkZWYgY2xhc3MgQVJNdjdBc3NlbWJsZXIgUHJvYmVBc3NlbWJsZXI7Cit0eXBlZGVmIHZv
aWQqIEdQUmVnVmFsdWU7Cit0eXBlZGVmIGRvdWJsZSBGUFJlZ1ZhbHVlOworI2VuZGlmCisKIG5h
bWVzcGFjZSBBUk1SZWdpc3RlcnMgewogICAgIHR5cGVkZWYgZW51bSB7CiAgICAgICAgIHIwLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5jcHAJKHJldmlzaW9uIDE3NjAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZl
cnNpdHkgb2YgU3plZ2VkCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMxLDEwICsz
MSw2IEBACiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogCi0jaWYgRU5BQkxFKE1B
U01fUFJPQkUpCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2VuZGlmCi0KICNpZiBP
UyhMSU5VWCkKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpA
QCAtMTAxLDQ5ICs5NywzNCBAQCB2b2lkIE1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkMzJXaXRoVW5h
bGlnCiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKIAotdm9pZCBNYWNyb0Fzc2VtYmxlckFSTTo6
UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uKQor
dm9pZCBNYWNyb0Fzc2VtYmxlckFSTTo6cHJpbnRDUFVSZWdpc3RlcnMoQ1BVSW5mbyYgY3B1LCBp
bnQgaW5kZW50YXRpb24pCiB7Ci0gICAgI2RlZmluZSBEVU1QX0dQUkVHSVNURVIoX3R5cGUsIF9y
ZWdOYW1lKSB7IFwKKyAgICAjZGVmaW5lIElOREVOVCBwcmludEluZGVudChpbmRlbnRhdGlvbikK
KworICAgICNkZWZpbmUgUFJJTlRfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAg
ICAgICBpbnQzMl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90PihjcHUuX3JlZ05h
bWUpOyBcCi0gICAgICAgIGRhdGFMb2dGKCIlcyAgICAlNXM6IDB4JTA4eCAgICVkXG4iLCBpbmRl
bnRhdGlvbiwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgICAgICBJTkRFTlQsIGRh
dGFMb2dGKCIlNXM6IDB4JTA4eCAgICVkXG4iLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBc
CiAgICAgfQotICAgIEZPUl9FQUNIX0NQVV9HUFJFR0lTVEVSKERVTVBfR1BSRUdJU1RFUikKLSAg
ICBGT1JfRUFDSF9DUFVfU1BFQ0lBTF9SRUdJU1RFUihEVU1QX0dQUkVHSVNURVIpCi0gICAgI3Vu
ZGVmIERVTVBfR1BSRUdJU1RFUgorICAgIEZPUl9FQUNIX0NQVV9HUFJFR0lTVEVSKFBSSU5UX0dQ
UkVHSVNURVIpCisgICAgRk9SX0VBQ0hfQ1BVX1NQRUNJQUxfUkVHSVNURVIoUFJJTlRfR1BSRUdJ
U1RFUikKKyAgICAjdW5kZWYgUFJJTlRfR1BSRUdJU1RFUgogCi0gICAgI2RlZmluZSBEVU1QX0ZQ
UkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSB7IFwKKyAgICAjZGVmaW5lIFBSSU5UX0ZQUkVHSVNU
RVIoX3R5cGUsIF9yZWdOYW1lKSB7IFwKICAgICAgICAgdWludDMyX3QqIHUgPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oJmNwdS5fcmVnTmFtZSk7IFwKICAgICAgICAgZG91YmxlKiBkID0g
cmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPigmY3B1Ll9yZWdOYW1lKTsgXAotICAgICAgICBkYXRh
TG9nRigiJXMgICAgJTVzOiAweCAlMDh4ICUwOHggICAlMTJnXG4iLCBcCi0gICAgICAgICAgICBp
bmRlbnRhdGlvbiwgI19yZWdOYW1lLCB1WzFdLCB1WzBdLCBkWzBdKTsgXAorICAgICAgICBJTkRF
TlQsIGRhdGFMb2dGKCIlNXM6IDB4JTA4eC0lMDh4ICAgJTEyZ1xuIiwgI19yZWdOYW1lLCB1WzFd
LCB1WzBdLCBkWzBdKTsgXAogICAgIH0KLSAgICBGT1JfRUFDSF9DUFVfRlBSRUdJU1RFUihEVU1Q
X0ZQUkVHSVNURVIpCi0gICAgI3VuZGVmIERVTVBfRlBSRUdJU1RFUgotfQorICAgIEZPUl9FQUNI
X0NQVV9GUFJFR0lTVEVSKFBSSU5UX0ZQUkVHSVNURVIpCisgICAgI3VuZGVmIFBSSU5UX0ZQUkVH
SVNURVIKIAotdm9pZCBNYWNyb0Fzc2VtYmxlckFSTTo6UHJvYmVDb250ZXh0OjpkdW1wKGNvbnN0
IGNoYXIqIGluZGVudGF0aW9uKQotewotICAgIGlmICghaW5kZW50YXRpb24pCi0gICAgICAgIGlu
ZGVudGF0aW9uID0gIiI7Ci0KLSAgICBkYXRhTG9nRigiJXNQcm9iZUNvbnRleHQgJXAge1xuIiwg
aW5kZW50YXRpb24sIHRoaXMpOwotICAgIGRhdGFMb2dGKCIlcyAgcHJvYmVGdW5jdGlvbjogJXBc
biIsIGluZGVudGF0aW9uLCBwcm9iZUZ1bmN0aW9uKTsKLSAgICBkYXRhTG9nRigiJXMgIGFyZzE6
ICVwICVsbHVcbiIsIGluZGVudGF0aW9uLCBhcmcxLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+
KGFyZzEpKTsKLSAgICBkYXRhTG9nRigiJXMgIGFyZzI6ICVwICVsbHVcbiIsIGluZGVudGF0aW9u
LCBhcmcyLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGFyZzIpKTsKLSAgICBkYXRhTG9nRigi
JXMgIGNwdToge1xuIiwgaW5kZW50YXRpb24pOwotCi0gICAgZHVtcENQVVJlZ2lzdGVycyhpbmRl
bnRhdGlvbik7Ci0KLSAgICBkYXRhTG9nRigiJXMgIH1cbiIsIGluZGVudGF0aW9uKTsKLSAgICBk
YXRhTG9nRigiJXN9XG4iLCBpbmRlbnRhdGlvbik7CisgICAgI3VuZGVmIElOREVOVAogfQogCi0K
IGV4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCk7CiAKIC8vIEZvciBkZXRh
aWxzIG9uICJXaGF0IGNvZGUgaXMgZW1pdHRlZCBmb3IgdGhlIHByb2JlPyIgYW5kICJXaGF0IHZh
bHVlcyBhcmUgaW4KLS8vIHRoZSBzYXZlZCByZWdpc3RlcnM/Iiwgc2VlIGNvbW1lbnQgZm9yIE1h
Y3JvQXNzZW1ibGVyWDg2Ojpwcm9iZSgpIGluCi0vLyBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oLgor
Ly8gdGhlIHNhdmVkIHJlZ2lzdGVycz8iLCBzZWUgY29tbWVudCBmb3IgTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246OnByb2JlKCkgaW4KKy8vIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmguCiAKIHZv
aWQgTWFjcm9Bc3NlbWJsZXJBUk06OnByb2JlKE1hY3JvQXNzZW1ibGVyQVJNOjpQcm9iZUZ1bmN0
aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2b2lkKiBhcmcyKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2
aXNpb24gMTc2MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMyLDEwICszMiwx
MyBAQAogCiAjaW5jbHVkZSAiQVJNQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJvYmUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNIDogcHVibGljIEFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI8QVJNQXNzZW1ibGVyPiB7CitjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTSA6IHB1
YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFSTUFzc2VtYmxlcj4sCisgICAgcHVibGljIE1h
Y3JvQXNzZW1ibGVyUHJvYmU8TWFjcm9Bc3NlbWJsZXJBUk0+IHsKKwogICAgIHN0YXRpYyBjb25z
dCBpbnQgRG91YmxlQ29uZGl0aW9uTWFzayA9IDB4MGY7CiAgICAgc3RhdGljIGNvbnN0IGludCBE
b3VibGVDb25kaXRpb25CaXRTcGVjaWFsID0gMHgxMDsKICAgICBDT01QSUxFX0FTU0VSVCghKERv
dWJsZUNvbmRpdGlvbkJpdFNwZWNpYWwgJiBEb3VibGVDb25kaXRpb25NYXNrKSwgRG91YmxlQ29u
ZGl0aW9uQml0U3BlY2lhbF9zaG91bGRfbm90X2ludGVyZmVyZV93aXRoX0FSTUFzc2VtYmxlcl9D
b25kaXRpb25fY29kZXMpOwpAQCAtMTQzMywyOSArMTQzNiw5IEBAIHB1YmxpYzoKICAgICB9CiAK
ICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICBzdHJ1Y3QgQ1BVU3RhdGUgewotICAgICAgICAj
ZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSBcCi0gICAgICAgICAgICBf
dHlwZSBfcmVnTmFtZTsKLSAgICAgICAgRk9SX0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVfUkVH
SVNURVIpCi0gICAgICAgICN1bmRlZiBERUNMQVJFX1JFR0lTVEVSCi0gICAgfTsKLQotICAgIHN0
cnVjdCBQcm9iZUNvbnRleHQ7Ci0gICAgdHlwZWRlZiB2b2lkICgqUHJvYmVGdW5jdGlvbikoc3Ry
dWN0IFByb2JlQ29udGV4dCopOwotCi0gICAgc3RydWN0IFByb2JlQ29udGV4dCB7Ci0gICAgICAg
IFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKLSAgICAgICAgdm9pZCogYXJnMTsKLSAgICAg
ICAgdm9pZCogYXJnMjsKLSAgICAgICAgQ1BVU3RhdGUgY3B1OwotCi0gICAgICAgIHZvaWQgZHVt
cChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlvbik7Ci0gICAgfTsKLQot
ICAgIC8vIEZvciBkZXRhaWxzIGFib3V0IHByb2JlKCksIHNlZSBjb21tZW50IGluIE1hY3JvQXNz
ZW1ibGVyWDg2XzY0LmguCisgICAgLy8gSW1wbGVtZW50YXRpb25zIHJlcXVpcmVkIGJ5IE1hY3Jv
QXNzZW1ibGVyUHJvYmUuaC4KICAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rpb24sIHZvaWQqIGFy
ZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7CisgICAgc3RhdGljIHZvaWQgcHJpbnRDUFVSZWdpc3Rl
cnMoQ1BVSW5mbyYsIGludCBpbmRlbnRhdGlvbik7CiAjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJP
QkUpCiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmNwcAkocmV2aXNpb24gMTc2MDMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsNTcgKzI4LDM4IEBACiAjaWYgRU5BQkxFKEFTU0VNQkxFUikg
JiYgQ1BVKEFSTV9USFVNQjIpCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIgogCi0j
aWYgRU5BQkxFKE1BU01fUFJPQkUpCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKE1BU01fUFJPQkUpCiAKLXZvaWQg
TWFjcm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0
IGNoYXIqIGluZGVudGF0aW9uKQordm9pZCBNYWNyb0Fzc2VtYmxlckFSTXY3OjpwcmludENQVVJl
Z2lzdGVycyhDUFVJbmZvJiBjcHUsIGludCBpbmRlbnRhdGlvbikKIHsKLSAgICAjZGVmaW5lIERV
TVBfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICNkZWZpbmUgSU5ERU5UIHBy
aW50SW5kZW50KGluZGVudGF0aW9uKQorCisgICAgI2RlZmluZSBQUklOVF9HUFJFR0lTVEVSKF90
eXBlLCBfcmVnTmFtZSkgeyBcCiAgICAgICAgIGludDMyX3QgdmFsdWUgPSByZWludGVycHJldF9j
YXN0PGludDMyX3Q+KGNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgZGF0YUxvZ0YoIiVzICAgICU1
czogMHglMDh4ICAgJWRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkg
OyBcCisgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU1czogMHglMDh4ICAgJWRcbiIsICNfcmVn
TmFtZSwgdmFsdWUsIHZhbHVlKSA7IFwKICAgICB9Ci0gICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNU
RVIoRFVNUF9HUFJFR0lTVEVSKQotICAgIEZPUl9FQUNIX0NQVV9TUEVDSUFMX1JFR0lTVEVSKERV
TVBfR1BSRUdJU1RFUikKLSAgICAjdW5kZWYgRFVNUF9HUFJFR0lTVEVSCisgICAgRk9SX0VBQ0hf
Q1BVX0dQUkVHSVNURVIoUFJJTlRfR1BSRUdJU1RFUikKKyAgICBGT1JfRUFDSF9DUFVfU1BFQ0lB
TF9SRUdJU1RFUihQUklOVF9HUFJFR0lTVEVSKQorICAgICN1bmRlZiBQUklOVF9HUFJFR0lTVEVS
CiAKLSAgICAjZGVmaW5lIERVTVBfRlBSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAg
ICNkZWZpbmUgUFJJTlRfRlBSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICB1
aW50MzJfdCogdSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigmY3B1Ll9yZWdOYW1lKTsg
XAogICAgICAgICBkb3VibGUqIGQgPSByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KCZjcHUuX3Jl
Z05hbWUpOyBcCi0gICAgICAgIGRhdGFMb2dGKCIlcyAgICAlNXM6IDB4ICUwOHggJTA4eCAgICUx
MmdcbiIsIFwKLSAgICAgICAgICAgIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHVbMV0sIHVbMF0s
IGRbMF0pOyBcCisgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU1czogMHglMDh4LSUwOHggICAl
MTJnXG4iLCAjX3JlZ05hbWUsIHVbMV0sIHVbMF0sIGRbMF0pOyBcCiAgICAgfQotICAgIEZPUl9F
QUNIX0NQVV9GUFJFR0lTVEVSKERVTVBfRlBSRUdJU1RFUikKLSAgICAjdW5kZWYgRFVNUF9GUFJF
R0lTVEVSCi19CisgICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoUFJJTlRfRlBSRUdJU1RFUikK
KyAgICAjdW5kZWYgUFJJTlRfRlBSRUdJU1RFUgogCi12b2lkIE1hY3JvQXNzZW1ibGVyQVJNdjc6
OlByb2JlQ29udGV4dDo6ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbikKLXsKLSAgICBpZiAo
IWluZGVudGF0aW9uKQotICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOwotCi0gICAgZGF0YUxvZ0Yo
IiVzUHJvYmVDb250ZXh0ICVwIHtcbiIsIGluZGVudGF0aW9uLCB0aGlzKTsKLSAgICBkYXRhTG9n
RigiJXMgIHByb2JlRnVuY3Rpb246ICVwXG4iLCBpbmRlbnRhdGlvbiwgcHJvYmVGdW5jdGlvbik7
Ci0gICAgZGF0YUxvZ0YoIiVzICBhcmcxOiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwgYXJnMSwg
cmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihhcmcxKSk7Ci0gICAgZGF0YUxvZ0YoIiVzICBhcmcy
OiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwgYXJnMiwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90
PihhcmcyKSk7Ci0gICAgZGF0YUxvZ0YoIiVzICBjcHU6IHtcbiIsIGluZGVudGF0aW9uKTsKLQot
ICAgIGR1bXBDUFVSZWdpc3RlcnMoaW5kZW50YXRpb24pOwotCi0gICAgZGF0YUxvZ0YoIiVzICB9
XG4iLCBpbmRlbnRhdGlvbik7Ci0gICAgZGF0YUxvZ0YoIiVzfVxuIiwgaW5kZW50YXRpb24pOwor
ICAgICN1bmRlZiBJTkRFTlQKIH0KIAotCiBleHRlcm4gIkMiIHZvaWQgY3RpTWFzbVByb2JlVHJh
bXBvbGluZSgpOwogCiAvLyBGb3IgZGV0YWlscyBvbiAiV2hhdCBjb2RlIGlzIGVtaXR0ZWQgZm9y
IHRoZSBwcm9iZT8iIGFuZCAiV2hhdCB2YWx1ZXMgYXJlIGluCi0vLyB0aGUgc2F2ZWQgcmVnaXN0
ZXJzPyIsIHNlZSBjb21tZW50IGZvciBNYWNyb0Fzc2VtYmxlclg4Njo6cHJvYmUoKSBpbgotLy8g
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KKy8vIHRoZSBzYXZlZCByZWdpc3RlcnM/Iiwgc2VlIGNv
bW1lbnQgZm9yIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpwcm9iZSgpIGluCisvLyBNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oLgogCiB2b2lkIE1hY3JvQXNzZW1ibGVyQVJNdjc6OnByb2JlKE1h
Y3JvQXNzZW1ibGVyQVJNdjc6OlByb2JlRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZzEsIHZv
aWQqIGFyZzIpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMTc2MDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEwICszMSwxMyBAQAogCiAjaW5jbHVkZSAiQVJNdjdBc3NlbWJsZXIuaCIK
ICNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJQcm9iZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJB
Uk12NyA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFSTXY3QXNzZW1ibGVyPiB7Citj
bGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8
QVJNdjdBc3NlbWJsZXI+LAorICAgIHB1YmxpYyBNYWNyb0Fzc2VtYmxlclByb2JlPE1hY3JvQXNz
ZW1ibGVyQVJNdjc+IHsKKwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVn
aXN0ZXIgPSBBUk1SZWdpc3RlcnM6OmlwOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6OnI2OwogCkBAIC0xOTAyLDI5ICsxOTA1
LDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIEVOQUJMRShNQVNNX1BST0JFKQotICAgIHN0cnVj
dCBDUFVTdGF0ZSB7Ci0gICAgICAgICNkZWZpbmUgREVDTEFSRV9SRUdJU1RFUihfdHlwZSwgX3Jl
Z05hbWUpIFwKLSAgICAgICAgICAgIF90eXBlIF9yZWdOYW1lOwotICAgICAgICBGT1JfRUFDSF9D
UFVfUkVHSVNURVIoREVDTEFSRV9SRUdJU1RFUikKLSAgICAgICAgI3VuZGVmIERFQ0xBUkVfUkVH
SVNURVIKLSAgICB9OwotCi0gICAgc3RydWN0IFByb2JlQ29udGV4dDsKLSAgICB0eXBlZGVmIHZv
aWQgKCpQcm9iZUZ1bmN0aW9uKShzdHJ1Y3QgUHJvYmVDb250ZXh0Kik7Ci0KLSAgICBzdHJ1Y3Qg
UHJvYmVDb250ZXh0IHsKLSAgICAgICAgUHJvYmVGdW5jdGlvbiBwcm9iZUZ1bmN0aW9uOwotICAg
ICAgICB2b2lkKiBhcmcxOwotICAgICAgICB2b2lkKiBhcmcyOwotICAgICAgICBDUFVTdGF0ZSBj
cHU7Ci0KLSAgICAgICAgdm9pZCBkdW1wKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uID0gMCk7Ci0g
ICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGlu
ZGVudGF0aW9uKTsKLSAgICB9OwotCi0gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgcHJvYmUoKSwg
c2VlIGNvbW1lbnQgaW4gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KKyAgICAvLyBJbXBsZW1lbnRh
dGlvbnMgcmVxdWlyZWQgYnkgTWFjcm9Bc3NlbWJsZXJQcm9iZS5oLgogICAgIHZvaWQgcHJvYmUo
UHJvYmVGdW5jdGlvbiwgdm9pZCogYXJnMSA9IDAsIHZvaWQqIGFyZzIgPSAwKTsKKyAgICBzdGF0
aWMgdm9pZCBwcmludENQVVJlZ2lzdGVycyhDUFVJbmZvJiwgaW50IGluZGVudGF0aW9uKTsKICNl
bmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByb2JlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByb2JlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyUHJvYmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE1hY3JvQXNzZW1i
bGVyUHJvYmVfaAorI2RlZmluZSBNYWNyb0Fzc2VtYmxlclByb2JlX2gKKworI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkK
Kworc3RydWN0IENQVUluZm8geworICAgIHR5cGVkZWYgUHJvYmVBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIFByb2JlQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQg
RlBSZWdpc3RlcklEOworCisgICAgI2RlZmluZSBERUNMQVJFX1JFR0lTVEVSKF90eXBlLCBfcmVn
TmFtZSkgXAorICAgICAgICBfdHlwZSBfcmVnTmFtZTsKKyAgICBGT1JfRUFDSF9DUFVfUkVHSVNU
RVIoREVDTEFSRV9SRUdJU1RFUikKKyAgICAjdW5kZWYgREVDTEFSRV9SRUdJU1RFUgorfTsKKwor
dGVtcGxhdGU8Y2xhc3MgTWFzbT4KK2NsYXNzIE1hY3JvQXNzZW1ibGVyUHJvYmUgeworcHVibGlj
OgorICAgIHN0cnVjdCBQcm9iZUNvbnRleHQ7CisgICAgdHlwZWRlZiB2b2lkICgqUHJvYmVGdW5j
dGlvbikoc3RydWN0IFByb2JlQ29udGV4dCopOworCisgICAgc3RydWN0IFByb2JlQ29udGV4dCB7
CisgICAgICAgIFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKKyAgICAgICAgdm9pZCogYXJn
MTsKKyAgICAgICAgdm9pZCogYXJnMjsKKyAgICAgICAgQ1BVSW5mbyBjcHU7CisKKyAgICAgICAg
dm9pZCBwcmludChpbnQgaW5kZW50YXRpb24gPSAwKTsKKyAgICB9OworCisgICAgLy8gVGhpcyBm
dW5jdGlvbiBlbWl0cyBjb2RlIHRvIHByZXNlcnZlIHRoZSBDUFVJbmZvIChlLmcuIHJlZ2lzdGVy
cyksCisgICAgLy8gY2FsbCBhIHVzZXIgc3VwcGxpZWQgcHJvYmUgZnVuY3Rpb24sIGFuZCByZXN0
b3JlIHRoZSBDUFVJbmZvIGJlZm9yZQorICAgIC8vIGNvbnRpbnVpbmcgd2l0aCBvdGhlciBKSVQg
Z2VuZXJhdGVkIGNvZGUuCisgICAgLy8KKyAgICAvLyBUaGUgdXNlciBzdXBwbGllZCBwcm9iZSBm
dW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIHBvaW50ZXIgdG8KKyAgICAvLyBh
IFByb2JlQ29udGV4dCBzdHJ1Y3QgKGRlZmluZWQgYWJvdmUpIHdoaWNoIGNvbnRhaW5zLCBhbW9u
ZyBvdGhlciB0aGluZ3MsCisgICAgLy8gdGhlIHByZXNlcnZlZCBDUFVJbmZvLiBUaGlzIGFsbG93
cyB0aGUgdXNlciBwcm9iZSBmdW5jdGlvbiB0byBpbnNwZWN0CisgICAgLy8gdGhlIENQVUluZm8g
YXQgdGhhdCBwb2ludCBpbiB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLgorICAgIC8vCisgICAgLy8g
SWYgdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24gYWx0ZXJzIHRoZSByZWdpc3RlciB2YWx1ZXMgaW4g
dGhlIFByb2JlQ29udGV4dCwKKyAgICAvLyB0aGUgYWx0ZXJlZCB2YWx1ZXMgd2lsbCBiZSBsb2Fk
ZWQgaW50byB0aGUgQ1BVIHJlZ2lzdGVycyB3aGVuIHRoZSBwcm9iZQorICAgIC8vIHJldHVybnMu
CisgICAgLy8KKyAgICAvLyBUaGUgUHJvYmVDb250ZXh0IGlzIHN0YWNrIGFsbG9jYXRlZCBhbmQg
aXMgb25seSB2YWxpZCBmb3IgdGhlIGR1cmF0aW9uCisgICAgLy8gb2YgdGhlIGNhbGwgdG8gdGhl
IHVzZXIgcHJvYmUgZnVuY3Rpb24uCisgICAgLy8KKyAgICAvLyBOb3RlOiBwcm9iZSgpIHNob3Vs
ZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0IHNwZWNpZmljIE1hY3JvQXNzZW1ibGVyLgor
ICAgIC8vIFRoaXMgcHJvdG90eXBlIGlzIG9ubHkgcHJvdmlkZWQgaGVyZSB0byBkb2N1bWVudCB0
aGUgaW50ZXJmYWNlLgorCisgICAgdm9pZCBwcm9iZShQcm9iZUZ1bmN0aW9uLCB2b2lkKiBhcmcx
ID0gMCwgdm9pZCogYXJnMiA9IDApOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNh
bGxlZCBieSBwcmludENQVSgpIHRvIHByaW50IHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAvLyB0
YXJnZXQgc3BlY2lmaWMgcmVnaXN0ZXJzIHdoaWNoIGFyZSBzYXZlZCBhd2F5IGluIHRoZSBDUFVJ
bmZvIHN0cnVjdC4KKyAgICAvLyBwcmludENQVVJlZ2lzdGVycygpIHNob3VsZCBtYWtlIHVzZSBv
ZiBwcmludEluZGVudGF0aW9uKCkgdG8gcHJpbnQgdGhlCisgICAgLy8gcmVnaXN0ZXJzIHdpdGgg
dGhlIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBpbmRlbnRhdGlvbi4KKyAgICAvLworICAgIC8vIE5v
dGU6IHByaW50Q1BVUmVnaXN0ZXJzKCkgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHRoZSB0YXJn
ZXQgc3BlY2lmaWMKKyAgICAvLyBNYWNyb0Fzc2VtYmxlci4gVGhpcyBwcm90b3R5cGUgaXMgb25s
eSBwcm92aWRlZCBoZXJlIHRvIGRvY3VtZW50IHRoZQorICAgIC8vIGludGVyZmFjZS4KKworICAg
IHN0YXRpYyB2b2lkIHByaW50Q1BVUmVnaXN0ZXJzKENQVUluZm8mLCBpbnQgaW5kZW50YXRpb24g
PSAwKTsKKworICAgIHN0YXRpYyB2b2lkIHByaW50SW5kZW50KGludCBpbmRlbnRhdGlvbik7Cisg
ICAgc3RhdGljIHZvaWQgcHJpbnRDUFUoQ1BVSW5mbyYsIGludCBpbmRlbnRhdGlvbiA9IDApOwor
fTsKKworI2RlZmluZSBJTkRFTlQgIHByaW50SW5kZW50KGluZGVudGF0aW9uKQorCit0ZW1wbGF0
ZTxjbGFzcyBNYXNtPgordm9pZCBNYWNyb0Fzc2VtYmxlclByb2JlPE1hc20+OjpwcmludEluZGVu
dChpbnQgaW5kZW50YXRpb24pCit7CisgICAgZm9yICg7IGluZGVudGF0aW9uID4gMDsgaW5kZW50
YXRpb24tLSkKKyAgICAgICAgZGF0YUxvZygiICAgICIpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBN
YXNtPgordm9pZCBNYWNyb0Fzc2VtYmxlclByb2JlPE1hc20+OjpwcmludENQVShDUFVJbmZvJiBj
cHUsIGludCBpbmRlbnRhdGlvbikKK3sKKyAgICBJTkRFTlQsIGRhdGFMb2coImNwdToge1xuIik7
CisgICAgTWFzbTo6cHJpbnRDUFVSZWdpc3RlcnMoY3B1LCBpbmRlbnRhdGlvbiArIDEpOworICAg
IElOREVOVCwgZGF0YUxvZygifVxuIik7Cit9CisKK3RlbXBsYXRlPGNsYXNzIE1hc20+Cit2b2lk
IE1hY3JvQXNzZW1ibGVyUHJvYmU8TWFzbT46OlByb2JlQ29udGV4dDo6cHJpbnQoaW50IGluZGVu
dGF0aW9uKQoreworICAgIElOREVOVCwgZGF0YUxvZ0YoIlByb2JlQ29udGV4dCAlcCB7XG4iLCB0
aGlzKTsKKyAgICBpbmRlbnRhdGlvbisrOworICAgIHsKKyAgICAgICAgSU5ERU5ULCBkYXRhTG9n
RigicHJvYmVGdW5jdGlvbjogJXBcbiIsIHByb2JlRnVuY3Rpb24pOworICAgICAgICBJTkRFTlQs
IGRhdGFMb2dGKCJhcmcxOiAlcCAlbGx1XG4iLCBhcmcxLCByZWludGVycHJldF9jYXN0PGludDY0
X3Q+KGFyZzEpKTsKKyAgICAgICAgSU5ERU5ULCBkYXRhTG9nRigiYXJnMjogJXAgJWxsdVxuIiwg
YXJnMiwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihhcmcyKSk7CisgICAgICAgIE1hc206OnBy
aW50Q1BVKGNwdSwgaW5kZW50YXRpb24pOworICAgIH0KKyAgICBpbmRlbnRhdGlvbi0tOworICAg
IElOREVOVCwgZGF0YUxvZygifVxuIik7Cit9CisKKyN1bmRlZiBJTkRFTlQKKworI2Vsc2UgLy8g
RU5BQkxFKE1BU01fUFJPQkUpCisKK3RlbXBsYXRlPGNsYXNzIE1hc20+CitjbGFzcyBNYWNyb0Fz
c2VtYmxlclByb2JlIHsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlclByb2JlX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2LmgJKHJldmlzaW9uIDE3NjAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDYgQEAK
IAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgiCiAKLSNpZiBFTkFCTEUoTUFT
TV9QUk9CRSkKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jZW5kaWYKLQogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2IDogcHVibGljIE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uIHsKQEAgLTM0OSwxMSArMzQ1LDYgQEAgcHVibGljOgogICAgICAgICBYODZB
c3NlbWJsZXI6OnJldmVydEp1bXBUb19jbXBsX2ltX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25TdGFydC5l
eGVjdXRhYmxlQWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIDAsIGFkZHJlc3MuYmFzZSk7CiAgICAg
fQogCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgcHJv
YmUoKSwgc2VlIGNvbW1lbnQgaW4gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KLSAgICB2b2lkIHBy
b2JlKFByb2JlRnVuY3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7Ci0jZW5k
aWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExp
bmtCdWZmZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC0zNzIsNDYgKzM2
Myw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlbGlua0NhbGwo
Y2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAg
ICAgfQotCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0gICAgaW5saW5lIFRydXN0ZWRJbW0zMiB0
cnVzdGVkSW1tMzJGcm9tUHRyKHZvaWQqIHB0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcnVz
dGVkSW1tMzIoVHJ1c3RlZEltbVB0cihwdHIpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3Rl
ZEltbTMyIHRydXN0ZWRJbW0zMkZyb21QdHIoUHJvYmVGdW5jdGlvbiBmdW5jdGlvbikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUcnVzdGVkSW1tMzIoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihmdW5jdGlvbikpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZEltbTMy
IHRydXN0ZWRJbW0zMkZyb21QdHIodm9pZCAoKmZ1bmN0aW9uKSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIFRydXN0ZWRJbW0zMihUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGZ1bmN0aW9uKSkpOwotICAgIH0KLSNlbmRpZgogfTsKIAotI2lmIEVOQUJMRShNQVNNX1BST0JF
KQotCi1leHRlcm4gIkMiIHZvaWQgY3RpTWFzbVByb2JlVHJhbXBvbGluZSgpOwotCi0vLyBGb3Ig
ZGV0YWlscyBvbiAiV2hhdCBjb2RlIGlzIGVtaXR0ZWQgZm9yIHRoZSBwcm9iZT8iIGFuZCAiV2hh
dCB2YWx1ZXMgYXJlIGluCi0vLyB0aGUgc2F2ZWQgcmVnaXN0ZXJzPyIsIHNlZSBjb21tZW50IGZv
ciBNYWNyb0Fzc2VtYmxlclg4Njo6cHJvYmUoKSBpbgotLy8gTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aC4KLQotaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXJYODY6OnByb2JlKE1hY3JvQXNzZW1ibGVy
WDg2OjpQcm9iZUZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2b2lkKiBhcmcyKQotewot
ICAgIHB1c2goUmVnaXN0ZXJJRDo6ZXNwKTsKLSAgICBwdXNoKFJlZ2lzdGVySUQ6OmVheCk7Ci0g
ICAgcHVzaCh0cnVzdGVkSW1tMzJGcm9tUHRyKGFyZzIpKTsKLSAgICBwdXNoKHRydXN0ZWRJbW0z
MkZyb21QdHIoYXJnMSkpOwotICAgIHB1c2godHJ1c3RlZEltbTMyRnJvbVB0cihmdW5jdGlvbikp
OwotCi0gICAgbW92ZSh0cnVzdGVkSW1tMzJGcm9tUHRyKGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUp
LCBSZWdpc3RlcklEOjplYXgpOwotICAgIGNhbGwoUmVnaXN0ZXJJRDo6ZWF4KTsKLX0KLSNlbmRp
ZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoQVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAJKHJldmlzaW9u
IDE3NjAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw0OCArMzIsNzYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKIAotdm9pZCBNYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbjo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVu
dGF0aW9uKQordm9pZCBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6cHJpbnRDUFVSZWdpc3RlcnMo
Q1BVSW5mbyYgY3B1LCBpbnQgaW5kZW50YXRpb24pCiB7CisgICAgI2RlZmluZSBJTkRFTlQgcHJp
bnRJbmRlbnQoaW5kZW50YXRpb24pCisKICNpZiBDUFUoWDg2KQotICAgICNkZWZpbmUgRFVNUF9H
UFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCisgICAgI2RlZmluZSBQUklOVF9HUFJFR0lT
VEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCiAgICAgICAgIGludDMyX3QgdmFsdWUgPSByZWludGVy
cHJldF9jYXN0PGludDMyX3Q+KGNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgZGF0YUxvZ0YoIiVz
ICAgICU2czogMHglMDh4ICAgJWRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2
YWx1ZSkgOyBcCisgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU2czogMHglMDh4ICAgJWRcbiIs
ICNfcmVnTmFtZSwgdmFsdWUsIHZhbHVlKSA7IFwKICAgICB9CiAjZWxpZiBDUFUoWDg2XzY0KQot
ICAgICNkZWZpbmUgRFVNUF9HUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCisgICAgI2Rl
ZmluZSBQUklOVF9HUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCiAgICAgICAgIGludDY0
X3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGNwdS5fcmVnTmFtZSk7IFwKLSAg
ICAgICAgZGF0YUxvZ0YoIiVzICAgICU2czogMHglMDE2bGx4ICAgJWxsZFxuIiwgaW5kZW50YXRp
b24sICNfcmVnTmFtZSwgdmFsdWUsIHZhbHVlKSA7IFwKKyAgICAgICAgSU5ERU5ULCBkYXRhTG9n
RigiJTZzOiAweCUwMTZsbHggICAlbGxkXG4iLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBc
CiAgICAgfQogI2VuZGlmCi0gICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoRFVNUF9HUFJFR0lT
VEVSKQotICAgIEZPUl9FQUNIX0NQVV9TUEVDSUFMX1JFR0lTVEVSKERVTVBfR1BSRUdJU1RFUikK
LSAgICAjdW5kZWYgRFVNUF9HUFJFR0lTVEVSCisgICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIo
UFJJTlRfR1BSRUdJU1RFUikKKyAgICBGT1JfRUFDSF9DUFVfU1BFQ0lBTF9SRUdJU1RFUihQUklO
VF9HUFJFR0lTVEVSKQorICAgICN1bmRlZiBQUklOVF9HUFJFR0lTVEVSCiAKLSAgICAjZGVmaW5l
IERVTVBfRlBSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICNkZWZpbmUgUFJJTlRf
RlBSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICB1aW50MzJfdCogdSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigmY3B1Ll9yZWdOYW1lKTsgXAogICAgICAgICBkb3Vi
bGUqIGQgPSByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KCZjcHUuX3JlZ05hbWUpOyBcCi0gICAg
ICAgIGRhdGFMb2dGKCIlcyAgICAlNnM6IDB4JTA4eCUwOHggMHglMDh4JTA4eCAgICUxMmcgJTEy
Z1xuIiwgXAotICAgICAgICAgICAgaW5kZW50YXRpb24sICNfcmVnTmFtZSwgdVszXSwgdVsyXSwg
dVsxXSwgdVswXSwgZFsxXSwgZFswXSk7IFwKKyAgICAgICAgSU5ERU5ULCBkYXRhTG9nRigiJTZz
OiAweCUwOHgtJTA4eC0lMDh4LSUwOHggICAlMTJnICUxMmdcbiIsIFwKKyAgICAgICAgICAgICNf
cmVnTmFtZSwgdVszXSwgdVsyXSwgdVsxXSwgdVswXSwgZFsxXSwgZFswXSk7IFwKICAgICB9Ci0g
ICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoRFVNUF9GUFJFR0lTVEVSKQotICAgICN1bmRlZiBE
VU1QX0ZQUkVHSVNURVIKLX0KKyAgICBGT1JfRUFDSF9DUFVfRlBSRUdJU1RFUihQUklOVF9GUFJF
R0lTVEVSKQorICAgICN1bmRlZiBQUklOVF9GUFJFR0lTVEVSCiAKLXZvaWQgTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OlByb2JlQ29udGV4dDo6ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbikK
LXsKLSAgICBpZiAoIWluZGVudGF0aW9uKQotICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOworICAg
ICN1bmRlZiBJTkRFTlQKK30KIAotICAgIGRhdGFMb2dGKCIlc1Byb2JlQ29udGV4dCAlcCB7XG4i
LCBpbmRlbnRhdGlvbiwgdGhpcyk7Ci0gICAgZGF0YUxvZ0YoIiVzICBwcm9iZUZ1bmN0aW9uOiAl
cFxuIiwgaW5kZW50YXRpb24sIHByb2JlRnVuY3Rpb24pOwotICAgIGRhdGFMb2dGKCIlcyAgYXJn
MTogJXAgJWxsdVxuIiwgaW5kZW50YXRpb24sIGFyZzEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRf
dD4oYXJnMSkpOwotICAgIGRhdGFMb2dGKCIlcyAgYXJnMjogJXAgJWxsdVxuIiwgaW5kZW50YXRp
b24sIGFyZzIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oYXJnMikpOwotICAgIGRhdGFMb2dG
KCIlcyAgY3B1OiB7XG4iLCBpbmRlbnRhdGlvbik7CitleHRlcm4gIkMiIHZvaWQgY3RpTWFzbVBy
b2JlVHJhbXBvbGluZSgpOwogCi0gICAgZHVtcENQVVJlZ2lzdGVycyhpbmRlbnRhdGlvbik7Cisv
LyBXaGF0IGNvZGUgaXMgZW1pdHRlZCBmb3IgdGhlIHByb2JlPworLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBzaXplIG9mIHRoZSBl
bWl0dGVkIHByb2JlIGludm9jYXRpb24gY29kZSBhcyBjb21wYWN0IGFzCisvLyBwb3NzaWJsZSB0
byBtaW5pbWl6ZSB0aGUgcGVydHVyYmF0aW9uIHRvIHRoZSBKSVQgZ2VuZXJhdGVkIGNvZGUuIEhv
d2V2ZXIsCisvLyB3ZSBhbHNvIG5lZWQgdG8gcHJlc2VydmUgdGhlIENQVSByZWdpc3RlcnMgYW5k
IHNldCB1cCB0aGUgUHJvYmVDb250ZXh0IHRvIGJlCisvLyBwYXNzZWQgdG8gdGhlIHVzZXIgcHJv
YmUgZnVuY3Rpb24uCisvLworLy8gSGVuY2UsIHdlIGRvIG9ubHkgdGhlIG1pbmltdW0gaGVyZSB0
byBwcmVzZXJ2ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIgKGkuZS4gcmF4CisvLyBpbiB0aGlzIGNhc2Up
IGFuZCB0aGUgc3RhY2sgcG9pbnRlciAoaS5lLiByc3ApLCBhbmQgcGFzcyB0aGUgcHJvYmUgYXJn
dW1lbnRzLgorLy8gV2UnbGwgbGV0IHRoZSBjdGlNYXNtUHJvYmVUcmFtcG9saW5lIGhhbmRsZSB0
aGUgcmVzdCBvZiB0aGUgcHJvYmUgaW52b2NhdGlvbgorLy8gd29yayBpLmUuIHNhdmluZyB0aGUg
Q1BVSW5mbyAoYW5kIHNldHRpbmcgdXAgdGhlIFByb2JlQ29udGV4dCksIGNhbGxpbmcgdGhlCisv
LyB1c2VyIHByb2JlIGZ1bmN0aW9uLCBhbmQgcmVzdG9yaW5nIHRoZSBDUFVJbmZvIGJlZm9yZSBy
ZXR1cm5pbmcgdG8gSklUCisvLyBnZW5lcmF0ZWQgY29kZS4KKy8vCisvLyBXaGF0IHZhbHVlcyBh
cmUgaW4gdGhlIHNhdmVkIHJlZ2lzdGVycz8KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisvLyBDb25jZXB0dWFsbHksIHRoZSBzYXZlZCByZWdpc3RlcnMgc2hvdWxk
IGNvbnRhaW4gdmFsdWVzIGFzIGlmIHRoZSBwcm9iZQorLy8gaXMgbm90IHByZXNlbnQgaW4gdGhl
IEpJVCBnZW5lcmF0ZWQgY29kZS4gSGVuY2UsIHRoZXkgc2hvdWxkIGNvbnRhaW4gdmFsdWVzCisv
LyB0aGF0IGFyZSBleHBlY3RlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIGltbWVk
aWF0ZWx5IGZvbGxvd2luZyB0aGUKKy8vIHByb2JlLgorLy8KKy8vIFNwZWNpZmNhbGx5LCB0aGUg
c2F2ZWQgc3RhY2sgcG9pbnRlciByZWdpc3RlciB3aWxsIHBvaW50IHRvIHRoZSBzdGFjaworLy8g
cG9zaXRpb24gYmVmb3JlIHdlIHB1c2ggdGhlIFByb2JlQ29udGV4dCBmcmFtZS4gVGhlIHNhdmVk
IHJpcCB3aWxsIHBvaW50IHRvCisvLyB0aGUgYWRkcmVzcyBvZiB0aGUgaW5zdHJ1Y3Rpb24gaW1t
ZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBwcm9iZS4gCiAKLSAgICBkYXRhTG9nRigiJXMgIH1cbiIs
IGluZGVudGF0aW9uKTsKLSAgICBkYXRhTG9nRigiJXN9XG4iLCBpbmRlbnRhdGlvbik7Cit2b2lk
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpwcm9iZShNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
UHJvYmVGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogYXJnMSwgdm9pZCogYXJnMikKK3sKKyAgICBw
dXNoKFJlZ2lzdGVySUQ6OmVzcCk7CisgICAgcHVzaChSZWdpc3RlcklEOjplYXgpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhcmcyKSwgUmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBwdXNoKFJlZ2lz
dGVySUQ6OmVheCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBSZWdpc3RlcklEOjpl
YXgpOworICAgIHB1c2goUmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwgUmVnaXN0ZXJJRDo6ZWF4KTsKKyAg
ICBwdXNoKFJlZ2lzdGVySUQ6OmVheCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUpKSwgUmVnaXN0ZXJJRDo6ZWF4
KTsKKyAgICBjYWxsKFJlZ2lzdGVySUQ6OmVheCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTUFT
TV9QUk9CRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE3NjAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsMTAgKzMwLDEzIEBACiAKICNpbmNsdWRlICJYODZBc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJQcm9iZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24gOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxYODZBc3NlbWJsZXI+
IHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uIDogcHVibGljIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI8WDg2QXNzZW1ibGVyPiwKKyAgICBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJQcm9iZTxN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbj4geworCiBwdWJsaWM6CiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBzdGF0aWMgY29uc3QgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlciA9
IFg4NlJlZ2lzdGVyczo6cjExOwpAQCAtMTQ3MCwyNiArMTQ3Myw5IEBAIHB1YmxpYzoKICAgICB9
CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICBzdHJ1Y3QgQ1BVU3RhdGUgewotICAgICAg
ICAjZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSBcCi0gICAgICAgICAg
ICBfdHlwZSBfcmVnTmFtZTsKLSAgICAgICAgRk9SX0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVf
UkVHSVNURVIpCi0gICAgICAgICN1bmRlZiBERUNMQVJFX1JFR0lTVEVSCi0gICAgfTsKLQotICAg
IHN0cnVjdCBQcm9iZUNvbnRleHQ7Ci0gICAgdHlwZWRlZiB2b2lkICgqUHJvYmVGdW5jdGlvbiko
c3RydWN0IFByb2JlQ29udGV4dCopOwotCi0gICAgc3RydWN0IFByb2JlQ29udGV4dCB7Ci0gICAg
ICAgIFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKLSAgICAgICAgdm9pZCogYXJnMTsKLSAg
ICAgICAgdm9pZCogYXJnMjsKLSAgICAgICAgQ1BVU3RhdGUgY3B1OwotCi0gICAgICAgIHZvaWQg
ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAg
IHZvaWQgZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlvbik7Ci0gICAgfTsK
KyAgICAvLyBJbXBsZW1lbnRhdGlvbnMgcmVxdWlyZWQgYnkgTWFjcm9Bc3NlbWJsZXJQcm9iZS5o
LgorICAgIHZvaWQgcHJvYmUoUHJvYmVGdW5jdGlvbiwgdm9pZCogYXJnMSA9IDAsIHZvaWQqIGFy
ZzIgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBwcmludENQVVJlZ2lzdGVycyhDUFVJbmZvJiwgaW50
IGluZGVudGF0aW9uKTsKICNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKIAogcHJvdGVjdGVk
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTc2MDMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMCArMzAsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCIK
IAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LSNlbmRpZgotCiAjZGVmaW5lIFJFUFRBQ0hfT0ZGU0VUX0NBTExfUjExIDMKIAogaW5saW5lIGJv
b2wgQ0FOX1NJR05fRVhURU5EXzMyXzY0KGludDY0X3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09
IChpbnQ2NF90KShpbnQzMl90KXZhbHVlOyB9CkBAIC04NDAsMjYgKzgzNiw2IEBAIHB1YmxpYzoK
ICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9u
U3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5p
dGlhbFZhbHVlKSwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoTUFTTV9Q
Uk9CRSkKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGVtaXRzIGNvZGUgdG8gcHJlc2VydmUgdGhlIENQ
VVN0YXRlIChlLmcuIHJlZ2lzdGVycyksCi0gICAgLy8gY2FsbCBhIHVzZXIgc3VwcGxpZWQgcHJv
YmUgZnVuY3Rpb24sIGFuZCByZXN0b3JlIHRoZSBDUFVTdGF0ZSBiZWZvcmUKLSAgICAvLyBjb250
aW51aW5nIHdpdGggb3RoZXIgSklUIGdlbmVyYXRlZCBjb2RlLgotICAgIC8vCi0gICAgLy8gVGhl
IHVzZXIgc3VwcGxpZWQgcHJvYmUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBhIHNpbmds
ZSBwb2ludGVyIHRvCi0gICAgLy8gYSBQcm9iZUNvbnRleHQgc3RydWN0IChkZWZpbmVkIGFib3Zl
KSB3aGljaCBjb250YWlucywgYW1vbmcgb3RoZXIgdGhpbmdzLAotICAgIC8vIHRoZSBwcmVzZXJ2
ZWQgQ1BVU3RhdGUuIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHByb2JlIGZ1bmN0aW9uIHRvIGluc3Bl
Y3QKLSAgICAvLyB0aGUgQ1BVU3RhdGUgYXQgdGhhdCBwb2ludCBpbiB0aGUgSklUIGdlbmVyYXRl
ZCBjb2RlLgotICAgIC8vCi0gICAgLy8gSWYgdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24gYWx0ZXJz
IHRoZSByZWdpc3RlciB2YWx1ZXMgaW4gdGhlIFByb2JlQ29udGV4dCwKLSAgICAvLyB0aGUgYWx0
ZXJlZCB2YWx1ZXMgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgQ1BVIHJlZ2lzdGVycyB3aGVuIHRo
ZSBwcm9iZQotICAgIC8vIHJldHVybnMuCi0gICAgLy8KLSAgICAvLyBUaGUgUHJvYmVDb250ZXh0
IGlzIHN0YWNrIGFsbG9jYXRlZCBhbmQgaXMgb25seSB2YWxpZCBmb3IgdGhlIGR1cmF0aW9uCi0g
ICAgLy8gb2YgdGhlIGNhbGwgdG8gdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24uCi0KLSAgICB2b2lk
IHByb2JlKFByb2JlRnVuY3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7Ci0j
ZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExpbmtCdWZmZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC04ODEsNjkg
Kzg1Nyw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUFRBQ0hfT0ZGU0VUX0NBTExfUjEx
KS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAg
fQotCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0gICAgaW5saW5lIFRydXN0ZWRJbW02NCB0cnVz
dGVkSW1tNjRGcm9tUHRyKHZvaWQqIHB0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcnVzdGVk
SW1tNjQoVHJ1c3RlZEltbVB0cihwdHIpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZElt
bTY0IHRydXN0ZWRJbW02NEZyb21QdHIoUHJvYmVGdW5jdGlvbiBmdW5jdGlvbikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBUcnVzdGVkSW1tNjQoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihmdW5jdGlvbikpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZEltbTY0IHRy
dXN0ZWRJbW02NEZyb21QdHIodm9pZCAoKmZ1bmN0aW9uKSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFRydXN0ZWRJbW02NChUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1
bmN0aW9uKSkpOwotICAgIH0KLSNlbmRpZgogfTsKIAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQot
Ci1leHRlcm4gIkMiIHZvaWQgY3RpTWFzbVByb2JlVHJhbXBvbGluZSgpOwotCi0vLyBXaGF0IGNv
ZGUgaXMgZW1pdHRlZCBmb3IgdGhlIHByb2JlPwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBzaXplIG9mIHRoZSBlbWl0dGVkIHBy
b2JlIGludm9jYXRpb24gY29kZSBhcyBjb21wYWN0IGFzCi0vLyBwb3NzaWJsZSB0byBtaW5pbWl6
ZSB0aGUgcGVydHVyYmF0aW9uIHRvIHRoZSBKSVQgZ2VuZXJhdGVkIGNvZGUuIEhvd2V2ZXIsCi0v
LyB3ZSBhbHNvIG5lZWQgdG8gcHJlc2VydmUgdGhlIENQVSByZWdpc3RlcnMgYW5kIHNldCB1cCB0
aGUgUHJvYmVDb250ZXh0IHRvIGJlCi0vLyBwYXNzZWQgdG8gdGhlIHVzZXIgcHJvYmUgZnVuY3Rp
b24uCi0vLwotLy8gSGVuY2UsIHdlIGRvIG9ubHkgdGhlIG1pbmltdW0gaGVyZSB0byBwcmVzZXJ2
ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIgKGkuZS4gcmF4Ci0vLyBpbiB0aGlzIGNhc2UpIGFuZCB0aGUg
c3RhY2sgcG9pbnRlciAoaS5lLiByc3ApLCBhbmQgcGFzcyB0aGUgcHJvYmUgYXJndW1lbnRzLgot
Ly8gV2UnbGwgbGV0IHRoZSBjdGlNYXNtUHJvYmVUcmFtcG9saW5lIGhhbmRsZSB0aGUgcmVzdCBv
ZiB0aGUgcHJvYmUgaW52b2NhdGlvbgotLy8gd29yayBpLmUuIHNhdmluZyB0aGUgQ1BVU3RhdGUg
KGFuZCBzZXR0aW5nIHVwIHRoZSBQcm9iZUNvbnRleHQpLCBjYWxsaW5nIHRoZQotLy8gdXNlciBw
cm9iZSBmdW5jdGlvbiwgYW5kIHJlc3RvcmluZyB0aGUgQ1BVU3RhdGUgYmVmb3JlIHJldHVybmlu
ZyB0byBKSVQKLS8vIGdlbmVyYXRlZCBjb2RlLgotLy8KLS8vIFdoYXQgdmFsdWVzIGFyZSBpbiB0
aGUgc2F2ZWQgcmVnaXN0ZXJzPwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS8vIENvbmNlcHR1YWxseSwgdGhlIHNhdmVkIHJlZ2lzdGVycyBzaG91bGQgY29udGFp
biB2YWx1ZXMgYXMgaWYgdGhlIHByb2JlCi0vLyBpcyBub3QgcHJlc2VudCBpbiB0aGUgSklUIGdl
bmVyYXRlZCBjb2RlLiBIZW5jZSwgdGhleSBzaG91bGQgY29udGFpbiB2YWx1ZXMKLS8vIHRoYXQg
YXJlIGV4cGVjdGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gaW1tZWRpYXRlbHkg
Zm9sbG93aW5nIHRoZQotLy8gcHJvYmUuCi0vLwotLy8gU3BlY2lmY2FsbHksIHRoZSBzYXZlZCBz
dGFjayBwb2ludGVyIHJlZ2lzdGVyIHdpbGwgcG9pbnQgdG8gdGhlIHN0YWNrCi0vLyBwb3NpdGlv
biBiZWZvcmUgd2UgcHVzaCB0aGUgUHJvYmVDb250ZXh0IGZyYW1lLiBUaGUgc2F2ZWQgcmlwIHdp
bGwgcG9pbnQgdG8KLS8vIHRoZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiBpbW1lZGlhdGVs
eSBmb2xsb3dpbmcgdGhlIHByb2JlLiAKLQotaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnByb2JlKE1hY3JvQXNzZW1ibGVyWDg2XzY0OjpQcm9iZUZ1bmN0aW9uIGZ1bmN0aW9uLCB2
b2lkKiBhcmcxLCB2b2lkKiBhcmcyKQotewotICAgIHB1c2goUmVnaXN0ZXJJRDo6ZXNwKTsKLSAg
ICBwdXNoKFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgbW92ZSh0cnVzdGVkSW1tNjRGcm9tUHRyKGFy
ZzIpLCBSZWdpc3RlcklEOjplYXgpOwotICAgIHB1c2goUmVnaXN0ZXJJRDo6ZWF4KTsKLSAgICBt
b3ZlKHRydXN0ZWRJbW02NEZyb21QdHIoYXJnMSksIFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgcHVz
aChSZWdpc3RlcklEOjplYXgpOwotICAgIG1vdmUodHJ1c3RlZEltbTY0RnJvbVB0cihmdW5jdGlv
biksIFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgcHVzaChSZWdpc3RlcklEOjplYXgpOwotICAgIG1v
dmUodHJ1c3RlZEltbTY0RnJvbVB0cihjdGlNYXNtUHJvYmVUcmFtcG9saW5lKSwgUmVnaXN0ZXJJ
RDo6ZWF4KTsKLSAgICBjYWxsKFJlZ2lzdGVySUQ6OmVheCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxF
KE1BU01fUFJPQkUpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEFT
U0VNQkxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkocmV2aXNpb24gMTc2MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDEsNiArNDEsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoTUFT
TV9QUk9CRSkKK3R5cGVkZWYgY2xhc3MgWDg2QXNzZW1ibGVyIFByb2JlQXNzZW1ibGVyOwordHlw
ZWRlZiB2b2lkKiBHUFJlZ1ZhbHVlOwordHlwZWRlZiBfX20xMjggRlBSZWdWYWx1ZTsKKyNlbmRp
ZgorCiBpbmxpbmUgYm9vbCBDQU5fU0lHTl9FWFRFTkRfOF8zMihpbnQzMl90IHZhbHVlKSB7IHJl
dHVybiB2YWx1ZSA9PSAoaW50MzJfdCkoc2lnbmVkIGNoYXIpdmFsdWU7IH0KIAogbmFtZXNwYWNl
IFg4NlJlZ2lzdGVycyB7CkBAIC0xMTcsMTAgKzEyMywxMiBAQCBuYW1lc3BhY2UgWDg2UmVnaXN0
ZXJzIHsKICAgICAgICAgVihfX20xMjgsIHhtbTQpIFwKICAgICAgICAgVihfX20xMjgsIHhtbTUp
IFwKICAgICAgICAgVihfX20xMjgsIHhtbTYpIFwKLSAgICAgICAgVihfX20xMjgsIHhtbTcpCisg
ICAgICAgIFYoX19tMTI4LCB4bW03KSBcCisgICAgICAgIEZPUl9FQUNIX1g4Nl82NF9DUFVfRlBS
RUdJU1RFUihWKQogCiAjaWYgQ1BVKFg4NikKICAgICAjZGVmaW5lIEZPUl9FQUNIX1g4Nl82NF9D
UFVfR1BSRUdJU1RFUihWKSAvLyBOb3RoaW5nIHRvIGFkZC4KKyAgICAjZGVmaW5lIEZPUl9FQUNI
X1g4Nl82NF9DUFVfRlBSRUdJU1RFUihWKSAvLyBOb3RoaW5nIHRvIGFkZC4KICNlbGlmIENQVShY
ODZfNjQpCiAgICAgI2RlZmluZSBGT1JfRUFDSF9YODZfNjRfQ1BVX0dQUkVHSVNURVIoVikgXAog
ICAgICAgICBWKHZvaWQqLCByOCkgXApAQCAtMTMxLDYgKzEzOSwxNiBAQCBuYW1lc3BhY2UgWDg2
UmVnaXN0ZXJzIHsKICAgICAgICAgVih2b2lkKiwgcjEzKSBcCiAgICAgICAgIFYodm9pZCosIHIx
NCkgXAogICAgICAgICBWKHZvaWQqLCByMTUpCisKKyAgICAjZGVmaW5lIEZPUl9FQUNIX1g4Nl82
NF9DUFVfRlBSRUdJU1RFUihWKSBcCisgICAgICAgIFYoX19tMTI4LCB4bW04KSBcCisgICAgICAg
IFYoX19tMTI4LCB4bW05KSBcCisgICAgICAgIFYoX19tMTI4LCB4bW0xMCkgXAorICAgICAgICBW
KF9fbTEyOCwgeG1tMTEpIFwKKyAgICAgICAgVihfX20xMjgsIHhtbTEyKSBcCisgICAgICAgIFYo
X19tMTI4LCB4bW0xMykgXAorICAgICAgICBWKF9fbTEyOCwgeG1tMTQpIFwKKyAgICAgICAgVihf
X20xMjgsIHhtbTE1KQogI2VuZGlmIC8vIENQVShYODZfNjQpCiAjZW5kaWYgLy8gRU5BQkxFKE1B
U01fUFJPQkUpCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzWDg2
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
c1g4NkNvbW1vbi5oCShyZXZpc2lvbiAxNzYwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDExICs5MiwyNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgUFJPQkVfQ1BVX1hNTTZfT0ZGU0VUIChQUk9CRV9G
SVJTVF9YTU1fT0ZGU0VUICsgKDYgKiBYTU1fU0laRSkpCiAjZGVmaW5lIFBST0JFX0NQVV9YTU03
X09GRlNFVCAoUFJPQkVfRklSU1RfWE1NX09GRlNFVCArICg3ICogWE1NX1NJWkUpKQogCisjaWYg
Q1BVKFg4Nl82NCkKKyNkZWZpbmUgUFJPQkVfQ1BVX1hNTThfT0ZGU0VUIChQUk9CRV9GSVJTVF9Y
TU1fT0ZGU0VUICsgKDggKiBYTU1fU0laRSkpCisjZGVmaW5lIFBST0JFX0NQVV9YTU05X09GRlNF
VCAoUFJPQkVfRklSU1RfWE1NX09GRlNFVCArICg5ICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9C
RV9DUFVfWE1NMTBfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZGU0VUICsgKDEwICogWE1NX1NJ
WkUpKQorI2RlZmluZSBQUk9CRV9DUFVfWE1NMTFfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZG
U0VUICsgKDExICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9CRV9DUFVfWE1NMTJfT0ZGU0VUIChQ
Uk9CRV9GSVJTVF9YTU1fT0ZGU0VUICsgKDEyICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9CRV9D
UFVfWE1NMTNfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZGU0VUICsgKDEzICogWE1NX1NJWkUp
KQorI2RlZmluZSBQUk9CRV9DUFVfWE1NMTRfT0ZGU0VUIChQUk9CRV9GSVJTVF9YTU1fT0ZGU0VU
ICsgKDE0ICogWE1NX1NJWkUpKQorI2RlZmluZSBQUk9CRV9DUFVfWE1NMTVfT0ZGU0VUIChQUk9C
RV9GSVJTVF9YTU1fT0ZGU0VUICsgKDE1ICogWE1NX1NJWkUpKQorI2VuZGlmIC8vIENQVShYODZf
NjQpCisKKyNpZiBDUFUoWDg2KQogI2RlZmluZSBQUk9CRV9TSVpFIChQUk9CRV9DUFVfWE1NN19P
RkZTRVQgKyBYTU1fU0laRSkKKyNlbHNlIC8vIENQVShYODZfNjQpCisjZGVmaW5lIFBST0JFX1NJ
WkUgKFBST0JFX0NQVV9YTU0xNV9PRkZTRVQgKyBYTU1fU0laRSkKKyNlbmRpZiAvLyBDUFUoWDg2
XzY0KQogCiAvLyBUaGVzZSBBU1NFUlRzIHJlbWluZCB5b3UgdGhhdCBpZiB5b3UgY2hhbmdlIHRo
ZSBsYXlvdXQgb2YgUHJvYmVDb250ZXh0LAogLy8geW91IG5lZWQgdG8gY2hhbmdlIGN0aU1hc21Q
cm9iZVRyYW1wb2xpbmUgb2Zmc2V0cyBhYm92ZSB0byBtYXRjaC4KLSNkZWZpbmUgUFJPQkVfT0ZG
U0VUT0YoeCkgb2Zmc2V0b2Yoc3RydWN0IE1hY3JvQXNzZW1ibGVyOjpQcm9iZUNvbnRleHQsIHgp
CisjZGVmaW5lIFBST0JFX09GRlNFVE9GKHgpIG9mZnNldG9mKHN0cnVjdCBNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6UHJvYmVDb250ZXh0LCB4KQorCiBDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZT
RVRPRihwcm9iZUZ1bmN0aW9uKSA9PSBQUk9CRV9QUk9CRV9GVU5DVElPTl9PRkZTRVQsIFByb2Jl
Q29udGV4dF9wcm9iZUZ1bmN0aW9uX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xp
bmUpOwogQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoYXJnMSkgPT0gUFJPQkVfQVJHMV9P
RkZTRVQsIFByb2JlQ29udGV4dF9hcmcxX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1w
b2xpbmUpOwogQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoYXJnMikgPT0gUFJPQkVfQVJH
Ml9PRkZTRVQsIFByb2JlQ29udGV4dF9hcmcyX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRy
YW1wb2xpbmUpOwpAQCAtMTMyLDYgKzE0OCwxNyBAQCBDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZT
RVRPRihjcHUueG1tNSkgCiBDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUueG1tNikg
PT0gUFJPQkVfQ1BVX1hNTTZfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTZfb2Zmc2V0X21h
dGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CiBDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZT
RVRPRihjcHUueG1tNykgPT0gUFJPQkVfQ1BVX1hNTTdfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1
X3htbTdfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CiAKKyNpZiBDUFUo
WDg2XzY0KQorQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LnhtbTgpID09IFBST0JF
X0NQVV9YTU04X09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV94bW04X29mZnNldF9tYXRjaGVzX2N0
aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1
LnhtbTkpID09IFBST0JFX0NQVV9YTU05X09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV94bW05X29m
ZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJP
QkVfT0ZGU0VUT0YoY3B1LnhtbTEwKSA9PSBQUk9CRV9DUFVfWE1NMTBfT0ZGU0VULCBQcm9iZUNv
bnRleHRfY3B1X3htbTEwX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOwor
Q09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LnhtbTExKSA9PSBQUk9CRV9DUFVfWE1N
MTFfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTExX29mZnNldF9tYXRjaGVzX2N0aU1hc21Q
cm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LnhtbTEy
KSA9PSBQUk9CRV9DUFVfWE1NMTJfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTEyX29mZnNl
dF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVf
T0ZGU0VUT0YoY3B1LnhtbTEzKSA9PSBQUk9CRV9DUFVfWE1NMTNfT0ZGU0VULCBQcm9iZUNvbnRl
eHRfY3B1X3htbTEzX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworQ09N
UElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LnhtbTE0KSA9PSBQUk9CRV9DUFVfWE1NMTRf
T0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTE0X29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9i
ZVRyYW1wb2xpbmUpOworQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LnhtbTE1KSA9
PSBQUk9CRV9DUFVfWE1NMTVfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X3htbTE1X29mZnNldF9t
YXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOworI2VuZGlmIC8vIENQVShYODZfNjQpCisK
IENPTVBJTEVfQVNTRVJUKHNpemVvZihNYWNyb0Fzc2VtYmxlcjo6UHJvYmVDb250ZXh0KSA9PSBQ
Uk9CRV9TSVpFLCBQcm9iZUNvbnRleHRfc2l6ZV9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xp
bmUpOwogCiAvLyBBbHNvIGRvdWJsZSBjaGVjayB0aGF0IHRoZSB4bW0gcmVnaXN0ZXJzIGFyZSAx
NiBieXRlICgxMjgtYml0KSBhbGlnbmVkIGFzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVic1g4Nl82NC5oCShyZXZpc2lvbiAxNzYwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLCAyMDExLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKQEAgLTExMyw2ICsxMTMsMTUgQEAgU1lNQk9MX1NUUklORyhjdGlNYXNtUHJvYmVU
cmFtcG9saW5lKSAiOgogICAgICJtb3ZkcWEgJXhtbTYsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBS
T0JFX0NQVV9YTU02X09GRlNFVCkgIiglcmJwKSIgIlxuIgogICAgICJtb3ZkcWEgJXhtbTcsICIg
U1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU03X09GRlNFVCkgIiglcmJwKSIgIlxuIgog
CisgICAgIm1vdmRxYSAleG1tOCwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTThf
T0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdmRxYSAleG1tOSwgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX1hNTTlfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisgICAgIm1vdmRxYSAl
eG1tMTAsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0xMF9PRkZTRVQpICIoJXJi
cCkiICJcbiIKKyAgICAibW92ZHFhICV4bW0xMSwgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVf
Q1BVX1hNTTExX09GRlNFVCkgIiglcmJwKSIgIlxuIgorICAgICJtb3ZkcWEgJXhtbTEyLCAiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMTJfT0ZGU0VUKSAiKCVyYnApIiAiXG4iCisg
ICAgIm1vdmRxYSAleG1tMTMsICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0xM19P
RkZTRVQpICIoJXJicCkiICJcbiIKKyAgICAibW92ZHFhICV4bW0xNCwgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX1hNTTE0X09GRlNFVCkgIiglcmJwKSIgIlxuIgorICAgICJtb3ZkcWEg
JXhtbTE1LCAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMTVfT0ZGU0VUKSAiKCVy
YnApIiAiXG4iCisKICAgICAibW92cSAlcmJwLCAlcmRpIiAiXG4iIC8vIHRoZSBQcm9iZUNvbnRl
eHQqIGFyZy4KICAgICAiY2FsbCAqIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfUFJPQkVfRlVO
Q1RJT05fT0ZGU0VUKSAiKCVyYnApIiAiXG4iCiAKQEAgLTE0Miw2ICsxNTEsMTUgQEAgU1lNQk9M
X1NUUklORyhjdGlNYXNtUHJvYmVUcmFtcG9saW5lKSAiOgogICAgICJtb3ZkcWEgIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTZfT0ZGU0VUKSAiKCVyYnApLCAleG1tNiIgIlxuIgog
ICAgICJtb3ZkcWEgIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTdfT0ZGU0VUKSAi
KCVyYnApLCAleG1tNyIgIlxuIgogCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQ
Uk9CRV9DUFVfWE1NOF9PRkZTRVQpICIoJXJicCksICV4bW0wIiAiXG4iCisgICAgIm1vdmRxYSAi
IFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NOV9PRkZTRVQpICIoJXJicCksICV4bW0x
IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfWE1NMTBf
T0ZGU0VUKSAiKCVyYnApLCAleG1tMiIgIlxuIgorICAgICJtb3ZkcWEgIiBTVFJJTkdJWkVfVkFM
VUVfT0YoUFJPQkVfQ1BVX1hNTTExX09GRlNFVCkgIiglcmJwKSwgJXhtbTMiICJcbiIKKyAgICAi
bW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0xMl9PRkZTRVQpICIoJXJi
cCksICV4bW00IiAiXG4iCisgICAgIm1vdmRxYSAiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9D
UFVfWE1NMTNfT0ZGU0VUKSAiKCVyYnApLCAleG1tNSIgIlxuIgorICAgICJtb3ZkcWEgIiBTVFJJ
TkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX1hNTTE0X09GRlNFVCkgIiglcmJwKSwgJXhtbTYiICJc
biIKKyAgICAibW92ZHFhICIgU1RSSU5HSVpFX1ZBTFVFX09GKFBST0JFX0NQVV9YTU0xNV9PRkZT
RVQpICIoJXJicCksICV4bW03IiAiXG4iCisKICAgICAvLyBUaGVyZSBhcmUgNiBtb3JlIHJlZ2lz
dGVycyBsZWZ0IHRvIHJlc3RvcmU6CiAgICAgLy8gICAgIHJheCwgcmN4LCByYnAsIHJzcCwgcmlw
LCBhbmQgcmZsYWdzLgogICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZXNlIGxhc3QgZmV3IHJl
c3RvcmVzIGNhcmVmdWxseSBiZWNhdXNlOgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241531</attachid>
            <date>2014-11-13 19:33:05 -0800</date>
            <delta_ts>2014-11-13 19:43:12 -0800</delta_ts>
            <desc>alternate implementation based on Geoff&apos;s suggestions</desc>
            <filename>bug-138671b.patch</filename>
            <type>text/plain</type>
            <size>43308</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2MTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDE0LTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWR1Y2UgYW1vdW50IG9mIGN1dC1hbmQtcGFzdGUgbmVlZGVkIGZvciBwcm9iZSBtZWNoYW5pc20g
aW1wbGVtZW50YXRpb25zLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4NjcxPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBleGlz
dGluZyBjb2RlIHJlcXVpcmVzIHRoYXQgZWFjaCBNYWNyb0Fzc2VtYmxlciBpbXBsZW1lbnRhdGlv
biBwcm92aWRlCisgICAgICAgIHRoZWlyIG93biBjb3B5IG9mIGFsbCBvZiB0aGUgcHJvYmUgaW1w
bGVtZW50YXRpb25zIGV2ZW4gd2hlbiBtb3N0IG9mIGl0IGlzCisgICAgICAgIGlkZW50aWNhbC4g
IFRoaXMgcGF0Y2ggaG9pc3RzIHRoZSBjb21tb24gcGFydHMgaW50byBBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyCisgICAgICAgICh3aXRoIHNvbWUgbWlub3IgcmVuYW1pbmcpLiAgRWFjaCB0YXJnZXQg
c3BlY2lmaWMgTWFjcm9Bc3NlbWJsZXIgbm93IG9ubHkKKyAgICAgICAgbmVlZCB0byBpbXBsZW1l
bnQgYSBmZXcgdGFyZ2V0IHNwZWNpZmljIG1ldGhvZHMgdGhhdCBhcmUgZXhwZWN0ZWQgYnkgYW5k
CisgICAgICAgIGRvY3VtZW50ZWQgaW4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIHRoZSBF
TkFCTEUoTUFTTV9QUk9CRSkgc2VjdGlvbi4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBJIGFs
c28gc2ltcGxpZmllZCB0aGUgWDg2IGFuZCBYODZfNjQgcG9ydHMgdG8gdXNlIHRoZSBzYW1lCisg
ICAgICAgIHBvcnQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGhpcyBpcyBhbGwgZG9uZSBp
biBwcmVwYXJhdGlvbiB0byBhZGQgcHJpbnRpbmcgZnVuY3Rpb25hbGl0eSBpbiBKSVR0ZWQgY29k
ZQorICAgICAgICBmb3IgZGVidWdnaW5nLgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
TGFiZWw6OkxhYmVsKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6Q29u
dmVydGlibGVMb2FkTGFiZWw6OkNvbnZlcnRpYmxlTG9hZExhYmVsKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyOjpEYXRhTGFiZWxQdHIpOgorICAg
ICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWwzMjo6RGF0YUxhYmVs
MzIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21w
YWN0OjpEYXRhTGFiZWxDb21wYWN0KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcDo6bGluayk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6
Okp1bXA6OmxpbmtUbyk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0OjpsaW5rKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Q6OmxpbmtUbyk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlBy
b2JlQ29udGV4dDo6cHJpbnQpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
OjpwcmludEluZGVudCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnBy
aW50Q1BVKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6Q2FjaGVkVGVt
cFJlZ2lzdGVyOjpDYWNoZWRUZW1wUmVnaXN0ZXIpOgorICAgICAgICAtIEV4Y2VwdCBmb3IgdGhl
IDMgcHJpbnRpbmcgbWV0aG9kcyAod2hpY2ggYXJlIGZvciB0aGUgcHJvYmUpLCB0aGUgcmVzdAor
ICAgICAgICAgIGFyZSB0b3VjaGVkIHNpbXBseSBiZWNhdXNlIHdlIG5lZWQgdG8gYWRkIHRoZSBN
YWNyb0Fzc2VtYmxlclR5cGUgdG8gdGhlCisgICAgICAgICAgdGVtcGxhdGUgYXJncy4KKyAgICAg
ICAgICBUaGUgTWFjcm9Bc3NlbWJsZXJUeXBlIGlzIHVzZWQgYnkgdGhlIGFic3RyYWN0IHByb2Jl
IGNvZGUgdG8gY2FsbCB0aGUKKyAgICAgICAgICBmZXcgcHJvYmUgbWV0aG9kcyB0aGF0IG5lZWQg
dG8gaGF2ZSBDUFUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk06OnByaW50Q1BVUmVnaXN0ZXJzKToKKyAgICAgICAgLSBUaGlzIHdhcyByZWZhY3RvcmVkIGZy
b20gUHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKCkgd2hpY2ggbm8KKyAgICAgICAgICBs
b25nZXIgZXhpc3RzLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6UHJvYmVDb250
ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06OlByb2JlQ29udGV4dDo6ZHVtcCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcu
Y3BwOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpwcmludENQVVJlZ2lzdGVy
cyk6CisgICAgICAgIC0gVGhpcyB3YXMgcmVmYWN0b3JlZCBmcm9tIFByb2JlQ29udGV4dDo6ZHVt
cENQVVJlZ2lzdGVycygpIHdoaWNoIG5vCisgICAgICAgICAgbG9uZ2VyIGV4aXN0cy4KKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0
ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVD
b250ZXh0OjpkdW1wKTogRGVsZXRlZC4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTXY3Lmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
Njo6dHJ1c3RlZEltbTMyRnJvbVB0cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2Ojpwcm9iZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6cHJpbnRDUFVSZWdpc3RlcnMpOgorICAgICAgICAtIFRoaXMgd2FzIHJlZmFjdG9yZWQg
ZnJvbSBQcm9iZUNvbnRleHQ6OmR1bXBDUFVSZWdpc3RlcnMoKSB3aGljaCBubworICAgICAgICAg
IGxvbmdlciBleGlzdHMuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpw
cm9iZSk6CisgICAgICAgIC0gVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBwcm9iZSgpIGlzIGJhc2Vk
IG9uIHRoZSBvbmUgb3JpZ2luYWxseSBpbgorICAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2XzY0
LmguICBJdCBpcyBnZW5lcmljIGFuZCBzaG91bGQgd29yayBmb3IgYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OlByb2JlQ29udGV4dDo6ZHVtcCk6IERlbGV0ZWQuCisK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OnRydXN0ZWRJbW02NEZyb21QdHIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cHJvYmUpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRTdHVic0FSTXY3Lmg6CisKIDIwMTQtMTEtMTMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9m
ZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNjb3BlIG9wZXJhbmQgdG8gb3BfbmV3X2Z1bmMq
IGJ5dGUgY29kZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDExIEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0
IE9TUkV4aXQ7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBBc3NlbWJsZXJUeXBlPgordGVtcGxhdGUg
PGNsYXNzIEFzc2VtYmxlclR5cGUsIGNsYXNzIE1hY3JvQXNzZW1ibGVyVHlwZT4KIGNsYXNzIEFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVRXcml0
ZUJhcnJpZXJCYXNlOworICAgIHR5cGVkZWYgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJs
ZXJUeXBlLCBNYWNyb0Fzc2VtYmxlclR5cGU+IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlOwog
ICAgIHR5cGVkZWYgQXNzZW1ibGVyVHlwZSBBc3NlbWJsZXJUeXBlX1Q7CiAKICAgICB0eXBlZGVm
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwpAQCAtMzU1LDcgKzM1Niw3IEBAIHB1Ymxp
YzoKICAgICAvLyBBIExhYmVsIHJlY29yZHMgYSBwb2ludCBpbiB0aGUgZ2VuZXJhdGVkIGluc3Ry
dWN0aW9uIHN0cmVhbSwgdHlwaWNhbGx5IHN1Y2ggdGhhdAogICAgIC8vIGl0IG1heSBiZSB1c2Vk
IGFzIGEgZGVzdGluYXRpb24gZm9yIGEganVtcC4KICAgICBjbGFzcyBMYWJlbCB7Ci0gICAgICAg
IHRlbXBsYXRlPGNsYXNzIFRlbXBsYXRlQXNzZW1ibGVyVHlwZT4KKyAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJUeXBlLCBjbGFzcyBUZW1wbGF0ZU1hY3JvQXNzZW1ibGVy
VHlwZT4KICAgICAgICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI7CiAgICAg
ICAgIGZyaWVuZCBzdHJ1Y3QgREZHOjpPU1JFeGl0OwogICAgICAgICBmcmllbmQgY2xhc3MgSnVt
cDsKQEAgLTM2OCw3ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIExhYmVsKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4qIG1hc20p
CisgICAgICAgIExhYmVsKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNtKQogICAgICAg
ICAgICAgOiBtX2xhYmVsKG1hc20tPm1fYXNzZW1ibGVyLmxhYmVsKCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1hc20tPmludmFsaWRhdGVBbGxUZW1wUmVnaXN0ZXJzKCk7CkBAIC0zOTAsNyAr
MzkxLDcgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gYWRkUHRyKFRydXN0ZWRJbW1QdHIoaSks
IGEsIGIpCiAgICAgY2xhc3MgQ29udmVydGlibGVMb2FkTGFiZWwgewotICAgICAgICB0ZW1wbGF0
ZTxjbGFzcyBUZW1wbGF0ZUFzc2VtYmxlclR5cGU+CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIFRl
bXBsYXRlQXNzZW1ibGVyVHlwZSwgY2xhc3MgVGVtcGxhdGVNYWNyb0Fzc2VtYmxlclR5cGU+CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOwogICAgICAgICBmcmll
bmQgY2xhc3MgTGlua0J1ZmZlcjsKICAgICAgICAgCkBAIC0zOTksNyArNDAwLDcgQEAgcHVibGlj
OgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnZlcnRpYmxlTG9h
ZExhYmVsKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4qIG1hc20pCisgICAg
ICAgIENvbnZlcnRpYmxlTG9hZExhYmVsKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNt
KQogICAgICAgICAgICAgOiBtX2xhYmVsKG1hc20tPm1fYXNzZW1ibGVyLmxhYmVsSWdub3JpbmdX
YXRjaHBvaW50cygpKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTQxNCw3ICs0MTUsNyBAQCBw
dWJsaWM6CiAgICAgLy8gQSBEYXRhTGFiZWxQdHIgaXMgdXNlZCB0byByZWZlciB0byBhIGxvY2F0
aW9uIGluIHRoZSBjb2RlIGNvbnRhaW5pbmcgYSBwb2ludGVyIHRvIGJlCiAgICAgLy8gcGF0Y2hl
ZCBhZnRlciB0aGUgY29kZSBoYXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAgY2xhc3MgRGF0YUxhYmVs
UHRyIHsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJUeXBlPgorICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBUZW1wbGF0ZUFzc2VtYmxlclR5cGUsIGNsYXNzIFRlbXBsYXRl
TWFjcm9Bc3NlbWJsZXJUeXBlPgogICAgICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAgICAgcHVibGljOgpA
QCAtNDIyLDcgKzQyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgRGF0YUxhYmVsUHRyKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4qIG1h
c20pCisgICAgICAgIERhdGFMYWJlbFB0cihBYnN0cmFjdE1hY3JvQXNzZW1ibGVyVHlwZSogbWFz
bSkKICAgICAgICAgICAgIDogbV9sYWJlbChtYXNtLT5tX2Fzc2VtYmxlci5sYWJlbCgpKQogICAg
ICAgICB7CiAgICAgICAgIH0KQEAgLTQzOCw3ICs0MzksNyBAQCBwdWJsaWM6CiAgICAgLy8gQSBE
YXRhTGFiZWwzMiBpcyB1c2VkIHRvIHJlZmVyIHRvIGEgbG9jYXRpb24gaW4gdGhlIGNvZGUgY29u
dGFpbmluZyBhIDMyLWJpdCBjb25zdGFudCB0byBiZQogICAgIC8vIHBhdGNoZWQgYWZ0ZXIgdGhl
IGNvZGUgaGFzIGJlZW4gZ2VuZXJhdGVkLgogICAgIGNsYXNzIERhdGFMYWJlbDMyIHsKLSAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJUeXBlPgorICAgICAgICB0ZW1wbGF0
ZTxjbGFzcyBUZW1wbGF0ZUFzc2VtYmxlclR5cGUsIGNsYXNzIFRlbXBsYXRlTWFjcm9Bc3NlbWJs
ZXJUeXBlPgogICAgICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAgICAgcHVibGljOgpAQCAtNDQ2LDcgKzQ0
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgRGF0YUxhYmVs
MzIoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiogbWFzbSkKKyAgICAgICAg
RGF0YUxhYmVsMzIoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGUqIG1hc20pCiAgICAgICAgICAg
ICA6IG1fbGFiZWwobWFzbS0+bV9hc3NlbWJsZXIubGFiZWwoKSkKICAgICAgICAgewogICAgICAg
ICB9CkBAIC00NjIsNyArNDYzLDcgQEAgcHVibGljOgogICAgIC8vIEEgRGF0YUxhYmVsQ29tcGFj
dCBpcyB1c2VkIHRvIHJlZmVyIHRvIGEgbG9jYXRpb24gaW4gdGhlIGNvZGUgY29udGFpbmluZyBh
CiAgICAgLy8gY29tcGFjdCBpbW1lZGlhdGUgdG8gYmUgcGF0Y2hlZCBhZnRlciB0aGUgY29kZSBo
YXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAgY2xhc3MgRGF0YUxhYmVsQ29tcGFjdCB7Ci0gICAgICAg
IHRlbXBsYXRlPGNsYXNzIFRlbXBsYXRlQXNzZW1ibGVyVHlwZT4KKyAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJUeXBlLCBjbGFzcyBUZW1wbGF0ZU1hY3JvQXNzZW1ibGVy
VHlwZT4KICAgICAgICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogICAgIHB1YmxpYzoKQEAgLTQ3MCw3ICs0NzEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgRGF0
YUxhYmVsQ29tcGFjdChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+KiBtYXNt
KQorICAgICAgICBEYXRhTGFiZWxDb21wYWN0KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBt
YXNtKQogICAgICAgICAgICAgOiBtX2xhYmVsKG1hc20tPm1fYXNzZW1ibGVyLmxhYmVsKCkpCiAg
ICAgICAgIHsKICAgICAgICAgfQpAQCAtNDkzLDcgKzQ5NCw3IEBAIHB1YmxpYzoKICAgICAvLyBy
ZWxhdGl2ZSBvZmZzZXQgc3VjaCB0aGF0IHdoZW4gZXhlY3V0ZWQgaXQgd2lsbCBjYWxsIHRvIHRo
ZSBkZXNpcmVkCiAgICAgLy8gZGVzdGluYXRpb24uCiAgICAgY2xhc3MgQ2FsbCB7Ci0gICAgICAg
IHRlbXBsYXRlPGNsYXNzIFRlbXBsYXRlQXNzZW1ibGVyVHlwZT4KKyAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJUeXBlLCBjbGFzcyBUZW1wbGF0ZU1hY3JvQXNzZW1ibGVy
VHlwZT4KICAgICAgICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI7CiAKICAg
ICBwdWJsaWM6CkBAIC01MzcsNyArNTM4LDcgQEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZlIG9m
ZnNldCBzdWNoIHRoYXQgd2hlbiBleGVjdXRlZCBpdCB3aWxsIGp1bXAgdG8gdGhlIGRlc2lyZWQK
ICAgICAvLyBkZXN0aW5hdGlvbi4KICAgICBjbGFzcyBKdW1wIHsKLSAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJUeXBlPgorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBUZW1w
bGF0ZUFzc2VtYmxlclR5cGUsIGNsYXNzIFRlbXBsYXRlTWFjcm9Bc3NlbWJsZXJUeXBlPgogICAg
ICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjsKICAgICAgICAgZnJpZW5k
IGNsYXNzIENhbGw7CiAgICAgICAgIGZyaWVuZCBzdHJ1Y3QgREZHOjpPU1JFeGl0OwpAQCAtNjAy
LDcgKzYwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIGxpbmsoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJU
eXBlPiogbWFzbSkgY29uc3QKKyAgICAgICAgdm9pZCBsaW5rKEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXJUeXBlKiBtYXNtKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBtYXNtLT5pbnZhbGlk
YXRlQWxsVGVtcFJlZ2lzdGVycygpOwogCkBAIC02MjYsNyArNjI3LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgbGlua1RvKExhYmVsIGxhYmVs
LCBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+KiBtYXNtKSBjb25zdAorICAg
ICAgICB2b2lkIGxpbmtUbyhMYWJlbCBsYWJlbCwgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGUq
IG1hc20pIGNvbnN0CiAgICAgICAgIHsKICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJ
T05fVkFMSURBVElPTikKICAgICAgICAgICAgIG1hc20tPmNoZWNrUmVnaXN0ZXJBbGxvY2F0aW9u
QWdhaW5zdEJyYW5jaFJhbmdlKGxhYmVsLm1fbGFiZWwubV9vZmZzZXQsIG1fbGFiZWwubV9vZmZz
ZXQpOwpAQCAtNjk4LDcgKzY5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBhcHBlbmQo
anVtcCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGxpbmsoQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlcjxBc3NlbWJsZXJUeXBlPiogbWFzbSkKKyAgICAgICAgdm9pZCBsaW5rKEFic3RyYWN0TWFj
cm9Bc3NlbWJsZXJUeXBlKiBtYXNtKQogICAgICAgICB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6
ZSA9IG1fanVtcHMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCkBAIC03MDYsNyArNzA3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9qdW1w
cy5jbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGxpbmtUbyhMYWJl
bCBsYWJlbCwgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiogbWFzbSkKKyAg
ICAgICAgdm9pZCBsaW5rVG8oTGFiZWwgbGFiZWwsIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBl
KiBtYXNtKQogICAgICAgICB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fanVtcHMuc2l6
ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC04
MzYsNiArODM3LDk1IEBAIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6Y2FjaGVGbHVz
aChjb2RlLCBzaXplKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKKworICAgIHN0
cnVjdCBDUFVTdGF0ZSB7CisgICAgICAgICNkZWZpbmUgREVDTEFSRV9SRUdJU1RFUihfdHlwZSwg
X3JlZ05hbWUpIFwKKyAgICAgICAgICAgIF90eXBlIF9yZWdOYW1lOworICAgICAgICBGT1JfRUFD
SF9DUFVfUkVHSVNURVIoREVDTEFSRV9SRUdJU1RFUikKKyAgICAgICAgI3VuZGVmIERFQ0xBUkVf
UkVHSVNURVIKKyAgICB9OworCisgICAgc3RydWN0IFByb2JlQ29udGV4dDsKKyAgICB0eXBlZGVm
IHZvaWQgKCpQcm9iZUZ1bmN0aW9uKShzdHJ1Y3QgUHJvYmVDb250ZXh0Kik7CisKKyAgICBzdHJ1
Y3QgUHJvYmVDb250ZXh0IHsKKyAgICAgICAgUHJvYmVGdW5jdGlvbiBwcm9iZUZ1bmN0aW9uOwor
ICAgICAgICB2b2lkKiBhcmcxOworICAgICAgICB2b2lkKiBhcmcyOworICAgICAgICBDUFVTdGF0
ZSBjcHU7CisKKyAgICAgICAgdm9pZCBwcmludChpbnQgaW5kZW50YXRpb24gPSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICAjZGVmaW5lIElOREVOVCBNYWNyb0Fzc2VtYmxlclR5cGU6OnByaW50
SW5kZW50KGluZGVudGF0aW9uKQorCisgICAgICAgICAgICBJTkRFTlQsIGRhdGFMb2dGKCJQcm9i
ZUNvbnRleHQgJXAge1xuIiwgdGhpcyk7CisgICAgICAgICAgICBpbmRlbnRhdGlvbisrOworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoInByb2JlRnVuY3Rp
b246ICVwXG4iLCBwcm9iZUZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBJTkRFTlQsIGRhdGFM
b2dGKCJhcmcxOiAlcCAlbGx1XG4iLCBhcmcxLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGFy
ZzEpKTsKKyAgICAgICAgICAgICAgICBJTkRFTlQsIGRhdGFMb2dGKCJhcmcyOiAlcCAlbGx1XG4i
LCBhcmcyLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGFyZzIpKTsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlclR5cGU6OnByaW50Q1BVKGNwdSwgaW5kZW50YXRpb24pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaW5kZW50YXRpb24tLTsKKyAgICAgICAgICAgIElOREVOVCwg
ZGF0YUxvZygifVxuIik7CisKKyAgICAgICAgICAgICN1bmRlZiBJTkRFTlQKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBwcmludEluZGVudChpbnQgaW5kZW50YXRpb24pCisg
ICAgeworICAgICAgICBmb3IgKDsgaW5kZW50YXRpb24gPiAwOyBpbmRlbnRhdGlvbi0tKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgICIpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByaW50
Q1BVKENQVVN0YXRlJiBjcHUsIGludCBpbmRlbnRhdGlvbiA9IDApCisgICAgeworICAgICAgICAj
ZGVmaW5lIElOREVOVCBwcmludEluZGVudChpbmRlbnRhdGlvbikKKworICAgICAgICBJTkRFTlQs
IGRhdGFMb2coImNwdToge1xuIik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyVHlwZTo6cHJpbnRD
UFVSZWdpc3RlcnMoY3B1LCBpbmRlbnRhdGlvbiArIDEpOworICAgICAgICBJTkRFTlQsIGRhdGFM
b2coIn1cbiIpOworCisgICAgICAgICN1bmRlZiBJTkRFTlQKKyAgICB9CisKKworICAgIC8vIFRo
aXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgcHJpbnRDUFUoKSB0byBwcmludCB0aGUgY29u
dGVudHMgb2YgdGhlCisgICAgLy8gdGFyZ2V0IHNwZWNpZmljIHJlZ2lzdGVycyB3aGljaCBhcmUg
c2F2ZWQgYXdheSBpbiB0aGUgQ1BVSW5mbyBzdHJ1Y3QuCisgICAgLy8gcHJpbnRDUFVSZWdpc3Rl
cnMoKSBzaG91bGQgbWFrZSB1c2Ugb2YgcHJpbnRJbmRlbnRhdGlvbigpIHRvIHByaW50IHRoZQor
ICAgIC8vIHJlZ2lzdGVycyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhbW91bnQgb2YgaW5kZW50YXRp
b24uCisgICAgLy8KKyAgICAvLyBOb3RlOiBwcmludENQVVJlZ2lzdGVycygpIHNob3VsZCBiZSBp
bXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0IHNwZWNpZmljCisgICAgLy8gTWFjcm9Bc3NlbWJsZXIu
IFRoaXMgcHJvdG90eXBlIGlzIG9ubHkgcHJvdmlkZWQgaGVyZSB0byBkb2N1bWVudCB0aGUKKyAg
ICAvLyBpbnRlcmZhY2UuCisKKyAgICBzdGF0aWMgdm9pZCBwcmludENQVVJlZ2lzdGVycyhDUFVT
dGF0ZSYsIGludCBpbmRlbnRhdGlvbiA9IDApOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBlbWl0
cyBjb2RlIHRvIHByZXNlcnZlIHRoZSBDUFVJbmZvIChlLmcuIHJlZ2lzdGVycyksCisgICAgLy8g
Y2FsbCBhIHVzZXIgc3VwcGxpZWQgcHJvYmUgZnVuY3Rpb24sIGFuZCByZXN0b3JlIHRoZSBDUFVJ
bmZvIGJlZm9yZQorICAgIC8vIGNvbnRpbnVpbmcgd2l0aCBvdGhlciBKSVQgZ2VuZXJhdGVkIGNv
ZGUuCisgICAgLy8KKyAgICAvLyBUaGUgdXNlciBzdXBwbGllZCBwcm9iZSBmdW5jdGlvbiB3aWxs
IGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIHBvaW50ZXIgdG8KKyAgICAvLyBhIFByb2JlQ29udGV4
dCBzdHJ1Y3QgKGRlZmluZWQgYWJvdmUpIHdoaWNoIGNvbnRhaW5zLCBhbW9uZyBvdGhlciB0aGlu
Z3MsCisgICAgLy8gdGhlIHByZXNlcnZlZCBDUFVJbmZvLiBUaGlzIGFsbG93cyB0aGUgdXNlciBw
cm9iZSBmdW5jdGlvbiB0byBpbnNwZWN0CisgICAgLy8gdGhlIENQVUluZm8gYXQgdGhhdCBwb2lu
dCBpbiB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLgorICAgIC8vCisgICAgLy8gSWYgdGhlIHVzZXIg
cHJvYmUgZnVuY3Rpb24gYWx0ZXJzIHRoZSByZWdpc3RlciB2YWx1ZXMgaW4gdGhlIFByb2JlQ29u
dGV4dCwKKyAgICAvLyB0aGUgYWx0ZXJlZCB2YWx1ZXMgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUg
Q1BVIHJlZ2lzdGVycyB3aGVuIHRoZSBwcm9iZQorICAgIC8vIHJldHVybnMuCisgICAgLy8KKyAg
ICAvLyBUaGUgUHJvYmVDb250ZXh0IGlzIHN0YWNrIGFsbG9jYXRlZCBhbmQgaXMgb25seSB2YWxp
ZCBmb3IgdGhlIGR1cmF0aW9uCisgICAgLy8gb2YgdGhlIGNhbGwgdG8gdGhlIHVzZXIgcHJvYmUg
ZnVuY3Rpb24uCisgICAgLy8KKyAgICAvLyBOb3RlOiBwcm9iZSgpIHNob3VsZCBiZSBpbXBsZW1l
bnRlZCBieSB0aGUgdGFyZ2V0IHNwZWNpZmljIE1hY3JvQXNzZW1ibGVyLgorICAgIC8vIFRoaXMg
cHJvdG90eXBlIGlzIG9ubHkgcHJvdmlkZWQgaGVyZSB0byBkb2N1bWVudCB0aGUgaW50ZXJmYWNl
LgorCisgICAgdm9pZCBwcm9iZShQcm9iZUZ1bmN0aW9uLCB2b2lkKiBhcmcxID0gMCwgdm9pZCog
YXJnMiA9IDApOworCisjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCisKICAgICBBc3NlbWJs
ZXJUeXBlIG1fYXNzZW1ibGVyOwogICAgIAogcHJvdGVjdGVkOgpAQCAtODc3LDcgKzk2Nyw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgZnJpZW5kIGNsYXNzIExhYmVsOwogCiAgICAgcHVibGljOgot
ICAgICAgICBDYWNoZWRUZW1wUmVnaXN0ZXIoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJs
ZXJUeXBlPiogbWFzbSwgUmVnaXN0ZXJJRCByZWdpc3RlcklEKQorICAgICAgICBDYWNoZWRUZW1w
UmVnaXN0ZXIoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGUqIG1hc20sIFJlZ2lzdGVySUQgcmVn
aXN0ZXJJRCkKICAgICAgICAgICAgIDogbV9tYXNtKG1hc20pCiAgICAgICAgICAgICAsIG1fcmVn
aXN0ZXJJRChyZWdpc3RlcklEKQogICAgICAgICAgICAgLCBtX3ZhbHVlKDApCkBAIC05MDUsNyAr
OTk1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW52YWxpZGF0
ZSgpIHsgbV9tYXNtLT5jbGVhclRlbXBSZWdpc3RlclZhbGlkKG1fdmFsaWRCaXQpOyB9CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+
KiBtX21hc207CisgICAgICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtX21hc207CiAg
ICAgICAgIFJlZ2lzdGVySUQgbV9yZWdpc3RlcklEOwogICAgICAgICBpbnRwdHJfdCBtX3ZhbHVl
OwogICAgICAgICB1bnNpZ25lZCBtX3ZhbGlkQml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9u
IDE3NjEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1jbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI8QVJNNjRBc3NlbWJsZXI+IHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBw
dWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk02NEFzc2VtYmxlciwgTWFjcm9Bc3NlbWJs
ZXJBUk02ND4gewogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIg
PSBBUk02NFJlZ2lzdGVyczo6aXAwOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG1lbW9y
eVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDE7CiAgICAgc3RhdGljIGNvbnN0IEFS
TTY0UmVnaXN0ZXJzOjpGUFJlZ2lzdGVySUQgZnBUZW1wUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVy
czo6cTMxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTS5jcHAJKHJldmlzaW9uIDE3NjEwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAy
MDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAg
LTMxLDEwICszMSw2IEBACiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogCi0jaWYg
RU5BQkxFKE1BU01fUFJPQkUpCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2VuZGlm
Ci0KICNpZiBPUyhMSU5VWCkKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMv
c3RhdC5oPgpAQCAtMTAxLDQ5ICs5NywzNCBAQCB2b2lkIE1hY3JvQXNzZW1ibGVyQVJNOjpsb2Fk
MzJXaXRoVW5hbGlnCiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKIAotdm9pZCBNYWNyb0Fzc2Vt
YmxlckFSTTo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVu
dGF0aW9uKQorI2RlZmluZSBJTkRFTlQgcHJpbnRJbmRlbnQoaW5kZW50YXRpb24pCisKK3ZvaWQg
TWFjcm9Bc3NlbWJsZXJBUk06OnByaW50Q1BVUmVnaXN0ZXJzKENQVVN0YXRlJiBjcHUsIGludCBp
bmRlbnRhdGlvbikKIHsKICAgICAjZGVmaW5lIERVTVBfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05h
bWUpIHsgXAogICAgICAgICBpbnQzMl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90
PihjcHUuX3JlZ05hbWUpOyBcCi0gICAgICAgIGRhdGFMb2dGKCIlcyAgICAlNXM6IDB4JTA4eCAg
ICVkXG4iLCBpbmRlbnRhdGlvbiwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgICAg
ICBJTkRFTlQsIGRhdGFMb2dGKCIlNXM6IDB4JTA4eCAgJWRcbiIsICNfcmVnTmFtZSwgdmFsdWUs
IHZhbHVlKSA7IFwKICAgICB9CiAgICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoRFVNUF9HUFJF
R0lTVEVSKQogICAgIEZPUl9FQUNIX0NQVV9TUEVDSUFMX1JFR0lTVEVSKERVTVBfR1BSRUdJU1RF
UikKICAgICAjdW5kZWYgRFVNUF9HUFJFR0lTVEVSCiAKICAgICAjZGVmaW5lIERVTVBfRlBSRUdJ
U1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAotICAgICAgICB1aW50MzJfdCogdSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPigmY3B1Ll9yZWdOYW1lKTsgXAorICAgICAgICB1aW50NjRfdCog
dSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPigmY3B1Ll9yZWdOYW1lKTsgXAogICAgICAg
ICBkb3VibGUqIGQgPSByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KCZjcHUuX3JlZ05hbWUpOyBc
Ci0gICAgICAgIGRhdGFMb2dGKCIlcyAgICAlNXM6IDB4ICUwOHggJTA4eCAgICUxMmdcbiIsIFwK
LSAgICAgICAgICAgIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHVbMV0sIHVbMF0sIGRbMF0pOyBc
CisgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU1czogMHglMDE2bGx4ICAlLjEzZ1xuIiwgI19y
ZWdOYW1lLCAqdSwgKmQpOyBcCiAgICAgfQogICAgIEZPUl9FQUNIX0NQVV9GUFJFR0lTVEVSKERV
TVBfRlBSRUdJU1RFUikKICAgICAjdW5kZWYgRFVNUF9GUFJFR0lTVEVSCiB9CiAKLXZvaWQgTWFj
cm9Bc3NlbWJsZXJBUk06OlByb2JlQ29udGV4dDo6ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlv
bikKLXsKLSAgICBpZiAoIWluZGVudGF0aW9uKQotICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOwot
Ci0gICAgZGF0YUxvZ0YoIiVzUHJvYmVDb250ZXh0ICVwIHtcbiIsIGluZGVudGF0aW9uLCB0aGlz
KTsKLSAgICBkYXRhTG9nRigiJXMgIHByb2JlRnVuY3Rpb246ICVwXG4iLCBpbmRlbnRhdGlvbiwg
cHJvYmVGdW5jdGlvbik7Ci0gICAgZGF0YUxvZ0YoIiVzICBhcmcxOiAlcCAlbGx1XG4iLCBpbmRl
bnRhdGlvbiwgYXJnMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihhcmcxKSk7Ci0gICAgZGF0
YUxvZ0YoIiVzICBhcmcyOiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwgYXJnMiwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQ2NF90PihhcmcyKSk7Ci0gICAgZGF0YUxvZ0YoIiVzICBjcHU6IHtcbiIsIGlu
ZGVudGF0aW9uKTsKLQotICAgIGR1bXBDUFVSZWdpc3RlcnMoaW5kZW50YXRpb24pOwotCi0gICAg
ZGF0YUxvZ0YoIiVzICB9XG4iLCBpbmRlbnRhdGlvbik7Ci0gICAgZGF0YUxvZ0YoIiVzfVxuIiwg
aW5kZW50YXRpb24pOwotfQotCisjdW5kZWYgSU5ERU5UCiAKIGV4dGVybiAiQyIgdm9pZCBjdGlN
YXNtUHJvYmVUcmFtcG9saW5lKCk7CiAKIC8vIEZvciBkZXRhaWxzIG9uICJXaGF0IGNvZGUgaXMg
ZW1pdHRlZCBmb3IgdGhlIHByb2JlPyIgYW5kICJXaGF0IHZhbHVlcyBhcmUgaW4KLS8vIHRoZSBz
YXZlZCByZWdpc3RlcnM/Iiwgc2VlIGNvbW1lbnQgZm9yIE1hY3JvQXNzZW1ibGVyWDg2Ojpwcm9i
ZSgpIGluCi0vLyBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oLgorLy8gdGhlIHNhdmVkIHJlZ2lzdGVy
cz8iLCBzZWUgY29tbWVudCBmb3IgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnByb2JlKCkgaW4K
Ky8vIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcC4KIAogdm9pZCBNYWNyb0Fzc2VtYmxlckFS
TTo6cHJvYmUoTWFjcm9Bc3NlbWJsZXJBUk06OlByb2JlRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQq
IGFyZzEsIHZvaWQqIGFyZzIpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEz
IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk0gOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlcjxBUk1Bc3NlbWJsZXI+IHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQVJNIDogcHVibGljIEFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXI8QVJNQXNzZW1ibGVyLCBNYWNyb0Fzc2VtYmxlckFSTT4gewog
ICAgIHN0YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uTWFzayA9IDB4MGY7CiAgICAgc3Rh
dGljIGNvbnN0IGludCBEb3VibGVDb25kaXRpb25CaXRTcGVjaWFsID0gMHgxMDsKICAgICBDT01Q
SUxFX0FTU0VSVCghKERvdWJsZUNvbmRpdGlvbkJpdFNwZWNpYWwgJiBEb3VibGVDb25kaXRpb25N
YXNrKSwgRG91YmxlQ29uZGl0aW9uQml0U3BlY2lhbF9zaG91bGRfbm90X2ludGVyZmVyZV93aXRo
X0FSTUFzc2VtYmxlcl9Db25kaXRpb25fY29kZXMpOwpAQCAtMTQzMywyOCArMTQzMyw5IEBAIHB1
YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICBzdHJ1Y3QgQ1BVU3Rh
dGUgewotICAgICAgICAjZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSBc
Ci0gICAgICAgICAgICBfdHlwZSBfcmVnTmFtZTsKLSAgICAgICAgRk9SX0VBQ0hfQ1BVX1JFR0lT
VEVSKERFQ0xBUkVfUkVHSVNURVIpCi0gICAgICAgICN1bmRlZiBERUNMQVJFX1JFR0lTVEVSCi0g
ICAgfTsKLQotICAgIHN0cnVjdCBQcm9iZUNvbnRleHQ7Ci0gICAgdHlwZWRlZiB2b2lkICgqUHJv
YmVGdW5jdGlvbikoc3RydWN0IFByb2JlQ29udGV4dCopOwotCi0gICAgc3RydWN0IFByb2JlQ29u
dGV4dCB7Ci0gICAgICAgIFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKLSAgICAgICAgdm9p
ZCogYXJnMTsKLSAgICAgICAgdm9pZCogYXJnMjsKLSAgICAgICAgQ1BVU3RhdGUgY3B1OwotCi0g
ICAgICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9IDApOwotICAgIHByaXZh
dGU6Ci0gICAgICAgIHZvaWQgZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlv
bik7Ci0gICAgfTsKLQotICAgIC8vIEZvciBkZXRhaWxzIGFib3V0IHByb2JlKCksIHNlZSBjb21t
ZW50IGluIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmguCisgICAgLy8gTWV0aG9kcyByZXF1aXJlZCBi
eSB0aGUgTUFTTV9QUk9CRSBtZWNoYW5pc20gYXMgZGVmaW5lZCBpbgorICAgIC8vIEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaC4gCisgICAgc3RhdGljIHZvaWQgcHJpbnRDUFVSZWdpc3RlcnMoQ1BV
U3RhdGUmLCBpbnQgaW5kZW50YXRpb24gPSAwKTsKICAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rp
b24sIHZvaWQqIGFyZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7CiAjZW5kaWYgLy8gRU5BQkxFKE1B
U01fUFJPQkUpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk12Ny5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmNwcAkocmV2aXNpb24gMTc2MTAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNTcgKzI4LDM4IEBACiAjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYg
Q1BVKEFSTV9USFVNQjIpCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIgogCi0jaWYg
RU5BQkxFKE1BU01fUFJPQkUpCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKE1BU01fUFJPQkUpCiAKLXZvaWQgTWFj
cm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNo
YXIqIGluZGVudGF0aW9uKQorI2RlZmluZSBJTkRFTlQgcHJpbnRJbmRlbnQoaW5kZW50YXRpb24p
CisKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJBUk12Nzo6cHJpbnRDUFVSZWdpc3RlcnMoQ1BVU3RhdGUm
IGNwdSwgaW50IGluZGVudGF0aW9uKQogewogICAgICNkZWZpbmUgRFVNUF9HUFJFR0lTVEVSKF90
eXBlLCBfcmVnTmFtZSkgeyBcCiAgICAgICAgIGludDMyX3QgdmFsdWUgPSByZWludGVycHJldF9j
YXN0PGludDMyX3Q+KGNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgZGF0YUxvZ0YoIiVzICAgICU1
czogMHglMDh4ICAgJWRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkg
OyBcCisgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU1czogMHglMDh4ICAlZFxuIiwgI19yZWdO
YW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAogICAgIH0KICAgICBGT1JfRUFDSF9DUFVfR1BSRUdJU1RF
UihEVU1QX0dQUkVHSVNURVIpCiAgICAgRk9SX0VBQ0hfQ1BVX1NQRUNJQUxfUkVHSVNURVIoRFVN
UF9HUFJFR0lTVEVSKQogICAgICN1bmRlZiBEVU1QX0dQUkVHSVNURVIKIAogICAgICNkZWZpbmUg
RFVNUF9GUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCi0gICAgICAgIHVpbnQzMl90KiB1
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KCZjcHUuX3JlZ05hbWUpOyBcCisgICAgICAg
IHVpbnQ2NF90KiB1ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KCZjcHUuX3JlZ05hbWUp
OyBcCiAgICAgICAgIGRvdWJsZSogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oJmNwdS5f
cmVnTmFtZSk7IFwKLSAgICAgICAgZGF0YUxvZ0YoIiVzICAgICU1czogMHggJTA4eCAlMDh4ICAg
JTEyZ1xuIiwgXAotICAgICAgICAgICAgaW5kZW50YXRpb24sICNfcmVnTmFtZSwgdVsxXSwgdVsw
XSwgZFswXSk7IFwKKyAgICAgICAgSU5ERU5ULCBkYXRhTG9nRigiJTVzOiAweCUwMTZsbHggICUu
MTNnXG4iLCAjX3JlZ05hbWUsICp1LCAqZCk7IFwKICAgICB9CiAgICAgRk9SX0VBQ0hfQ1BVX0ZQ
UkVHSVNURVIoRFVNUF9GUFJFR0lTVEVSKQogICAgICN1bmRlZiBEVU1QX0ZQUkVHSVNURVIKIH0K
IAotdm9pZCBNYWNyb0Fzc2VtYmxlckFSTXY3OjpQcm9iZUNvbnRleHQ6OmR1bXAoY29uc3QgY2hh
ciogaW5kZW50YXRpb24pCi17Ci0gICAgaWYgKCFpbmRlbnRhdGlvbikKLSAgICAgICAgaW5kZW50
YXRpb24gPSAiIjsKLQotICAgIGRhdGFMb2dGKCIlc1Byb2JlQ29udGV4dCAlcCB7XG4iLCBpbmRl
bnRhdGlvbiwgdGhpcyk7Ci0gICAgZGF0YUxvZ0YoIiVzICBwcm9iZUZ1bmN0aW9uOiAlcFxuIiwg
aW5kZW50YXRpb24sIHByb2JlRnVuY3Rpb24pOwotICAgIGRhdGFMb2dGKCIlcyAgYXJnMTogJXAg
JWxsdVxuIiwgaW5kZW50YXRpb24sIGFyZzEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oYXJn
MSkpOwotICAgIGRhdGFMb2dGKCIlcyAgYXJnMjogJXAgJWxsdVxuIiwgaW5kZW50YXRpb24sIGFy
ZzIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oYXJnMikpOwotICAgIGRhdGFMb2dGKCIlcyAg
Y3B1OiB7XG4iLCBpbmRlbnRhdGlvbik7Ci0KLSAgICBkdW1wQ1BVUmVnaXN0ZXJzKGluZGVudGF0
aW9uKTsKLQotICAgIGRhdGFMb2dGKCIlcyAgfVxuIiwgaW5kZW50YXRpb24pOwotICAgIGRhdGFM
b2dGKCIlc31cbiIsIGluZGVudGF0aW9uKTsKLX0KLQorI3VuZGVmIElOREVOVAogCiBleHRlcm4g
IkMiIHZvaWQgY3RpTWFzbVByb2JlVHJhbXBvbGluZSgpOwogCiAvLyBGb3IgZGV0YWlscyBvbiAi
V2hhdCBjb2RlIGlzIGVtaXR0ZWQgZm9yIHRoZSBwcm9iZT8iIGFuZCAiV2hhdCB2YWx1ZXMgYXJl
IGluCi0vLyB0aGUgc2F2ZWQgcmVnaXN0ZXJzPyIsIHNlZSBjb21tZW50IGZvciBNYWNyb0Fzc2Vt
Ymxlclg4Njo6cHJvYmUoKSBpbgotLy8gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KKy8vIHRoZSBz
YXZlZCByZWdpc3RlcnM/Iiwgc2VlIGNvbW1lbnQgZm9yIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
Ojpwcm9iZSgpIGluCisvLyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAuCiAKIHZvaWQgTWFj
cm9Bc3NlbWJsZXJBUk12Nzo6cHJvYmUoTWFjcm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVGdW5jdGlv
biBmdW5jdGlvbiwgdm9pZCogYXJnMSwgdm9pZCogYXJnMikKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShy
ZXZpc2lvbiAxNzYxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk12NyA6IHB1YmxpYyBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyPEFSTXY3QXNzZW1ibGVyPiB7CitjbGFzcyBNYWNyb0Fzc2VtYmxlckFS
TXY3IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QVJNdjdBc3NlbWJsZXIsIE1hY3Jv
QXNzZW1ibGVyQVJNdjc+IHsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBkYXRhVGVtcFJl
Z2lzdGVyID0gQVJNUmVnaXN0ZXJzOjppcDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpyNjsKIApAQCAtMTkwMiwyOCArMTkw
Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICBzdHJ1
Y3QgQ1BVU3RhdGUgewotICAgICAgICAjZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5cGUsIF9y
ZWdOYW1lKSBcCi0gICAgICAgICAgICBfdHlwZSBfcmVnTmFtZTsKLSAgICAgICAgRk9SX0VBQ0hf
Q1BVX1JFR0lTVEVSKERFQ0xBUkVfUkVHSVNURVIpCi0gICAgICAgICN1bmRlZiBERUNMQVJFX1JF
R0lTVEVSCi0gICAgfTsKLQotICAgIHN0cnVjdCBQcm9iZUNvbnRleHQ7Ci0gICAgdHlwZWRlZiB2
b2lkICgqUHJvYmVGdW5jdGlvbikoc3RydWN0IFByb2JlQ29udGV4dCopOwotCi0gICAgc3RydWN0
IFByb2JlQ29udGV4dCB7Ci0gICAgICAgIFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKLSAg
ICAgICAgdm9pZCogYXJnMTsKLSAgICAgICAgdm9pZCogYXJnMjsKLSAgICAgICAgQ1BVU3RhdGUg
Y3B1OwotCi0gICAgICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9IDApOwot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBp
bmRlbnRhdGlvbik7Ci0gICAgfTsKLQotICAgIC8vIEZvciBkZXRhaWxzIGFib3V0IHByb2JlKCks
IHNlZSBjb21tZW50IGluIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmguCisgICAgLy8gTWV0aG9kcyBy
ZXF1aXJlZCBieSB0aGUgTUFTTV9QUk9CRSBtZWNoYW5pc20gYXMgZGVmaW5lZCBpbgorICAgIC8v
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaC4gCisgICAgc3RhdGljIHZvaWQgcHJpbnRDUFVSZWdp
c3RlcnMoQ1BVU3RhdGUmLCBpbnQgaW5kZW50YXRpb24gPSAwKTsKICAgICB2b2lkIHByb2JlKFBy
b2JlRnVuY3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7CiAjZW5kaWYgLy8g
RU5BQkxFKE1BU01fUFJPQkUpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkocmV2aXNpb24gMTc2MTAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBN
SVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9B
c3NlbWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fzc2VtYmxl
cj4geworY2xhc3MgTWFjcm9Bc3NlbWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI8TUlQU0Fzc2VtYmxlciwgTWFjcm9Bc3NlbWJsZXJNSVBTPiB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBNSVBTUmVnaXN0ZXJzOjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clNINC5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyU0g0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEzIENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNUTWljcm9lbGVjdHJvbmljcy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYWNyb0Fzc2VtYmxl
clNINCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFNINEFzc2VtYmxlcj4geworY2xh
c3MgTWFjcm9Bc3NlbWJsZXJTSDQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxTSDRB
c3NlbWJsZXIsIE1hY3JvQXNzZW1ibGVyU0g0PiB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBTSDRB
c3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlz
aW9uIDE3NjEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDYgQEAKIAogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgiCiAKLSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
IHsKQEAgLTM0OSwxMSArMzQ1LDYgQEAgcHVibGljOgogICAgICAgICBYODZBc3NlbWJsZXI6OnJl
dmVydEp1bXBUb19jbXBsX2ltX2ZvcmNlMzIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRk
cmVzcygpLCBpbml0aWFsVmFsdWUsIDAsIGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCi0jaWYgRU5B
QkxFKE1BU01fUFJPQkUpCi0gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgcHJvYmUoKSwgc2VlIGNv
bW1lbnQgaW4gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KLSAgICB2b2lkIHByb2JlKFByb2JlRnVu
Y3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7Ci0jZW5kaWYgLy8gRU5BQkxF
KE1BU01fUFJPQkUpCi0KIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC0zNzIsNDYgKzM2Myw4IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQotCi0jaWYg
RU5BQkxFKE1BU01fUFJPQkUpCi0gICAgaW5saW5lIFRydXN0ZWRJbW0zMiB0cnVzdGVkSW1tMzJG
cm9tUHRyKHZvaWQqIHB0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcnVzdGVkSW1tMzIoVHJ1
c3RlZEltbVB0cihwdHIpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZEltbTMyIHRydXN0
ZWRJbW0zMkZyb21QdHIoUHJvYmVGdW5jdGlvbiBmdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBUcnVzdGVkSW1tMzIoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihm
dW5jdGlvbikpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZEltbTMyIHRydXN0ZWRJbW0z
MkZyb21QdHIodm9pZCAoKmZ1bmN0aW9uKSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFRydXN0
ZWRJbW0zMihUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSkp
OwotICAgIH0KLSNlbmRpZgogfTsKIAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotCi1leHRlcm4g
IkMiIHZvaWQgY3RpTWFzbVByb2JlVHJhbXBvbGluZSgpOwotCi0vLyBGb3IgZGV0YWlscyBvbiAi
V2hhdCBjb2RlIGlzIGVtaXR0ZWQgZm9yIHRoZSBwcm9iZT8iIGFuZCAiV2hhdCB2YWx1ZXMgYXJl
IGluCi0vLyB0aGUgc2F2ZWQgcmVnaXN0ZXJzPyIsIHNlZSBjb21tZW50IGZvciBNYWNyb0Fzc2Vt
Ymxlclg4Njo6cHJvYmUoKSBpbgotLy8gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KLQotaW5saW5l
IHZvaWQgTWFjcm9Bc3NlbWJsZXJYODY6OnByb2JlKE1hY3JvQXNzZW1ibGVyWDg2OjpQcm9iZUZ1
bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2b2lkKiBhcmcyKQotewotICAgIHB1c2goUmVn
aXN0ZXJJRDo6ZXNwKTsKLSAgICBwdXNoKFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgcHVzaCh0cnVz
dGVkSW1tMzJGcm9tUHRyKGFyZzIpKTsKLSAgICBwdXNoKHRydXN0ZWRJbW0zMkZyb21QdHIoYXJn
MSkpOwotICAgIHB1c2godHJ1c3RlZEltbTMyRnJvbVB0cihmdW5jdGlvbikpOwotCi0gICAgbW92
ZSh0cnVzdGVkSW1tMzJGcm9tUHRyKGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUpLCBSZWdpc3RlcklE
OjplYXgpOwotICAgIGNhbGwoUmVnaXN0ZXJJRDo6ZWF4KTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUo
TUFTTV9QUk9CRSkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNT
RU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAJKHJldmlzaW9uIDE3NjEwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw0NyArMzIsODkgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKIAotdm9pZCBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uKQor
I2RlZmluZSBJTkRFTlQgcHJpbnRJbmRlbnQoaW5kZW50YXRpb24pCisKK3ZvaWQgTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246OnByaW50Q1BVUmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpDUFVTdGF0ZSYgY3B1LCBpbnQgaW5kZW50YXRpb24pCiB7CiAjaWYgQ1BVKFg4NikKLSAgICAj
ZGVmaW5lIERVTVBfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICNkZWZpbmUg
UFJJTlRfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICBpbnQzMl90IHZh
bHVlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90PihjcHUuX3JlZ05hbWUpOyBcCi0gICAgICAg
IGRhdGFMb2dGKCIlcyAgICAlNnM6IDB4JTA4eCAgJWRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05h
bWUsIHZhbHVlLCB2YWx1ZSkgOyBcCisgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU2czogMHgl
MDh4ICAlZFxuIiwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAogICAgIH0KICNlbGlmIENQ
VShYODZfNjQpCi0gICAgI2RlZmluZSBEVU1QX0dQUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSB7
IFwKKyAgICAjZGVmaW5lIFBSSU5UX0dQUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSB7IFwKICAg
ICAgICAgaW50NjRfdCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oY3B1Ll9yZWdO
YW1lKTsgXAotICAgICAgICBkYXRhTG9nRigiJXMgICAgJTZzOiAweCUwMTZsbHggICVsbGRcbiIs
IGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBcCisgICAgICAgIElOREVO
VCwgZGF0YUxvZ0YoIiU2czogMHglMDE2bGx4ICAlbGxkXG4iLCAjX3JlZ05hbWUsIHZhbHVlLCB2
YWx1ZSkgOyBcCiAgICAgfQogI2VuZGlmCi0gICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoRFVN
UF9HUFJFR0lTVEVSKQotICAgIEZPUl9FQUNIX0NQVV9TUEVDSUFMX1JFR0lTVEVSKERVTVBfR1BS
RUdJU1RFUikKLSAgICAjdW5kZWYgRFVNUF9HUFJFR0lTVEVSCisgICAgRk9SX0VBQ0hfQ1BVX0dQ
UkVHSVNURVIoUFJJTlRfR1BSRUdJU1RFUikKKyAgICBGT1JfRUFDSF9DUFVfU1BFQ0lBTF9SRUdJ
U1RFUihQUklOVF9HUFJFR0lTVEVSKQorICAgICN1bmRlZiBQUklOVF9HUFJFR0lTVEVSCiAKLSAg
ICAjZGVmaW5lIERVTVBfRlBSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICNkZWZp
bmUgUFJJTlRfRlBSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICB1aW50NjRf
dCogdSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPigmY3B1Ll9yZWdOYW1lKTsgXAogICAg
ICAgICBkb3VibGUqIGQgPSByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KCZjcHUuX3JlZ05hbWUp
OyBcCi0gICAgICAgIGRhdGFMb2dGKCIlcyAgICAlNnM6IDB4JTAxNmxseCAgJS4xM2dcbiIsIGlu
ZGVudGF0aW9uLCAjX3JlZ05hbWUsICp1LCAqZCk7IFwKKyAgICAgICAgSU5ERU5ULCBkYXRhTG9n
RigiJTZzOiAweCUwMTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAqZCk7IFwKICAgICB9
Ci0gICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoRFVNUF9GUFJFR0lTVEVSKQotICAgICN1bmRl
ZiBEVU1QX0ZQUkVHSVNURVIKKyAgICBGT1JfRUFDSF9DUFVfRlBSRUdJU1RFUihQUklOVF9GUFJF
R0lTVEVSKQorICAgICN1bmRlZiBQUklOVF9GUFJFR0lTVEVSCiB9CiAKLXZvaWQgTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246OlByb2JlQ29udGV4dDo6ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlv
bikKLXsKLSAgICBpZiAoIWluZGVudGF0aW9uKQotICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOwor
I3VuZGVmIElOREVOVAogCi0gICAgZGF0YUxvZ0YoIiVzUHJvYmVDb250ZXh0ICVwIHtcbiIsIGlu
ZGVudGF0aW9uLCB0aGlzKTsKLSAgICBkYXRhTG9nRigiJXMgIHByb2JlRnVuY3Rpb246ICVwXG4i
LCBpbmRlbnRhdGlvbiwgcHJvYmVGdW5jdGlvbik7Ci0gICAgZGF0YUxvZ0YoIiVzICBhcmcxOiAl
cCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwgYXJnMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Pihh
cmcxKSk7Ci0gICAgZGF0YUxvZ0YoIiVzICBhcmcyOiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwg
YXJnMiwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihhcmcyKSk7Ci0gICAgZGF0YUxvZ0YoIiVz
ICBjcHU6IHtcbiIsIGluZGVudGF0aW9uKTsKK2V4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVU
cmFtcG9saW5lKCk7CiAKLSAgICBkdW1wQ1BVUmVnaXN0ZXJzKGluZGVudGF0aW9uKTsKKy8vIFdo
YXQgY29kZSBpcyBlbWl0dGVkIGZvciB0aGUgcHJvYmU/CisvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisvLyBXZSB3YW50IHRvIGtlZXAgdGhlIHNpemUgb2YgdGhlIGVtaXR0
ZWQgcHJvYmUgaW52b2NhdGlvbiBjb2RlIGFzIGNvbXBhY3QgYXMKKy8vIHBvc3NpYmxlIHRvIG1p
bmltaXplIHRoZSBwZXJ0dXJiYXRpb24gdG8gdGhlIEpJVCBnZW5lcmF0ZWQgY29kZS4gSG93ZXZl
ciwKKy8vIHdlIGFsc28gbmVlZCB0byBwcmVzZXJ2ZSB0aGUgQ1BVIHJlZ2lzdGVycyBhbmQgc2V0
IHVwIHRoZSBQcm9iZUNvbnRleHQgdG8gYmUKKy8vIHBhc3NlZCB0byB0aGUgdXNlciBwcm9iZSBm
dW5jdGlvbi4KKy8vCisvLyBIZW5jZSwgd2UgZG8gb25seSB0aGUgbWluaW11bSBoZXJlIHRvIHBy
ZXNlcnZlIGEgc2NyYXRjaCByZWdpc3RlciAoaS5lLiByYXgKKy8vIGluIHRoaXMgY2FzZSkgYW5k
IHRoZSBzdGFjayBwb2ludGVyIChpLmUuIHJzcCksIGFuZCBwYXNzIHRoZSBwcm9iZSBhcmd1bWVu
dHMuCisvLyBXZSdsbCBsZXQgdGhlIGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUgaGFuZGxlIHRoZSBy
ZXN0IG9mIHRoZSBwcm9iZSBpbnZvY2F0aW9uCisvLyB3b3JrIGkuZS4gc2F2aW5nIHRoZSBDUFVT
dGF0ZSAoYW5kIHNldHRpbmcgdXAgdGhlIFByb2JlQ29udGV4dCksIGNhbGxpbmcgdGhlCisvLyB1
c2VyIHByb2JlIGZ1bmN0aW9uLCBhbmQgcmVzdG9yaW5nIHRoZSBDUFVTdGF0ZSBiZWZvcmUgcmV0
dXJuaW5nIHRvIEpJVAorLy8gZ2VuZXJhdGVkIGNvZGUuCisvLworLy8gV2hhdCByZWdpc3RlcnMg
bmVlZCB0byBiZSBzYXZlZD8KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8v
IFRoZSByZWdpc3RlcnMgYXJlIHNhdmVkIGZvciAyIHJlYXNvbnM6CisvLyAxLiBUbyBwcmVzZXJ2
ZSB0aGVpciBzdGF0ZSBpbiB0aGUgSklUdGVkIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCBhbGwgcmVn
aXN0ZXJzCisvLyAgICB0aGF0IGFyZSBub3QgY2FsbGVlIHNhdmVkIG5lZWRzIHRvIGJlIHNhdmVk
LiBXZSBhbHNvIG5lZWQgdG8gc2F2ZSB0aGUKKy8vICAgIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVy
cyBiZWNhdXNlIHRoZSBwcm9iZSBjYW4gYmUgaW5zZXJ0ZWQgYmV0d2VlbiBhIHRlc3QKKy8vICAg
IGFuZCBhIGJyYW5jaC4KKy8vIDIuIFRvIGFsbG93IHRoZSBwcm9iZSB0byBpbnNwZWN0IHRoZSB2
YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBmb3IgZGVidWdnaW5nCisvLyAgICBwdXJwb3Nlcy4gVGhp
cyBtZWFucyBhbGwgcmVnaXN0ZXJzIG5lZWQgdG8gYmUgc2F2ZWQuCisvLworLy8gSW4gc3VtbWFy
eSwgc2F2ZSBldmVyeXRoaW5nLiBCdXQgZm9yIHJlYXNvbnMgc3RhdGVkIGFib3ZlLCB3ZSBzaG91
bGQgZG8gdGhlCisvLyBtaW5pbXVtIGhlcmUgYW5kIGxldCBjdGlNYXNtUHJvYmVUcmFtcG9saW5l
IGRvIHRoZSBoZWF2eSBsaWZ0aW5nIHRvIHNhdmUgdGhlCisvLyBmdWxsIHNldC4KKy8vCisvLyBX
aGF0IHZhbHVlcyBhcmUgaW4gdGhlIHNhdmVkIHJlZ2lzdGVycz8KKy8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb25jZXB0dWFsbHksIHRoZSBzYXZlZCByZWdp
c3RlcnMgc2hvdWxkIGNvbnRhaW4gdmFsdWVzIGFzIGlmIHRoZSBwcm9iZQorLy8gaXMgbm90IHBy
ZXNlbnQgaW4gdGhlIEpJVCBnZW5lcmF0ZWQgY29kZS4gSGVuY2UsIHRoZXkgc2hvdWxkIGNvbnRh
aW4gdmFsdWVzCisvLyB0aGF0IGFyZSBleHBlY3RlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3Ry
dWN0aW9uIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUKKy8vIHByb2JlLgorLy8KKy8vIFNwZWNp
ZmljYWxseSwgdGhlIHNhdmVkIHN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIgd2lsbCBwb2ludCB0byB0
aGUgc3RhY2sKKy8vIHBvc2l0aW9uIGJlZm9yZSB3ZSBwdXNoIHRoZSBQcm9iZUNvbnRleHQgZnJh
bWUuIFRoZSBzYXZlZCByaXAgd2lsbCBwb2ludCB0bworLy8gdGhlIGFkZHJlc3Mgb2YgdGhlIGlu
c3RydWN0aW9uIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgcHJvYmUuIAogCi0gICAgZGF0YUxv
Z0YoIiVzICB9XG4iLCBpbmRlbnRhdGlvbik7Ci0gICAgZGF0YUxvZ0YoIiVzfVxuIiwgaW5kZW50
YXRpb24pOwordm9pZCBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6cHJvYmUoTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OlByb2JlRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZzEsIHZvaWQqIGFy
ZzIpCit7CisgICAgcHVzaChSZWdpc3RlcklEOjplc3ApOworICAgIHB1c2goUmVnaXN0ZXJJRDo6
ZWF4KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYXJnMiksIFJlZ2lzdGVySUQ6OmVheCk7Cisg
ICAgcHVzaChSZWdpc3RlcklEOjplYXgpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcmcxKSwg
UmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBwdXNoKFJlZ2lzdGVySUQ6OmVheCk7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIFJlZ2lzdGVy
SUQ6OmVheCk7CisgICAgcHVzaChSZWdpc3RlcklEOjplYXgpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihjdGlNYXNtUHJvYmVUcmFtcG9saW5lKSksIFJl
Z2lzdGVySUQ6OmVheCk7CisgICAgY2FsbChSZWdpc3RlcklEOjplYXgpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKE1BU01fUFJPQkUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAx
NzYxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uIDogcHVibGljIEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXI8WDg2QXNzZW1ibGVyPiB7CitjbGFzcyBNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbiA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFg4NkFzc2VtYmxlciwgTWFjcm9B
c3NlbWJsZXJYODZDb21tb24+IHsKIHB1YmxpYzoKICNpZiBDUFUoWDg2XzY0KQogICAgIHN0YXRp
YyBjb25zdCBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgc2NyYXRjaFJlZ2lzdGVyID0gWDg2UmVn
aXN0ZXJzOjpyMTE7CkBAIC0xNDcwLDI2ICsxNDcwLDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICNp
ZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICBzdHJ1Y3QgQ1BVU3RhdGUgewotICAgICAgICAjZGVm
aW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSBcCi0gICAgICAgICAgICBfdHlw
ZSBfcmVnTmFtZTsKLSAgICAgICAgRk9SX0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVfUkVHSVNU
RVIpCi0gICAgICAgICN1bmRlZiBERUNMQVJFX1JFR0lTVEVSCi0gICAgfTsKLQotICAgIHN0cnVj
dCBQcm9iZUNvbnRleHQ7Ci0gICAgdHlwZWRlZiB2b2lkICgqUHJvYmVGdW5jdGlvbikoc3RydWN0
IFByb2JlQ29udGV4dCopOwotCi0gICAgc3RydWN0IFByb2JlQ29udGV4dCB7Ci0gICAgICAgIFBy
b2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKLSAgICAgICAgdm9pZCogYXJnMTsKLSAgICAgICAg
dm9pZCogYXJnMjsKLSAgICAgICAgQ1BVU3RhdGUgY3B1OwotCi0gICAgICAgIHZvaWQgZHVtcChj
b25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQg
ZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlvbik7Ci0gICAgfTsKKyAgICAv
LyBNZXRob2RzIHJlcXVpcmVkIGJ5IHRoZSBNQVNNX1BST0JFIG1lY2hhbmlzbSBhcyBkZWZpbmVk
IGluCisgICAgLy8gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oLiAKKyAgICBzdGF0aWMgdm9pZCBw
cmludENQVVJlZ2lzdGVycyhDUFVTdGF0ZSYsIGludCBpbmRlbnRhdGlvbiA9IDApOworICAgIHZv
aWQgcHJvYmUoUHJvYmVGdW5jdGlvbiwgdm9pZCogYXJnMSA9IDAsIHZvaWQqIGFyZzIgPSAwKTsK
ICNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkocmV2aXNpb24gMTc2MTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsNiBA
QAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCIKIAotI2lmIEVOQUJMRShN
QVNNX1BST0JFKQotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNlbmRpZgotCiAjZGVm
aW5lIFJFUFRBQ0hfT0ZGU0VUX0NBTExfUjExIDMKIAogaW5saW5lIGJvb2wgQ0FOX1NJR05fRVhU
RU5EXzMyXzY0KGludDY0X3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IChpbnQ2NF90KShpbnQz
Ml90KXZhbHVlOyB9CkBAIC04NDAsMjYgKzgzNiw2IEBAIHB1YmxpYzoKICAgICAgICAgWDg2QXNz
ZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGVtaXRzIGNvZGUgdG8gcHJlc2VydmUgdGhlIENQVVN0YXRlIChlLmcuIHJl
Z2lzdGVycyksCi0gICAgLy8gY2FsbCBhIHVzZXIgc3VwcGxpZWQgcHJvYmUgZnVuY3Rpb24sIGFu
ZCByZXN0b3JlIHRoZSBDUFVTdGF0ZSBiZWZvcmUKLSAgICAvLyBjb250aW51aW5nIHdpdGggb3Ro
ZXIgSklUIGdlbmVyYXRlZCBjb2RlLgotICAgIC8vCi0gICAgLy8gVGhlIHVzZXIgc3VwcGxpZWQg
cHJvYmUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBwb2ludGVyIHRvCi0g
ICAgLy8gYSBQcm9iZUNvbnRleHQgc3RydWN0IChkZWZpbmVkIGFib3ZlKSB3aGljaCBjb250YWlu
cywgYW1vbmcgb3RoZXIgdGhpbmdzLAotICAgIC8vIHRoZSBwcmVzZXJ2ZWQgQ1BVU3RhdGUuIFRo
aXMgYWxsb3dzIHRoZSB1c2VyIHByb2JlIGZ1bmN0aW9uIHRvIGluc3BlY3QKLSAgICAvLyB0aGUg
Q1BVU3RhdGUgYXQgdGhhdCBwb2ludCBpbiB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLgotICAgIC8v
Ci0gICAgLy8gSWYgdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24gYWx0ZXJzIHRoZSByZWdpc3RlciB2
YWx1ZXMgaW4gdGhlIFByb2JlQ29udGV4dCwKLSAgICAvLyB0aGUgYWx0ZXJlZCB2YWx1ZXMgd2ls
bCBiZSBsb2FkZWQgaW50byB0aGUgQ1BVIHJlZ2lzdGVycyB3aGVuIHRoZSBwcm9iZQotICAgIC8v
IHJldHVybnMuCi0gICAgLy8KLSAgICAvLyBUaGUgUHJvYmVDb250ZXh0IGlzIHN0YWNrIGFsbG9j
YXRlZCBhbmQgaXMgb25seSB2YWxpZCBmb3IgdGhlIGR1cmF0aW9uCi0gICAgLy8gb2YgdGhlIGNh
bGwgdG8gdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24uCi0KLSAgICB2b2lkIHByb2JlKFByb2JlRnVu
Y3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2b2lkKiBhcmcyID0gMCk7Ci0jZW5kaWYgLy8gRU5BQkxF
KE1BU01fUFJPQkUpCi0KIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC04ODEsNjkgKzg1Nyw4IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0
YUxhYmVsUHRyQXRPZmZzZXQoLVJFUFRBQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24o
KSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQotCi0jaWYgRU5BQkxF
KE1BU01fUFJPQkUpCi0gICAgaW5saW5lIFRydXN0ZWRJbW02NCB0cnVzdGVkSW1tNjRGcm9tUHRy
KHZvaWQqIHB0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcnVzdGVkSW1tNjQoVHJ1c3RlZElt
bVB0cihwdHIpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZEltbTY0IHRydXN0ZWRJbW02
NEZyb21QdHIoUHJvYmVGdW5jdGlvbiBmdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBU
cnVzdGVkSW1tNjQoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlv
bikpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZEltbTY0IHRydXN0ZWRJbW02NEZyb21Q
dHIodm9pZCAoKmZ1bmN0aW9uKSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFRydXN0ZWRJbW02
NChUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSkpOwotICAg
IH0KLSNlbmRpZgogfTsKIAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotCi1leHRlcm4gIkMiIHZv
aWQgY3RpTWFzbVByb2JlVHJhbXBvbGluZSgpOwotCi0vLyBXaGF0IGNvZGUgaXMgZW1pdHRlZCBm
b3IgdGhlIHByb2JlPwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8g
V2Ugd2FudCB0byBrZWVwIHRoZSBzaXplIG9mIHRoZSBlbWl0dGVkIHByb2JlIGludm9jYXRpb24g
Y29kZSBhcyBjb21wYWN0IGFzCi0vLyBwb3NzaWJsZSB0byBtaW5pbWl6ZSB0aGUgcGVydHVyYmF0
aW9uIHRvIHRoZSBKSVQgZ2VuZXJhdGVkIGNvZGUuIEhvd2V2ZXIsCi0vLyB3ZSBhbHNvIG5lZWQg
dG8gcHJlc2VydmUgdGhlIENQVSByZWdpc3RlcnMgYW5kIHNldCB1cCB0aGUgUHJvYmVDb250ZXh0
IHRvIGJlCi0vLyBwYXNzZWQgdG8gdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24uCi0vLwotLy8gSGVu
Y2UsIHdlIGRvIG9ubHkgdGhlIG1pbmltdW0gaGVyZSB0byBwcmVzZXJ2ZSBhIHNjcmF0Y2ggcmVn
aXN0ZXIgKGkuZS4gcmF4Ci0vLyBpbiB0aGlzIGNhc2UpIGFuZCB0aGUgc3RhY2sgcG9pbnRlciAo
aS5lLiByc3ApLCBhbmQgcGFzcyB0aGUgcHJvYmUgYXJndW1lbnRzLgotLy8gV2UnbGwgbGV0IHRo
ZSBjdGlNYXNtUHJvYmVUcmFtcG9saW5lIGhhbmRsZSB0aGUgcmVzdCBvZiB0aGUgcHJvYmUgaW52
b2NhdGlvbgotLy8gd29yayBpLmUuIHNhdmluZyB0aGUgQ1BVU3RhdGUgKGFuZCBzZXR0aW5nIHVw
IHRoZSBQcm9iZUNvbnRleHQpLCBjYWxsaW5nIHRoZQotLy8gdXNlciBwcm9iZSBmdW5jdGlvbiwg
YW5kIHJlc3RvcmluZyB0aGUgQ1BVU3RhdGUgYmVmb3JlIHJldHVybmluZyB0byBKSVQKLS8vIGdl
bmVyYXRlZCBjb2RlLgotLy8KLS8vIFdoYXQgdmFsdWVzIGFyZSBpbiB0aGUgc2F2ZWQgcmVnaXN0
ZXJzPwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIENvbmNl
cHR1YWxseSwgdGhlIHNhdmVkIHJlZ2lzdGVycyBzaG91bGQgY29udGFpbiB2YWx1ZXMgYXMgaWYg
dGhlIHByb2JlCi0vLyBpcyBub3QgcHJlc2VudCBpbiB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLiBI
ZW5jZSwgdGhleSBzaG91bGQgY29udGFpbiB2YWx1ZXMKLS8vIHRoYXQgYXJlIGV4cGVjdGVkIGF0
IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQot
Ly8gcHJvYmUuCi0vLwotLy8gU3BlY2lmY2FsbHksIHRoZSBzYXZlZCBzdGFjayBwb2ludGVyIHJl
Z2lzdGVyIHdpbGwgcG9pbnQgdG8gdGhlIHN0YWNrCi0vLyBwb3NpdGlvbiBiZWZvcmUgd2UgcHVz
aCB0aGUgUHJvYmVDb250ZXh0IGZyYW1lLiBUaGUgc2F2ZWQgcmlwIHdpbGwgcG9pbnQgdG8KLS8v
IHRoZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhl
IHByb2JlLiAKLQotaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnByb2JlKE1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpQcm9iZUZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2b2lk
KiBhcmcyKQotewotICAgIHB1c2goUmVnaXN0ZXJJRDo6ZXNwKTsKLSAgICBwdXNoKFJlZ2lzdGVy
SUQ6OmVheCk7Ci0gICAgbW92ZSh0cnVzdGVkSW1tNjRGcm9tUHRyKGFyZzIpLCBSZWdpc3RlcklE
OjplYXgpOwotICAgIHB1c2goUmVnaXN0ZXJJRDo6ZWF4KTsKLSAgICBtb3ZlKHRydXN0ZWRJbW02
NEZyb21QdHIoYXJnMSksIFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgcHVzaChSZWdpc3RlcklEOjpl
YXgpOwotICAgIG1vdmUodHJ1c3RlZEltbTY0RnJvbVB0cihmdW5jdGlvbiksIFJlZ2lzdGVySUQ6
OmVheCk7Ci0gICAgcHVzaChSZWdpc3RlcklEOjplYXgpOwotICAgIG1vdmUodHJ1c3RlZEltbTY0
RnJvbVB0cihjdGlNYXNtUHJvYmVUcmFtcG9saW5lKSwgUmVnaXN0ZXJJRDo6ZWF4KTsKLSAgICBj
YWxsKFJlZ2lzdGVySUQ6OmVheCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0K
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNBUk12Ny5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNBUk12Ny5oCShyZXZpc2lvbiAxNzYx
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzQVJNdjcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsOCArOTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgUFJPQkVf
Q1BVX0QxM19PRkZTRVQgKFBST0JFX0ZJUlNUX0ZQUkVHX09GRlNFVCArICgxMyAqIEZQUkVHX1NJ
WkUpKQogI2RlZmluZSBQUk9CRV9DUFVfRDE0X09GRlNFVCAoUFJPQkVfRklSU1RfRlBSRUdfT0ZG
U0VUICsgKDE0ICogRlBSRUdfU0laRSkpCiAjZGVmaW5lIFBST0JFX0NQVV9EMTVfT0ZGU0VUIChQ
Uk9CRV9GSVJTVF9GUFJFR19PRkZTRVQgKyAoMTUgKiBGUFJFR19TSVpFKSkKLQotI2lmIENQVShB
UFBMRV9BUk1WN1MpCiAjZGVmaW5lIFBST0JFX0NQVV9EMTZfT0ZGU0VUIChQUk9CRV9GSVJTVF9G
UFJFR19PRkZTRVQgKyAoMTYgKiBGUFJFR19TSVpFKSkKICNkZWZpbmUgUFJPQkVfQ1BVX0QxN19P
RkZTRVQgKFBST0JFX0ZJUlNUX0ZQUkVHX09GRlNFVCArICgxNyAqIEZQUkVHX1NJWkUpKQogI2Rl
ZmluZSBQUk9CRV9DUFVfRDE4X09GRlNFVCAoUFJPQkVfRklSU1RfRlBSRUdfT0ZGU0VUICsgKDE4
ICogRlBSRUdfU0laRSkpCkBAIC0xMTMsMTAgKzExMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2Rl
ZmluZSBQUk9CRV9DUFVfRDMwX09GRlNFVCAoUFJPQkVfRklSU1RfRlBSRUdfT0ZGU0VUICsgKDMw
ICogRlBSRUdfU0laRSkpCiAjZGVmaW5lIFBST0JFX0NQVV9EMzFfT0ZGU0VUIChQUk9CRV9GSVJT
VF9GUFJFR19PRkZTRVQgKyAoMzEgKiBGUFJFR19TSVpFKSkKICNkZWZpbmUgUFJPQkVfU0laRSAo
UFJPQkVfRklSU1RfRlBSRUdfT0ZGU0VUICsgKDMyICogRlBSRUdfU0laRSkpCi0jZWxzZQotI2Rl
ZmluZSBQUk9CRV9TSVpFIChQUk9CRV9GSVJTVF9GUFJFR19PRkZTRVQgKyAoMTYgKiBGUFJFR19T
SVpFKSkKLSNlbmRpZiAvLyBDUFUoQVBQTEVfQVJNVjdTKQotCiAKIC8vIFRoZXNlIEFTU0VSVHMg
cmVtaW5kIHlvdSB0aGF0IGlmIHlvdSBjaGFuZ2UgdGhlIGxheW91dCBvZiBQcm9iZUNvbnRleHQs
CiAvLyB5b3UgbmVlZCB0byBjaGFuZ2UgY3RpTWFzbVByb2JlVHJhbXBvbGluZSBvZmZzZXRzIGFi
b3ZlIHRvIG1hdGNoLgpAQCAtMTYyLDcgKzE1Niw2IEBAIENPTVBJTEVfQVNTRVJUKFBST0JFX09G
RlNFVE9GKGNwdS5kMTMpID0KIENPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5kMTQp
ID09IFBST0JFX0NQVV9EMTRfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X2QxNF9vZmZzZXRfbWF0
Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKIENPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNF
VE9GKGNwdS5kMTUpID09IFBST0JFX0NQVV9EMTVfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X2Qx
NV9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9saW5lKTsKIAotI2lmIENQVShBUFBM
RV9BUk1WN1MpCiBDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZDE2KSA9PSBQUk9C
RV9DUFVfRDE2X09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9kMTZfb2Zmc2V0X21hdGNoZXNfY3Rp
TWFzbVByb2JlVHJhbXBvbGluZSk7CiBDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUu
ZDE3KSA9PSBQUk9CRV9DUFVfRDE3X09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9kMTdfb2Zmc2V0
X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CiBDT01QSUxFX0FTU0VSVChQUk9CRV9P
RkZTRVRPRihjcHUuZDE4KSA9PSBQUk9CRV9DUFVfRDE4X09GRlNFVCwgUHJvYmVDb250ZXh0X2Nw
dV9kMThfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CkBAIC0xNzksNyAr
MTcyLDYgQEAgQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmQyOCkgPQogQ09NUElM
RV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmQyOSkgPT0gUFJPQkVfQ1BVX0QyOV9PRkZTRVQs
IFByb2JlQ29udGV4dF9jcHVfZDI5X29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xp
bmUpOwogQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmQzMCkgPT0gUFJPQkVfQ1BV
X0QzMF9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZDMwX29mZnNldF9tYXRjaGVzX2N0aU1hc21Q
cm9iZVRyYW1wb2xpbmUpOwogQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmQzMSkg
PT0gUFJPQkVfQ1BVX0QzMV9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZDMxX29mZnNldF9tYXRj
aGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOwotI2VuZGlmIC8vIENQVShBUFBMRV9BUk1WN1Mp
CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihNYWNyb0Fzc2VtYmxlcjo6UHJvYmVDb250ZXh0KSA9
PSBQUk9CRV9TSVpFLCBQcm9iZUNvbnRleHRfc2l6ZV9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1w
b2xpbmUpOwogCkBAIC0yMzgsMTEgKzIzMCw3IEBAIFNZTUJPTF9TVFJJTkcoY3RpTWFzbVByb2Jl
VHJhbXBvbGluZSkgIjoKICAgICAibGRyICAgICAgIGxyLCBbc3AsICMiIFNUUklOR0laRV9WQUxV
RV9PRihQUk9CRV9DUFVfUENfT0ZGU0VUKSAiXSIgIlxuIgogCiAgICAgImFkZCAgICAgICBpcCwg
c3AsICMiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRDBfT0ZGU0VUKSAiXG4iCi0jaWYg
Q1BVKEFQUExFX0FSTVY3UykKICAgICAidnN0bWlhLjY0IGlwLCB7IGQwLWQzMSB9IiAiXG4iCi0j
ZWxzZQotICAgICJ2c3RtaWEuNjQgaXAsIHsgZDAtZDE1IH0iICJcbiIKLSNlbmRpZgogCiAgICAg
Im1vdiAgICAgICBmcCwgc3AiICJcbiIgLy8gU2F2ZSB0aGUgUHJvYmVDb250ZXh0Ki4KIApAQCAt
MjU1LDEzICsyNDMsOCBAQCBTWU1CT0xfU1RSSU5HKGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUpICI6
CiAgICAgLy8gVG8gZW5hYmxlIHByb2JlcyB0byBtb2RpZnkgcmVnaXN0ZXIgc3RhdGUsIHdlIGNv
cHkgYWxsIHJlZ2lzdGVycwogICAgIC8vIG91dCBvZiB0aGUgUHJvYmVDb250ZXh0IGJlZm9yZSBy
ZXR1cm5pbmcuCiAKLSNpZiBDUFUoQVBQTEVfQVJNVjdTKQogICAgICJhZGQgICAgICAgaXAsIHNw
LCAjIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0QzMV9PRkZTRVQgKyBGUFJFR19TSVpF
KSAiXG4iCiAgICAgInZsZG1kYi42NCBpcCEsIHsgZDAtZDMxIH0iICJcbiIKLSNlbHNlCi0gICAg
ImFkZCAgICAgICBpcCwgc3AsICMiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRDE1X09G
RlNFVCArIEZQUkVHX1NJWkUpICJcbiIKLSAgICAidmxkbWRiLjY0IGlwISwgeyBkMC1kMTUgfSIg
IlxuIgotI2VuZGlmCiAgICAgImFkZCAgICAgICBpcCwgc3AsICMiIFNUUklOR0laRV9WQUxVRV9P
RihQUk9CRV9DUFVfUjExX09GRlNFVCArIEdQUkVHX1NJWkUpICJcbiIKICAgICAibGRtZGIgICAg
IGlwLCB7IHIwLXIxMSB9IiAiXG4iCiAgICAgImxkciAgICAgICBpcCwgW3NwLCAjIiBTVFJJTkdJ
WkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0ZQU0NSX09GRlNFVCkgIl0iICJcbiIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241534</attachid>
            <date>2014-11-13 19:43:12 -0800</date>
            <delta_ts>2014-11-14 10:45:50 -0800</delta_ts>
            <desc>alternate implementation based on Geoff&apos;s suggestions + a missing ChangeLog comment.</desc>
            <filename>bug-138671b.patch</filename>
            <type>text/plain</type>
            <size>43512</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2MTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDE0LTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWR1Y2UgYW1vdW50IG9mIGN1dC1hbmQtcGFzdGUgbmVlZGVkIGZvciBwcm9iZSBtZWNoYW5pc20g
aW1wbGVtZW50YXRpb25zLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4NjcxPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBleGlz
dGluZyBjb2RlIHJlcXVpcmVzIHRoYXQgZWFjaCBNYWNyb0Fzc2VtYmxlciBpbXBsZW1lbnRhdGlv
biBwcm92aWRlCisgICAgICAgIHRoZWlyIG93biBjb3B5IG9mIGFsbCBvZiB0aGUgcHJvYmUgaW1w
bGVtZW50YXRpb25zIGV2ZW4gd2hlbiBtb3N0IG9mIGl0IGlzCisgICAgICAgIGlkZW50aWNhbC4g
IFRoaXMgcGF0Y2ggaG9pc3RzIHRoZSBjb21tb24gcGFydHMgaW50byBBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyCisgICAgICAgICh3aXRoIHNvbWUgbWlub3IgcmVuYW1pbmcpLiAgRWFjaCB0YXJnZXQg
c3BlY2lmaWMgTWFjcm9Bc3NlbWJsZXIgbm93IG9ubHkKKyAgICAgICAgbmVlZCB0byBpbXBsZW1l
bnQgYSBmZXcgdGFyZ2V0IHNwZWNpZmljIG1ldGhvZHMgdGhhdCBhcmUgZXhwZWN0ZWQgYnkgYW5k
CisgICAgICAgIGRvY3VtZW50ZWQgaW4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIHRoZSBF
TkFCTEUoTUFTTV9QUk9CRSkgc2VjdGlvbi4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBJIGFs
c28gc2ltcGxpZmllZCB0aGUgWDg2IGFuZCBYODZfNjQgcG9ydHMgdG8gdXNlIHRoZSBzYW1lCisg
ICAgICAgIHBvcnQgaW1wbGVtZW50YXRpb24uICBUaGUgQVJNdjcgcHJvYmUgaW1wbGVtZW50YXRp
b24gc2hvdWxkIG5vdCBjb25kaXRpb25hbGx5CisgICAgICAgIGV4Y2x1ZGUgdGhlIGhpZ2hlciBG
UCByZWdpc3RlcnMgKHNpbmNlIHRoZSBKSVQgZG9lc24ndCkuICBGaXhlZCB0aGUgQVJNdjcKKyAg
ICAgICAgcHJvYmUgY29kZSB0byBpbmNsdWRlIHRoZSBoaWdoZXIgRlAgcmVnaXN0ZXJzIGFsd2F5
cy4gCisKKyAgICAgICAgVGhpcyBpcyBhbGwgZG9uZSBpbiBwcmVwYXJhdGlvbiB0byBhZGQgcHJp
bnRpbmcgZnVuY3Rpb25hbGl0eSBpbiBKSVR0ZWQgY29kZQorICAgICAgICBmb3IgZGVidWdnaW5n
LgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6TGFiZWw6OkxhYmVsKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6Q29udmVydGlibGVMb2FkTGFiZWw6OkNvbnZl
cnRpYmxlTG9hZExhYmVsKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyOjpEYXRhTGFiZWxQdHIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWwzMjo6RGF0YUxhYmVsMzIpOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0OjpEYXRhTGFiZWxDb21wYWN0KToK
KyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6SnVtcDo6bGluayk6CisgICAg
ICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6Okp1bXA6OmxpbmtUbyk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OjpsaW5rKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q6OmxpbmtUbyk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlByb2JlQ29udGV4dDo6cHJpbnQpOgorICAg
ICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpwcmludEluZGVudCk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByaW50Q1BVKToKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6Q2FjaGVkVGVtcFJlZ2lzdGVyOjpDYWNoZWRUZW1wUmVn
aXN0ZXIpOgorICAgICAgICAtIEV4Y2VwdCBmb3IgdGhlIDMgcHJpbnRpbmcgbWV0aG9kcyAod2hp
Y2ggYXJlIGZvciB0aGUgcHJvYmUpLCB0aGUgcmVzdAorICAgICAgICAgIGFyZSB0b3VjaGVkIHNp
bXBseSBiZWNhdXNlIHdlIG5lZWQgdG8gYWRkIHRoZSBNYWNyb0Fzc2VtYmxlclR5cGUgdG8gdGhl
CisgICAgICAgICAgdGVtcGxhdGUgYXJncy4KKyAgICAgICAgICBUaGUgTWFjcm9Bc3NlbWJsZXJU
eXBlIGlzIHVzZWQgYnkgdGhlIGFic3RyYWN0IHByb2JlIGNvZGUgdG8gY2FsbCB0aGUKKyAgICAg
ICAgICBmZXcgcHJvYmUgbWV0aG9kcyB0aGF0IG5lZWQgdG8gaGF2ZSBDUFUgc3BlY2lmaWMgaW1w
bGVtZW50YXRpb25zLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmNw
cDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnByaW50Q1BVUmVnaXN0ZXJzKToK
KyAgICAgICAgLSBUaGlzIHdhcyByZWZhY3RvcmVkIGZyb20gUHJvYmVDb250ZXh0OjpkdW1wQ1BV
UmVnaXN0ZXJzKCkgd2hpY2ggbm8KKyAgICAgICAgICBsb25nZXIgZXhpc3RzLgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OlByb2JlQ29udGV4dDo6
ZHVtcCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0u
aDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorCisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuY3BwOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTXY3OjpwcmludENQVVJlZ2lzdGVycyk6CisgICAgICAgIC0gVGhpcyB3YXMg
cmVmYWN0b3JlZCBmcm9tIFByb2JlQ29udGV4dDo6ZHVtcENQVVJlZ2lzdGVycygpIHdoaWNoIG5v
CisgICAgICAgICAgbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk12Nzo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVDb250ZXh0OjpkdW1wKTogRGVsZXRlZC4K
KworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclNINC5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6dHJ1c3RlZEltbTMyRnJvbVB0cik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Ojpwcm9iZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6cHJpbnRDUFVSZWdpc3RlcnMp
OgorICAgICAgICAtIFRoaXMgd2FzIHJlZmFjdG9yZWQgZnJvbSBQcm9iZUNvbnRleHQ6OmR1bXBD
UFVSZWdpc3RlcnMoKSB3aGljaCBubworICAgICAgICAgIGxvbmdlciBleGlzdHMuCisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpwcm9iZSk6CisgICAgICAgIC0gVGhpcyBp
bXBsZW1lbnRhdGlvbiBvZiBwcm9iZSgpIGlzIGJhc2VkIG9uIHRoZSBvbmUgb3JpZ2luYWxseSBp
bgorICAgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmguICBJdCBpcyBnZW5lcmljIGFuZCBz
aG91bGQgd29yayBmb3IgYm90aAorICAgICAgICAgIDMyLWJpdCBhbmQgNjQtYml0LgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVn
aXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OlByb2JlQ29udGV4dDo6ZHVtcCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnRydXN0ZWRJ
bW02NEZyb21QdHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82
NDo6cHJvYmUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRTdHVic0FSTXY3Lmg6CisKIDIw
MTQtMTEtMTMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIHNjb3BlIG9wZXJhbmQgdG8gb3BfbmV3X2Z1bmMqIGJ5dGUgY29kZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODgsMTAg
Kzg4LDExIEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkV4aXQ7CiB9CiAKLXRlbXBsYXRl
IDxjbGFzcyBBc3NlbWJsZXJUeXBlPgordGVtcGxhdGUgPGNsYXNzIEFzc2VtYmxlclR5cGUsIGNs
YXNzIE1hY3JvQXNzZW1ibGVyVHlwZT4KIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIgewog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVRXcml0ZUJhcnJpZXJCYXNlOworICAgIHR5cGVk
ZWYgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlLCBNYWNyb0Fzc2VtYmxlclR5
cGU+IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlOwogICAgIHR5cGVkZWYgQXNzZW1ibGVyVHlw
ZSBBc3NlbWJsZXJUeXBlX1Q7CiAKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBD
b2RlUHRyOwpAQCAtMzU1LDcgKzM1Niw3IEBAIHB1YmxpYzoKICAgICAvLyBBIExhYmVsIHJlY29y
ZHMgYSBwb2ludCBpbiB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9uIHN0cmVhbSwgdHlwaWNhbGx5
IHN1Y2ggdGhhdAogICAgIC8vIGl0IG1heSBiZSB1c2VkIGFzIGEgZGVzdGluYXRpb24gZm9yIGEg
anVtcC4KICAgICBjbGFzcyBMYWJlbCB7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFRlbXBsYXRl
QXNzZW1ibGVyVHlwZT4KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJU
eXBlLCBjbGFzcyBUZW1wbGF0ZU1hY3JvQXNzZW1ibGVyVHlwZT4KICAgICAgICAgZnJpZW5kIGNs
YXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI7CiAgICAgICAgIGZyaWVuZCBzdHJ1Y3QgREZHOjpP
U1JFeGl0OwogICAgICAgICBmcmllbmQgY2xhc3MgSnVtcDsKQEAgLTM2OCw3ICszNjksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIExhYmVsKEFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4qIG1hc20pCisgICAgICAgIExhYmVsKEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNtKQogICAgICAgICAgICAgOiBtX2xhYmVsKG1hc20tPm1f
YXNzZW1ibGVyLmxhYmVsKCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1hc20tPmludmFsaWRh
dGVBbGxUZW1wUmVnaXN0ZXJzKCk7CkBAIC0zOTAsNyArMzkxLDcgQEAgcHVibGljOgogICAgIC8v
CiAgICAgLy8gYWRkUHRyKFRydXN0ZWRJbW1QdHIoaSksIGEsIGIpCiAgICAgY2xhc3MgQ29udmVy
dGlibGVMb2FkTGFiZWwgewotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBUZW1wbGF0ZUFzc2VtYmxl
clR5cGU+CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIFRlbXBsYXRlQXNzZW1ibGVyVHlwZSwgY2xh
c3MgVGVtcGxhdGVNYWNyb0Fzc2VtYmxlclR5cGU+CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyOwogICAgICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKICAg
ICAgICAgCkBAIC0zOTksNyArNDAwLDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIENvbnZlcnRpYmxlTG9hZExhYmVsKEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI8QXNzZW1ibGVyVHlwZT4qIG1hc20pCisgICAgICAgIENvbnZlcnRpYmxlTG9hZExhYmVs
KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNtKQogICAgICAgICAgICAgOiBtX2xhYmVs
KG1hc20tPm1fYXNzZW1ibGVyLmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKQogICAgICAgICB7
CiAgICAgICAgIH0KQEAgLTQxNCw3ICs0MTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gQSBEYXRhTGFi
ZWxQdHIgaXMgdXNlZCB0byByZWZlciB0byBhIGxvY2F0aW9uIGluIHRoZSBjb2RlIGNvbnRhaW5p
bmcgYSBwb2ludGVyIHRvIGJlCiAgICAgLy8gcGF0Y2hlZCBhZnRlciB0aGUgY29kZSBoYXMgYmVl
biBnZW5lcmF0ZWQuCiAgICAgY2xhc3MgRGF0YUxhYmVsUHRyIHsKLSAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJUeXBlPgorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBUZW1w
bGF0ZUFzc2VtYmxlclR5cGUsIGNsYXNzIFRlbXBsYXRlTWFjcm9Bc3NlbWJsZXJUeXBlPgogICAg
ICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjsKICAgICAgICAgZnJpZW5k
IGNsYXNzIExpbmtCdWZmZXI7CiAgICAgcHVibGljOgpAQCAtNDIyLDcgKzQyMyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgRGF0YUxhYmVsUHRyKEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4qIG1hc20pCisgICAgICAgIERhdGFMYWJlbFB0
cihBYnN0cmFjdE1hY3JvQXNzZW1ibGVyVHlwZSogbWFzbSkKICAgICAgICAgICAgIDogbV9sYWJl
bChtYXNtLT5tX2Fzc2VtYmxlci5sYWJlbCgpKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTQz
OCw3ICs0MzksNyBAQCBwdWJsaWM6CiAgICAgLy8gQSBEYXRhTGFiZWwzMiBpcyB1c2VkIHRvIHJl
ZmVyIHRvIGEgbG9jYXRpb24gaW4gdGhlIGNvZGUgY29udGFpbmluZyBhIDMyLWJpdCBjb25zdGFu
dCB0byBiZQogICAgIC8vIHBhdGNoZWQgYWZ0ZXIgdGhlIGNvZGUgaGFzIGJlZW4gZ2VuZXJhdGVk
LgogICAgIGNsYXNzIERhdGFMYWJlbDMyIHsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVGVtcGxh
dGVBc3NlbWJsZXJUeXBlPgorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBUZW1wbGF0ZUFzc2VtYmxl
clR5cGUsIGNsYXNzIFRlbXBsYXRlTWFjcm9Bc3NlbWJsZXJUeXBlPgogICAgICAgICBmcmllbmQg
Y2xhc3MgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmtC
dWZmZXI7CiAgICAgcHVibGljOgpAQCAtNDQ2LDcgKzQ0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgRGF0YUxhYmVsMzIoQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cjxBc3NlbWJsZXJUeXBlPiogbWFzbSkKKyAgICAgICAgRGF0YUxhYmVsMzIoQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlclR5cGUqIG1hc20pCiAgICAgICAgICAgICA6IG1fbGFiZWwobWFzbS0+bV9hc3Nl
bWJsZXIubGFiZWwoKSkKICAgICAgICAgewogICAgICAgICB9CkBAIC00NjIsNyArNDYzLDcgQEAg
cHVibGljOgogICAgIC8vIEEgRGF0YUxhYmVsQ29tcGFjdCBpcyB1c2VkIHRvIHJlZmVyIHRvIGEg
bG9jYXRpb24gaW4gdGhlIGNvZGUgY29udGFpbmluZyBhCiAgICAgLy8gY29tcGFjdCBpbW1lZGlh
dGUgdG8gYmUgcGF0Y2hlZCBhZnRlciB0aGUgY29kZSBoYXMgYmVlbiBnZW5lcmF0ZWQuCiAgICAg
Y2xhc3MgRGF0YUxhYmVsQ29tcGFjdCB7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFRlbXBsYXRl
QXNzZW1ibGVyVHlwZT4KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJU
eXBlLCBjbGFzcyBUZW1wbGF0ZU1hY3JvQXNzZW1ibGVyVHlwZT4KICAgICAgICAgZnJpZW5kIGNs
YXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVm
ZmVyOwogICAgIHB1YmxpYzoKQEAgLTQ3MCw3ICs0NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgRGF0YUxhYmVsQ29tcGFjdChBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+KiBtYXNtKQorICAgICAgICBEYXRhTGFiZWxDb21w
YWN0KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNtKQogICAgICAgICAgICAgOiBtX2xh
YmVsKG1hc20tPm1fYXNzZW1ibGVyLmxhYmVsKCkpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAt
NDkzLDcgKzQ5NCw3IEBAIHB1YmxpYzoKICAgICAvLyByZWxhdGl2ZSBvZmZzZXQgc3VjaCB0aGF0
IHdoZW4gZXhlY3V0ZWQgaXQgd2lsbCBjYWxsIHRvIHRoZSBkZXNpcmVkCiAgICAgLy8gZGVzdGlu
YXRpb24uCiAgICAgY2xhc3MgQ2FsbCB7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFRlbXBsYXRl
QXNzZW1ibGVyVHlwZT4KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJU
eXBlLCBjbGFzcyBUZW1wbGF0ZU1hY3JvQXNzZW1ibGVyVHlwZT4KICAgICAgICAgZnJpZW5kIGNs
YXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI7CiAKICAgICBwdWJsaWM6CkBAIC01MzcsNyArNTM4
LDcgQEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZlIG9mZnNldCBzdWNoIHRoYXQgd2hlbiBleGVj
dXRlZCBpdCB3aWxsIGp1bXAgdG8gdGhlIGRlc2lyZWQKICAgICAvLyBkZXN0aW5hdGlvbi4KICAg
ICBjbGFzcyBKdW1wIHsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVGVtcGxhdGVBc3NlbWJsZXJU
eXBlPgorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBUZW1wbGF0ZUFzc2VtYmxlclR5cGUsIGNsYXNz
IFRlbXBsYXRlTWFjcm9Bc3NlbWJsZXJUeXBlPgogICAgICAgICBmcmllbmQgY2xhc3MgQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIENhbGw7CiAgICAgICAgIGZy
aWVuZCBzdHJ1Y3QgREZHOjpPU1JFeGl0OwpAQCAtNjAyLDcgKzYwMyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGxpbmso
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiogbWFzbSkgY29uc3QKKyAgICAg
ICAgdm9pZCBsaW5rKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNtKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICBtYXNtLT5pbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOwog
CkBAIC02MjYsNyArNjI3LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHZvaWQgbGlua1RvKExhYmVsIGxhYmVsLCBBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
PEFzc2VtYmxlclR5cGU+KiBtYXNtKSBjb25zdAorICAgICAgICB2b2lkIGxpbmtUbyhMYWJlbCBs
YWJlbCwgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlclR5cGUqIG1hc20pIGNvbnN0CiAgICAgICAgIHsK
ICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAg
ICAgIG1hc20tPmNoZWNrUmVnaXN0ZXJBbGxvY2F0aW9uQWdhaW5zdEJyYW5jaFJhbmdlKGxhYmVs
Lm1fbGFiZWwubV9vZmZzZXQsIG1fbGFiZWwubV9vZmZzZXQpOwpAQCAtNjk4LDcgKzY5OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBhcHBlbmQoanVtcCk7CiAgICAgICAgIH0KIAotICAg
ICAgICB2b2lkIGxpbmsoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiogbWFz
bSkKKyAgICAgICAgdm9pZCBsaW5rKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNtKQog
ICAgICAgICB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fanVtcHMuc2l6ZSgpOwogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC03MDYsNyArNzA3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9qdW1wcy5jbGVhcigpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICB2b2lkIGxpbmtUbyhMYWJlbCBsYWJlbCwgQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjxBc3NlbWJsZXJUeXBlPiogbWFzbSkKKyAgICAgICAgdm9pZCBsaW5rVG8oTGFiZWwg
bGFiZWwsIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtYXNtKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fanVtcHMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC04MzYsNiArODM3LDk1IEBAIHB1YmxpYzoK
ICAgICAgICAgQXNzZW1ibGVyVHlwZTo6Y2FjaGVGbHVzaChjb2RlLCBzaXplKTsKICAgICB9CiAK
KyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKKworICAgIHN0cnVjdCBDUFVTdGF0ZSB7CisgICAgICAg
ICNkZWZpbmUgREVDTEFSRV9SRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIFwKKyAgICAgICAgICAg
IF90eXBlIF9yZWdOYW1lOworICAgICAgICBGT1JfRUFDSF9DUFVfUkVHSVNURVIoREVDTEFSRV9S
RUdJU1RFUikKKyAgICAgICAgI3VuZGVmIERFQ0xBUkVfUkVHSVNURVIKKyAgICB9OworCisgICAg
c3RydWN0IFByb2JlQ29udGV4dDsKKyAgICB0eXBlZGVmIHZvaWQgKCpQcm9iZUZ1bmN0aW9uKShz
dHJ1Y3QgUHJvYmVDb250ZXh0Kik7CisKKyAgICBzdHJ1Y3QgUHJvYmVDb250ZXh0IHsKKyAgICAg
ICAgUHJvYmVGdW5jdGlvbiBwcm9iZUZ1bmN0aW9uOworICAgICAgICB2b2lkKiBhcmcxOworICAg
ICAgICB2b2lkKiBhcmcyOworICAgICAgICBDUFVTdGF0ZSBjcHU7CisKKyAgICAgICAgdm9pZCBw
cmludChpbnQgaW5kZW50YXRpb24gPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAjZGVmaW5l
IElOREVOVCBNYWNyb0Fzc2VtYmxlclR5cGU6OnByaW50SW5kZW50KGluZGVudGF0aW9uKQorCisg
ICAgICAgICAgICBJTkRFTlQsIGRhdGFMb2dGKCJQcm9iZUNvbnRleHQgJXAge1xuIiwgdGhpcyk7
CisgICAgICAgICAgICBpbmRlbnRhdGlvbisrOworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIElOREVOVCwgZGF0YUxvZ0YoInByb2JlRnVuY3Rpb246ICVwXG4iLCBwcm9iZUZ1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICBJTkRFTlQsIGRhdGFMb2dGKCJhcmcxOiAlcCAlbGx1XG4iLCBh
cmcxLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGFyZzEpKTsKKyAgICAgICAgICAgICAgICBJ
TkRFTlQsIGRhdGFMb2dGKCJhcmcyOiAlcCAlbGx1XG4iLCBhcmcyLCByZWludGVycHJldF9jYXN0
PGludDY0X3Q+KGFyZzIpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlclR5cGU6OnBy
aW50Q1BVKGNwdSwgaW5kZW50YXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5k
ZW50YXRpb24tLTsKKyAgICAgICAgICAgIElOREVOVCwgZGF0YUxvZygifVxuIik7CisKKyAgICAg
ICAgICAgICN1bmRlZiBJTkRFTlQKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgdm9p
ZCBwcmludEluZGVudChpbnQgaW5kZW50YXRpb24pCisgICAgeworICAgICAgICBmb3IgKDsgaW5k
ZW50YXRpb24gPiAwOyBpbmRlbnRhdGlvbi0tKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICIp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByaW50Q1BVKENQVVN0YXRlJiBjcHUsIGludCBp
bmRlbnRhdGlvbiA9IDApCisgICAgeworICAgICAgICAjZGVmaW5lIElOREVOVCBwcmludEluZGVu
dChpbmRlbnRhdGlvbikKKworICAgICAgICBJTkRFTlQsIGRhdGFMb2coImNwdToge1xuIik7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyVHlwZTo6cHJpbnRDUFVSZWdpc3RlcnMoY3B1LCBpbmRlbnRh
dGlvbiArIDEpOworICAgICAgICBJTkRFTlQsIGRhdGFMb2coIn1cbiIpOworCisgICAgICAgICN1
bmRlZiBJTkRFTlQKKyAgICB9CisKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxs
ZWQgYnkgcHJpbnRDUFUoKSB0byBwcmludCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgLy8gdGFy
Z2V0IHNwZWNpZmljIHJlZ2lzdGVycyB3aGljaCBhcmUgc2F2ZWQgYXdheSBpbiB0aGUgQ1BVSW5m
byBzdHJ1Y3QuCisgICAgLy8gcHJpbnRDUFVSZWdpc3RlcnMoKSBzaG91bGQgbWFrZSB1c2Ugb2Yg
cHJpbnRJbmRlbnRhdGlvbigpIHRvIHByaW50IHRoZQorICAgIC8vIHJlZ2lzdGVycyB3aXRoIHRo
ZSBhcHByb3ByaWF0ZSBhbW91bnQgb2YgaW5kZW50YXRpb24uCisgICAgLy8KKyAgICAvLyBOb3Rl
OiBwcmludENQVVJlZ2lzdGVycygpIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0
IHNwZWNpZmljCisgICAgLy8gTWFjcm9Bc3NlbWJsZXIuIFRoaXMgcHJvdG90eXBlIGlzIG9ubHkg
cHJvdmlkZWQgaGVyZSB0byBkb2N1bWVudCB0aGUKKyAgICAvLyBpbnRlcmZhY2UuCisKKyAgICBz
dGF0aWMgdm9pZCBwcmludENQVVJlZ2lzdGVycyhDUFVTdGF0ZSYsIGludCBpbmRlbnRhdGlvbiA9
IDApOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBlbWl0cyBjb2RlIHRvIHByZXNlcnZlIHRoZSBD
UFVJbmZvIChlLmcuIHJlZ2lzdGVycyksCisgICAgLy8gY2FsbCBhIHVzZXIgc3VwcGxpZWQgcHJv
YmUgZnVuY3Rpb24sIGFuZCByZXN0b3JlIHRoZSBDUFVJbmZvIGJlZm9yZQorICAgIC8vIGNvbnRp
bnVpbmcgd2l0aCBvdGhlciBKSVQgZ2VuZXJhdGVkIGNvZGUuCisgICAgLy8KKyAgICAvLyBUaGUg
dXNlciBzdXBwbGllZCBwcm9iZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xl
IHBvaW50ZXIgdG8KKyAgICAvLyBhIFByb2JlQ29udGV4dCBzdHJ1Y3QgKGRlZmluZWQgYWJvdmUp
IHdoaWNoIGNvbnRhaW5zLCBhbW9uZyBvdGhlciB0aGluZ3MsCisgICAgLy8gdGhlIHByZXNlcnZl
ZCBDUFVJbmZvLiBUaGlzIGFsbG93cyB0aGUgdXNlciBwcm9iZSBmdW5jdGlvbiB0byBpbnNwZWN0
CisgICAgLy8gdGhlIENQVUluZm8gYXQgdGhhdCBwb2ludCBpbiB0aGUgSklUIGdlbmVyYXRlZCBj
b2RlLgorICAgIC8vCisgICAgLy8gSWYgdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24gYWx0ZXJzIHRo
ZSByZWdpc3RlciB2YWx1ZXMgaW4gdGhlIFByb2JlQ29udGV4dCwKKyAgICAvLyB0aGUgYWx0ZXJl
ZCB2YWx1ZXMgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgQ1BVIHJlZ2lzdGVycyB3aGVuIHRoZSBw
cm9iZQorICAgIC8vIHJldHVybnMuCisgICAgLy8KKyAgICAvLyBUaGUgUHJvYmVDb250ZXh0IGlz
IHN0YWNrIGFsbG9jYXRlZCBhbmQgaXMgb25seSB2YWxpZCBmb3IgdGhlIGR1cmF0aW9uCisgICAg
Ly8gb2YgdGhlIGNhbGwgdG8gdGhlIHVzZXIgcHJvYmUgZnVuY3Rpb24uCisgICAgLy8KKyAgICAv
LyBOb3RlOiBwcm9iZSgpIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0IHNwZWNp
ZmljIE1hY3JvQXNzZW1ibGVyLgorICAgIC8vIFRoaXMgcHJvdG90eXBlIGlzIG9ubHkgcHJvdmlk
ZWQgaGVyZSB0byBkb2N1bWVudCB0aGUgaW50ZXJmYWNlLgorCisgICAgdm9pZCBwcm9iZShQcm9i
ZUZ1bmN0aW9uLCB2b2lkKiBhcmcxID0gMCwgdm9pZCogYXJnMiA9IDApOworCisjZW5kaWYgLy8g
RU5BQkxFKE1BU01fUFJPQkUpCisKICAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOwogICAg
IAogcHJvdGVjdGVkOgpAQCAtODc3LDcgKzk2Nyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgZnJp
ZW5kIGNsYXNzIExhYmVsOwogCiAgICAgcHVibGljOgotICAgICAgICBDYWNoZWRUZW1wUmVnaXN0
ZXIoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXJUeXBlPiogbWFzbSwgUmVnaXN0ZXJJ
RCByZWdpc3RlcklEKQorICAgICAgICBDYWNoZWRUZW1wUmVnaXN0ZXIoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlclR5cGUqIG1hc20sIFJlZ2lzdGVySUQgcmVnaXN0ZXJJRCkKICAgICAgICAgICAgIDog
bV9tYXNtKG1hc20pCiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJJRChyZWdpc3RlcklEKQogICAg
ICAgICAgICAgLCBtX3ZhbHVlKDApCkBAIC05MDUsNyArOTk1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9tYXNtLT5jbGVhclRlbXBS
ZWdpc3RlclZhbGlkKG1fdmFsaWRCaXQpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+KiBtX21hc207CisgICAgICAgIEFic3Ry
YWN0TWFjcm9Bc3NlbWJsZXJUeXBlKiBtX21hc207CiAgICAgICAgIFJlZ2lzdGVySUQgbV9yZWdp
c3RlcklEOwogICAgICAgICBpbnRwdHJfdCBtX3ZhbHVlOwogICAgICAgICB1bnNpZ25lZCBtX3Zh
bGlkQml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDE3NjEwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYWNyb0Fzc2Vt
YmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QVJNNjRBc3NlbWJsZXI+
IHsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlcjxBUk02NEFzc2VtYmxlciwgTWFjcm9Bc3NlbWJsZXJBUk02ND4gewogICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6aXAwOwog
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG1lbW9yeVRlbXBSZWdpc3RlciA9IEFSTTY0UmVn
aXN0ZXJzOjppcDE7CiAgICAgc3RhdGljIGNvbnN0IEFSTTY0UmVnaXN0ZXJzOjpGUFJlZ2lzdGVy
SUQgZnBUZW1wUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6cTMxOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5jcHAJ
KHJldmlzaW9uIDE3NjEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMxLDEwICszMSw2IEBACiAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2VuZGlmCi0KICNpZiBPUyhMSU5VWCkKICNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtMTAxLDQ5ICs5Nywz
NCBAQCB2b2lkIE1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkMzJXaXRoVW5hbGlnCiAKICNpZiBFTkFC
TEUoTUFTTV9QUk9CRSkKIAotdm9pZCBNYWNyb0Fzc2VtYmxlckFSTTo6UHJvYmVDb250ZXh0Ojpk
dW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uKQorI2RlZmluZSBJTkRFTlQg
cHJpbnRJbmRlbnQoaW5kZW50YXRpb24pCisKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJBUk06OnByaW50
Q1BVUmVnaXN0ZXJzKENQVVN0YXRlJiBjcHUsIGludCBpbmRlbnRhdGlvbikKIHsKICAgICAjZGVm
aW5lIERVTVBfR1BSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICBpbnQzMl90
IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90PihjcHUuX3JlZ05hbWUpOyBcCi0gICAg
ICAgIGRhdGFMb2dGKCIlcyAgICAlNXM6IDB4JTA4eCAgICVkXG4iLCBpbmRlbnRhdGlvbiwgI19y
ZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAorICAgICAgICBJTkRFTlQsIGRhdGFMb2dGKCIlNXM6
IDB4JTA4eCAgJWRcbiIsICNfcmVnTmFtZSwgdmFsdWUsIHZhbHVlKSA7IFwKICAgICB9CiAgICAg
Rk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoRFVNUF9HUFJFR0lTVEVSKQogICAgIEZPUl9FQUNIX0NQ
VV9TUEVDSUFMX1JFR0lTVEVSKERVTVBfR1BSRUdJU1RFUikKICAgICAjdW5kZWYgRFVNUF9HUFJF
R0lTVEVSCiAKICAgICAjZGVmaW5lIERVTVBfRlBSRUdJU1RFUihfdHlwZSwgX3JlZ05hbWUpIHsg
XAotICAgICAgICB1aW50MzJfdCogdSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigmY3B1
Ll9yZWdOYW1lKTsgXAorICAgICAgICB1aW50NjRfdCogdSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3QqPigmY3B1Ll9yZWdOYW1lKTsgXAogICAgICAgICBkb3VibGUqIGQgPSByZWludGVycHJl
dF9jYXN0PGRvdWJsZSo+KCZjcHUuX3JlZ05hbWUpOyBcCi0gICAgICAgIGRhdGFMb2dGKCIlcyAg
ICAlNXM6IDB4ICUwOHggJTA4eCAgICUxMmdcbiIsIFwKLSAgICAgICAgICAgIGluZGVudGF0aW9u
LCAjX3JlZ05hbWUsIHVbMV0sIHVbMF0sIGRbMF0pOyBcCisgICAgICAgIElOREVOVCwgZGF0YUxv
Z0YoIiU1czogMHglMDE2bGx4ICAlLjEzZ1xuIiwgI19yZWdOYW1lLCAqdSwgKmQpOyBcCiAgICAg
fQogICAgIEZPUl9FQUNIX0NQVV9GUFJFR0lTVEVSKERVTVBfRlBSRUdJU1RFUikKICAgICAjdW5k
ZWYgRFVNUF9GUFJFR0lTVEVSCiB9CiAKLXZvaWQgTWFjcm9Bc3NlbWJsZXJBUk06OlByb2JlQ29u
dGV4dDo6ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbikKLXsKLSAgICBpZiAoIWluZGVudGF0
aW9uKQotICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOwotCi0gICAgZGF0YUxvZ0YoIiVzUHJvYmVD
b250ZXh0ICVwIHtcbiIsIGluZGVudGF0aW9uLCB0aGlzKTsKLSAgICBkYXRhTG9nRigiJXMgIHBy
b2JlRnVuY3Rpb246ICVwXG4iLCBpbmRlbnRhdGlvbiwgcHJvYmVGdW5jdGlvbik7Ci0gICAgZGF0
YUxvZ0YoIiVzICBhcmcxOiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwgYXJnMSwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQ2NF90PihhcmcxKSk7Ci0gICAgZGF0YUxvZ0YoIiVzICBhcmcyOiAlcCAlbGx1
XG4iLCBpbmRlbnRhdGlvbiwgYXJnMiwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihhcmcyKSk7
Ci0gICAgZGF0YUxvZ0YoIiVzICBjcHU6IHtcbiIsIGluZGVudGF0aW9uKTsKLQotICAgIGR1bXBD
UFVSZWdpc3RlcnMoaW5kZW50YXRpb24pOwotCi0gICAgZGF0YUxvZ0YoIiVzICB9XG4iLCBpbmRl
bnRhdGlvbik7Ci0gICAgZGF0YUxvZ0YoIiVzfVxuIiwgaW5kZW50YXRpb24pOwotfQotCisjdW5k
ZWYgSU5ERU5UCiAKIGV4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCk7CiAK
IC8vIEZvciBkZXRhaWxzIG9uICJXaGF0IGNvZGUgaXMgZW1pdHRlZCBmb3IgdGhlIHByb2JlPyIg
YW5kICJXaGF0IHZhbHVlcyBhcmUgaW4KLS8vIHRoZSBzYXZlZCByZWdpc3RlcnM/Iiwgc2VlIGNv
bW1lbnQgZm9yIE1hY3JvQXNzZW1ibGVyWDg2Ojpwcm9iZSgpIGluCi0vLyBNYWNyb0Fzc2VtYmxl
clg4Nl82NC5oLgorLy8gdGhlIHNhdmVkIHJlZ2lzdGVycz8iLCBzZWUgY29tbWVudCBmb3IgTWFj
cm9Bc3NlbWJsZXJYODZDb21tb246OnByb2JlKCkgaW4KKy8vIE1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmNwcC4KIAogdm9pZCBNYWNyb0Fzc2VtYmxlckFSTTo6cHJvYmUoTWFjcm9Bc3NlbWJsZXJB
Uk06OlByb2JlRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZzEsIHZvaWQqIGFyZzIpCiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTS5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpA
QCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJs
ZXJBUk0gOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk1Bc3NlbWJsZXI+IHsKK2Ns
YXNzIE1hY3JvQXNzZW1ibGVyQVJNIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QVJN
QXNzZW1ibGVyLCBNYWNyb0Fzc2VtYmxlckFSTT4gewogICAgIHN0YXRpYyBjb25zdCBpbnQgRG91
YmxlQ29uZGl0aW9uTWFzayA9IDB4MGY7CiAgICAgc3RhdGljIGNvbnN0IGludCBEb3VibGVDb25k
aXRpb25CaXRTcGVjaWFsID0gMHgxMDsKICAgICBDT01QSUxFX0FTU0VSVCghKERvdWJsZUNvbmRp
dGlvbkJpdFNwZWNpYWwgJiBEb3VibGVDb25kaXRpb25NYXNrKSwgRG91YmxlQ29uZGl0aW9uQml0
U3BlY2lhbF9zaG91bGRfbm90X2ludGVyZmVyZV93aXRoX0FSTUFzc2VtYmxlcl9Db25kaXRpb25f
Y29kZXMpOwpAQCAtMTQzMywyOCArMTQzMyw5IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFC
TEUoTUFTTV9QUk9CRSkKLSAgICBzdHJ1Y3QgQ1BVU3RhdGUgewotICAgICAgICAjZGVmaW5lIERF
Q0xBUkVfUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSBcCi0gICAgICAgICAgICBfdHlwZSBfcmVn
TmFtZTsKLSAgICAgICAgRk9SX0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVfUkVHSVNURVIpCi0g
ICAgICAgICN1bmRlZiBERUNMQVJFX1JFR0lTVEVSCi0gICAgfTsKLQotICAgIHN0cnVjdCBQcm9i
ZUNvbnRleHQ7Ci0gICAgdHlwZWRlZiB2b2lkICgqUHJvYmVGdW5jdGlvbikoc3RydWN0IFByb2Jl
Q29udGV4dCopOwotCi0gICAgc3RydWN0IFByb2JlQ29udGV4dCB7Ci0gICAgICAgIFByb2JlRnVu
Y3Rpb24gcHJvYmVGdW5jdGlvbjsKLSAgICAgICAgdm9pZCogYXJnMTsKLSAgICAgICAgdm9pZCog
YXJnMjsKLSAgICAgICAgQ1BVU3RhdGUgY3B1OwotCi0gICAgICAgIHZvaWQgZHVtcChjb25zdCBj
aGFyKiBpbmRlbnRhdGlvbiA9IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZHVtcENQ
VVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlvbik7Ci0gICAgfTsKLQotICAgIC8vIEZv
ciBkZXRhaWxzIGFib3V0IHByb2JlKCksIHNlZSBjb21tZW50IGluIE1hY3JvQXNzZW1ibGVyWDg2
XzY0LmguCisgICAgLy8gTWV0aG9kcyByZXF1aXJlZCBieSB0aGUgTUFTTV9QUk9CRSBtZWNoYW5p
c20gYXMgZGVmaW5lZCBpbgorICAgIC8vIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaC4gCisgICAg
c3RhdGljIHZvaWQgcHJpbnRDUFVSZWdpc3RlcnMoQ1BVU3RhdGUmLCBpbnQgaW5kZW50YXRpb24g
PSAwKTsKICAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2b2lk
KiBhcmcyID0gMCk7CiAjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3LmNwcAkocmV2aXNpb24gMTc2MTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNTcgKzI4
LDM4IEBACiAjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKEFSTV9USFVNQjIpCiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIgogCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKE1BU01fUFJPQkUpCiAKLXZvaWQgTWFjcm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVD
b250ZXh0OjpkdW1wQ1BVUmVnaXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uKQorI2RlZmlu
ZSBJTkRFTlQgcHJpbnRJbmRlbnQoaW5kZW50YXRpb24pCisKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJB
Uk12Nzo6cHJpbnRDUFVSZWdpc3RlcnMoQ1BVU3RhdGUmIGNwdSwgaW50IGluZGVudGF0aW9uKQog
ewogICAgICNkZWZpbmUgRFVNUF9HUFJFR0lTVEVSKF90eXBlLCBfcmVnTmFtZSkgeyBcCiAgICAg
ICAgIGludDMyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PGludDMyX3Q+KGNwdS5fcmVnTmFt
ZSk7IFwKLSAgICAgICAgZGF0YUxvZ0YoIiVzICAgICU1czogMHglMDh4ICAgJWRcbiIsIGluZGVu
dGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBcCisgICAgICAgIElOREVOVCwgZGF0
YUxvZ0YoIiU1czogMHglMDh4ICAlZFxuIiwgI19yZWdOYW1lLCB2YWx1ZSwgdmFsdWUpIDsgXAog
ICAgIH0KICAgICBGT1JfRUFDSF9DUFVfR1BSRUdJU1RFUihEVU1QX0dQUkVHSVNURVIpCiAgICAg
Rk9SX0VBQ0hfQ1BVX1NQRUNJQUxfUkVHSVNURVIoRFVNUF9HUFJFR0lTVEVSKQogICAgICN1bmRl
ZiBEVU1QX0dQUkVHSVNURVIKIAogICAgICNkZWZpbmUgRFVNUF9GUFJFR0lTVEVSKF90eXBlLCBf
cmVnTmFtZSkgeyBcCi0gICAgICAgIHVpbnQzMl90KiB1ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KCZjcHUuX3JlZ05hbWUpOyBcCisgICAgICAgIHVpbnQ2NF90KiB1ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50NjRfdCo+KCZjcHUuX3JlZ05hbWUpOyBcCiAgICAgICAgIGRvdWJsZSogZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oJmNwdS5fcmVnTmFtZSk7IFwKLSAgICAgICAgZGF0
YUxvZ0YoIiVzICAgICU1czogMHggJTA4eCAlMDh4ICAgJTEyZ1xuIiwgXAotICAgICAgICAgICAg
aW5kZW50YXRpb24sICNfcmVnTmFtZSwgdVsxXSwgdVswXSwgZFswXSk7IFwKKyAgICAgICAgSU5E
RU5ULCBkYXRhTG9nRigiJTVzOiAweCUwMTZsbHggICUuMTNnXG4iLCAjX3JlZ05hbWUsICp1LCAq
ZCk7IFwKICAgICB9CiAgICAgRk9SX0VBQ0hfQ1BVX0ZQUkVHSVNURVIoRFVNUF9GUFJFR0lTVEVS
KQogICAgICN1bmRlZiBEVU1QX0ZQUkVHSVNURVIKIH0KIAotdm9pZCBNYWNyb0Fzc2VtYmxlckFS
TXY3OjpQcm9iZUNvbnRleHQ6OmR1bXAoY29uc3QgY2hhciogaW5kZW50YXRpb24pCi17Ci0gICAg
aWYgKCFpbmRlbnRhdGlvbikKLSAgICAgICAgaW5kZW50YXRpb24gPSAiIjsKLQotICAgIGRhdGFM
b2dGKCIlc1Byb2JlQ29udGV4dCAlcCB7XG4iLCBpbmRlbnRhdGlvbiwgdGhpcyk7Ci0gICAgZGF0
YUxvZ0YoIiVzICBwcm9iZUZ1bmN0aW9uOiAlcFxuIiwgaW5kZW50YXRpb24sIHByb2JlRnVuY3Rp
b24pOwotICAgIGRhdGFMb2dGKCIlcyAgYXJnMTogJXAgJWxsdVxuIiwgaW5kZW50YXRpb24sIGFy
ZzEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oYXJnMSkpOwotICAgIGRhdGFMb2dGKCIlcyAg
YXJnMjogJXAgJWxsdVxuIiwgaW5kZW50YXRpb24sIGFyZzIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50
NjRfdD4oYXJnMikpOwotICAgIGRhdGFMb2dGKCIlcyAgY3B1OiB7XG4iLCBpbmRlbnRhdGlvbik7
Ci0KLSAgICBkdW1wQ1BVUmVnaXN0ZXJzKGluZGVudGF0aW9uKTsKLQotICAgIGRhdGFMb2dGKCIl
cyAgfVxuIiwgaW5kZW50YXRpb24pOwotICAgIGRhdGFMb2dGKCIlc31cbiIsIGluZGVudGF0aW9u
KTsKLX0KLQorI3VuZGVmIElOREVOVAogCiBleHRlcm4gIkMiIHZvaWQgY3RpTWFzbVByb2JlVHJh
bXBvbGluZSgpOwogCiAvLyBGb3IgZGV0YWlscyBvbiAiV2hhdCBjb2RlIGlzIGVtaXR0ZWQgZm9y
IHRoZSBwcm9iZT8iIGFuZCAiV2hhdCB2YWx1ZXMgYXJlIGluCi0vLyB0aGUgc2F2ZWQgcmVnaXN0
ZXJzPyIsIHNlZSBjb21tZW50IGZvciBNYWNyb0Fzc2VtYmxlclg4Njo6cHJvYmUoKSBpbgotLy8g
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KKy8vIHRoZSBzYXZlZCByZWdpc3RlcnM/Iiwgc2VlIGNv
bW1lbnQgZm9yIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpwcm9iZSgpIGluCisvLyBNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5jcHAuCiAKIHZvaWQgTWFjcm9Bc3NlbWJsZXJBUk12Nzo6cHJvYmUo
TWFjcm9Bc3NlbWJsZXJBUk12Nzo6UHJvYmVGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogYXJnMSwg
dm9pZCogYXJnMikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFj
cm9Bc3NlbWJsZXJBUk12NyA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFSTXY3QXNz
ZW1ibGVyPiB7CitjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3IDogcHVibGljIEFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI8QVJNdjdBc3NlbWJsZXIsIE1hY3JvQXNzZW1ibGVyQVJNdjc+IHsKICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpp
cDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gQVJN
UmVnaXN0ZXJzOjpyNjsKIApAQCAtMTkwMiwyOCArMTkwMiw5IEBAIHB1YmxpYzoKICAgICB9CiAK
ICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICBzdHJ1Y3QgQ1BVU3RhdGUgewotICAgICAgICAj
ZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSBcCi0gICAgICAgICAgICBf
dHlwZSBfcmVnTmFtZTsKLSAgICAgICAgRk9SX0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVfUkVH
SVNURVIpCi0gICAgICAgICN1bmRlZiBERUNMQVJFX1JFR0lTVEVSCi0gICAgfTsKLQotICAgIHN0
cnVjdCBQcm9iZUNvbnRleHQ7Ci0gICAgdHlwZWRlZiB2b2lkICgqUHJvYmVGdW5jdGlvbikoc3Ry
dWN0IFByb2JlQ29udGV4dCopOwotCi0gICAgc3RydWN0IFByb2JlQ29udGV4dCB7Ci0gICAgICAg
IFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlvbjsKLSAgICAgICAgdm9pZCogYXJnMTsKLSAgICAg
ICAgdm9pZCogYXJnMjsKLSAgICAgICAgQ1BVU3RhdGUgY3B1OwotCi0gICAgICAgIHZvaWQgZHVt
cChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgZHVtcENQVVJlZ2lzdGVycyhjb25zdCBjaGFyKiBpbmRlbnRhdGlvbik7Ci0gICAgfTsKLQot
ICAgIC8vIEZvciBkZXRhaWxzIGFib3V0IHByb2JlKCksIHNlZSBjb21tZW50IGluIE1hY3JvQXNz
ZW1ibGVyWDg2XzY0LmguCisgICAgLy8gTWV0aG9kcyByZXF1aXJlZCBieSB0aGUgTUFTTV9QUk9C
RSBtZWNoYW5pc20gYXMgZGVmaW5lZCBpbgorICAgIC8vIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aC4gCisgICAgc3RhdGljIHZvaWQgcHJpbnRDUFVSZWdpc3RlcnMoQ1BVU3RhdGUmLCBpbnQgaW5k
ZW50YXRpb24gPSAwKTsKICAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rpb24sIHZvaWQqIGFyZzEg
PSAwLCB2b2lkKiBhcmcyID0gMCk7CiAjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlck1JUFMuaAkocmV2aXNpb24gMTc2MTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzQsNyArMzQsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFjcm9Bc3NlbWJsZXJNSVBTIDogcHVibGljIEFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fzc2VtYmxlcj4geworY2xhc3MgTWFjcm9Bc3NlbWJs
ZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fzc2VtYmxlciwgTWFj
cm9Bc3NlbWJsZXJNSVBTPiB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBNSVBTUmVnaXN0ZXJzOjpG
UFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCShyZXZpc2lvbiAxNzYxMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEz
IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDExIFNUTWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1jbGFzcyBNYWNyb0Fzc2VtYmxlclNINCA6IHB1YmxpYyBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPFNINEFzc2VtYmxlcj4geworY2xhc3MgTWFjcm9Bc3NlbWJsZXJTSDQgOiBw
dWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxTSDRBc3NlbWJsZXIsIE1hY3JvQXNzZW1ibGVy
U0g0PiB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBTSDRBc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBG
UFJlZ2lzdGVySUQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDE3NjEwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTAgKzMwLDYgQEAKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmgiCiAKLSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2
IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uIHsKQEAgLTM0OSwxMSArMzQ1LDYgQEAg
cHVibGljOgogICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBUb19jbXBsX2ltX2ZvcmNl
MzIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBpbml0aWFsVmFsdWUsIDAs
IGFkZHJlc3MuYmFzZSk7CiAgICAgfQogCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0gICAgLy8g
Rm9yIGRldGFpbHMgYWJvdXQgcHJvYmUoKSwgc2VlIGNvbW1lbnQgaW4gTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaC4KLSAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2
b2lkKiBhcmcyID0gMCk7Ci0jZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hC
dWZmZXI7CkBAIC0zNzIsNDYgKzM2Myw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBYODZB
c3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQotCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0gICAg
aW5saW5lIFRydXN0ZWRJbW0zMiB0cnVzdGVkSW1tMzJGcm9tUHRyKHZvaWQqIHB0cikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUcnVzdGVkSW1tMzIoVHJ1c3RlZEltbVB0cihwdHIpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgVHJ1c3RlZEltbTMyIHRydXN0ZWRJbW0zMkZyb21QdHIoUHJvYmVGdW5j
dGlvbiBmdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcnVzdGVkSW1tMzIoVHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikpKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgVHJ1c3RlZEltbTMyIHRydXN0ZWRJbW0zMkZyb21QdHIodm9pZCAoKmZ1bmN0aW9u
KSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFRydXN0ZWRJbW0zMihUcnVzdGVkSW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSkpOwotICAgIH0KLSNlbmRpZgogfTsKIAot
I2lmIEVOQUJMRShNQVNNX1BST0JFKQotCi1leHRlcm4gIkMiIHZvaWQgY3RpTWFzbVByb2JlVHJh
bXBvbGluZSgpOwotCi0vLyBGb3IgZGV0YWlscyBvbiAiV2hhdCBjb2RlIGlzIGVtaXR0ZWQgZm9y
IHRoZSBwcm9iZT8iIGFuZCAiV2hhdCB2YWx1ZXMgYXJlIGluCi0vLyB0aGUgc2F2ZWQgcmVnaXN0
ZXJzPyIsIHNlZSBjb21tZW50IGZvciBNYWNyb0Fzc2VtYmxlclg4Njo6cHJvYmUoKSBpbgotLy8g
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaC4KLQotaW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXJYODY6
OnByb2JlKE1hY3JvQXNzZW1ibGVyWDg2OjpQcm9iZUZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBh
cmcxLCB2b2lkKiBhcmcyKQotewotICAgIHB1c2goUmVnaXN0ZXJJRDo6ZXNwKTsKLSAgICBwdXNo
KFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgcHVzaCh0cnVzdGVkSW1tMzJGcm9tUHRyKGFyZzIpKTsK
LSAgICBwdXNoKHRydXN0ZWRJbW0zMkZyb21QdHIoYXJnMSkpOwotICAgIHB1c2godHJ1c3RlZElt
bTMyRnJvbVB0cihmdW5jdGlvbikpOwotCi0gICAgbW92ZSh0cnVzdGVkSW1tMzJGcm9tUHRyKGN0
aU1hc21Qcm9iZVRyYW1wb2xpbmUpLCBSZWdpc3RlcklEOjplYXgpOwotICAgIGNhbGwoUmVnaXN0
ZXJJRDo6ZWF4KTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoTUFTTV9QUk9CRSkKLQogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5jcHAJKHJldmlzaW9uIDE3NjEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw0NyArMzIsODkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkK
IAotdm9pZCBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6UHJvYmVDb250ZXh0OjpkdW1wQ1BVUmVn
aXN0ZXJzKGNvbnN0IGNoYXIqIGluZGVudGF0aW9uKQorI2RlZmluZSBJTkRFTlQgcHJpbnRJbmRl
bnQoaW5kZW50YXRpb24pCisKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnByaW50Q1BV
UmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpDUFVTdGF0ZSYgY3B1LCBpbnQgaW5k
ZW50YXRpb24pCiB7CiAjaWYgQ1BVKFg4NikKLSAgICAjZGVmaW5lIERVTVBfR1BSRUdJU1RFUihf
dHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICNkZWZpbmUgUFJJTlRfR1BSRUdJU1RFUihfdHlwZSwg
X3JlZ05hbWUpIHsgXAogICAgICAgICBpbnQzMl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQzMl90PihjcHUuX3JlZ05hbWUpOyBcCi0gICAgICAgIGRhdGFMb2dGKCIlcyAgICAlNnM6IDB4
JTA4eCAgJWRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBcCisg
ICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU2czogMHglMDh4ICAlZFxuIiwgI19yZWdOYW1lLCB2
YWx1ZSwgdmFsdWUpIDsgXAogICAgIH0KICNlbGlmIENQVShYODZfNjQpCi0gICAgI2RlZmluZSBE
VU1QX0dQUkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSB7IFwKKyAgICAjZGVmaW5lIFBSSU5UX0dQ
UkVHSVNURVIoX3R5cGUsIF9yZWdOYW1lKSB7IFwKICAgICAgICAgaW50NjRfdCB2YWx1ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oY3B1Ll9yZWdOYW1lKTsgXAotICAgICAgICBkYXRhTG9n
RigiJXMgICAgJTZzOiAweCUwMTZsbHggICVsbGRcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUs
IHZhbHVlLCB2YWx1ZSkgOyBcCisgICAgICAgIElOREVOVCwgZGF0YUxvZ0YoIiU2czogMHglMDE2
bGx4ICAlbGxkXG4iLCAjX3JlZ05hbWUsIHZhbHVlLCB2YWx1ZSkgOyBcCiAgICAgfQogI2VuZGlm
Ci0gICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoRFVNUF9HUFJFR0lTVEVSKQotICAgIEZPUl9F
QUNIX0NQVV9TUEVDSUFMX1JFR0lTVEVSKERVTVBfR1BSRUdJU1RFUikKLSAgICAjdW5kZWYgRFVN
UF9HUFJFR0lTVEVSCisgICAgRk9SX0VBQ0hfQ1BVX0dQUkVHSVNURVIoUFJJTlRfR1BSRUdJU1RF
UikKKyAgICBGT1JfRUFDSF9DUFVfU1BFQ0lBTF9SRUdJU1RFUihQUklOVF9HUFJFR0lTVEVSKQor
ICAgICN1bmRlZiBQUklOVF9HUFJFR0lTVEVSCiAKLSAgICAjZGVmaW5lIERVTVBfRlBSRUdJU1RF
UihfdHlwZSwgX3JlZ05hbWUpIHsgXAorICAgICNkZWZpbmUgUFJJTlRfRlBSRUdJU1RFUihfdHlw
ZSwgX3JlZ05hbWUpIHsgXAogICAgICAgICB1aW50NjRfdCogdSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDY0X3QqPigmY3B1Ll9yZWdOYW1lKTsgXAogICAgICAgICBkb3VibGUqIGQgPSByZWludGVy
cHJldF9jYXN0PGRvdWJsZSo+KCZjcHUuX3JlZ05hbWUpOyBcCi0gICAgICAgIGRhdGFMb2dGKCIl
cyAgICAlNnM6IDB4JTAxNmxseCAgJS4xM2dcbiIsIGluZGVudGF0aW9uLCAjX3JlZ05hbWUsICp1
LCAqZCk7IFwKKyAgICAgICAgSU5ERU5ULCBkYXRhTG9nRigiJTZzOiAweCUwMTZsbHggICUuMTNn
XG4iLCAjX3JlZ05hbWUsICp1LCAqZCk7IFwKICAgICB9Ci0gICAgRk9SX0VBQ0hfQ1BVX0ZQUkVH
SVNURVIoRFVNUF9GUFJFR0lTVEVSKQotICAgICN1bmRlZiBEVU1QX0ZQUkVHSVNURVIKKyAgICBG
T1JfRUFDSF9DUFVfRlBSRUdJU1RFUihQUklOVF9GUFJFR0lTVEVSKQorICAgICN1bmRlZiBQUklO
VF9GUFJFR0lTVEVSCiB9CiAKLXZvaWQgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OlByb2JlQ29u
dGV4dDo6ZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbikKLXsKLSAgICBpZiAoIWluZGVudGF0
aW9uKQotICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOworI3VuZGVmIElOREVOVAogCi0gICAgZGF0
YUxvZ0YoIiVzUHJvYmVDb250ZXh0ICVwIHtcbiIsIGluZGVudGF0aW9uLCB0aGlzKTsKLSAgICBk
YXRhTG9nRigiJXMgIHByb2JlRnVuY3Rpb246ICVwXG4iLCBpbmRlbnRhdGlvbiwgcHJvYmVGdW5j
dGlvbik7Ci0gICAgZGF0YUxvZ0YoIiVzICBhcmcxOiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwg
YXJnMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihhcmcxKSk7Ci0gICAgZGF0YUxvZ0YoIiVz
ICBhcmcyOiAlcCAlbGx1XG4iLCBpbmRlbnRhdGlvbiwgYXJnMiwgcmVpbnRlcnByZXRfY2FzdDxp
bnQ2NF90PihhcmcyKSk7Ci0gICAgZGF0YUxvZ0YoIiVzICBjcHU6IHtcbiIsIGluZGVudGF0aW9u
KTsKK2V4dGVybiAiQyIgdm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCk7CiAKLSAgICBkdW1w
Q1BVUmVnaXN0ZXJzKGluZGVudGF0aW9uKTsKKy8vIFdoYXQgY29kZSBpcyBlbWl0dGVkIGZvciB0
aGUgcHJvYmU/CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBXZSB3
YW50IHRvIGtlZXAgdGhlIHNpemUgb2YgdGhlIGVtaXR0ZWQgcHJvYmUgaW52b2NhdGlvbiBjb2Rl
IGFzIGNvbXBhY3QgYXMKKy8vIHBvc3NpYmxlIHRvIG1pbmltaXplIHRoZSBwZXJ0dXJiYXRpb24g
dG8gdGhlIEpJVCBnZW5lcmF0ZWQgY29kZS4gSG93ZXZlciwKKy8vIHdlIGFsc28gbmVlZCB0byBw
cmVzZXJ2ZSB0aGUgQ1BVIHJlZ2lzdGVycyBhbmQgc2V0IHVwIHRoZSBQcm9iZUNvbnRleHQgdG8g
YmUKKy8vIHBhc3NlZCB0byB0aGUgdXNlciBwcm9iZSBmdW5jdGlvbi4KKy8vCisvLyBIZW5jZSwg
d2UgZG8gb25seSB0aGUgbWluaW11bSBoZXJlIHRvIHByZXNlcnZlIGEgc2NyYXRjaCByZWdpc3Rl
ciAoaS5lLiByYXgKKy8vIGluIHRoaXMgY2FzZSkgYW5kIHRoZSBzdGFjayBwb2ludGVyIChpLmUu
IHJzcCksIGFuZCBwYXNzIHRoZSBwcm9iZSBhcmd1bWVudHMuCisvLyBXZSdsbCBsZXQgdGhlIGN0
aU1hc21Qcm9iZVRyYW1wb2xpbmUgaGFuZGxlIHRoZSByZXN0IG9mIHRoZSBwcm9iZSBpbnZvY2F0
aW9uCisvLyB3b3JrIGkuZS4gc2F2aW5nIHRoZSBDUFVTdGF0ZSAoYW5kIHNldHRpbmcgdXAgdGhl
IFByb2JlQ29udGV4dCksIGNhbGxpbmcgdGhlCisvLyB1c2VyIHByb2JlIGZ1bmN0aW9uLCBhbmQg
cmVzdG9yaW5nIHRoZSBDUFVTdGF0ZSBiZWZvcmUgcmV0dXJuaW5nIHRvIEpJVAorLy8gZ2VuZXJh
dGVkIGNvZGUuCisvLworLy8gV2hhdCByZWdpc3RlcnMgbmVlZCB0byBiZSBzYXZlZD8KKy8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFRoZSByZWdpc3RlcnMgYXJlIHNhdmVk
IGZvciAyIHJlYXNvbnM6CisvLyAxLiBUbyBwcmVzZXJ2ZSB0aGVpciBzdGF0ZSBpbiB0aGUgSklU
dGVkIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCBhbGwgcmVnaXN0ZXJzCisvLyAgICB0aGF0IGFyZSBu
b3QgY2FsbGVlIHNhdmVkIG5lZWRzIHRvIGJlIHNhdmVkLiBXZSBhbHNvIG5lZWQgdG8gc2F2ZSB0
aGUKKy8vICAgIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVycyBiZWNhdXNlIHRoZSBwcm9iZSBjYW4g
YmUgaW5zZXJ0ZWQgYmV0d2VlbiBhIHRlc3QKKy8vICAgIGFuZCBhIGJyYW5jaC4KKy8vIDIuIFRv
IGFsbG93IHRoZSBwcm9iZSB0byBpbnNwZWN0IHRoZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBm
b3IgZGVidWdnaW5nCisvLyAgICBwdXJwb3Nlcy4gVGhpcyBtZWFucyBhbGwgcmVnaXN0ZXJzIG5l
ZWQgdG8gYmUgc2F2ZWQuCisvLworLy8gSW4gc3VtbWFyeSwgc2F2ZSBldmVyeXRoaW5nLiBCdXQg
Zm9yIHJlYXNvbnMgc3RhdGVkIGFib3ZlLCB3ZSBzaG91bGQgZG8gdGhlCisvLyBtaW5pbXVtIGhl
cmUgYW5kIGxldCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lIGRvIHRoZSBoZWF2eSBsaWZ0aW5nIHRv
IHNhdmUgdGhlCisvLyBmdWxsIHNldC4KKy8vCisvLyBXaGF0IHZhbHVlcyBhcmUgaW4gdGhlIHNh
dmVkIHJlZ2lzdGVycz8KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisvLyBDb25jZXB0dWFsbHksIHRoZSBzYXZlZCByZWdpc3RlcnMgc2hvdWxkIGNvbnRhaW4gdmFs
dWVzIGFzIGlmIHRoZSBwcm9iZQorLy8gaXMgbm90IHByZXNlbnQgaW4gdGhlIEpJVCBnZW5lcmF0
ZWQgY29kZS4gSGVuY2UsIHRoZXkgc2hvdWxkIGNvbnRhaW4gdmFsdWVzCisvLyB0aGF0IGFyZSBl
eHBlY3RlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIGltbWVkaWF0ZWx5IGZvbGxv
d2luZyB0aGUKKy8vIHByb2JlLgorLy8KKy8vIFNwZWNpZmljYWxseSwgdGhlIHNhdmVkIHN0YWNr
IHBvaW50ZXIgcmVnaXN0ZXIgd2lsbCBwb2ludCB0byB0aGUgc3RhY2sKKy8vIHBvc2l0aW9uIGJl
Zm9yZSB3ZSBwdXNoIHRoZSBQcm9iZUNvbnRleHQgZnJhbWUuIFRoZSBzYXZlZCByaXAgd2lsbCBw
b2ludCB0bworLy8gdGhlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIGltbWVkaWF0ZWx5IGZv
bGxvd2luZyB0aGUgcHJvYmUuIAogCi0gICAgZGF0YUxvZ0YoIiVzICB9XG4iLCBpbmRlbnRhdGlv
bik7Ci0gICAgZGF0YUxvZ0YoIiVzfVxuIiwgaW5kZW50YXRpb24pOwordm9pZCBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6cHJvYmUoTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OlByb2JlRnVuY3Rp
b24gZnVuY3Rpb24sIHZvaWQqIGFyZzEsIHZvaWQqIGFyZzIpCit7CisgICAgcHVzaChSZWdpc3Rl
cklEOjplc3ApOworICAgIHB1c2goUmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYXJnMiksIFJlZ2lzdGVySUQ6OmVheCk7CisgICAgcHVzaChSZWdpc3RlcklEOjplYXgp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcmcxKSwgUmVnaXN0ZXJJRDo6ZWF4KTsKKyAgICBw
dXNoKFJlZ2lzdGVySUQ6OmVheCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIFJlZ2lzdGVySUQ6OmVheCk7CisgICAgcHVzaChSZWdp
c3RlcklEOjplYXgpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihjdGlNYXNtUHJvYmVUcmFtcG9saW5lKSksIFJlZ2lzdGVySUQ6OmVheCk7CisgICAgY2Fs
bChSZWdpc3RlcklEOjplYXgpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8WDg2QXNzZW1i
bGVyPiB7CitjbGFzcyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiA6IHB1YmxpYyBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPFg4NkFzc2VtYmxlciwgTWFjcm9Bc3NlbWJsZXJYODZDb21tb24+IHsKIHB1
YmxpYzoKICNpZiBDUFUoWDg2XzY0KQogICAgIHN0YXRpYyBjb25zdCBYODZSZWdpc3RlcnM6OlJl
Z2lzdGVySUQgc2NyYXRjaFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyMTE7CkBAIC0xNDcwLDI2
ICsxNDcwLDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAg
ICBzdHJ1Y3QgQ1BVU3RhdGUgewotICAgICAgICAjZGVmaW5lIERFQ0xBUkVfUkVHSVNURVIoX3R5
cGUsIF9yZWdOYW1lKSBcCi0gICAgICAgICAgICBfdHlwZSBfcmVnTmFtZTsKLSAgICAgICAgRk9S
X0VBQ0hfQ1BVX1JFR0lTVEVSKERFQ0xBUkVfUkVHSVNURVIpCi0gICAgICAgICN1bmRlZiBERUNM
QVJFX1JFR0lTVEVSCi0gICAgfTsKLQotICAgIHN0cnVjdCBQcm9iZUNvbnRleHQ7Ci0gICAgdHlw
ZWRlZiB2b2lkICgqUHJvYmVGdW5jdGlvbikoc3RydWN0IFByb2JlQ29udGV4dCopOwotCi0gICAg
c3RydWN0IFByb2JlQ29udGV4dCB7Ci0gICAgICAgIFByb2JlRnVuY3Rpb24gcHJvYmVGdW5jdGlv
bjsKLSAgICAgICAgdm9pZCogYXJnMTsKLSAgICAgICAgdm9pZCogYXJnMjsKLSAgICAgICAgQ1BV
U3RhdGUgY3B1OwotCi0gICAgICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBpbmRlbnRhdGlvbiA9
IDApOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZHVtcENQVVJlZ2lzdGVycyhjb25zdCBj
aGFyKiBpbmRlbnRhdGlvbik7Ci0gICAgfTsKKyAgICAvLyBNZXRob2RzIHJlcXVpcmVkIGJ5IHRo
ZSBNQVNNX1BST0JFIG1lY2hhbmlzbSBhcyBkZWZpbmVkIGluCisgICAgLy8gQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oLiAKKyAgICBzdGF0aWMgdm9pZCBwcmludENQVVJlZ2lzdGVycyhDUFVTdGF0
ZSYsIGludCBpbmRlbnRhdGlvbiA9IDApOworICAgIHZvaWQgcHJvYmUoUHJvYmVGdW5jdGlvbiwg
dm9pZCogYXJnMSA9IDAsIHZvaWQqIGFyZzIgPSAwKTsKICNlbmRpZiAvLyBFTkFCTEUoTUFTTV9Q
Uk9CRSkKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTc2MTAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaCIKIAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KLSNlbmRpZgotCiAjZGVmaW5lIFJFUFRBQ0hfT0ZGU0VUX0NBTExf
UjExIDMKIAogaW5saW5lIGJvb2wgQ0FOX1NJR05fRVhURU5EXzMyXzY0KGludDY0X3QgdmFsdWUp
IHsgcmV0dXJuIHZhbHVlID09IChpbnQ2NF90KShpbnQzMl90KXZhbHVlOyB9CkBAIC04NDAsMjYg
KzgzNiw2IEBAIHB1YmxpYzoKICAgICAgICAgWDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92
cV9pNjRyKGluc3RydWN0aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5pdGlhbFZhbHVlKSwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAK
LSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGVtaXRzIGNvZGUg
dG8gcHJlc2VydmUgdGhlIENQVVN0YXRlIChlLmcuIHJlZ2lzdGVycyksCi0gICAgLy8gY2FsbCBh
IHVzZXIgc3VwcGxpZWQgcHJvYmUgZnVuY3Rpb24sIGFuZCByZXN0b3JlIHRoZSBDUFVTdGF0ZSBi
ZWZvcmUKLSAgICAvLyBjb250aW51aW5nIHdpdGggb3RoZXIgSklUIGdlbmVyYXRlZCBjb2RlLgot
ICAgIC8vCi0gICAgLy8gVGhlIHVzZXIgc3VwcGxpZWQgcHJvYmUgZnVuY3Rpb24gd2lsbCBiZSBj
YWxsZWQgd2l0aCBhIHNpbmdsZSBwb2ludGVyIHRvCi0gICAgLy8gYSBQcm9iZUNvbnRleHQgc3Ry
dWN0IChkZWZpbmVkIGFib3ZlKSB3aGljaCBjb250YWlucywgYW1vbmcgb3RoZXIgdGhpbmdzLAot
ICAgIC8vIHRoZSBwcmVzZXJ2ZWQgQ1BVU3RhdGUuIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHByb2Jl
IGZ1bmN0aW9uIHRvIGluc3BlY3QKLSAgICAvLyB0aGUgQ1BVU3RhdGUgYXQgdGhhdCBwb2ludCBp
biB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLgotICAgIC8vCi0gICAgLy8gSWYgdGhlIHVzZXIgcHJv
YmUgZnVuY3Rpb24gYWx0ZXJzIHRoZSByZWdpc3RlciB2YWx1ZXMgaW4gdGhlIFByb2JlQ29udGV4
dCwKLSAgICAvLyB0aGUgYWx0ZXJlZCB2YWx1ZXMgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgQ1BV
IHJlZ2lzdGVycyB3aGVuIHRoZSBwcm9iZQotICAgIC8vIHJldHVybnMuCi0gICAgLy8KLSAgICAv
LyBUaGUgUHJvYmVDb250ZXh0IGlzIHN0YWNrIGFsbG9jYXRlZCBhbmQgaXMgb25seSB2YWxpZCBm
b3IgdGhlIGR1cmF0aW9uCi0gICAgLy8gb2YgdGhlIGNhbGwgdG8gdGhlIHVzZXIgcHJvYmUgZnVu
Y3Rpb24uCi0KLSAgICB2b2lkIHByb2JlKFByb2JlRnVuY3Rpb24sIHZvaWQqIGFyZzEgPSAwLCB2
b2lkKiBhcmcyID0gMCk7Ci0jZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hC
dWZmZXI7CkBAIC04ODEsNjkgKzg1Nyw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBYODZB
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUFRB
Q0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CiAgICAgfQotCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0gICAgaW5saW5l
IFRydXN0ZWRJbW02NCB0cnVzdGVkSW1tNjRGcm9tUHRyKHZvaWQqIHB0cikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBUcnVzdGVkSW1tNjQoVHJ1c3RlZEltbVB0cihwdHIpKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgVHJ1c3RlZEltbTY0IHRydXN0ZWRJbW02NEZyb21QdHIoUHJvYmVGdW5jdGlvbiBm
dW5jdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcnVzdGVkSW1tNjQoVHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikpKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgVHJ1c3RlZEltbTY0IHRydXN0ZWRJbW02NEZyb21QdHIodm9pZCAoKmZ1bmN0aW9uKSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFRydXN0ZWRJbW02NChUcnVzdGVkSW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSkpOwotICAgIH0KLSNlbmRpZgogfTsKIAotI2lmIEVO
QUJMRShNQVNNX1BST0JFKQotCi1leHRlcm4gIkMiIHZvaWQgY3RpTWFzbVByb2JlVHJhbXBvbGlu
ZSgpOwotCi0vLyBXaGF0IGNvZGUgaXMgZW1pdHRlZCBmb3IgdGhlIHByb2JlPwotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBzaXpl
IG9mIHRoZSBlbWl0dGVkIHByb2JlIGludm9jYXRpb24gY29kZSBhcyBjb21wYWN0IGFzCi0vLyBw
b3NzaWJsZSB0byBtaW5pbWl6ZSB0aGUgcGVydHVyYmF0aW9uIHRvIHRoZSBKSVQgZ2VuZXJhdGVk
IGNvZGUuIEhvd2V2ZXIsCi0vLyB3ZSBhbHNvIG5lZWQgdG8gcHJlc2VydmUgdGhlIENQVSByZWdp
c3RlcnMgYW5kIHNldCB1cCB0aGUgUHJvYmVDb250ZXh0IHRvIGJlCi0vLyBwYXNzZWQgdG8gdGhl
IHVzZXIgcHJvYmUgZnVuY3Rpb24uCi0vLwotLy8gSGVuY2UsIHdlIGRvIG9ubHkgdGhlIG1pbmlt
dW0gaGVyZSB0byBwcmVzZXJ2ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIgKGkuZS4gcmF4Ci0vLyBpbiB0
aGlzIGNhc2UpIGFuZCB0aGUgc3RhY2sgcG9pbnRlciAoaS5lLiByc3ApLCBhbmQgcGFzcyB0aGUg
cHJvYmUgYXJndW1lbnRzLgotLy8gV2UnbGwgbGV0IHRoZSBjdGlNYXNtUHJvYmVUcmFtcG9saW5l
IGhhbmRsZSB0aGUgcmVzdCBvZiB0aGUgcHJvYmUgaW52b2NhdGlvbgotLy8gd29yayBpLmUuIHNh
dmluZyB0aGUgQ1BVU3RhdGUgKGFuZCBzZXR0aW5nIHVwIHRoZSBQcm9iZUNvbnRleHQpLCBjYWxs
aW5nIHRoZQotLy8gdXNlciBwcm9iZSBmdW5jdGlvbiwgYW5kIHJlc3RvcmluZyB0aGUgQ1BVU3Rh
dGUgYmVmb3JlIHJldHVybmluZyB0byBKSVQKLS8vIGdlbmVyYXRlZCBjb2RlLgotLy8KLS8vIFdo
YXQgdmFsdWVzIGFyZSBpbiB0aGUgc2F2ZWQgcmVnaXN0ZXJzPwotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIENvbmNlcHR1YWxseSwgdGhlIHNhdmVkIHJlZ2lz
dGVycyBzaG91bGQgY29udGFpbiB2YWx1ZXMgYXMgaWYgdGhlIHByb2JlCi0vLyBpcyBub3QgcHJl
c2VudCBpbiB0aGUgSklUIGdlbmVyYXRlZCBjb2RlLiBIZW5jZSwgdGhleSBzaG91bGQgY29udGFp
biB2YWx1ZXMKLS8vIHRoYXQgYXJlIGV4cGVjdGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1
Y3Rpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQotLy8gcHJvYmUuCi0vLwotLy8gU3BlY2lm
Y2FsbHksIHRoZSBzYXZlZCBzdGFjayBwb2ludGVyIHJlZ2lzdGVyIHdpbGwgcG9pbnQgdG8gdGhl
IHN0YWNrCi0vLyBwb3NpdGlvbiBiZWZvcmUgd2UgcHVzaCB0aGUgUHJvYmVDb250ZXh0IGZyYW1l
LiBUaGUgc2F2ZWQgcmlwIHdpbGwgcG9pbnQgdG8KLS8vIHRoZSBhZGRyZXNzIG9mIHRoZSBpbnN0
cnVjdGlvbiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIHByb2JlLiAKLQotaW5saW5lIHZvaWQg
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnByb2JlKE1hY3JvQXNzZW1ibGVyWDg2XzY0OjpQcm9iZUZ1
bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2b2lkKiBhcmcyKQotewotICAgIHB1c2goUmVn
aXN0ZXJJRDo6ZXNwKTsKLSAgICBwdXNoKFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgbW92ZSh0cnVz
dGVkSW1tNjRGcm9tUHRyKGFyZzIpLCBSZWdpc3RlcklEOjplYXgpOwotICAgIHB1c2goUmVnaXN0
ZXJJRDo6ZWF4KTsKLSAgICBtb3ZlKHRydXN0ZWRJbW02NEZyb21QdHIoYXJnMSksIFJlZ2lzdGVy
SUQ6OmVheCk7Ci0gICAgcHVzaChSZWdpc3RlcklEOjplYXgpOwotICAgIG1vdmUodHJ1c3RlZElt
bTY0RnJvbVB0cihmdW5jdGlvbiksIFJlZ2lzdGVySUQ6OmVheCk7Ci0gICAgcHVzaChSZWdpc3Rl
cklEOjplYXgpOwotICAgIG1vdmUodHJ1c3RlZEltbTY0RnJvbVB0cihjdGlNYXNtUHJvYmVUcmFt
cG9saW5lKSwgUmVnaXN0ZXJJRDo6ZWF4KTsKLSAgICBjYWxsKFJlZ2lzdGVySUQ6OmVheCk7Ci19
Ci0jZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnNBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnNBUk12Ny5oCShyZXZpc2lvbiAxNzYxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOCArOTQsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgUFJPQkVfQ1BVX0QxM19PRkZTRVQgKFBST0JFX0ZJ
UlNUX0ZQUkVHX09GRlNFVCArICgxMyAqIEZQUkVHX1NJWkUpKQogI2RlZmluZSBQUk9CRV9DUFVf
RDE0X09GRlNFVCAoUFJPQkVfRklSU1RfRlBSRUdfT0ZGU0VUICsgKDE0ICogRlBSRUdfU0laRSkp
CiAjZGVmaW5lIFBST0JFX0NQVV9EMTVfT0ZGU0VUIChQUk9CRV9GSVJTVF9GUFJFR19PRkZTRVQg
KyAoMTUgKiBGUFJFR19TSVpFKSkKLQotI2lmIENQVShBUFBMRV9BUk1WN1MpCiAjZGVmaW5lIFBS
T0JFX0NQVV9EMTZfT0ZGU0VUIChQUk9CRV9GSVJTVF9GUFJFR19PRkZTRVQgKyAoMTYgKiBGUFJF
R19TSVpFKSkKICNkZWZpbmUgUFJPQkVfQ1BVX0QxN19PRkZTRVQgKFBST0JFX0ZJUlNUX0ZQUkVH
X09GRlNFVCArICgxNyAqIEZQUkVHX1NJWkUpKQogI2RlZmluZSBQUk9CRV9DUFVfRDE4X09GRlNF
VCAoUFJPQkVfRklSU1RfRlBSRUdfT0ZGU0VUICsgKDE4ICogRlBSRUdfU0laRSkpCkBAIC0xMTMs
MTAgKzExMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBQUk9CRV9DUFVfRDMwX09GRlNF
VCAoUFJPQkVfRklSU1RfRlBSRUdfT0ZGU0VUICsgKDMwICogRlBSRUdfU0laRSkpCiAjZGVmaW5l
IFBST0JFX0NQVV9EMzFfT0ZGU0VUIChQUk9CRV9GSVJTVF9GUFJFR19PRkZTRVQgKyAoMzEgKiBG
UFJFR19TSVpFKSkKICNkZWZpbmUgUFJPQkVfU0laRSAoUFJPQkVfRklSU1RfRlBSRUdfT0ZGU0VU
ICsgKDMyICogRlBSRUdfU0laRSkpCi0jZWxzZQotI2RlZmluZSBQUk9CRV9TSVpFIChQUk9CRV9G
SVJTVF9GUFJFR19PRkZTRVQgKyAoMTYgKiBGUFJFR19TSVpFKSkKLSNlbmRpZiAvLyBDUFUoQVBQ
TEVfQVJNVjdTKQotCiAKIC8vIFRoZXNlIEFTU0VSVHMgcmVtaW5kIHlvdSB0aGF0IGlmIHlvdSBj
aGFuZ2UgdGhlIGxheW91dCBvZiBQcm9iZUNvbnRleHQsCiAvLyB5b3UgbmVlZCB0byBjaGFuZ2Ug
Y3RpTWFzbVByb2JlVHJhbXBvbGluZSBvZmZzZXRzIGFib3ZlIHRvIG1hdGNoLgpAQCAtMTYyLDcg
KzE1Niw2IEBAIENPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5kMTMpID0KIENPTVBJ
TEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5kMTQpID09IFBST0JFX0NQVV9EMTRfT0ZGU0VU
LCBQcm9iZUNvbnRleHRfY3B1X2QxNF9vZmZzZXRfbWF0Y2hlc19jdGlNYXNtUHJvYmVUcmFtcG9s
aW5lKTsKIENPTVBJTEVfQVNTRVJUKFBST0JFX09GRlNFVE9GKGNwdS5kMTUpID09IFBST0JFX0NQ
VV9EMTVfT0ZGU0VULCBQcm9iZUNvbnRleHRfY3B1X2QxNV9vZmZzZXRfbWF0Y2hlc19jdGlNYXNt
UHJvYmVUcmFtcG9saW5lKTsKIAotI2lmIENQVShBUFBMRV9BUk1WN1MpCiBDT01QSUxFX0FTU0VS
VChQUk9CRV9PRkZTRVRPRihjcHUuZDE2KSA9PSBQUk9CRV9DUFVfRDE2X09GRlNFVCwgUHJvYmVD
b250ZXh0X2NwdV9kMTZfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJhbXBvbGluZSk7CiBD
T01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZDE3KSA9PSBQUk9CRV9DUFVfRDE3X09G
RlNFVCwgUHJvYmVDb250ZXh0X2NwdV9kMTdfb2Zmc2V0X21hdGNoZXNfY3RpTWFzbVByb2JlVHJh
bXBvbGluZSk7CiBDT01QSUxFX0FTU0VSVChQUk9CRV9PRkZTRVRPRihjcHUuZDE4KSA9PSBQUk9C
RV9DUFVfRDE4X09GRlNFVCwgUHJvYmVDb250ZXh0X2NwdV9kMThfb2Zmc2V0X21hdGNoZXNfY3Rp
TWFzbVByb2JlVHJhbXBvbGluZSk7CkBAIC0xNzksNyArMTcyLDYgQEAgQ09NUElMRV9BU1NFUlQo
UFJPQkVfT0ZGU0VUT0YoY3B1LmQyOCkgPQogQ09NUElMRV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0Yo
Y3B1LmQyOSkgPT0gUFJPQkVfQ1BVX0QyOV9PRkZTRVQsIFByb2JlQ29udGV4dF9jcHVfZDI5X29m
ZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOwogQ09NUElMRV9BU1NFUlQoUFJP
QkVfT0ZGU0VUT0YoY3B1LmQzMCkgPT0gUFJPQkVfQ1BVX0QzMF9PRkZTRVQsIFByb2JlQ29udGV4
dF9jcHVfZDMwX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOwogQ09NUElM
RV9BU1NFUlQoUFJPQkVfT0ZGU0VUT0YoY3B1LmQzMSkgPT0gUFJPQkVfQ1BVX0QzMV9PRkZTRVQs
IFByb2JlQ29udGV4dF9jcHVfZDMxX29mZnNldF9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xp
bmUpOwotI2VuZGlmIC8vIENQVShBUFBMRV9BUk1WN1MpCiAKIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihNYWNyb0Fzc2VtYmxlcjo6UHJvYmVDb250ZXh0KSA9PSBQUk9CRV9TSVpFLCBQcm9iZUNvbnRl
eHRfc2l6ZV9tYXRjaGVzX2N0aU1hc21Qcm9iZVRyYW1wb2xpbmUpOwogCkBAIC0yMzgsMTEgKzIz
MCw3IEBAIFNZTUJPTF9TVFJJTkcoY3RpTWFzbVByb2JlVHJhbXBvbGluZSkgIjoKICAgICAibGRy
ICAgICAgIGxyLCBbc3AsICMiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUENfT0ZGU0VU
KSAiXSIgIlxuIgogCiAgICAgImFkZCAgICAgICBpcCwgc3AsICMiIFNUUklOR0laRV9WQUxVRV9P
RihQUk9CRV9DUFVfRDBfT0ZGU0VUKSAiXG4iCi0jaWYgQ1BVKEFQUExFX0FSTVY3UykKICAgICAi
dnN0bWlhLjY0IGlwLCB7IGQwLWQzMSB9IiAiXG4iCi0jZWxzZQotICAgICJ2c3RtaWEuNjQgaXAs
IHsgZDAtZDE1IH0iICJcbiIKLSNlbmRpZgogCiAgICAgIm1vdiAgICAgICBmcCwgc3AiICJcbiIg
Ly8gU2F2ZSB0aGUgUHJvYmVDb250ZXh0Ki4KIApAQCAtMjU1LDEzICsyNDMsOCBAQCBTWU1CT0xf
U1RSSU5HKGN0aU1hc21Qcm9iZVRyYW1wb2xpbmUpICI6CiAgICAgLy8gVG8gZW5hYmxlIHByb2Jl
cyB0byBtb2RpZnkgcmVnaXN0ZXIgc3RhdGUsIHdlIGNvcHkgYWxsIHJlZ2lzdGVycwogICAgIC8v
IG91dCBvZiB0aGUgUHJvYmVDb250ZXh0IGJlZm9yZSByZXR1cm5pbmcuCiAKLSNpZiBDUFUoQVBQ
TEVfQVJNVjdTKQogICAgICJhZGQgICAgICAgaXAsIHNwLCAjIiBTVFJJTkdJWkVfVkFMVUVfT0Yo
UFJPQkVfQ1BVX0QzMV9PRkZTRVQgKyBGUFJFR19TSVpFKSAiXG4iCiAgICAgInZsZG1kYi42NCBp
cCEsIHsgZDAtZDMxIH0iICJcbiIKLSNlbHNlCi0gICAgImFkZCAgICAgICBpcCwgc3AsICMiIFNU
UklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfRDE1X09GRlNFVCArIEZQUkVHX1NJWkUpICJcbiIK
LSAgICAidmxkbWRiLjY0IGlwISwgeyBkMC1kMTUgfSIgIlxuIgotI2VuZGlmCiAgICAgImFkZCAg
ICAgICBpcCwgc3AsICMiIFNUUklOR0laRV9WQUxVRV9PRihQUk9CRV9DUFVfUjExX09GRlNFVCAr
IEdQUkVHX1NJWkUpICJcbiIKICAgICAibGRtZGIgICAgIGlwLCB7IHIwLXIxMSB9IiAiXG4iCiAg
ICAgImxkciAgICAgICBpcCwgW3NwLCAjIiBTVFJJTkdJWkVfVkFMVUVfT0YoUFJPQkVfQ1BVX0ZQ
U0NSX09GRlNFVCkgIl0iICJcbiIK
</data>
<flag name="review"
          id="266410"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>