<?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>149939</bug_id>
          
          <creation_ts>2015-10-08 16:29:17 -0700</creation_ts>
          <short_desc>WKWebView needs SPI to customize immediate actions</short_desc>
          <delta_ts>2015-10-09 16:20:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1131779</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-08 16:29:17 -0700</bug_when>
    <thetext>WKWebView needs SPI to customize immediate actions

rdar://problem/20016849</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131828</commentid>
    <comment_count>1</comment_count>
      <attachid>262746</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-08 22:05:35 -0700</bug_when>
    <thetext>Created attachment 262746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131832</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-08 22:09:04 -0700</bug_when>
    <thetext>Attachment 262746 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/PageClientImpl.mm:825:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit2/Shared/WebHitTestResultData.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/Shared/API/APIHitTestResult.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/mac/WKImmediateActionController.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/API/mac/WKView.mm:73:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:58:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:1156:  The parameter name &quot;hitTestResultData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:1158:  The parameter name &quot;hitTestResultData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 39 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>1131840</commentid>
    <comment_count>3</comment_count>
      <attachid>262750</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-08 22:53:34 -0700</bug_when>
    <thetext>Created attachment 262750
Patch

Trying to fix these red bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131843</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-08 22:55:33 -0700</bug_when>
    <thetext>Attachment 262750 did not pass style-queue:


ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 46 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>1131950</commentid>
    <comment_count>5</comment_count>
      <attachid>262779</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-09 10:50:09 -0700</bug_when>
    <thetext>Created attachment 262779
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131953</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-09 10:53:31 -0700</bug_when>
    <thetext>Attachment 262779 did not pass style-queue:


ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 46 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>1132017</commentid>
    <comment_count>7</comment_count>
      <attachid>262796</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-09 14:56:18 -0700</bug_when>
    <thetext>Created attachment 262796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132018</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-09 14:59:42 -0700</bug_when>
    <thetext>Attachment 262796 did not pass style-queue:


ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/mac/WebHitTestResultData.mm:81:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 48 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>1132025</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-09 15:25:39 -0700</bug_when>
    <thetext>Thank you!!!! http://trac.webkit.org/changeset/190823</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132039</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-10-09 16:20:25 -0700</bug_when>
    <thetext>Build fixes:

http://trac.webkit.org/changeset/190828
http://trac.webkit.org/changeset/190830</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262746</attachid>
            <date>2015-10-08 22:05:35 -0700</date>
            <delta_ts>2015-10-08 22:53:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>137538</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDc1NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBAQAorMjAxNS0xMC0wOCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJWaWV3IG5lZWRzIFNQSSB0
byBjdXN0b21pemUgaW1tZWRpYXRlIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTkzOQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmct
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwMDE2ODQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBicmVha3MgV2ViSGl0VGVzdFJl
c3VsdCBpbnRvIHR3byBmaWxlcy4gV2ViSGlUZXN0UmVzdWx0RGF0YSAKKyAgICAgICAgY29udGlu
dWVzIHRvIGxpdmUgaW4gdGhlIFdlYktpdCBuYW1lc3BhY2UgYW5kIGNvbnRhaW5zIHRoZSBvbGQg
CisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgc3RydWN0LiBUaGUgcmVzdCBvZiBXZWJI
aXRUZXN0UmVzdWx0IGlzIG5vdyAKKyAgICAgICAgQVBJOjpIaXRUZXN0UmVzdWx0LiBUaGUgcGF0
Y2ggYWxzbyBhZGRzIF9XS0hpdFRlc3RSZXN1bHQgYXMgT2JqLUMgQVBJIHRvIHdyYXAgCisgICAg
ICAgIEFQSTo6SGl0VGVzdFJlc3VsdC4KKworICAgICAgICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1
bHQgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSBEYXRhIHN0cnVjdCBhbmQgaXMgbm93IGNhbGxlZCAK
KyAgICAgICAgQVBJOjpIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFNoYXJlZC9BUEkvQVBJSGl0
VGVzdFJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcC4K
KyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6On5EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1l
bnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIFNo
YXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oOiBDb3BpZWQgZnJvbSBTaGFyZWQvV2ViSGl0VGVz
dFJlc3VsdC5oLgorICAgICAgICAoQVBJOjpIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUltYWdlVVJM
KToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwpOgorICAgICAg
ICAoQVBJOjpIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOgorICAgICAgICAoQVBJOjpI
aXRUZXN0UmVzdWx0OjphYnNvbHV0ZU1lZGlhVVJMKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJl
c3VsdDo6bGlua0xhYmVsKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6bGlua1RpdGxl
KToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6bG9va3VwVGV4dCk6CisgICAgICAgIChB
UEk6OkhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKEFQSTo6SGl0
VGVzdFJlc3VsdDo6aXNEb3dubG9hZGFibGVNZWRpYSk6CisgICAgICAgIChBUEk6OkhpdFRlc3RS
ZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
OjphYnNvbHV0ZUltYWdlVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVz
dFJlc3VsdDo6YWJzb2x1dGVQREZVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJI
aXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZU1lZGlhVVJMKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bGlua0xhYmVsKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bGlua1RpdGxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bG9va3VwVGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6aXNEb3dubG9hZGFibGVNZWRpYSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OldlYkhpdFRlc3RS
ZXN1bHQpOiBEZWxldGVkLgorCisgICAgICAgIFRoaXMgaXMgYSBuZXcgb2JqLWMgb2JqZWN0IHRo
YXQgd2UgY2FuIHVzZSBmb3IgdGhlIG1vZGVybiBpbW1lZGlhdGUgYWN0aW9uIAorICAgICAgICBB
UEkuCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0Lmg6IEFkZGVk
LgorICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5tbTogQWRkZWQu
CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgZGVhbGxvY10pOgorICAgICAgICAoLVtfV0tI
aXRUZXN0UmVzdWx0IGFic29sdXRlSW1hZ2VVUkxdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJl
c3VsdCBhYnNvbHV0ZVBERlVSTF0pOgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVzdWx0IGFic29s
dXRlTGlua1VSTF0pOgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVzdWx0IGFic29sdXRlTWVkaWFV
UkxdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBsaW5rTGFiZWxdKToKKyAgICAgICAg
KC1bX1dLSGl0VGVzdFJlc3VsdCBsaW5rVGl0bGVdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJl
c3VsdCBsb29rdXBUZXh0XSk6CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgaXNDb250ZW50
RWRpdGFibGVdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBlbGVtZW50Qm91bmRpbmdC
b3hdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBjb3B5V2l0aFpvbmU6XSk6CisgICAg
ICAgICgtW19XS0hpdFRlc3RSZXN1bHQgX2FwaU9iamVjdF0pOgorCisgICAgICAgIF9XS0hpdFRl
c3RSZXN1bHQgd3JhcHMgQVBJOjpIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFNoYXJlZC9BUEkv
Q29jb2EvX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAoQVBJOjp3
cmFwcGVyKToKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tOgorICAgICAgICAo
QVBJOjpPYmplY3Q6Om5ld09iamVjdCk6CisKKyAgICAgICAgV2UgbmVlZCBhIG5ldyB2ZXJzaW9u
IG9mIHRoaXMgZW51bSB0b28uIFRoZSBuZXcgdmVyc2lvbiBoYXMgdGhlIHVuZm9ydHVuYXRlIAor
ICAgICAgICBuYW1lIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGVzIChub3RlIHRoZSBzKS4KKyAgICAg
ICAgKiBTaGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaDogQWRkZWQuCisK
KyAgICAgICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBpcyBub3cgV2ViSGl0VGVzdFJlc3VsdERh
dGEuCisgICAgICAgICogU2hhcmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEuaDoKKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0RGF0YTo6d2ViSGl0VGVzdFJlc3VsdERhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjpzZWxlY3RlZFRleHQpOgor
CisgICAgICAgIFJlbW92ZSBXZWJIaXRUZXN0UmVzdWx0LCBhbmQgYWRkIFdlYkhpdFRlc3RSZXN1
bHREYXRhIGZvciB0aGUgRGF0YSBzdHJ1Y3QuCisgICAgICAgICogU2hhcmVkL1dlYkhpdFRlc3RS
ZXN1bHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0Lmg6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpXZWJIaXRUZXN0UmVz
dWx0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjp+V2ViSGl0
VGVzdFJlc3VsdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6OmRlY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybURlY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjplbGVtZW50Qm91bmRpbmdC
b3hJbldpbmRvd0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKiBTaGFyZWQvV2ViSGl0VGVzdFJlc3Vs
dERhdGEuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1t
OiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW06
IENvcGllZCBmcm9tIFNoYXJlZC9tYWMvCisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQubW0uCisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybURlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZv
cm1EZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaXMg
bm93IFdlYkhpdFRlc3RSZXN1bHREYXRhLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29u
dGV4dE1lbnVDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6Q29udGV4dE1lbnVDbGllbnQ6On5Db250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChBUEk6OkNvbnRleHRNZW51Q2xpZW50OjpnZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUpOgorICAgICAgICAoQVBJOjpDb250ZXh0TWVudUNsaWVu
dDo6Y3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoQVBJOjpDb250ZXh0
TWVudUNsaWVudDo6Y29udGV4dE1lbnVEaXNtaXNzZWQpOgorICAgICAgICAoQVBJOjpDb250ZXh0
TWVudUNsaWVudDo6c2hvd0NvbnRleHRNZW51KToKKworICAgICAgICBXZWJIaXRUZXN0UmVzdWx0
IGlzIG5vdyBXZWJIaXRUZXN0UmVzdWx0CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNs
aWVudC5oOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21wdCk6Cisg
ICAgICAgIChBUEk6OlVJQ2xpZW50OjpzZXRTdGF0dXNUZXh0KToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50
OjpwaW5uZWRTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpkaWRCZWdp
blRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MpOgorICAgICAgICAoQVBJOjpVSUNsaWVu
dDo6ZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6
ZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0hp
dFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV0tIaXRUZXN0UmVzdWx0R2V0VHlwZUlEKToKKyAg
ICAgICAgKFdLSGl0VGVzdFJlc3VsdENvcHlBYnNvbHV0ZUltYWdlVVJMKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VDb250ZXh0
TWVudUNsaWVudCk6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlVUlDbGllbnQpOgorCisgICAgICAg
IE5ldyBXS1dlYlZpZXcgU1BJIF9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9y
SGl0VGVzdFJlc3VsdAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF9k
aWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDpjb250ZW50UHJldmVudHNEZWZhdWx0OnVz
ZXJEYXRhOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6
CisKKyAgICAgICAgUGFnZUNsaWVudCB3aWxsIGZpZ3VyZSBvdXQgd2hldGhlciB0byBjYWxsIGlu
dG8gV0tXZWJWaWV3IG9yIFdLVmlldyBmb3IgdGhpcyAKKyAgICAgICAgU1BJLgorICAgICAgICAq
IFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25D
b250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdCk6CisKKyAgICAgICAgV2ViS2l0OjpXZWJIaXRUZXN0
UmVzdWx0OjpEYXRhIGlzIG5vdyBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisKKyAgICAgICAgV0tJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIGNhbGxzIHRocm91Z2ggdG8gV2ViUGFnZVByb3h5IHdoaWNo
IGNhbGxzIHRvIAorICAgICAgICBQYWdlQ2xpZW50LCB3aGljaCBmaWd1cmVzIG91dCB3aGljaCBB
UEkgdG8gY2FsbC8KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9s
bGVyRm9ySGl0VGVzdFJlc3VsdCk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyIF91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtXSk6CisKKyAgICAgICAgV2ViSGl0VGVzdFJl
c3VsdDo6RGF0YSBpcyBub3cgV2ViSGl0VGVzdFJlc3VsdERhdGEuCisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6cGxhdGZvcm1Jbml0aWFsaXplU2hhcmVNZW51SXRlbSk6CisKKyAgICAgICAgTG90cyBvZiBj
aHVybi4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAg
ICAgICAgTmV3IG5hbWVzIGZvciB0aGluZ3MuIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgLT4gV2Vi
SGl0VGVzdFJlc3VsdERhdGEKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgor
ICAgICAgICAoV2ViS2l0Ojpwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZEJl
Z2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOgorCiAyMDE1LTEwLTA4ICBN
aWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBGb3Jt
YXQgc3RyaW5nIGlzc3VlcyBpbiBOZXR3b3JrQ2FjaGUuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmgJKHJldmlzaW9uIDE5MDY3NCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIAog
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQu
aCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogCiBuYW1lc3BhY2UgSVBDIHsK
IGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIENv
bnRleHRNZW51Q29udGV4dERhdGEoKTsKICAgICBDb250ZXh0TWVudUNvbnRleHREYXRhKGNvbnN0
IFdlYkNvcmU6OkNvbnRleHRNZW51Q29udGV4dCYpOwogICAgIAotICAgIGNvbnN0IFdlYkhpdFRl
c3RSZXN1bHQ6OkRhdGEmIHdlYkhpdFRlc3RSZXN1bHREYXRhKCkgY29uc3QgeyByZXR1cm4gbV93
ZWJIaXRUZXN0UmVzdWx0RGF0YTsgfQorICAgIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiB3
ZWJIaXRUZXN0UmVzdWx0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViSGl0VGVzdFJlc3VsdERh
dGE7IH0KICAgICBjb25zdCBTdHJpbmcmIHNlbGVjdGVkVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0ZWRUZXh0OyB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKQEAgLTcxLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVj
b2RlciYsIENvbnRleHRNZW51Q29udGV4dERhdGEmKTsKIAogcHJpdmF0ZToKLSAgICBXZWJIaXRU
ZXN0UmVzdWx0OjpEYXRhIG1fd2ViSGl0VGVzdFJlc3VsdERhdGE7CisgICAgV2ViSGl0VGVzdFJl
c3VsdERhdGEgbV93ZWJIaXRUZXN0UmVzdWx0RGF0YTsKICAgICBTdHJpbmcgbV9zZWxlY3RlZFRl
eHQ7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKLQotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0hpdFRlc3RSZXN1bHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVVJMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob2RlLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotUGFzc1JlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBXZWJIaXRU
ZXN0UmVzdWx0OjpjcmVhdGUoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJl
c3VsdERhdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJIaXRUZXN0UmVzdWx0KGhp
dFRlc3RSZXN1bHREYXRhKSk7Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoKQot
ewotfQotCi1XZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKGNvbnN0IEhpdFRlc3RSZXN1bHQm
IGhpdFRlc3RSZXN1bHQpCi0gICAgOiBhYnNvbHV0ZUltYWdlVVJMKGhpdFRlc3RSZXN1bHQuYWJz
b2x1dGVJbWFnZVVSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVQREZVUkwoaGl0VGVzdFJl
c3VsdC5hYnNvbHV0ZVBERlVSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVMaW5rVVJMKGhp
dFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZU1l
ZGlhVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpKQotICAgICwg
bGlua0xhYmVsKGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKSkKLSAgICAsIGxpbmtUaXRsZSho
aXRUZXN0UmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpKQotICAgICwgaXNDb250ZW50RWRpdGFi
bGUoaGl0VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICwgZWxlbWVudEJvdW5k
aW5nQm94KGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoaGl0VGVzdFJlc3Vs
dCkpCi0gICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0UmVzdWx0LnNjcm9sbGJhcigpKQotICAgICwg
aXNTZWxlY3RlZChoaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSkKLSAgICAsIGlzVGV4dE5vZGUo
aGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5p
c1RleHROb2RlKCkpCi0gICAgLCBpc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KGhp
dFRlc3RSZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCgpKQotICAgICwg
YWxsb3dzQ29weShoaXRUZXN0UmVzdWx0LmFsbG93c0NvcHkoKSkKLSAgICAsIGlzRG93bmxvYWRh
YmxlTWVkaWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25sb2FkYWJsZU1lZGlhKCkpCi0gICAgLCBpbWFn
ZVNpemUoMCkKLXsKLX0KLQotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YShjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBib29sIGluY2x1ZGVJbWFnZSkKLSAg
ICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3Ry
aW5nKCkpCi0gICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlUERGVVJM
KCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0
ZUxpbmtVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVzdFJlc3Vs
dC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBsaW5rTGFiZWwoaGl0VGVzdFJl
c3VsdC50ZXh0Q29udGVudCgpKQotICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQudGl0bGVE
aXNwbGF5U3RyaW5nKCkpCi0gICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVzdWx0Lmlz
Q29udGVudEVkaXRhYmxlKCkpCi0gICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudEJvdW5k
aW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKLSAgICAsIGlzU2Nyb2xs
YmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCi0gICAgLCBpc1NlbGVjdGVkKGhpdFRlc3RS
ZXN1bHQuaXNTZWxlY3RlZCgpKQotICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0LmlubmVy
Tm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKLSAgICAs
IGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5pc092ZXJU
ZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgLCBhbGxvd3NDb3B5KGhpdFRlc3RS
ZXN1bHQuYWxsb3dzQ29weSgpKQotICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRUZXN0UmVz
dWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKLSAgICAsIGltYWdlU2l6ZSgwKQotewotICAgIGlm
ICghaW5jbHVkZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoSW1hZ2UqIGltYWdl
ID0gaGl0VGVzdFJlc3VsdC5pbWFnZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciA9IGltYWdlLT5kYXRhKCk7Ci0gICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAg
ICAgIGltYWdlU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShidWZmZXItPnNp
emUoKSk7Ci0gICAgICAgICAgICBtZW1jcHkoaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSwgYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAgICAgICAgIGltYWdlU2l6ZSA9IGJ1
ZmZlci0+c2l6ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1XZWJIaXRUZXN0UmVzdWx0OjpE
YXRhOjp+RGF0YSgpCi17Ci19Ci0KLXZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZW5jb2Rl
KElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
YWJzb2x1dGVJbWFnZVVSTDsKLSAgICBlbmNvZGVyIDw8IGFic29sdXRlUERGVVJMOwotICAgIGVu
Y29kZXIgPDwgYWJzb2x1dGVMaW5rVVJMOwotICAgIGVuY29kZXIgPDwgYWJzb2x1dGVNZWRpYVVS
TDsKLSAgICBlbmNvZGVyIDw8IGxpbmtMYWJlbDsKLSAgICBlbmNvZGVyIDw8IGxpbmtUaXRsZTsK
LSAgICBlbmNvZGVyIDw8IGlzQ29udGVudEVkaXRhYmxlOwotICAgIGVuY29kZXIgPDwgZWxlbWVu
dEJvdW5kaW5nQm94OwotICAgIGVuY29kZXIgPDwgaXNTY3JvbGxiYXI7Ci0gICAgZW5jb2RlciA8
PCBpc1NlbGVjdGVkOwotICAgIGVuY29kZXIgPDwgaXNUZXh0Tm9kZTsKLSAgICBlbmNvZGVyIDw8
IGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7Ci0gICAgZW5jb2RlciA8PCBhbGxv
d3NDb3B5OwotICAgIGVuY29kZXIgPDwgaXNEb3dubG9hZGFibGVNZWRpYTsKLSAgICBlbmNvZGVy
IDw8IGxvb2t1cFRleHQ7Ci0gICAgZW5jb2RlciA8PCBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotCi0g
ICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKGltYWdlU2hhcmVk
TWVtb3J5ICYmIGltYWdlU2hhcmVkTWVtb3J5LT5kYXRhKCkpCi0gICAgICAgIGltYWdlU2hhcmVk
TWVtb3J5LT5jcmVhdGVIYW5kbGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlv
bjo6UmVhZE9ubHkpOwotICAgIGVuY29kZXIgPDwgaW1hZ2VIYW5kbGU7Ci0gICAgZW5jb2RlciA8
PCBpbWFnZVNpemU7Ci0KLSAgICBib29sIGhhc0xpbmtUZXh0SW5kaWNhdG9yID0gbGlua1RleHRJ
bmRpY2F0b3I7Ci0gICAgZW5jb2RlciA8PCBoYXNMaW5rVGV4dEluZGljYXRvcjsKLSAgICBpZiAo
aGFzTGlua1RleHRJbmRpY2F0b3IpCi0gICAgICAgIGVuY29kZXIgPDwgbGlua1RleHRJbmRpY2F0
b3ItPmRhdGEoKTsKLQotICAgIHBsYXRmb3JtRW5jb2RlKGVuY29kZXIpOwotfQotCi1ib29sIFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCi17Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZUltYWdlVVJMKQotICAg
ICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWJzb2x1dGVQREZVUkwp
Ci0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZUxp
bmtVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNv
bHV0ZU1lZGlhVVJMKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEubGlua0xhYmVsKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEubGlua1RpdGxlKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEuaXNDb250ZW50RWRpdGFibGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0
UmVzdWx0RGF0YS5lbGVtZW50Qm91bmRpbmdCb3gpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5pc1Njcm9sbGJhcikKLSAgICAgICAgfHwgIWRlY29kZXIuZGVj
b2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzU2VsZWN0ZWQpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRl
Y29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1RleHROb2RlKQotICAgICAgICB8fCAhZGVjb2Rlci5k
ZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVu
dCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFsbG93c0Nv
cHkpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc0Rvd25s
b2FkYWJsZU1lZGlhKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEubG9va3VwVGV4dCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHRE
YXRhLmRpY3Rpb25hcnlQb3B1cEluZm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBT
aGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGltYWdlSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpbWFnZUhh
bmRsZS5pc051bGwoKSkKLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaGFyZWRNZW1v
cnkgPSBTaGFyZWRNZW1vcnk6Om1hcChpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0
aW9uOjpSZWFkT25seSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHRE
YXRhLmltYWdlU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGFzTGlu
a1RleHRJbmRpY2F0b3I7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNMaW5rVGV4dEluZGlj
YXRvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChoYXNMaW5rVGV4dEluZGlj
YXRvcikgewotICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3JEYXRh
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZGljYXRvckRhdGEpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmxpbmtUZXh0SW5k
aWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRhdGEpOwot
ICAgIH0KLQotICAgIHJldHVybiBwbGF0Zm9ybURlY29kZShkZWNvZGVyLCBoaXRUZXN0UmVzdWx0
RGF0YSk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oTUFDKQotdm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhOjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLX0KLQotYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZShJUEM6
OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVz
dFJlc3VsdERhdGEpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JN
KE1BQykKLQotSW50UmVjdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbGVtZW50Qm91bmRpbmdC
b3hJbldpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQp
Ci17Ci0gICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmll
dygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICByZXR1cm4gdmlldy0+Y29udGVu
dHNUb1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7Ci19Ci0KLX0g
Ly8gV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmgJ
KHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVz
dWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgV2ViSGl0VGVzdFJlc3VsdF9oCi0jZGVmaW5lIFdlYkhpdFRlc3RSZXN1bHRfaAotCi0j
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9EaWN0aW9uYXJ5UG9wdXBJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlT3ZlcmxheS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLU9CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OwotCi1uYW1lc3Bh
Y2UgSVBDIHsKLWNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKLWNsYXNzIEFyZ3VtZW50RW5jb2RlcjsK
LX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSGl0VGVzdFJlc3VsdDsKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkZyYW1lOwotCi1jbGFzcyBXZWJIaXRUZXN0UmVz
dWx0IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SGl0VGVzdFJl
c3VsdD4gewotcHVibGljOgotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAgU3RyaW5nIGFic29s
dXRlSW1hZ2VVUkw7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZVBERlVSTDsKLSAgICAgICAgU3Ry
aW5nIGFic29sdXRlTGlua1VSTDsKLSAgICAgICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkw7Ci0g
ICAgICAgIFN0cmluZyBsaW5rTGFiZWw7Ci0gICAgICAgIFN0cmluZyBsaW5rVGl0bGU7Ci0gICAg
ICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGU7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgZWxl
bWVudEJvdW5kaW5nQm94OwotICAgICAgICBib29sIGlzU2Nyb2xsYmFyOwotICAgICAgICBib29s
IGlzU2VsZWN0ZWQ7Ci0gICAgICAgIGJvb2wgaXNUZXh0Tm9kZTsKLSAgICAgICAgYm9vbCBpc092
ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50OwotICAgICAgICBib29sIGFsbG93c0NvcHk7
Ci0gICAgICAgIGJvb2wgaXNEb3dubG9hZGFibGVNZWRpYTsKLQotICAgICAgICBTdHJpbmcgbG9v
a3VwVGV4dDsKLSAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW1hZ2VTaGFyZWRNZW1vcnk7
Ci0gICAgICAgIHVpbnQ2NF90IGltYWdlU2l6ZTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAg
ICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dDsK
LSNlbmRpZgotICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZGV0ZWN0ZWREYXRhQm91bmRpbmdC
b3g7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBkZXRlY3RlZERhdGFU
ZXh0SW5kaWNhdG9yOwotICAgICAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlJ
RCBkZXRlY3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5OwotCi0gICAgICAgIFdlYkNvcmU6
OkRpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLQotICAgICAgICBSZWZQ
dHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gbGlua1RleHRJbmRpY2F0b3I7Ci0KLSAgICAgICAg
RGF0YSgpOwotICAgICAgICBleHBsaWNpdCBEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQmKTsKLSAgICAgICAgRGF0YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgYm9vbCBp
bmNsdWRlSW1hZ2UpOwotICAgICAgICB+RGF0YSgpOwotCi0gICAgICAgIHZvaWQgZW5jb2RlKElQ
Qzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcGxhdGZvcm1FbmNvZGUo
SVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOwotICAgICAg
ICBzdGF0aWMgYm9vbCBwbGF0Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhp
dFRlc3RSZXN1bHQ6OkRhdGEmKTsKLQotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRC
b3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dCYpOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBj
cmVhdGUoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOwotCi0gICAgU3RyaW5nIGFic29s
dXRlSW1hZ2VVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVJbWFnZVVSTDsgfQot
ICAgIFN0cmluZyBhYnNvbHV0ZVBERlVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0
ZVBERlVSTDsgfQotICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkwoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuYWJzb2x1dGVMaW5rVVJMOyB9Ci0gICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkwoKSBj
b25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVNZWRpYVVSTDsgfQotCi0gICAgU3RyaW5nIGxp
bmtMYWJlbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5saW5rTGFiZWw7IH0KLSAgICBTdHJpbmcg
bGlua1RpdGxlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxpbmtUaXRsZTsgfQotICAgIFN0cmlu
ZyBsb29rdXBUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxvb2t1cFRleHQ7IH0KLQotICAg
IGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNDb250ZW50
RWRpdGFibGU7IH0KLQotICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLmVsZW1lbnRCb3VuZGluZ0JveDsgfQotCi0gICAgYm9vbCBp
c1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc1Njcm9sbGJhcjsgfQotCi0gICAg
Ym9vbCBpc1NlbGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzU2VsZWN0ZWQ7IH0KLQot
ICAgIGJvb2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc1RleHROb2RlOyB9
Ci0KLSAgICBib29sIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsgfQotCi0g
ICAgYm9vbCBhbGxvd3NDb3B5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFsbG93c0NvcHk7IH0K
LQotICAgIGJvb2wgaXNEb3dubG9hZGFibGVNZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5p
c0Rvd25sb2FkYWJsZU1lZGlhOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViSGl0VGVz
dFJlc3VsdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkK
LSAgICAgICAgOiBtX2RhdGEoaGl0VGVzdFJlc3VsdERhdGEpCi0gICAgewotICAgIH0KLQotICAg
IERhdGEgbV9kYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBX
ZWJIaXRUZXN0UmVzdWx0X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0
UmVzdWx0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhp
dFRlc3RSZXN1bHREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJIaXRU
ZXN0UmVzdWx0RGF0YS5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVz
dFJlc3VsdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9VUkwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vZGUuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJIaXRUZXN0UmVzdWx0RGF0YTo6V2ViSGl0VGVzdFJlc3VsdERhdGEo
KQoreworfQorCitXZWJIaXRUZXN0UmVzdWx0RGF0YTo6V2ViSGl0VGVzdFJlc3VsdERhdGEoY29u
c3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKKyAgICA6IGFic29sdXRl
SW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkpCisgICAg
LCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlUERGVVJMKCkuc3RyaW5nKCkp
CisgICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5z
dHJpbmcoKSkKKyAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1l
ZGlhVVJMKCkuc3RyaW5nKCkpCisgICAgLCBsaW5rTGFiZWwoaGl0VGVzdFJlc3VsdC50ZXh0Q29u
dGVudCgpKQorICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5n
KCkpCisgICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudEJvdW5kaW5nQm94SW5XaW5k
b3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKKyAgICAsIGlzU2Nyb2xsYmFyKGhpdFRlc3RS
ZXN1bHQuc2Nyb2xsYmFyKCkpCisgICAgLCBpc1NlbGVjdGVkKGhpdFRlc3RSZXN1bHQuaXNTZWxl
Y3RlZCgpKQorICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpICYmIGhp
dFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICAsIGlzT3ZlclRleHRJ
bnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5pc092ZXJUZXh0SW5zaWRlRm9y
bUNvbnRyb2xFbGVtZW50KCkpCisgICAgLCBhbGxvd3NDb3B5KGhpdFRlc3RSZXN1bHQuYWxsb3dz
Q29weSgpKQorICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRUZXN0UmVzdWx0LmlzRG93bmxv
YWRhYmxlTWVkaWEoKSkKKyAgICAsIGltYWdlU2l6ZSgwKQoreworfQorCitXZWJIaXRUZXN0UmVz
dWx0RGF0YTo6V2ViSGl0VGVzdFJlc3VsdERhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dCYgaGl0VGVzdFJlc3VsdCwgYm9vbCBpbmNsdWRlSW1hZ2UpCisgICAgOiBhYnNvbHV0ZUltYWdl
VVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpKQorICAgICwgYWJz
b2x1dGVQREZVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZVBERlVSTCgpLnN0cmluZygpKQorICAg
ICwgYWJzb2x1dGVMaW5rVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5n
KCkpCisgICAgLCBhYnNvbHV0ZU1lZGlhVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVS
TCgpLnN0cmluZygpKQorICAgICwgbGlua0xhYmVsKGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQo
KSkKKyAgICAsIGxpbmtUaXRsZShoaXRUZXN0UmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpKQor
ICAgICwgaXNDb250ZW50RWRpdGFibGUoaGl0VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgp
KQorICAgICwgZWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29v
cmRpbmF0ZXMoaGl0VGVzdFJlc3VsdCkpCisgICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0UmVzdWx0
LnNjcm9sbGJhcigpKQorICAgICwgaXNTZWxlY3RlZChoaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQo
KSkKKyAgICAsIGlzVGV4dE5vZGUoaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0
UmVzdWx0LmlubmVyTm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgLCBpc092ZXJUZXh0SW5zaWRl
Rm9ybUNvbnRyb2xFbGVtZW50KGhpdFRlc3RSZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICwgYWxsb3dzQ29weShoaXRUZXN0UmVzdWx0LmFsbG93c0NvcHko
KSkKKyAgICAsIGlzRG93bmxvYWRhYmxlTWVkaWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25sb2FkYWJs
ZU1lZGlhKCkpCisgICAgLCBpbWFnZVNpemUoMCkKK3sKKyAgICBpZiAoIWluY2x1ZGVJbWFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEltYWdlKiBpbWFnZSA9IGhpdFRlc3RSZXN1bHQu
aW1hZ2UoKSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBpbWFnZS0+
ZGF0YSgpOworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICBpbWFnZVNoYXJlZE1l
bW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjphbGxvY2F0ZShidWZmZXItPnNpemUoKSk7Cisg
ICAgICAgICAgICBtZW1jcHkoaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSwgYnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGltYWdlU2l6ZSA9IGJ1ZmZlci0+c2l6
ZSgpOworICAgICAgICB9CisgICAgfQorfQorCitXZWJIaXRUZXN0UmVzdWx0RGF0YTo6fldlYkhp
dFRlc3RSZXN1bHREYXRhKCkKK3sKK30KKwordm9pZCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6ZW5j
b2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIg
PDwgYWJzb2x1dGVJbWFnZVVSTDsKKyAgICBlbmNvZGVyIDw8IGFic29sdXRlUERGVVJMOworICAg
IGVuY29kZXIgPDwgYWJzb2x1dGVMaW5rVVJMOworICAgIGVuY29kZXIgPDwgYWJzb2x1dGVNZWRp
YVVSTDsKKyAgICBlbmNvZGVyIDw8IGxpbmtMYWJlbDsKKyAgICBlbmNvZGVyIDw8IGxpbmtUaXRs
ZTsKKyAgICBlbmNvZGVyIDw8IGlzQ29udGVudEVkaXRhYmxlOworICAgIGVuY29kZXIgPDwgZWxl
bWVudEJvdW5kaW5nQm94OworICAgIGVuY29kZXIgPDwgaXNTY3JvbGxiYXI7CisgICAgZW5jb2Rl
ciA8PCBpc1NlbGVjdGVkOworICAgIGVuY29kZXIgPDwgaXNUZXh0Tm9kZTsKKyAgICBlbmNvZGVy
IDw8IGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7CisgICAgZW5jb2RlciA8PCBh
bGxvd3NDb3B5OworICAgIGVuY29kZXIgPDwgaXNEb3dubG9hZGFibGVNZWRpYTsKKyAgICBlbmNv
ZGVyIDw8IGxvb2t1cFRleHQ7CisgICAgZW5jb2RlciA8PCBkaWN0aW9uYXJ5UG9wdXBJbmZvOwor
CisgICAgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBpZiAo
aW1hZ2VTaGFyZWRNZW1vcnkgJiYgaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSkKKyAgICAgICAg
aW1hZ2VTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSwgV2ViS2l0OjpTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBlbmNvZGVyIDw8IGltYWdlSGFu
ZGxlOworICAgIGVuY29kZXIgPDwgaW1hZ2VTaXplOworCisgICAgYm9vbCBoYXNMaW5rVGV4dElu
ZGljYXRvciA9IGxpbmtUZXh0SW5kaWNhdG9yOworICAgIGVuY29kZXIgPDwgaGFzTGlua1RleHRJ
bmRpY2F0b3I7CisgICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKQorICAgICAgICBlbmNvZGVy
IDw8IGxpbmtUZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisKKyAgICBwbGF0Zm9ybUVuY29kZShlbmNv
ZGVyKTsKK30KKworYm9vbCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERh
dGEpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0
ZUltYWdlVVJMKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEu
YWJzb2x1dGVQREZVUkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0
RGF0YS5hYnNvbHV0ZUxpbmtVUkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0
UmVzdWx0RGF0YS5hYnNvbHV0ZU1lZGlhVVJMKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
aGl0VGVzdFJlc3VsdERhdGEubGlua0xhYmVsKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
aGl0VGVzdFJlc3VsdERhdGEubGlua1RpdGxlKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
aGl0VGVzdFJlc3VsdERhdGEuaXNDb250ZW50RWRpdGFibGUpCisgICAgICAgIHx8ICFkZWNvZGVy
LmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5lbGVtZW50Qm91bmRpbmdCb3gpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1Njcm9sbGJhcikKKyAgICAgICAg
fHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzU2VsZWN0ZWQpCisgICAgICAg
IHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1RleHROb2RlKQorICAgICAg
ICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNPdmVyVGV4dEluc2lkZUZv
cm1Db250cm9sRWxlbWVudCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1
bHREYXRhLmFsbG93c0NvcHkpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVz
dWx0RGF0YS5pc0Rvd25sb2FkYWJsZU1lZGlhKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
aGl0VGVzdFJlc3VsdERhdGEubG9va3VwVGV4dCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2Rl
KGhpdFRlc3RSZXN1bHREYXRhLmRpY3Rpb25hcnlQb3B1cEluZm8pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWltYWdlSGFuZGxlLmlzTnVsbCgpKQorICAgICAgICBoaXRUZXN0UmVz
dWx0RGF0YS5pbWFnZVNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjptYXAoaW1h
Z2VIYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmltYWdlU2l6ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaGFzTGlua1RleHRJbmRpY2F0b3I7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNMaW5rVGV4dEluZGljYXRvcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChoYXNMaW5rVGV4dEluZGljYXRvcikgeworICAgICAgICBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3JEYXRhOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGluZGljYXRvckRhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmxpbmtUZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6
VGV4dEluZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRhdGEpOworICAgIH0KKworICAgIHJldHVy
biBwbGF0Zm9ybURlY29kZShkZWNvZGVyLCBoaXRUZXN0UmVzdWx0RGF0YSk7Cit9CisKKyNpZiAh
UExBVEZPUk0oTUFDKQordm9pZCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6cGxhdGZvcm1FbmNvZGUo
SVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cit9CisKK2Jvb2wgV2ViSGl0
VGVzdFJlc3VsdERhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNv
ZGVyLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykKKworSW50UmVjdCBXZWJIaXRU
ZXN0UmVzdWx0RGF0YTo6ZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhjb25z
dCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIE5vZGUqIG5v
ZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworCisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVuZGVy
ZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOworfQorCit9IC8vIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkhp
dFRlc3RSZXN1bHREYXRhX2gKKyNkZWZpbmUgV2ViSGl0VGVzdFJlc3VsdERhdGFfaAorCisjaW5j
bHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaWN0aW9uYXJ5UG9wdXBJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBv
aW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlT3ZlcmxheS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OworCituYW1lc3BhY2Ug
SVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSGl0VGVzdFJlc3VsdDsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSB7CisgICAgU3RyaW5n
IGFic29sdXRlSW1hZ2VVUkw7CisgICAgU3RyaW5nIGFic29sdXRlUERGVVJMOworICAgIFN0cmlu
ZyBhYnNvbHV0ZUxpbmtVUkw7CisgICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkw7CisgICAgU3Ry
aW5nIGxpbmtMYWJlbDsKKyAgICBTdHJpbmcgbGlua1RpdGxlOworICAgIGJvb2wgaXNDb250ZW50
RWRpdGFibGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7CisgICAg
Ym9vbCBpc1Njcm9sbGJhcjsKKyAgICBib29sIGlzU2VsZWN0ZWQ7CisgICAgYm9vbCBpc1RleHRO
b2RlOworICAgIGJvb2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKKyAgICBi
b29sIGFsbG93c0NvcHk7CisgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhOworCisgICAgU3Ry
aW5nIGxvb2t1cFRleHQ7CisgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBpbWFnZVNo
YXJlZE1lbW9yeTsKKyAgICB1aW50NjRfdCBpbWFnZVNpemU7CisKKyNpZiBQTEFURk9STShNQUMp
CisgICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4
dDsKKyNlbmRpZgorICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0Jv
eDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gZGV0ZWN0ZWREYXRhVGV4dElu
ZGljYXRvcjsKKyAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlJRCBkZXRlY3Rl
ZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5OworCisgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBv
cHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I+IGxpbmtUZXh0SW5kaWNhdG9yOworCisgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEo
KTsKKyAgICBleHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0RGF0YShjb25zdCBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0Jik7CisgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEoY29uc3QgV2ViQ29yZTo6SGl0
VGVzdFJlc3VsdCYsIGJvb2wgaW5jbHVkZUltYWdlKTsKKyAgICB+V2ViSGl0VGVzdFJlc3VsdERh
dGEoKTsKKworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdm9pZCBwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAg
IHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRlc3RSZXN1
bHREYXRhJik7CisgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBl
bGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2Vi
SGl0VGVzdFJlc3VsdERhdGFfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElI
aXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L0FQSUhpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAxOTA2NzQpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcDoxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViSGl0VGVzdFJlc3VsdC5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSGl0
VGVzdFJlc3VsdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9VUkwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vZGUuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IFdlYkhpdFRlc3RS
ZXN1bHQ6OmNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0
RGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkhpdFRlc3RSZXN1bHQoaGl0VGVz
dFJlc3VsdERhdGEpKTsKK30KKworV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSgpCit7Cit9
CisKK1dlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdCkKKyAgICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0
ZUltYWdlVVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0
LmFic29sdXRlUERGVVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVz
dFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlTWVkaWFV
UkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCisgICAgLCBsaW5r
TGFiZWwoaGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKQorICAgICwgbGlua1RpdGxlKGhpdFRl
c3RSZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkpCisgICAgLCBpc0NvbnRlbnRFZGl0YWJsZSho
aXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgLCBlbGVtZW50Qm91bmRpbmdC
b3goZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkK
KyAgICAsIGlzU2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCisgICAgLCBpc1Nl
bGVjdGVkKGhpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKQorICAgICwgaXNUZXh0Tm9kZShoaXRU
ZXN0UmVzdWx0LmlubmVyTm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4
dE5vZGUoKSkKKyAgICAsIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVz
dFJlc3VsdC5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgLCBhbGxv
d3NDb3B5KGhpdFRlc3RSZXN1bHQuYWxsb3dzQ29weSgpKQorICAgICwgaXNEb3dubG9hZGFibGVN
ZWRpYShoaXRUZXN0UmVzdWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKKyAgICAsIGltYWdlU2l6
ZSgwKQoreworfQorCitXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKGNvbnN0IFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGJvb2wgaW5jbHVkZUltYWdlKQorICAgIDog
YWJzb2x1dGVJbWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmco
KSkKKyAgICAsIGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwoKS5z
dHJpbmcoKSkKKyAgICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlu
a1VSTCgpLnN0cmluZygpKQorICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0LmFi
c29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVzdWx0
LnRleHRDb250ZW50KCkpCisgICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURpc3Bs
YXlTdHJpbmcoKSkKKyAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRpbmdC
b3hJbldpbmRvd0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQorICAgICwgaXNTY3JvbGxiYXIo
aGl0VGVzdFJlc3VsdC5zY3JvbGxiYXIoKSkKKyAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJlc3Vs
dC5pc1NlbGVjdGVkKCkpCisgICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2Rl
KCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgICwgaXNP
dmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJ
bnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJlc3Vs
dC5hbGxvd3NDb3B5KCkpCisgICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1bHQu
aXNEb3dubG9hZGFibGVNZWRpYSgpKQorICAgICwgaW1hZ2VTaXplKDApCit7CisgICAgaWYgKCFp
bmNsdWRlSW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChJbWFnZSogaW1hZ2UgPSBo
aXRUZXN0UmVzdWx0LmltYWdlKCkpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyID0gaW1hZ2UtPmRhdGEoKTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAg
aW1hZ2VTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1ZmZlci0+c2l6ZSgp
KTsKKyAgICAgICAgICAgIG1lbWNweShpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZmZXIt
PmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgICAgICAgICAgaW1hZ2VTaXplID0gYnVmZmVy
LT5zaXplKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6
On5EYXRhKCkKK3sKK30KKwordm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbmNvZGUoSVBD
OjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBhYnNv
bHV0ZUltYWdlVVJMOworICAgIGVuY29kZXIgPDwgYWJzb2x1dGVQREZVUkw7CisgICAgZW5jb2Rl
ciA8PCBhYnNvbHV0ZUxpbmtVUkw7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZU1lZGlhVVJMOwor
ICAgIGVuY29kZXIgPDwgbGlua0xhYmVsOworICAgIGVuY29kZXIgPDwgbGlua1RpdGxlOworICAg
IGVuY29kZXIgPDwgaXNDb250ZW50RWRpdGFibGU7CisgICAgZW5jb2RlciA8PCBlbGVtZW50Qm91
bmRpbmdCb3g7CisgICAgZW5jb2RlciA8PCBpc1Njcm9sbGJhcjsKKyAgICBlbmNvZGVyIDw8IGlz
U2VsZWN0ZWQ7CisgICAgZW5jb2RlciA8PCBpc1RleHROb2RlOworICAgIGVuY29kZXIgPDwgaXNP
dmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKKyAgICBlbmNvZGVyIDw8IGFsbG93c0Nv
cHk7CisgICAgZW5jb2RlciA8PCBpc0Rvd25sb2FkYWJsZU1lZGlhOworICAgIGVuY29kZXIgPDwg
bG9va3VwVGV4dDsKKyAgICBlbmNvZGVyIDw8IGRpY3Rpb25hcnlQb3B1cEluZm87CisKKyAgICBT
aGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBpZiAoaW1hZ2VTaGFyZWRNZW1v
cnkgJiYgaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSkKKyAgICAgICAgaW1hZ2VTaGFyZWRNZW1v
cnktPmNyZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBpbWFnZUhhbmRsZTsKKyAgICBlbmNvZGVyIDw8IGlt
YWdlU2l6ZTsKKworICAgIGJvb2wgaGFzTGlua1RleHRJbmRpY2F0b3IgPSBsaW5rVGV4dEluZGlj
YXRvcjsKKyAgICBlbmNvZGVyIDw8IGhhc0xpbmtUZXh0SW5kaWNhdG9yOworICAgIGlmIChoYXNM
aW5rVGV4dEluZGljYXRvcikKKyAgICAgICAgZW5jb2RlciA8PCBsaW5rVGV4dEluZGljYXRvci0+
ZGF0YSgpOworCisgICAgcGxhdGZvcm1FbmNvZGUoZW5jb2Rlcik7Cit9CisKK2Jvb2wgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKK3sKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCisgICAgICAg
IHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkKKyAg
ICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlua1VS
TCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRl
TWVkaWFVUkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5s
aW5rTGFiZWwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5s
aW5rVGl0bGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5p
c0NvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1
bHREYXRhLmVsZW1lbnRCb3VuZGluZ0JveCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhp
dFRlc3RSZXN1bHREYXRhLmlzU2Nyb2xsYmFyKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
aGl0VGVzdFJlc3VsdERhdGEuaXNTZWxlY3RlZCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2Rl
KGhpdFRlc3RSZXN1bHREYXRhLmlzVGV4dE5vZGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KQor
ICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29weSkK
KyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxvYWRh
YmxlTWVkaWEpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5s
b29rdXBUZXh0KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEu
ZGljdGlvbmFyeVBvcHVwSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1h
Z2VIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWltYWdlSGFuZGxl
LmlzTnVsbCgpKQorICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5pbWFnZVNoYXJlZE1lbW9yeSA9
IFNoYXJlZE1lbW9yeTo6bWFwKGltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246
OlJlYWRPbmx5KTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEu
aW1hZ2VTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNMaW5rVGV4
dEluZGljYXRvcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNhdG9y
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9y
KSB7CisgICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEubGlua1RleHRJbmRpY2F0
b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7CisgICAg
fQorCisgICAgcmV0dXJuIHBsYXRmb3JtRGVjb2RlKGRlY29kZXIsIGhpdFRlc3RSZXN1bHREYXRh
KTsKK30KKworI2lmICFQTEFURk9STShNQUMpCit2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6
OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
fQorCitib29sIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJn
dW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVz
dWx0RGF0YSkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oTUFD
KQorCitJbnRSZWN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1lbnRCb3VuZGluZ0JveElu
V2luZG93Q29vcmRpbmF0ZXMoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sK
KyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBGcmFtZSogZnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7
CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1Rv
V2luZG93KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKK30KKworfSAvLyBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVz
dWx0LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElI
aXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCisjaW5j
bHVkZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgogCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgpAQCAtMzIsMTc4ICszMiwxMSBA
QAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7CituYW1l
c3BhY2UgQVBJIHsKIAotUGFzc1JlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBXZWJIaXRUZXN0UmVz
dWx0OjpjcmVhdGUoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERh
dGEpCitQYXNzUmVmUHRyPEhpdFRlc3RSZXN1bHQ+IEhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShjb25z
dCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdERhdGEp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdERh
dGEpKTsKIH0KIAotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSgpCi17Ci19Ci0KLVdlYkhp
dFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3Vs
dCkKLSAgICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJM
KCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRl
UERGVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5h
YnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVz
dFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBsaW5rTGFiZWwoaGl0
VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKQotICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQu
dGl0bGVEaXNwbGF5U3RyaW5nKCkpCi0gICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVz
dWx0LmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVu
dEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKLSAgICAsIGlz
U2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCi0gICAgLCBpc1NlbGVjdGVkKGhp
dFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKQotICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0
LmlubmVyTm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkK
LSAgICAsIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5p
c092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgLCBhbGxvd3NDb3B5KGhp
dFRlc3RSZXN1bHQuYWxsb3dzQ29weSgpKQotICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRU
ZXN0UmVzdWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKLSAgICAsIGltYWdlU2l6ZSgwKQotewot
fQotCi1XZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGJvb2wgaW5jbHVkZUltYWdlKQotICAgIDogYWJzb2x1dGVJ
bWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKSkKLSAgICAs
IGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwoKS5zdHJpbmcoKSkK
LSAgICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0
cmluZygpKQotICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTWVk
aWFVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVzdWx0LnRleHRDb250
ZW50KCkpCi0gICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmco
KSkKLSAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFi
bGUoKSkKLSAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRv
d0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQotICAgICwgaXNTY3JvbGxiYXIoaGl0VGVzdFJl
c3VsdC5zY3JvbGxiYXIoKSkKLSAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJlc3VsdC5pc1NlbGVj
dGVkKCkpCi0gICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgaGl0
VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICwgaXNPdmVyVGV4dElu
c2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3Jt
Q29udHJvbEVsZW1lbnQoKSkKLSAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJlc3VsdC5hbGxvd3ND
b3B5KCkpCi0gICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1bHQuaXNEb3dubG9h
ZGFibGVNZWRpYSgpKQotICAgICwgaW1hZ2VTaXplKDApCi17Ci0gICAgaWYgKCFpbmNsdWRlSW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChJbWFnZSogaW1hZ2UgPSBoaXRUZXN0UmVz
dWx0LmltYWdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaW1h
Z2UtPmRhdGEoKTsKLSAgICAgICAgaWYgKGJ1ZmZlcikgewotICAgICAgICAgICAgaW1hZ2VTaGFy
ZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAg
ICAgICAgIG1lbWNweShpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwg
YnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgaW1hZ2VTaXplID0gYnVmZmVyLT5zaXplKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6On5EYXRhKCkK
LXsKLX0KLQotdm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZUltYWdl
VVJMOwotICAgIGVuY29kZXIgPDwgYWJzb2x1dGVQREZVUkw7Ci0gICAgZW5jb2RlciA8PCBhYnNv
bHV0ZUxpbmtVUkw7Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZU1lZGlhVVJMOwotICAgIGVuY29k
ZXIgPDwgbGlua0xhYmVsOwotICAgIGVuY29kZXIgPDwgbGlua1RpdGxlOwotICAgIGVuY29kZXIg
PDwgaXNDb250ZW50RWRpdGFibGU7Ci0gICAgZW5jb2RlciA8PCBlbGVtZW50Qm91bmRpbmdCb3g7
Ci0gICAgZW5jb2RlciA8PCBpc1Njcm9sbGJhcjsKLSAgICBlbmNvZGVyIDw8IGlzU2VsZWN0ZWQ7
Ci0gICAgZW5jb2RlciA8PCBpc1RleHROb2RlOwotICAgIGVuY29kZXIgPDwgaXNPdmVyVGV4dElu
c2lkZUZvcm1Db250cm9sRWxlbWVudDsKLSAgICBlbmNvZGVyIDw8IGFsbG93c0NvcHk7Ci0gICAg
ZW5jb2RlciA8PCBpc0Rvd25sb2FkYWJsZU1lZGlhOwotICAgIGVuY29kZXIgPDwgbG9va3VwVGV4
dDsKLSAgICBlbmNvZGVyIDw8IGRpY3Rpb25hcnlQb3B1cEluZm87Ci0KLSAgICBTaGFyZWRNZW1v
cnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBpZiAoaW1hZ2VTaGFyZWRNZW1vcnkgJiYgaW1h
Z2VTaGFyZWRNZW1vcnktPmRhdGEoKSkKLSAgICAgICAgaW1hZ2VTaGFyZWRNZW1vcnktPmNyZWF0
ZUhhbmRsZShpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7
Ci0gICAgZW5jb2RlciA8PCBpbWFnZUhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IGltYWdlU2l6ZTsK
LQotICAgIGJvb2wgaGFzTGlua1RleHRJbmRpY2F0b3IgPSBsaW5rVGV4dEluZGljYXRvcjsKLSAg
ICBlbmNvZGVyIDw8IGhhc0xpbmtUZXh0SW5kaWNhdG9yOwotICAgIGlmIChoYXNMaW5rVGV4dElu
ZGljYXRvcikKLSAgICAgICAgZW5jb2RlciA8PCBsaW5rVGV4dEluZGljYXRvci0+ZGF0YSgpOwot
Ci0gICAgcGxhdGZvcm1FbmNvZGUoZW5jb2Rlcik7Ci19Ci0KLWJvb2wgV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0
UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCi0gICAgICAgIHx8ICFkZWNv
ZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkKLSAgICAgICAgfHwg
IWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlua1VSTCkKLSAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTWVkaWFVUkwp
Ci0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rTGFiZWwp
Ci0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rVGl0bGUp
Ci0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc0NvbnRlbnRF
ZGl0YWJsZSkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmVs
ZW1lbnRCb3VuZGluZ0JveCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1
bHREYXRhLmlzU2Nyb2xsYmFyKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEuaXNTZWxlY3RlZCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmlzVGV4dE5vZGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0
UmVzdWx0RGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KQotICAgICAgICB8
fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29weSkKLSAgICAgICAg
fHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxvYWRhYmxlTWVkaWEp
Ci0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5sb29rdXBUZXh0
KQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZGljdGlvbmFy
eVBvcHVwSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNoYXJlZE1lbW9yeTo6
SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VIYW5kbGUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWltYWdlSGFuZGxlLmlzTnVsbCgp
KQotICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5pbWFnZVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1l
bW9yeTo6bWFwKGltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5
KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXNMaW5rVGV4dEluZGljYXRv
cjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7Ci0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEubGlua1RleHRJbmRpY2F0b3IgPSBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHBsYXRmb3JtRGVjb2RlKGRlY29kZXIsIGhpdFRlc3RSZXN1bHREYXRhKTsKLX0KLQot
I2lmICFQTEFURk9STShNQUMpCi12b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3Jt
RW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotfQotCi1ib29s
IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQotCi1JbnRS
ZWN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29v
cmRpbmF0ZXMoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKLXsKLSAgICBOb2Rl
KiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBub2Rl
LT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYg
KCF2aWV3KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLQotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJl
bmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKLX0KLQotfSAvLyBXZWJLaXQKK30g
Ly8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRU
ZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElI
aXRUZXN0UmVzdWx0LmgJKHJldmlzaW9uIDE5MDY3NCkJKGZyb20gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkhpdFRlc3RSZXN1bHQuaDoxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJL0FQSUhpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJIaXRUZXN0UmVzdWx0X2gKKyNkZWZpbmUgV2ViSGl0
VGVzdFJlc3VsdF9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3Rpb25hcnlQb3B1cEluZm8uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworT0JKQ19DTEFTUyBEREFjdGlvbkNv
bnRleHQ7CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3Mg
QXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIaXRUZXN0
UmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRnJhbWU7CisKK2Ns
YXNzIFdlYkhpdFRlc3RSZXN1bHQgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0
OjpUeXBlOjpIaXRUZXN0UmVzdWx0PiB7CitwdWJsaWM6CisgICAgc3RydWN0IERhdGEgeworICAg
ICAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTDsKKyAgICAgICAgU3RyaW5nIGFic29sdXRlUERG
VVJMOworICAgICAgICBTdHJpbmcgYWJzb2x1dGVMaW5rVVJMOworICAgICAgICBTdHJpbmcgYWJz
b2x1dGVNZWRpYVVSTDsKKyAgICAgICAgU3RyaW5nIGxpbmtMYWJlbDsKKyAgICAgICAgU3RyaW5n
IGxpbmtUaXRsZTsKKyAgICAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7CisgICAgICAgIGJvb2wgaXNTY3JvbGxi
YXI7CisgICAgICAgIGJvb2wgaXNTZWxlY3RlZDsKKyAgICAgICAgYm9vbCBpc1RleHROb2RlOwor
ICAgICAgICBib29sIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7CisgICAgICAg
IGJvb2wgYWxsb3dzQ29weTsKKyAgICAgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhOworCisg
ICAgICAgIFN0cmluZyBsb29rdXBUZXh0OworICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBp
bWFnZVNoYXJlZE1lbW9yeTsKKyAgICAgICAgdWludDY0X3QgaW1hZ2VTaXplOworCisjaWYgUExB
VEZPUk0oTUFDKQorICAgICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RlZERh
dGFBY3Rpb25Db250ZXh0OworI2VuZGlmCisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveDsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0
b3I+IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7CisgICAgICAgIFdlYkNvcmU6OlBhZ2VPdmVy
bGF5OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7CisK
KyAgICAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZv
OworCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBsaW5rVGV4dEluZGlj
YXRvcjsKKworICAgICAgICBEYXRhKCk7CisgICAgICAgIGV4cGxpY2l0IERhdGEoY29uc3QgV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdCYpOworICAgICAgICBEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmLCBib29sIGluY2x1ZGVJbWFnZSk7CisgICAgICAgIH5EYXRhKCk7CisKKyAgICAg
ICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJik7CisgICAgICAgIHN0YXRpYyBib29sIHBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOworCisgICAgICAgIFdlYkNvcmU6
OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0Jik7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkhpdFRlc3RSZXN1bHQ+IGNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7CisK
KyAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNv
bHV0ZUltYWdlVVJMOyB9CisgICAgU3RyaW5nIGFic29sdXRlUERGVVJMKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmFic29sdXRlUERGVVJMOyB9CisgICAgU3RyaW5nIGFic29sdXRlTGlua1VSTCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUxpbmtVUkw7IH0KKyAgICBTdHJpbmcgYWJz
b2x1dGVNZWRpYVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZU1lZGlhVVJMOyB9
CisKKyAgICBTdHJpbmcgbGlua0xhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxpbmtMYWJl
bDsgfQorICAgIFN0cmluZyBsaW5rVGl0bGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubGlua1Rp
dGxlOyB9CisgICAgU3RyaW5nIGxvb2t1cFRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubG9v
a3VwVGV4dDsgfQorCisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5pc0NvbnRlbnRFZGl0YWJsZTsgfQorCisgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVt
ZW50Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZWxlbWVudEJvdW5kaW5nQm94
OyB9CisKKyAgICBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzU2Ny
b2xsYmFyOyB9CisKKyAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
aXNTZWxlY3RlZDsgfQorCisgICAgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmlzVGV4dE5vZGU7IH0KKworICAgIGJvb2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9s
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRy
b2xFbGVtZW50OyB9CisKKyAgICBib29sIGFsbG93c0NvcHkoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEuYWxsb3dzQ29weTsgfQorCisgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmlzRG93bmxvYWRhYmxlTWVkaWE7IH0KKworcHJpdmF0ZToKKyAgICBl
eHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhp
dFRlc3RSZXN1bHREYXRhKQorICAgICAgICA6IG1fZGF0YShoaXRUZXN0UmVzdWx0RGF0YSkKKyAg
ICB7CisgICAgfQorCisgICAgRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYkhpdFRlc3RSZXN1bHRfaApJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNywxMSArMTcsMTIgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAK
LSNpZm5kZWYgV2ViSGl0VGVzdFJlc3VsdF9oCi0jZGVmaW5lIFdlYkhpdFRlc3RSZXN1bHRfaAor
I2lmbmRlZiBBUElIaXRUZXN0UmVzdWx0X2gKKyNkZWZpbmUgQVBJSGl0VGVzdFJlc3VsdF9oCiAK
ICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNs
dWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGljdGlvbmFy
eVBvcHVwSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSW50UmVjdC5oPgpAQCAtNDIsNjYgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNw
YWNlIEFQSSB7CiAKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBXZWJIaXRUZXN0UmVzdWx0IDog
cHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SGl0VGVzdFJlc3VsdD4g
eworY2xhc3MgSGl0VGVzdFJlc3VsdCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OkhpdFRlc3RSZXN1bHQ+IHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgRGF0YSB7Ci0g
ICAgICAgIFN0cmluZyBhYnNvbHV0ZUltYWdlVVJMOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVQ
REZVUkw7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkw7Ci0gICAgICAgIFN0cmluZyBh
YnNvbHV0ZU1lZGlhVVJMOwotICAgICAgICBTdHJpbmcgbGlua0xhYmVsOwotICAgICAgICBTdHJp
bmcgbGlua1RpdGxlOwotICAgICAgICBib29sIGlzQ29udGVudEVkaXRhYmxlOwotICAgICAgICBX
ZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRCb3VuZGluZ0JveDsKLSAgICAgICAgYm9vbCBpc1Njcm9s
bGJhcjsKLSAgICAgICAgYm9vbCBpc1NlbGVjdGVkOwotICAgICAgICBib29sIGlzVGV4dE5vZGU7
Ci0gICAgICAgIGJvb2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKLSAgICAg
ICAgYm9vbCBhbGxvd3NDb3B5OwotICAgICAgICBib29sIGlzRG93bmxvYWRhYmxlTWVkaWE7Ci0K
LSAgICAgICAgU3RyaW5nIGxvb2t1cFRleHQ7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IGltYWdlU2hhcmVkTWVtb3J5OwotICAgICAgICB1aW50NjRfdCBpbWFnZVNpemU7Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdGVk
RGF0YUFjdGlvbkNvbnRleHQ7Ci0jZW5kaWYKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGlj
YXRvcj4gZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcjsKLSAgICAgICAgV2ViQ29yZTo6UGFnZU92
ZXJsYXk6OlBhZ2VPdmVybGF5SUQgZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQYWdlT3ZlcmxheTsK
LQotICAgICAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cElu
Zm87Ci0KLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+IGxpbmtUZXh0SW5k
aWNhdG9yOwotCi0gICAgICAgIERhdGEoKTsKLSAgICAgICAgZXhwbGljaXQgRGF0YShjb25zdCBX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIERhdGEoY29uc3QgV2ViQ29yZTo6SGl0
VGVzdFJlc3VsdCYsIGJvb2wgaW5jbHVkZUltYWdlKTsKLSAgICAgICAgfkRhdGEoKTsKLQotICAg
ICAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwotICAgICAgICB2
b2lkIHBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgICAg
IHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGEmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1
bWVudERlY29kZXImLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0KLSAgICAgICAgV2ViQ29y
ZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
V2ViSGl0VGVzdFJlc3VsdD4gY3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKTsK
LQotICAgIFN0cmluZyBhYnNvbHV0ZUltYWdlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFi
c29sdXRlSW1hZ2VVUkw7IH0KLSAgICBTdHJpbmcgYWJzb2x1dGVQREZVUkwoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuYWJzb2x1dGVQREZVUkw7IH0KLSAgICBTdHJpbmcgYWJzb2x1dGVMaW5rVVJM
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlTGlua1VSTDsgfQotICAgIFN0cmluZyBh
YnNvbHV0ZU1lZGlhVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlTWVkaWFVUkw7
IH0KLQotICAgIFN0cmluZyBsaW5rTGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubGlua0xh
YmVsOyB9Ci0gICAgU3RyaW5nIGxpbmtUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5saW5r
VGl0bGU7IH0KLSAgICBTdHJpbmcgbG9va3VwVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5s
b29rdXBUZXh0OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SGl0VGVzdFJlc3VsdD4gY3JlYXRl
KGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmKTsKKworICAgIFdURjo6U3RyaW5n
IGFic29sdXRlSW1hZ2VVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVJbWFnZVVS
TDsgfQorICAgIFdURjo6U3RyaW5nIGFic29sdXRlUERGVVJMKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmFic29sdXRlUERGVVJMOyB9CisgICAgV1RGOjpTdHJpbmcgYWJzb2x1dGVMaW5rVVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlTGlua1VSTDsgfQorICAgIFdURjo6U3RyaW5n
IGFic29sdXRlTWVkaWFVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVNZWRpYVVS
TDsgfQorCisgICAgV1RGOjpTdHJpbmcgbGlua0xhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
LmxpbmtMYWJlbDsgfQorICAgIFdURjo6U3RyaW5nIGxpbmtUaXRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5saW5rVGl0bGU7IH0KKyAgICBXVEY6OlN0cmluZyBsb29rdXBUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmxvb2t1cFRleHQ7IH0KIAogICAgIGJvb2wgaXNDb250ZW50RWRpdGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNDb250ZW50RWRpdGFibGU7IH0KIApAQCAtMTIw
LDE0ICs3NywxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLmlzRG93bmxvYWRhYmxlTWVkaWE7IH0KIAogcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEm
IGhpdFRlc3RSZXN1bHREYXRhKQorICAgIGV4cGxpY2l0IEhpdFRlc3RSZXN1bHQoY29uc3QgV2Vi
S2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCiAgICAgICAgIDog
bV9kYXRhKGhpdFRlc3RSZXN1bHREYXRhKQogICAgIHsKICAgICB9CiAKLSAgICBEYXRhIG1fZGF0
YTsKKyAgICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIG1fZGF0YTsKIH07CiAKLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQVBJCiAKLSNlbmRpZiAvLyBXZWJIaXRU
ZXN0UmVzdWx0X2gKKyNlbmRpZiAvLyBBUElIaXRUZXN0UmVzdWx0X2gKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVz
dWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitXS19DTEFTU19BVkFJTEFCTEUoV0tfTUFD
X1RCQSwgTkEpCitAaW50ZXJmYWNlIF9XS0hpdFRlc3RSZXN1bHQgOiBOU09iamVjdCA8TlNDb3B5
aW5nPgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICphYnNv
bHV0ZUltYWdlVVJMOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VS
TCAqYWJzb2x1dGVQREZVUkw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkp
IE5TVVJMICphYnNvbHV0ZUxpbmtVUkw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHks
IGNvcHkpIE5TVVJMICphYnNvbHV0ZU1lZGlhVVJMOworCitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpsaW5rTGFiZWw7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpsaW5rVGl0bGU7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpsb29rdXBUZXh0OworCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc0NvbnRlbnRFZGl0YWJsZSkgQk9PTCBjb250
ZW50RWRpdGFibGU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNSZWN0IGVs
ZW1lbnRCb3VuZGluZ0JveDsKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0hpdFRlc3RS
ZXN1bHQubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29h
L19XS0hpdFRlc3RSZXN1bHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLSGl0VGVzdFJlc3VsdElu
dGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50YXRpb24gX1dLSGl0
VGVzdFJlc3VsdAorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfaGl0VGVzdFJlc3VsdC0+fkhp
dFRlc3RSZXN1bHQoKTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNVUkwgKilh
YnNvbHV0ZUltYWdlVVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9oaXRU
ZXN0UmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJMKCldOworfQorCistIChOU1VSTCAqKWFic29sdXRl
UERGVVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9oaXRUZXN0UmVzdWx0
LT5hYnNvbHV0ZVBERlVSTCgpXTsKK30KKworLSAoTlNVUkwgKilhYnNvbHV0ZUxpbmtVUkwKK3sK
KyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6X2hpdFRlc3RSZXN1bHQtPmFic29sdXRl
TGlua1VSTCgpXTsKK30KKworLSAoTlNVUkwgKilhYnNvbHV0ZU1lZGlhVVJMCit7CisgICAgcmV0
dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9oaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZU1lZGlhVVJM
KCldOworfQorCistIChOU1N0cmluZyAqKWxpbmtMYWJlbAoreworICAgIHJldHVybiBfaGl0VGVz
dFJlc3VsdC0+bGlua0xhYmVsKCk7Cit9CisKKy0gKE5TU3RyaW5nICopbGlua1RpdGxlCit7Cisg
ICAgcmV0dXJuIF9oaXRUZXN0UmVzdWx0LT5saW5rVGl0bGUoKTsKK30KKworLSAoTlNTdHJpbmcg
Kilsb29rdXBUZXh0Cit7CisgICAgcmV0dXJuIF9oaXRUZXN0UmVzdWx0LT5sb29rdXBUZXh0KCk7
Cit9CisKKy0gKEJPT0wpaXNDb250ZW50RWRpdGFibGUKK3sKKyAgICByZXR1cm4gX2hpdFRlc3RS
ZXN1bHQtPmlzQ29udGVudEVkaXRhYmxlKCk7Cit9CisKKy0gKE5TUmVjdCllbGVtZW50Qm91bmRp
bmdCb3gKK3sKKyAgICByZXR1cm4gX2hpdFRlc3RSZXN1bHQtPmVsZW1lbnRCb3VuZGluZ0JveCgp
OworfQorCistIChpZCljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUKK3sKKyAgICByZXR1cm4g
W3NlbGYgcmV0YWluXTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxl
bWVudGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuICpf
aGl0VGVzdFJlc3VsdDsKK30KKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0SW50ZXJu
YWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dL
SGl0VGVzdFJlc3VsdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHQuaCIKKworI2lmIFdLX0FQSV9F
TkFCTEVECisKKyNpbXBvcnQgIkFQSUhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIldLT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBBUEkgeworCitpbmxpbmUgX1dLSGl0VGVzdFJlc3VsdCAqd3JhcHBl
cihBUEk6OkhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAgQVNTRVJUKFtoaXRU
ZXN0UmVzdWx0LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tIaXRUZXN0UmVzdWx0IGNsYXNz
XV0pOworCisgICAgcmV0dXJuIChfV0tIaXRUZXN0UmVzdWx0ICopaGl0VGVzdFJlc3VsdC53cmFw
cGVyKCk7Cit9CisKK30KKworQGludGVyZmFjZSBfV0tIaXRUZXN0UmVzdWx0ICgpIDxXS09iamVj
dD4geworQHBhY2thZ2UKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpIaXRUZXN0UmVzdWx0
PiBfaGl0VGVzdFJlc3VsdDsKK30KK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0ZUFjdGlvblR5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSW1t
ZWRpYXRlQWN0aW9uVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBXS19BUElfRU5B
QkxFRAorCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBl
cykgeworICAgIF9XS0ltbWVkaWF0ZUFjdGlvbk5vbmUsCisgICAgX1dLSW1tZWRpYXRlQWN0aW9u
TGlua1ByZXZpZXcsCisgICAgX1dLSW1tZWRpYXRlQWN0aW9uRGF0YURldGVjdGVkSXRlbSwKKyAg
ICBfV0tJbW1lZGlhdGVBY3Rpb25Mb29rdXBUZXh0LAorICAgIF9XS0ltbWVkaWF0ZUFjdGlvbk1h
aWx0b0xpbmssCisgICAgX1dLSW1tZWRpYXRlQWN0aW9uVGVsTGluaworfSBXS19BVkFJTEFCTEUo
V0tfTUFDX1RCQSwgTkEpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b2NvYS9BUElPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
Y29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL0NvY29hL0FQSU9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAog
I2ltcG9ydCAiV0tXaW5kb3dGZWF0dXJlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tEb3dubG9h
ZEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgiCisjaW1wb3J0
ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIK
QEAgLTE1NCw2ICsxNTUsMTAgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6ZV90IHNpemUs
IFR5cAogICAgICAgICB3cmFwcGVyID0gW1dLRnJhbWVJbmZvIGFsbG9jXTsKICAgICAgICAgYnJl
YWs7CiAKKyAgICBjYXNlIFR5cGU6OkhpdFRlc3RSZXN1bHQ6CisgICAgICAgIHdyYXBwZXIgPSBb
X1dLSGl0VGVzdFJlc3VsdCBhbGxvY107CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBUeXBl
OjpOYXZpZ2F0aW9uOgogICAgICAgICB3cmFwcGVyID0gW1dLTmF2aWdhdGlvbiBhbGxvY107CiAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0
UmVzdWx0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0
VGVzdFJlc3VsdC5tbQkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJIaXRUZXN0UmVz
dWx0LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0Yu
aCIKLSNpbXBvcnQgIkFyZ3VtZW50RGVjb2Rlci5oIgotI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVy
LmgiCi0jaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgPFdlYkNvcmUv
RGF0YURldGVjdG9yc1NQSS5oPgotI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRm
b3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGJv
b2wgaGFzQWN0aW9uQ29udGV4dCA9IGRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQ7Ci0gICAgZW5j
b2RlciA8PCBoYXNBY3Rpb25Db250ZXh0OwotICAgIGlmICghaGFzQWN0aW9uQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURhdGE+IGRhdGEgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF0pOwotICAgIFJldGFpblB0cjxOU0tleWVk
QXJjaGl2ZXI+IGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNoaXZlciBhbGxvY10gaW5p
dEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0pOwotICAgIFthcmNoaXZlciBz
ZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNdOwotICAgIFthcmNoaXZlciBlbmNvZGVPYmplY3Q6
ZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dC5nZXQoKSBmb3JLZXk6QCJhY3Rpb25Db250ZXh0Il07
Ci0gICAgW2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKLQotICAgIElQQzo6ZW5jb2RlKGVuY29k
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhLmdldCgpKSk7Ci0KLSAgICBlbmNv
ZGVyIDw8IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgIGVuY29kZXIgPDwgZGV0ZWN0ZWRE
YXRhT3JpZ2luYXRpbmdQYWdlT3ZlcmxheTsKLQotICAgIGJvb2wgaGFzRGV0ZWN0ZWREYXRhVGV4
dEluZGljYXRvciA9IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7Ci0gICAgZW5jb2RlciA8PCBo
YXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOwotICAgIGlmIChoYXNEZXRlY3RlZERhdGFUZXh0
SW5kaWNhdG9yKQotICAgICAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3It
PmRhdGEoKTsKLX0KLQotYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYg
aGl0VGVzdFJlc3VsdERhdGEpCi17Ci0gICAgYm9vbCBoYXNBY3Rpb25Db250ZXh0OwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzQWN0aW9uQ29udGV4dCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghaGFzQWN0aW9uQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVj
b2RlciwgZGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxOU0tl
eWVkVW5hcmNoaXZlcj4gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBh
bGxvY10gaW5pdEZvclJlYWRpbmdXaXRoRGF0YTooTlNEYXRhICopZGF0YS5nZXQoKV0pOwotICAg
IFt1bmFyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107Ci0gICAgQHRyeSB7Ci0g
ICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBbdW5h
cmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzOmdldEREQWN0aW9uQ29udGV4dENsYXNzKCkgZm9y
S2V5OkAiYWN0aW9uQ29udGV4dCJdOwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0
aW9uKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBEREFjdGlvbkNvbnRl
eHQ6ICVAIiwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhpdFRlc3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YUJvdW5kaW5nQm94KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5kZXRlY3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYm9vbCBoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEuZGV0ZWN0ZWREYXRhVGV4dEluZGlj
YXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZShpbmRpY2F0b3JEYXRhKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dl
YkhpdFRlc3RSZXN1bHREYXRhLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW0JKHJldmlzaW9uIDE5MDY3NCkJKGZyb20gU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1tOjE5MDY3NCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHQuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2lt
cG9ydCAiQXJndW1lbnRDb2RlcnNDRi5oIgorI2ltcG9ydCAiQXJndW1lbnREZWNvZGVyLmgiCisj
aW1wb3J0ICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgorI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0b3JzU1BJLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1RleHRJbmRpY2F0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgYm9vbCBoYXNBY3Rpb25Db250ZXh0ID0gZGV0ZWN0ZWREYXRh
QWN0aW9uQ29udGV4dDsKKyAgICBlbmNvZGVyIDw8IGhhc0FjdGlvbkNvbnRleHQ7CisgICAgaWYg
KCFoYXNBY3Rpb25Db250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0XSk7
CisgICAgUmV0YWluUHRyPE5TS2V5ZWRBcmNoaXZlcj4gYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNL
ZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yV3JpdGluZ1dpdGhNdXRhYmxlRGF0YTpkYXRhLmdl
dCgpXSk7CisgICAgW2FyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisgICAg
W2FyY2hpdmVyIGVuY29kZU9iamVjdDpkZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0LmdldCgpIGZv
cktleTpAImFjdGlvbkNvbnRleHQiXTsKKyAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOwor
CisgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KGRh
dGEuZ2V0KCkpKTsKKworICAgIGVuY29kZXIgPDwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7Cisg
ICAgZW5jb2RlciA8PCBkZXRlY3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5OworCisgICAg
Ym9vbCBoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gZGV0ZWN0ZWREYXRhVGV4dEluZGlj
YXRvcjsKKyAgICBlbmNvZGVyIDw8IGhhc0RldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7CisgICAg
aWYgKGhhc0RldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IpCisgICAgICAgIGVuY29kZXIgPDwgZGV0
ZWN0ZWREYXRhVGV4dEluZGljYXRvci0+ZGF0YSgpOworfQorCitib29sIFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKK3sKKyAgICBib29sIGhh
c0FjdGlvbkNvbnRleHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNBY3Rpb25Db250ZXh0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFoYXNBY3Rpb25Db250ZXh0KQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Cisg
ICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmV0YWluUHRyPE5TS2V5ZWRVbmFyY2hpdmVyPiB1bmFyY2hpdmVyID0gYWRvcHRO
UyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ1dpdGhEYXRhOihOU0Rh
dGEgKilkYXRhLmdldCgpXSk7CisgICAgW3VuYXJjaGl2ZXIgc2V0UmVxdWlyZXNTZWN1cmVDb2Rp
bmc6WUVTXTsKKyAgICBAdHJ5IHsKKyAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEuZGV0ZWN0ZWRE
YXRhQWN0aW9uQ29udGV4dCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3M6Z2V0RERB
Y3Rpb25Db250ZXh0Q2xhc3MoKSBmb3JLZXk6QCJhY3Rpb25Db250ZXh0Il07CisgICAgfSBAY2F0
Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gZGVjb2RlIEREQWN0aW9uQ29udGV4dDogJUAiLCBleGNlcHRpb24pOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFt1bmFyY2hpdmVyIGZpbmlzaERlY29kaW5nXTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3gpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJs
YXkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhc0RldGVjdGVkRGF0YVRl
eHRJbmRpY2F0b3I7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNEZXRlY3RlZERhdGFUZXh0
SW5kaWNhdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhhc0RldGVjdGVk
RGF0YVRleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEg
aW5kaWNhdG9yRGF0YTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmRpY2F0b3JEYXRh
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBoaXRUZXN0UmVzdWx0RGF0
YS5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3Jl
YXRlKGluZGljYXRvckRhdGEpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0RGF0YS5tbQkod29y
a2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0
RGF0YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiV2ViSGl0
VGVzdFJlc3VsdERhdGEuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykKIApAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpw
bGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3ZvaWQg
V2ViSGl0VGVzdFJlc3VsdERhdGE6OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewogICAgIGJvb2wgaGFzQWN0aW9uQ29udGV4dCA9IGRldGVjdGVk
RGF0YUFjdGlvbkNvbnRleHQ7CiAgICAgZW5jb2RlciA8PCBoYXNBY3Rpb25Db250ZXh0OwpAQCAt
NjEsNyArNjEsNyBAQCB2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jCiAg
ICAgICAgIGVuY29kZXIgPDwgZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvci0+ZGF0YSgpOwogfQog
Ci1ib29sIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0
RGF0YSkKK2Jvb2wgV2ViSGl0VGVzdFJlc3VsdERhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJn
dW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3Vs
dERhdGEpCiB7CiAgICAgYm9vbCBoYXNBY3Rpb25Db250ZXh0OwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGFzQWN0aW9uQ29udGV4dCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdl
Q2xpZW50LmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw3ICszMzEsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUJhY2tncm91bmRDb2xvcigpID0gMDsKIAogI2lmIFBM
QVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhp
dFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRz
RGVmYXVsdCwgQVBJOjpPYmplY3QqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1J
bW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiwgYm9vbCBj
b250ZW50UHJldmVudHNEZWZhdWx0LCBBUEk6Ok9iamVjdCopID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCogaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQo
UmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4sIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUsIFJlZlB0
cjxBUEk6Ok9iamVjdD4pID0gMDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkFQSUZyYW1lSW5mby5oIgogI2luY2x1ZGUgIkFQSUdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiQVBJSGlzdG9yeUNsaWVudC5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJBUElMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudC5oIgogI2luY2x1
ZGUgIkFQSUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKQEAgLTM1
NjQsMTYgKzM1NjUsMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFN0YXR1c1RleHQoY29uc3Qg
UwogICAgIG1fdWlDbGllbnQtPnNldFN0YXR1c1RleHQodGhpcywgdGV4dCk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3Qgb3BhcXVlTW9kaWZpZXJzLCBj
b25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1bHREYXRh
LCB1aW50MzJfdCBvcGFxdWVNb2RpZmllcnMsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKIHsK
LSAgICBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0ID0gV2ViSGl0VGVzdFJlc3VsdDo6Y3Jl
YXRlKGhpdFRlc3RSZXN1bHREYXRhKTsKKyAgICBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0
ID0gQVBJOjpIaXRUZXN0UmVzdWx0OjpjcmVhdGUoaGl0VGVzdFJlc3VsdERhdGEpOwogCiAgICAg
V2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9k
aWZpZXJzPihvcGFxdWVNb2RpZmllcnMpOwogCiAgICAgbV91aUNsaWVudC0+bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQodGhpcywgaGl0VGVzdFJlc3VsdERhdGEsIG1vZGlmaWVycywgbV9wcm9jZXNz
LT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNl
UHJlc3MoY29uc3QgSW50UG9pbnQmIG1vdXNlRG93blBvc2l0aW9uLCBjb25zdCBXZWJIaXRUZXN0
UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRh
KQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQ
cmVzcyhjb25zdCBJbnRQb2ludCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IFdlYkhpdFRlc3RS
ZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQog
ewogICAgIG1fdWlDbGllbnQtPmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVz
cyh0aGlzLCBtb3VzZURvd25Qb3NpdGlvbiwgaGl0VGVzdFJlc3VsdERhdGEsIG1fcHJvY2Vzcy0+
dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogfQpA
QCAtNTk4MywxMSArNTk4NCwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW1tZWRpYXRlQWN0aW9u
RGlkQ29tCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVB
Y3Rpb25EaWRDb21wbGV0ZSgpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhJiByZXN1bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgY29uc3QgVXNlckRhdGEm
IHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25I
aXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1bHQsIGJvb2wgY29udGVudFBy
ZXZlbnRzRGVmYXVsdCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogewogICAgIG1fcGFnZUNs
aWVudC5kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChyZXN1bHQsIGNvbnRlbnRQcmV2
ZW50c0RlZmF1bHQsIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0
YS5vYmplY3QoKSkuZ2V0KCkpOwogfQogCit2b2lkKiBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KFJlZlB0cjxBUEk6OkhpdFRl
c3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQsIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUgdHlwZSwgUmVm
UHRyPEFQSTo6T2JqZWN0PiB1c2VyRGF0YSkKK3sKKyAgICByZXR1cm4gbV9wYWdlQ2xpZW50Lmlt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KGhpdFRlc3RS
ZXN1bHQsIHR5cGUsIHVzZXJEYXRhKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6Omluc3RhbGxW
aWV3U3RhdGVDaGFuZ2VDb21wbGV0aW9uSGFuZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIp
KCkpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAog
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkZpbmRDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV0tJbW1lZGlhdGVB
Y3Rpb25UeXBlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNp
bmNsdWRlICJXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJXZWJQ
YWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCIKQEAgLTEwMTUsMTMgKzEwMTYsMTUgQEAgcHVibGlj
OgogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25h
cHNob3QoKTsKIAotICAgIFdlYkhpdFRlc3RSZXN1bHQqIGxhc3RNb3VzZU1vdmVIaXRUZXN0UmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdC5nZXQoKTsg
fQorICAgIEFQSTo6SGl0VGVzdFJlc3VsdCogbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0LmdldCgpOyB9CiAgICAg
dm9pZCBwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCk7CiAKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpOwogICAgIHZv
aWQgaW1tZWRpYXRlQWN0aW9uRGlkQ2FuY2VsKCk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25E
aWRDb21wbGV0ZSgpOwogCisgICAgdm9pZCogaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlckZvckhpdFRlc3RSZXN1bHQoUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4sIF9XS0ltbWVk
aWF0ZUFjdGlvblR5cGUsIFJlZlB0cjxBUEk6Ok9iamVjdD4pOworCiAgICAgdm9pZCBpbnN0YWxs
Vmlld1N0YXRlQ2hhbmdlQ29tcGxldGlvbkhhbmRsZXIodm9pZCheY29tcGxldGlvbkhhbmRsZXIp
KCkpOwogI2VuZGlmCiAKQEAgLTExNTAsOSArMTE1Myw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
dW5KYXZhU2NyaXB0Q29uZmlybSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8TWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm06OkRlbGF5ZWRSZXBseT4pOwogICAgIHZvaWQgcnVu
SmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8TWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5Pik7CiAg
ICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgbW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3Vs
dERhdGEsIHVpbnQzMl90IG1vZGlmaWVycywgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0
UmVzdWx0RGF0YSwgdWludDMyX3QgbW9kaWZpZXJzLCBjb25zdCBVc2VyRGF0YSYpOwogCi0gICAg
dm9pZCBkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIG1vdXNlRG93blBvc2l0aW9uLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIGRpZEJl
Z2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0
UmVzdWx0RGF0YSwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGRpZFJlY29nbml6ZUxvbmdN
b3VzZVByZXNzKGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBkaWRDYW5jZWxUcmFja2luZ1Bv
dGVudGlhbExvbmdNb3VzZVByZXNzKGNvbnN0IFVzZXJEYXRhJik7CiAKQEAgLTE0NTEsNyArMTQ1
NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aWV3RGlkRW50ZXJXaW5kb3coKTsKIAogI2lmIFBM
QVRGT1JNKE1BQykKLSAgICB2b2lkIGRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQs
IGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0
VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVm
YXVsdCwgY29uc3QgVXNlckRhdGEmKTsKICNlbmRpZgogCiAgICAgdm9pZCB1c2VGaXhlZExheW91
dERpZENoYW5nZShib29sIHVzZUZpeGVkTGF5b3V0KSB7IG1fdXNlRml4ZWRMYXlvdXQgPSB1c2VG
aXhlZExheW91dDsgfQpAQCAtMTU1NSw3ICsxNTU4LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
V2ViQ29udGV4dE1lbnVQcm94eT4gbV9hY3RpdmVDb250ZXh0TWVudTsKICAgICBDb250ZXh0TWVu
dUNvbnRleHREYXRhIG1fYWN0aXZlQ29udGV4dE1lbnVDb250ZXh0RGF0YTsKICNlbmRpZgotICAg
IFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0Owor
ICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1
bHQ7CiAKICAgICBSZWZQdHI8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eT4gbV9vcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lcjsKICAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlclByb3h5IG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKICAgICBSdW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJ
RCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBmcmFtZVNlY3VyaXR5T3JpZ2lu
LCBTdHJpbmcgbWVzc2FnZSkgLT4gKCkgRGVsYXllZAogICAgIFJ1bkphdmFTY3JpcHRDb25maXJt
KHVpbnQ2NF90IGZyYW1lSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgZnJh
bWVTZWN1cml0eU9yaWdpbiwgU3RyaW5nIG1lc3NhZ2UpIC0+IChib29sIHJlc3VsdCkgRGVsYXll
ZAogICAgIFJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgc3RydWN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBmcmFtZVNlY3VyaXR5T3JpZ2luLCBTdHJpbmcgbWVzc2Fn
ZSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkgLT4gKFN0cmluZyByZXN1bHQpIERlbGF5ZWQKLSAgICBN
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaGl0
VGVzdFJlc3VsdERhdGEsIHVpbnQzMl90IG1vZGlmaWVycywgV2ViS2l0OjpVc2VyRGF0YSB1c2Vy
RGF0YSkKKyAgICBNb3VzZURpZE1vdmVPdmVyRWxlbWVudChzdHJ1Y3QgV2ViS2l0OjpXZWJIaXRU
ZXN0UmVzdWx0RGF0YSBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3QgbW9kaWZpZXJzLCBXZWJL
aXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogCi0gICAgRGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExv
bmdNb3VzZVByZXNzKFdlYkNvcmU6OkludFBvaW50IG1vdXNlRG93blBvc2l0aW9uLCBXZWJLaXQ6
OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaGl0VGVzdFJlc3VsdERhdGEsIFdlYktpdDo6VXNlckRh
dGEgdXNlckRhdGEpCisgICAgRGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNz
KFdlYkNvcmU6OkludFBvaW50IG1vdXNlRG93blBvc2l0aW9uLCBzdHJ1Y3QgV2ViS2l0OjpXZWJI
aXRUZXN0UmVzdWx0RGF0YSBoaXRUZXN0UmVzdWx0RGF0YSwgV2ViS2l0OjpVc2VyRGF0YSB1c2Vy
RGF0YSkKICAgICBEaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcyhXZWJLaXQ6OlVzZXJEYXRhIHVz
ZXJEYXRhKQogICAgIERpZENhbmNlbFRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2Vi
S2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKIApAQCAtNDMxLDcgKzQzMSw3IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2VQcm94eSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBEaWRQZXJm
b3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChzdHJ1Y3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhIHJlc3VsdCwgYm9vbCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBXZWJLaXQ6OlVzZXJE
YXRhIHVzZXJEYXRhKQorICAgIERpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KHN0cnVj
dCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIHJlc3VsdCwgYm9vbCBjb250ZW50UHJldmVu
dHNEZWZhdWx0LCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogI2VuZGlmCiAgICAgSGFuZGxl
TWVzc2FnZShTdHJpbmcgbWVzc2FnZU5hbWUsIFdlYktpdDo6VXNlckRhdGEgbWVzc2FnZUJvZHkp
IFdhbnRzQ29ubmVjdGlvbgogICAgIEhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShTdHJpbmcgbWVz
c2FnZU5hbWUsIFdlYktpdDo6VXNlckRhdGEgbWVzc2FnZUJvZHkpIC0+IChXZWJLaXQ6OlVzZXJE
YXRhIHJldHVybkRhdGEpIFdhbnRzQ29ubmVjdGlvbgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElDb250ZXh0TWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGV4dE1lbnVDbGllbnQuaAkocmV2aXNpb24gMTkw
Njc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZXh0TWVudUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKIAotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJI
aXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQ29udGV4dE1lbnVDbGllbnQg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRleHRNZW51Q2xpZW50KCkgeyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYktpdDo6V2ViUGFn
ZVByb3h5JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+
JiAvKiBwcm9wb3NlZE1lbnUgKi8sIFZlY3RvcjxSZWZQdHI8V2ViS2l0OjpXZWJDb250ZXh0TWVu
dUl0ZW0+PiYgLyogY3VzdG9tTWVudSAqLywgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJiwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBjb25zdCBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJ
dGVtPj4mIC8qIHByb3Bvc2VkTWVudSAqLywgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRl
eHRNZW51SXRlbT4+JiAvKiBjdXN0b21NZW51ICovLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RS
ZXN1bHREYXRhJiwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBjdXN0b21Db250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJLaXQ6
OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZChXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG93Q29udGV4dE1lbnUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYpIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCShyZXZpc2lvbiAxOTA2
NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIldLUGFnZS5oIgogI2luY2x1
ZGUgIldlYkV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUg
IldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgpAQCAtOTAs
NyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRQcm9tcHQo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3Ry
aW5nJiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXVEY6OlN0cmluZyYpPiBjb21wbGV0
aW9uSGFuZGxlcikgeyBjb21wbGV0aW9uSGFuZGxlcihXVEY6OlN0cmluZygpKTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIHNldFN0YXR1c1RleHQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBX
VEY6OlN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6
RGF0YSYsIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVycywgQVBJOjpPYmplY3QqKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJiwgV2ViS2l0OjpXZWJFdmVu
dDo6TW9kaWZpZXJzLCBBUEk6Ok9iamVjdCopIHsgfQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQogICAgIHZpcnR1YWwgdm9pZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBBUEk6
OkRpY3Rpb25hcnkqKSB7IH0KICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
QEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGlubmVkU3Rh
dGVEaWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlUHJveHkmKSB7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViS2l0OjpXZWJQYWdl
UHJveHkqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVz
dFJlc3VsdDo6RGF0YSYsIEFQSTo6T2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEJl
Z2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
RGF0YSYsIEFQSTo6T2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY29nbml6ZUxv
bmdNb3VzZVByZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgQVBJOjpPYmplY3QqKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhX
ZWJLaXQ6OldlYlBhZ2VQcm94eSosIEFQSTo6T2JqZWN0KikgeyB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDE5MDY3NCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNiArNTMsNyBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEZyYW1lSW5mbzsK
K2NsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBOYXZpZ2F0aW9uOwogY2xhc3MgTmF2aWdhdGlv
bkFjdGlvbjsKIGNsYXNzIE5hdmlnYXRpb25EYXRhOwpAQCAtODksNyArOTAsNiBAQCBjbGFzcyBX
ZWJGcmFtZVByb3h5OwogY2xhc3MgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBX
ZWJHZW9sb2NhdGlvblBvc2l0aW9uOwogY2xhc3MgV2ViR3JhbW1hckRldGFpbDsKLWNsYXNzIFdl
YkhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBXZWJJY29uRGF0YWJhc2U7CiBjbGFzcyBXZWJJbnNwZWN0
b3JQcm94eTsKIGNsYXNzIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk7CkBAIC0xMzQsNyArMTM0
LDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLR2VvbG9jYXRpb25NYW5hZ2VyUgogV0tfQUREX0FQ
SV9NQVBQSU5HKFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZiwgR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdFByb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLR2VvbG9jYXRpb25Q
b3NpdGlvblJlZiwgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhX
S0dyYW1tYXJEZXRhaWxSZWYsIFdlYkdyYW1tYXJEZXRhaWwpCi1XS19BRERfQVBJX01BUFBJTkco
V0tIaXRUZXN0UmVzdWx0UmVmLCBXZWJIaXRUZXN0UmVzdWx0KQorV0tfQUREX0FQSV9NQVBQSU5H
KFdLSGl0VGVzdFJlc3VsdFJlZiwgQVBJOjpIaXRUZXN0UmVzdWx0KQogV0tfQUREX0FQSV9NQVBQ
SU5HKFdLSWNvbkRhdGFiYXNlUmVmLCBXZWJJY29uRGF0YWJhc2UpCiBXS19BRERfQVBJX01BUFBJ
TkcoV0tJbnNwZWN0b3JSZWYsIFdlYkluc3BlY3RvclByb3h5KQogV0tfQUREX0FQSV9NQVBQSU5H
KFdLTWVkaWFDYWNoZU1hbmFnZXJSZWYsIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0
LmNwcAkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLSGl0VGVzdFJlc3VsdC5oIgogCisjaW5j
bHVkZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1
ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tU
eXBlSUQgV0tIaXRUZXN0UmVzdWx0R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2Vi
SGl0VGVzdFJlc3VsdDo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJKEFQSTo6SGl0VGVzdFJl
c3VsdDo6QVBJVHlwZSk7CiB9CiAKIFdLVVJMUmVmIFdLSGl0VGVzdFJlc3VsdENvcHlBYnNvbHV0
ZUltYWdlVVJMKFdLSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDE5MDY3NCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2luY2x1
ZGUgIkFQSUZpbmRDbGllbnQuaCIKICNpbmNsdWRlICJBUElGcmFtZUluZm8uaCIKKyNpbmNsdWRl
ICJBUElIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiQVBJTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25DbGll
bnQuaCIKQEAgLTc2OCw3ICs3NjksNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNs
aWVudChXS1BhCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25z
dCBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mIHByb3Bvc2VkTWVu
dVZlY3RvciwgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiBjdXN0
b21NZW51LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwg
QVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgVmVj
dG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiBwcm9wb3NlZE1lbnVWZWN0
b3IsIFZlY3RvcjxSZWZQdHI8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYgY3VzdG9tTWVu
dSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1bHREYXRhLCBBUEk6Ok9i
amVjdCogdXNlckRhdGEpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9j
bGllbnQuZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51ICYmICFtX2NsaWVudC5nZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODQsNyArNzg1LDcgQEAgdm9pZCBXS1BhZ2VTZXRQ
YWdlQ29udGV4dE1lbnVDbGllbnQoV0tQYQogCiAgICAgICAgICAgICBXS0FycmF5UmVmIG5ld01l
bnUgPSBudWxscHRyOwogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmJhc2UudmVyc2lvbiA+PSAy
KSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IHdlYkhpdFRlc3RS
ZXN1bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpjcmVhdGUoaGl0VGVzdFJlc3VsdERhdGEpOworICAg
ICAgICAgICAgICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IHdlYkhpdFRlc3RSZXN1bHQg
PSBBUEk6OkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShoaXRUZXN0UmVzdWx0RGF0YSk7CiAgICAgICAg
ICAgICAgICAgbV9jbGllbnQuZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KHRvQVBJKCZw
YWdlKSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURjo6bW92ZShwcm9wb3NlZE1lbnVJdGVt
cykpLnB0cigpKSwgJm5ld01lbnUsIHRvQVBJKHdlYkhpdFRlc3RSZXN1bHQuZ2V0KCkpLCB0b0FQ
SSh1c2VyRGF0YSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBtX2NsaWVudC5nZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1l
bnVfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCh0b0FQSSgmcGFnZSksIHRvQVBJKEFQSTo6QXJyYXk6
OmNyZWF0ZShXVEY6Om1vdmUocHJvcG9zZWRNZW51SXRlbXMpKS5wdHIoKSksICZuZXdNZW51LCB0
b0FQSSh1c2VyRGF0YSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CkBAIC0xNjM3LDcgKzE2
MzgsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnCiAgICAgICAg
ICAgICBtX2NsaWVudC5zZXRTdGF0dXNUZXh0KHRvQVBJKHBhZ2UpLCB0b0FQSSh0ZXh0LmltcGwo
KSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25z
dCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBkYXRhLCBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlm
aWVycywgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIHZv
aWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBXZWJI
aXRUZXN0UmVzdWx0RGF0YSYgZGF0YSwgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIEFQ
STo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KCFtX2NsaWVudC5tb3VzZURpZE1vdmVPdmVyRWxlbWVudCAmJiAhbV9jbGllbnQubW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xNjUwLDcgKzE2NTEsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChX
S1BhZ2VSZWYgcGFnCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVzdFJlc3VsdCA9IFdl
YkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShkYXRhKTsKKyAgICAgICAgICAgIFJlZlB0cjxBUEk6Okhp
dFRlc3RSZXN1bHQ+IHdlYkhpdFRlc3RSZXN1bHQgPSBBUEk6OkhpdFRlc3RSZXN1bHQ6OmNyZWF0
ZShkYXRhKTsKICAgICAgICAgICAgIG1fY2xpZW50Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHRv
QVBJKHBhZ2UpLCB0b0FQSSh3ZWJIaXRUZXN0UmVzdWx0LmdldCgpKSwgdG9BUEkobW9kaWZpZXJz
KSwgdG9BUEkodXNlckRhdGEpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9
CiAKQEAgLTE5MTgsMTIgKzE5MTksMTIgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQ
YWdlUmVmIHBhZwogICAgICAgICAgICAgbV9jbGllbnQucGlubmVkU3RhdGVEaWRDaGFuZ2UodG9B
UEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhX
ZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IEludFBvaW50JiBtb3VzZURvd25Qb3NpdGlvbiwgY29u
c3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgZGF0YSwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKSBv
dmVycmlkZQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExv
bmdNb3VzZVByZXNzKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgSW50UG9pbnQmIG1vdXNlRG93
blBvc2l0aW9uLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgZGF0YSwgQVBJOjpPYmplY3Qq
IHVzZXJJbmZvKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50
LmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcykKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiB3ZWJIaXRU
ZXN0UmVzdWx0ID0gV2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGRhdGEpOworICAgICAgICAgICAg
UmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVz
dFJlc3VsdDo6Y3JlYXRlKGRhdGEpOwogICAgICAgICAgICAgbV9jbGllbnQuZGlkQmVnaW5UcmFj
a2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKHRvQVBJKHBhZ2UpLCB0b0FQSShtb3VzZURvd25Q
b3NpdGlvbiksIHRvQVBJKHdlYkhpdFRlc3RSZXN1bHQuZ2V0KCkpLCB0b0FQSSh1c2VySW5mbyks
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE5
MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTExLDYgKzMxMTEsMTEgQEAgLSAoQk9PTClfYXV0b21hdGlj
YWxseUFkanVzdHNDb250ZW50SW5zZQogICAgIHJldHVybiBbX3drVmlldyBfYXV0b21hdGljYWxs
eUFkanVzdHNDb250ZW50SW5zZXRzXTsKIH0KIAorLSAoaWQpX2ltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OihfV0tIaXRUZXN0UmVzdWx0ICopaGl0VGVz
dFJlc3VsdCB3aXRoVHlwZTooX1dLSW1tZWRpYXRlQWN0aW9uVHlwZXMpdHlwZSB1c2VyRGF0YToo
aWQ8TlNTZWN1cmVDb2Rpbmc+KXVzZXJEYXRhCit7CisgICAgcmV0dXJuIG5pbDsKK30KKwogI2Vu
ZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCA8V2ViS2l0L19XS0Zp
bmRPcHRpb25zLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLSW1tZWRpYXRlQWN0aW9uVHlwZS5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS0xheW91dE1vZGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tSZW5k
ZXJpbmdQcm9ncmVzc0V2ZW50cy5oPgogCkBAIC00MCw2ICs0MSw3IEBAIHR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIF9XS1BhZ2luYXRpb24KIH0gV0tfRU5VTV9BVkFJTEFCTEUoMTBfMTAsIDhf
MCk7CiAKIEBjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZTsKK0BjbGFzcyBfV0tIaXRUZXN0
UmVzdWx0OwogQGNsYXNzIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogQGNsYXNzIF9XS1Nlc3Np
b25TdGF0ZTsKIEBjbGFzcyBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXI7CkBAIC0xNzIsNiArMTc0
LDkgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLUGFnaW5hdGlvbgogCiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVk
OikgQk9PTCBfd2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDsKIAorLy8gQ2xpZW50cyB0
aGF0IHdhbnQgdG8gbWFpbnRhaW4gZGVmYXVsdCBiZWhhdmlvciBjYW4gcmV0dXJuIG5pbC4gVG8g
ZGlzYWJsZSB0aGUgaW1tZWRpYXRlIGFjdGlvbiBlbnRpcmVseSwgcmV0dXJuIE5TTnVsbC4gQW5k
IHRvCisvLyBkbyBzb21ldGhpbmcgY3VzdG9tLCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgY29uZm9y
bXMgdG8gdGhlIE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlciBwcm90b2NvbC4K
Ky0gKGlkKV9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3Vs
dDooX1dLSGl0VGVzdFJlc3VsdCAqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0
ZUFjdGlvblR5cGVzKXR5cGUgdXNlckRhdGE6KGlkPE5TU2VjdXJlQ29kaW5nPil1c2VyRGF0YTsK
ICNlbmRpZgogCiAtICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNp
b24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw5IEBACiAjaW1wb3J0ICJXS1dlYlZpZXcuaCIK
ICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2ltcG9ydCAiV2ViRXZlbnRGYWN0b3J5
LmgiCi0jaW1wb3J0ICJXZWJIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JQ
cm94eS5oIgogI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKKyNpbXBvcnQgIldlYkhpdFRl
c3RSZXN1bHREYXRhLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAjaW1wb3J0ICJXZWJQYWdlR3Jv
dXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgpAQCAtMzk4MCw3ICszOTgwLDcgQEAgLSAo
dm9pZClfcmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAogCiAjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKIAotLSAodm9pZClfZGlkUGVyZm9ybUltbWVk
aWF0ZUFjdGlvbkhpdFRlc3Q6KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RS
ZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDooQk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0
IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRhdGEKKy0gKHZvaWQpX2RpZFBlcmZvcm1JbW1l
ZGlhdGVBY3Rpb25IaXRUZXN0Oihjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJl
c3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQg
dXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1c2VyRGF0YQogewogICAgIFtfZGF0YS0+X2ltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6aGl0VGVz
dFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0OmNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNl
ckRhdGE6dXNlckRhdGFdOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUu
aCIKICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXZWJG
aW5kT3B0aW9ucy5oIgotI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiV2Vi
SGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNDUsNyArMTQ1LDcg
QEAgQGludGVyZmFjZSBXS1ZpZXcgKCkKIC0gKHZvaWQpX3ByZXBhcmVGb3JEaWN0aW9uYXJ5TG9v
a3VwOwogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKLS0g
KHZvaWQpX2RpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0Oihjb25zdCBXZWJLaXQ6Oldl
YkhpdFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVs
dDooQk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNl
ckRhdGE7CistICh2b2lkKV9kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3Qg
V2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVu
dHNEZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2Jq
ZWN0Kil1c2VyRGF0YTsKICNlbmRpZgogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDExMDAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw5
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25G
b3JNYWluRnJhbWUoU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3Qg
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJ
OjpPYmplY3QqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBib29sIGNvbnRlbnRQ
cmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
KiBpbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQ
dHI8QVBJOjpIaXRUZXN0UmVzdWx0PiwgX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSwgUmVmUHRyPEFQ
STo6T2JqZWN0Pikgb3ZlcnJpZGU7CisKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXRmb3JtQ29u
dGV4dE1lbnUoTlNNZW51ICosIFdlYkNvcmU6OkludFBvaW50KSBvdmVycmlkZTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNp
b24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2ltcG9ydCAiV2ViUG9wdXBN
ZW51UHJveHlNYWMuaCIKICNpbXBvcnQgIldpbmRvd1NlcnZlckNvbm5lY3Rpb24uaCIKICNpbXBv
cnQgIl9XS0Rvd25sb2FkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHRJbnRl
cm5hbC5oIgogI2ltcG9ydCAiX1dLVGh1bWJuYWlsVmlldy5oIgogI2ltcG9ydCA8V2ViQ29yZS9B
bHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQml0bWFwSW1h
Z2UuaD4KQEAgLTgxMSwxMyArODEyLDQ0IEBAIENHUmVjdCBQYWdlQ2xpZW50SW1wbDo6Ym91bmRz
T2ZMYXllckluTGEKICAgICByZXR1cm4gW3dpbmRvd0NvbnRlbnRMYXllciBjb252ZXJ0UmVjdDps
YXllci5ib3VuZHMgZnJvbUxheWVyOmxheWVyXTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6
RGF0YSYgcmVzdWx0LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0KiB1
c2VyRGF0YSkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25I
aXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1bHQsIGJvb2wgY29udGVudFBy
ZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQogewogI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAgICAgW21fd2tWaWV3IF9kaWRQZXJmb3Jt
SW1tZWRpYXRlQWN0aW9uSGl0VGVzdDpyZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDpjb250
ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOnVzZXJEYXRhXTsKICNlbmRpZgogfQogCit2b2lk
KiBQYWdlQ2xpZW50SW1wbDo6aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhp
dFRlc3RSZXN1bHQoUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCwgX1dL
SW1tZWRpYXRlQWN0aW9uVHlwZSB0eXBlLCBSZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhKQor
eworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgaWYgKG1fd2ViVmlldykgeworICAgICAgICBfV0tJ
bW1lZGlhdGVBY3Rpb25UeXBlcyB3a1R5cGU7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIGtXS0ltbWVkaWF0ZUFjdGlvbk5vbmU6CisgICAgICAgICAgICB3a1R5cGUgPSBf
V0tJbW1lZGlhdGVBY3Rpb25Ob25lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
a1dLSW1tZWRpYXRlQWN0aW9uTGlua1ByZXZpZXc6CisgICAgICAgICAgICB3a1R5cGUgPSBfV0tJ
bW1lZGlhdGVBY3Rpb25MaW5rUHJldmlldzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGtXS0ltbWVkaWF0ZUFjdGlvbkRhdGFEZXRlY3RlZEl0ZW06CisgICAgICAgICAgICB3a1R5
cGUgPSBfV0tJbW1lZGlhdGVBY3Rpb25EYXRhRGV0ZWN0ZWRJdGVtOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2Uga1dLSW1tZWRpYXRlQWN0aW9uTG9va3VwVGV4dDoKKyAgICAgICAg
ICAgIHdrVHlwZSA9IF9XS0ltbWVkaWF0ZUFjdGlvbkxvb2t1cFRleHQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBrV0tJbW1lZGlhdGVBY3Rpb25NYWlsdG9MaW5rOgorICAgICAg
ICAgICAgd2tUeXBlID0gX1dLSW1tZWRpYXRlQWN0aW9uTWFpbHRvTGluazsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGtXS0ltbWVkaWF0ZUFjdGlvblRlbExpbms6CisgICAgICAg
ICAgICB3a1R5cGUgPSBfV0tJbW1lZGlhdGVBY3Rpb25UZWxMaW5rOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFttX3dlYlZpZXcgX2ltbWVkaWF0ZUFjdGlv
bkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OndyYXBwZXIoKmhpdFRlc3RSZXN1
bHQpIHdpdGhUeXBlOndrVHlwZSB1c2VyRGF0YTooaWQpKHVzZXJEYXRhLmdldCgpKV07CisgICAg
fSBlbHNlCisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFttX3drVmlldyBfaW1tZWRpYXRlQWN0aW9u
QW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6dG9BUEkoaGl0VGVzdFJlc3VsdC5n
ZXQoKSkgd2l0aFR5cGU6dHlwZSB1c2VyRGF0YTp0b0FQSSh1c2VyRGF0YS5nZXQoKSldOworfQor
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUgKm1l
bnUsIEludFBvaW50IGxvY2F0aW9uKQogewogICAgIFttZW51IHBvcFVwTWVudVBvc2l0aW9uaW5n
SXRlbTpuaWwgYXRMb2NhdGlvbjpsb2NhdGlvbiBpblZpZXc6bV93a1ZpZXddOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw4ICsyOCw4IEBACiAKICNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAKKyNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHREYXRh
LmgiCiAjaW1wb3J0ICJXS0ltbWVkaWF0ZUFjdGlvblR5cGVzLmgiCi0jaW1wb3J0ICJXZWJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW1wb3J0IDxXZWJDb3JlL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtNTQsNyArNTQs
NyBAQCBAaW50ZXJmYWNlIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciA6CiAgICAgV0tWaWV3
ICpfd2tWaWV3OwogCiAgICAgV2ViS2l0OjpJbW1lZGlhdGVBY3Rpb25TdGF0ZSBfc3RhdGU7Ci0g
ICAgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIF9oaXRUZXN0UmVzdWx0RGF0YTsKKyAg
ICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIF9oaXRUZXN0UmVzdWx0RGF0YTsKICAgICBC
T09MIF9jb250ZW50UHJldmVudHNEZWZhdWx0OwogICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gX3Vz
ZXJEYXRhOwogICAgIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUgX3R5cGU7CkBAIC02OSw3ICs2OSw3
IEBAIEBpbnRlcmZhY2UgV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIDoKIAogLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGFnZTooV2ViS2l0OjpXZWJQYWdlUHJveHkmKXBhZ2UgdmlldzooV0tW
aWV3ICopd2tWaWV3IHJlY29nbml6ZXI6KE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6
ZXIgKilpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyOwogLSAodm9pZCl3aWxsRGVzdHJveVZpZXc6
KFdLVmlldyAqKXZpZXc7Ci0tICh2b2lkKWRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0
Oihjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29u
dGVudFByZXZlbnRzRGVmYXVsdDooQk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRh
OihBUEk6Ok9iamVjdCopdXNlckRhdGE7CistICh2b2lkKWRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rp
b25IaXRUZXN0Oihjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJiloaXRUZXN0UmVz
dWx0IGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQ6KEJPT0wpY29udGVudFByZXZlbnRzRGVmYXVsdCB1
c2VyRGF0YTooQVBJOjpPYmplY3QqKXVzZXJEYXRhOwogLSAodm9pZClkaXNtaXNzQ29udGVudFJl
bGF0aXZlQ2hpbGRXaW5kb3dzOwogLSAoQk9PTCloYXNBY3RpdmVJbW1lZGlhdGVBY3Rpb247CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJ
bW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTAwMAogCisjaW1wb3J0ICJBUElIaXRU
ZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJXS05TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXS1ZpZXdJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCkBAIC04Myw3ICs4NCw3IEBA
IC0gKHZvaWQpd2lsbERlc3Ryb3lWaWV3OihXS1ZpZXcgKil2aWV3CiB7CiAgICAgX3BhZ2UgPSBu
dWxscHRyOwogICAgIF93a1ZpZXcgPSBuaWw7Ci0gICAgX2hpdFRlc3RSZXN1bHREYXRhID0gV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YSgpOworICAgIF9oaXRUZXN0UmVzdWx0RGF0YSA9IFdlYkhpdFRl
c3RSZXN1bHREYXRhKCk7CiAgICAgX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQgPSBOTzsKICAgICAK
ICAgICBpZCBhbmltYXRpb25Db250cm9sbGVyID0gW19pbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVy
IGFuaW1hdGlvbkNvbnRyb2xsZXJdOwpAQCAtMTIzLDcgKzEyNCw3IEBAIC0gKHZvaWQpX2NsZWFy
SW1tZWRpYXRlQWN0aW9uU3RhdGUKICAgICB9CiAKICAgICBfc3RhdGUgPSBJbW1lZGlhdGVBY3Rp
b25TdGF0ZTo6Tm9uZTsKLSAgICBfaGl0VGVzdFJlc3VsdERhdGEgPSBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhKCk7CisgICAgX2hpdFRlc3RSZXN1bHREYXRhID0gV2ViSGl0VGVzdFJlc3VsdERhdGEo
KTsKICAgICBfY29udGVudFByZXZlbnRzRGVmYXVsdCA9IE5POwogICAgIF90eXBlID0ga1dLSW1t
ZWRpYXRlQWN0aW9uTm9uZTsKICAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBuaWw7CkBAIC0x
MzIsNyArMTMzLDcgQEAgLSAodm9pZClfY2xlYXJJbW1lZGlhdGVBY3Rpb25TdGF0ZQogICAgIF9o
YXNBY3RpdmVJbW1lZGlhdGVBY3Rpb24gPSBOTzsKIH0KIAotLSAodm9pZClkaWRQZXJmb3JtSW1t
ZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpaGl0VGVz
dFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1
bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1c2VyRGF0YQorLSAodm9pZClkaWRQZXJmb3JtSW1t
ZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmKWhpdFRlc3RS
ZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDooQk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0
IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRhdGEKIHsKICAgICAvLyBJZiB3ZSd2ZSBhbHJl
YWR5IGdpdmVuIHVwIG9uIHRoaXMgZ2VzdHVyZSAoZWl0aGVyIGJlY2F1c2UgaXQgd2FzIGNhbmNl
bGVkIG9yIHRoZQogICAgIC8vIHdpbGxCZWdpbkFuaW1hdGlvbiB0aW1lb3V0IGV4cGlyZWQpLCB3
ZSBzaG91bGRuJ3QgYnVpbGQgYSBuZXcgYW5pbWF0aW9uQ29udHJvbGxlciBmb3IgaXQuCkBAIC0y
NDksMTEgKzI1MCwxMSBAQCAtICh2b2lkKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDb21w
CiAgICAgX3BhZ2UtPnNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcygxKTsKIH0KIAot
LSAoUGFzc1JlZlB0cjxXZWJIaXRUZXN0UmVzdWx0Pilfd2ViSGl0VGVzdFJlc3VsdAorLSAoUGFz
c1JlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+KV93ZWJIaXRUZXN0UmVzdWx0CiB7Ci0gICAgUmVm
UHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQ7CisgICAgUmVmUHRyPEFQSTo6SGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdDsKICAgICBpZiAoX3N0YXRlID09IEltbWVkaWF0ZUFj
dGlvblN0YXRlOjpSZWFkeSkKLSAgICAgICAgaGl0VGVzdFJlc3VsdCA9IFdlYkhpdFRlc3RSZXN1
bHQ6OmNyZWF0ZShfaGl0VGVzdFJlc3VsdERhdGEpOworICAgICAgICBoaXRUZXN0UmVzdWx0ID0g
QVBJOjpIaXRUZXN0UmVzdWx0OjpjcmVhdGUoX2hpdFRlc3RSZXN1bHREYXRhKTsKICAgICBlbHNl
CiAgICAgICAgIGhpdFRlc3RSZXN1bHQgPSBfcGFnZS0+bGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1
bHQoKTsKIApAQCAtMjY5LDcgKzI3MCw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbkNvbnRyb2wKICAgICAgICAgcmV0dXJuIGR1bW15Q29udHJvbGxlci5nZXQoKTsKICAgICB9
CiAKLSAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93
ZWJIaXRUZXN0UmVzdWx0XTsKKyAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBoaXRUZXN0
UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOwogCiAgICAgaWYgKCFoaXRUZXN0UmVz
dWx0KQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzI3LDkgKzMyOCw4IEBAIC0gKHZvaWQpX3Vw
ZGF0ZUltbWVkaWF0ZUFjdGlvbkl0ZW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RS
ZXN1bHRdOwotICAgIGlkIGN1c3RvbUNsaWVudEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBbX3drVmll
dyBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6dG9B
UEkoaGl0VGVzdFJlc3VsdC5nZXQoKSkgd2l0aFR5cGU6X3R5cGUgdXNlckRhdGE6dG9BUEkoX3Vz
ZXJEYXRhLmdldCgpKV07Ci0KKyAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBoaXRUZXN0
UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOworICAgIGlkIGN1c3RvbUNsaWVudEFu
aW1hdGlvbkNvbnRyb2xsZXIgPSAoaWQpKF9wYWdlLT5pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25D
b250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0LCBfdHlwZSwgX3VzZXJEYXRh
KSk7CiAgICAgaWYgKGN1c3RvbUNsaWVudEFuaW1hdGlvbkNvbnRyb2xsZXIgPT0gW05TTnVsbCBu
dWxsXSkgewogICAgICAgICBbc2VsZiBfY2FuY2VsSW1tZWRpYXRlQWN0aW9uXTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzUzLDcgKzM1Myw3IEBAIC0gKGlkPFFMUHJldmlld0l0ZW0+KW1lbnVJdGVt
OihOU01lbnVJdGUKICAgICBpZiAoIV93a1ZpZXcpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRU
ZXN0UmVzdWx0XTsKKyAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0
ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOwogICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxX
aXRoV1RGU3RyaW5nOmhpdFRlc3RSZXN1bHQtPmFic29sdXRlTGlua1VSTCgpXTsKIH0KIApAQCAt
MzcyLDcgKzM3Miw3IEBAIC0gKE5TUmVjdCltZW51SXRlbTooTlNNZW51SXRlbSAqKW1lbnVJdGUK
ICAgICBpZiAoIV93a1ZpZXcpCiAgICAgICAgIHJldHVybiBOU1plcm9SZWN0OwogCi0gICAgUmVm
UHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJl
c3VsdF07CisgICAgUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtz
ZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKICAgICByZXR1cm4gW193a1ZpZXcgY29udmVydFJlY3Q6
aGl0VGVzdFJlc3VsdC0+ZWxlbWVudEJvdW5kaW5nQm94KCkgdG9WaWV3Om5pbF07CiB9CiAKQEAg
LTQ0NSw3ICs0NDUsNyBAQCAtIChpZDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xs
CiAKICAgICBbX2N1cnJlbnRBY3Rpb25Db250ZXh0IHNldEhpZ2hsaWdodEZyYW1lOltfd2tWaWV3
LndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOltfd2tWaWV3IGNvbnZlcnRSZWN0Ol9oaXRUZXN0
UmVzdWx0RGF0YS5lbGVtZW50Qm91bmRpbmdCb3ggdG9WaWV3Om5pbF1dXTsKIAotICAgIFJlZlB0
cjxXZWJIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1
bHRdOworICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBbc2Vs
ZiBfd2ViSGl0VGVzdFJlc3VsdF07CiAgICAgTlNBcnJheSAqbWVudUl0ZW1zID0gW1tnZXREREFj
dGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBtZW51SXRlbXNGb3JUYXJnZXRVUkw6
aGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVMaW5rVVJMKCkgYWN0aW9uQ29udGV4dDpfY3VycmVudEFj
dGlvbkNvbnRleHQuZ2V0KCldOwogCiAgICAgaWYgKG1lbnVJdGVtcy5jb3VudCAhPSAxKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0J
KHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NTEsNyArNzUxLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjbwogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKQogQ29udGV4dE1lbnVJdGVtIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplU2hh
cmVNZW51SXRlbShjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRhJiBjb250ZXh0TWVudUNvbnRl
eHREYXRhKQogewotICAgIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3REYXRh
ID0gY29udGV4dE1lbnVDb250ZXh0RGF0YS53ZWJIaXRUZXN0UmVzdWx0RGF0YSgpOworICAgIGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0RGF0YSA9IGNvbnRleHRNZW51Q29udGV4
dERhdGEud2ViSGl0VGVzdFJlc3VsdERhdGEoKTsKIAogICAgIFVSTCBhYnNvbHV0ZUxpbmtVUkw7
CiAgICAgaWYgKCFoaXRUZXN0RGF0YS5hYnNvbHV0ZUxpbmtVUkwuaXNFbXB0eSgpKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05ODUsNyArOTg1LDYgQEAKIAkJNTFBQ0JC
ODIxMjdBOEJBRDAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjgxMTI3QThCQUQwMEQyMDNC
OSAvKiBXZWJDb250ZXh0TWVudVByb3h5LmggKi87IH07CiAJCTUxQUNCQkEwMTI3QThGMkMwMEQy
MDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI5RTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29u
dGV4dE1lbnVQcm94eU1hYy5oICovOyB9OwogCQk1MUFDQkJBMTEyN0E4RjJDMDBEMjAzQjkgLyog
V2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQUNCQjlGMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVu
dVByb3h5TWFjLm1tICovOyB9OwotCQk1MUFEMzU3MzFBRDJGMzk0MDA1N0IzOEUgLyogV2ViSGl0
VGVzdFJlc3VsdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQUQzNTcyMUFEMkYzNzUwMDU3QjM4RSAvKiBXZWJIaXRUZXN0UmVzdWx0Lm1tICovOyB9
OwogCQk1MUIxNUE4NDEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMTVBODIx
Mzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJNTFC
MTVBODUxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIxNUE4MzEzODQzQTM5MDAz
MjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuaCAqLzsgfTsKIAkJNTFCQTI0NDYxODU4RjU1
RDAwRUEyODExIC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQkEyNDQ1MTg1OEY0MTUwMEVBMjgxMSAvKiBX
ZWJDcm9zc1RocmVhZENvcGllci5jcHAgKi87IH07CkBAIC0xMDYwLDggKzEwNTksNiBAQAogCQk3
NUE4RDJFMTE4N0RFQzFBMDBDMzlDOUUgLyogQVBJU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyREUxODdERTg3NDAwQzM5QzlFIC8q
IEFQSVNlc3Npb24uaCAqLzsgfTsKIAkJNzVBOEQyRTIxODdERUMxRTAwQzM5QzlFIC8qIEFQSVNl
c3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzVBOEQyREQxODdERTg3NDAwQzM5QzlFIC8qIEFQSVNlc3Npb24uY3BwICovOyB9OwogCQk3NjJC
NzQ4RDEyMEJDNzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDg0MTIwQkJBMkQw
MDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc4MDFDMDk5MTQyMjkwQzQwMEZBRjlBRiAv
KiBXZWJIaXRUZXN0UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc4MDFDMDk1MTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0
LmNwcCAqLzsgfTsKLQkJNzgwMUMwOUExNDIyOTBDNDAwRkFGOUFGIC8qIFdlYkhpdFRlc3RSZXN1
bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4MDFD
MDk2MTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmggKi87IH07CiAJCTdDMTM1
QUE4MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE2MTczQjBCQ0EwMDU4
NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJN0MxMzVBQTkxNzNCMEJD
QTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE3MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1Bs
dWdpbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9u
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mx
MzVBQUExNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tICovOyB9OwpA
QCAtMTE5OSw3ICsxMTk2LDE2IEBACiAJCTkzOTFGMkNCMTIxQjY3QUQwMEVCRjdFOCAvKiBXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzkxRjI4MzEyMUIzOEY1MDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5oICovOyB9OwogCQk5MzlBRTc2NjEzMTZFOTlDMDBBRTA2QTYgLyogV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzOUFFNzY1MTMxNkU5OUMwMEFFMDZBNiAvKiBXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwICovOyB9OwogCQk5MzlGNDAxQzE5RkIwQkJDMDAyQjJCNDIgLyogV0tBY3Rpb25NZW51
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
OUY0MDFCMTlGQjBCQkMwMDJCMkI0MiAvKiBXS0FjdGlvbk1lbnVUeXBlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzQTg4QjMwMUJDNkU5OTcw
MEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTg4QjJFMUJDNkU5OEYwMEFCQTVDMiAvKiBXZWJI
aXRUZXN0UmVzdWx0RGF0YS5tbSAqLzsgfTsKKwkJOTNBODhCMzMxQkM2RTlDRDAwQUJBNUMyIC8q
IFdlYkhpdFRlc3RSZXN1bHREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0E4OEIzMTFCQzZFOUMwMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3Vs
dERhdGEuaCAqLzsgfTsKKwkJOTNBODhCMzYxQkM2RUFENTAwQUJBNUMyIC8qIFdlYkhpdFRlc3RS
ZXN1bHREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzQTg4QjM0MUJDNkVBQkEwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAg
Ki87IH07CisJCTkzQTg4QjM5MUJDNzBGM0YwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBODhCMzcx
QkM3MEYyRTAwQUJBNUMyIC8qIF9XS0hpdFRlc3RSZXN1bHQubW0gKi87IH07CisJCTkzQTg4QjNC
MUJDNzEwRDkwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTg4QjNBMUJDNzEwRDkwMEFC
QTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCAqLzsgfTsKKwkJOTNBODhCM0QxQkM3
MUI4OTAwQUJBNUMyIC8qIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTg4QjNDMUJDNzFCODkwMEFCQTVDMiAv
KiBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNCREVCMDExNzFERDdBRjAwQkZFRTFCIC8qIFdLUGFnZUxv
YWRUeXBlc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQkRFQjAwMTcxREQ3QUYwMEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTNF
NkE0RUUxQkM1REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTZBNEVEMUJDNUREMzkwMEY4QTBF
NyAvKiBfV0tIaXRUZXN0UmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJOTNFNkE0RjMxQkM1RUZFRTAwRjhBMEU3IC8qIEFQSUhpdFRlc3RS
ZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
RTZBNEYwMUJDNUVGRDUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmggKi87IH07CisJCTkz
RTZBNEY0MUJDNUVGRjcwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTZBNEVGMUJDNUVGRDUwMEY4
QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmNwcCAqLzsgfTsKIAkJOUY1NEY4OEYxNjQ4OEU4NzAw
N0RGODFBIC8qIENoaWxkUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlGNTRGODhFMTY0ODhFODcwMDdERjgxQSAvKiBDaGlsZFByb2Nl
c3NNYWMubW0gKi87IH07CiAJCTlGNTRGODk1MTY0OEFFMEYwMDdERjgxQSAvKiBQbHVnaW5Qcm9j
ZXNzTWFuYWdlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlGNTRGODk0MTY0OEFFMEUwMDdERjgxQSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdlck1h
Yy5tbSAqLzsgfTsKIAkJOUZCNUYzOTQxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZh
dGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
RkI1RjM5MjE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5tbSAqLzsgfTsK
QEAgLTMxNjMsNyArMzE2OSw2IEBACiAJCTUxQUNCQjlGMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJD
b250ZXh0TWVudVByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTFBQ0M5MzQxNjI4MDY0ODAwMzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFBQ0M5MzUxNjI4MDY0ODAwMzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUFEMzU3MjFBRDJGMzc1MDA1N0IzOEUgLyog
V2ViSGl0VGVzdFJlc3VsdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhpdFRlc3RSZXN1
bHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjE1QTgyMTM4NDNBMzkwMDMy
MUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBFbnZpcm9ubWVudFV0aWxpdGllcy5jcHA7IHBhdGggPSB1bml4L0Vudmly
b25tZW50VXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMTVB
ODMxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVudmlyb25tZW50VXRpbGl0aWVzLmg7IHBhdGggPSB1bml4
L0Vudmlyb25tZW50VXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QkEyNDQ1MTg1OEY0MTUwMEVBMjgxMSAvKiBXZWJDcm9zc1RocmVhZENvcGllci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJDcm9zc1RocmVhZENvcGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zMjUxLDggKzMyNTYsNiBAQAogCQk3NUE4RDJERTE4N0RFODc0MDBDMzlD
OUUgLyogQVBJU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBUElT
ZXNzaW9uLmg7IHBhdGggPSBVSVByb2Nlc3MvQVBJL0FQSVNlc3Npb24uaDsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OwogCQk3NjJCNzQ4MTEyMEJCQTAxMDA4MTkzMzkgLyogRm9udFNtb290
aGluZ0xldmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTbW9vdGhp
bmdMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NjJCNzQ4NDEyMEJCQTJE
MDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNzgwMUMwOTUxNDIyOTBDNDAwRkFGOUFGIC8qIFdlYkhpdFRlc3RSZXN1
bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViSGl0VGVzdFJl
c3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4MDFDMDk2MTQyMjkwQzQw
MEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkhpdFRlc3RSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MwQkI5QTgxOERDREU4OTAwMDZDMDg2IC8qIFdlYkNvbnRlbnQtaU9TLmVudGl0bGVtZW50cyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1s
OyBwYXRoID0gIldlYkNvbnRlbnQtaU9TLmVudGl0bGVtZW50cyI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDMEJCOUE5MThEQ0RGNUEwMDA2QzA4NiAvKiBOZXR3b3JrLWlPUy5lbnRp
dGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhtbDsgcGF0aCA9ICJOZXR3b3JrLWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5J
bmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1Bs
dWdpbkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzOTgs
NyArMzQwMSwxNiBAQAogCQk5MzkxRjI4NDEyMUIzOEY1MDBFQkY3RTggLyogV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzOUFFNzY1MTMxNkU5OUMwMEFFMDZBNiAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5RjQwMUIxOUZCMEJCQzAw
MkIyQjQyIC8qIFdLQWN0aW9uTWVudVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLQWN0aW9uTWVudVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTkzQTg4QjJFMUJDNkU5OEYwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhpdFRlc3RSZXN1bHREYXRh
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E4OEIzMTFCQzZFOUMwMDBBQkE1
QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViSGl0VGVzdFJlc3VsdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNBODhCMzQxQkM2RUFCQTAwQUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkhpdFRlc3RSZXN1bHREYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBODhCMzcxQkM3MEYyRTAwQUJB
NUMyIC8qIF9XS0hpdFRlc3RSZXN1bHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBfV0tIaXRUZXN0UmVzdWx0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5M0E4OEIzQTFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdEludGVybmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0hpdFRlc3RSZXN1bHRJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E4OEIzQzFCQzcxQjg5MDBB
QkE1QzIgLyogX1dLSW1tZWRpYXRlQWN0aW9uVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQkRFQjAwMTcxREQ3QUYwMEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFnZUxvYWRUeXBlc1By
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNkE0RUQxQkM1REQzOTAw
RjhBMEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gX1dLSGl0VGVzdFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0U2QTRFRjFCQzVFRkQ1MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElIaXRUZXN0UmVzdWx0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNkE0RjAxQkM1RUZENTAwRjhBMEU3IC8qIEFQSUhp
dFRlc3RSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSGl0VGVz
dFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjU0Rjg4RTE2NDg4RTg3
MDA3REY4MUEgLyogQ2hpbGRQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gQ2hpbGRQcm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5RjU0Rjg5NDE2NDhBRTBFMDA3REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Qcm9j
ZXNzTWFuYWdlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUZCNUYzOTIx
NjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0NvbnRleHRQcml2YXRlTWFjLm1tOyBwYXRoID0g
bWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00Nzc4LDggKzQ3OTAsOCBAQAogCQkJCTFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBXZWJG
aW5kT3B0aW9ucy5oICovLAogCQkJCUJDMEU2MDcyMTJENkJDMjAwMDEyQTcyQSAvKiBXZWJHZW9s
b2NhdGlvblBvc2l0aW9uLmNwcCAqLywKIAkJCQlCQzBFNjA3MTEyRDZCQzIwMDAxMkE3MkEgLyog
V2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oICovLAotCQkJCTc4MDFDMDk1MTQyMjkwQzQwMEZBRjlB
RiAvKiBXZWJIaXRUZXN0UmVzdWx0LmNwcCAqLywKLQkJCQk3ODAxQzA5NjE0MjI5MEM0MDBGQUY5
QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5oICovLAorCQkJCTkzQTg4QjM0MUJDNkVBQkEwMEFCQTVD
MiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAgKi8sCisJCQkJOTNBODhCMzExQkM2RTlDMDAw
QUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmggKi8sCiAJCQkJQkNDRjZBQkExMkM5MUVG
OTAwOEY5QzM1IC8qIFdlYkltYWdlLmNwcCAqLywKIAkJCQlCQ0NGNkFCQjEyQzkxRUY5MDA4RjlD
MzUgLyogV2ViSW1hZ2UuaCAqLywKIAkJCQlDMDMzN0REMjEyN0EyQTBFMDA4RkY0RjQgLyogV2Vi
S2V5Ym9hcmRFdmVudC5jcHAgKi8sCkBAIC01NDM3LDYgKzU0NDksMTAgQEAKIAkJCQkzNzNEMTIy
MTE4QTQ3MzAxMDA2NkQ5Q0MgLyogX1dLRnJhbWVIYW5kbGUuaCAqLywKIAkJCQkzNzNEMTIyMDE4
QTQ3MzAxMDA2NkQ5Q0MgLyogX1dLRnJhbWVIYW5kbGUubW0gKi8sCiAJCQkJMzczRDEyMjYxOEE0
NzNGNjAwNjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCAqLywKKwkJCQk5M0U2QTRF
RDFCQzVERDM5MDBGOEEwRTcgLyogX1dLSGl0VGVzdFJlc3VsdC5oICovLAorCQkJCTkzQTg4QjM3
MUJDNzBGMkUwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0Lm1tICovLAorCQkJCTkzQTg4QjNB
MUJDNzEwRDkwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCAqLywKKwkJCQk5
M0E4OEIzQzFCQzcxQjg5MDBBQkE1QzIgLyogX1dLSW1tZWRpYXRlQWN0aW9uVHlwZS5oICovLAog
CQkJCUExMThBOUYxMTkwOEI4RUEwMEY3QzkyQiAvKiBfV0tOU0ZpbGVNYW5hZ2VyRXh0cmFzLmgg
Ki8sCiAJCQkJQTExOEE5RjAxOTA4QjhFQTAwRjdDOTJCIC8qIF9XS05TRmlsZU1hbmFnZXJFeHRy
YXMubW0gKi8sCiAJCQkJMUE5RTMyOEIxODIxNjVBOTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVj
dEludGVyZmFjZS5oICovLApAQCAtNjUxMiw3ICs2NTI4LDcgQEAKIAkJCQlCQ0UyMzI2MjEyMkM2
Q0YzMDBENUMzNUEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tICovLAogCQkJCUJDMTEx
QjVCMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAqLywKIAkJCQlCQzExMUI1
QzExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tICovLAotCQkJCTUxQUQzNTcy
MUFEMkYzNzUwMDU3QjM4RSAvKiBXZWJIaXRUZXN0UmVzdWx0Lm1tICovLAorCQkJCTkzQTg4QjJF
MUJDNkU5OEYwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5tbSAqLywKIAkJCQk5MDU2
MjBFNTEyQkMyNDc2MDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5tYWMubW0gKi8sCiAJCQkp
OwogCQkJcGF0aCA9IG1hYzsKQEAgLTcwMzgsNiArNzA1NCw4IEBACiAJCQkJMUFDMTMzNzAxODU2
NkM3QzAwRjNFQzA1IC8qIEFQSUZyYW1lSGFuZGxlLmggKi8sCiAJCQkJMUFDMTMzNzMxODU3QzIx
RTAwRjNFQzA1IC8qIEFQSUdlb21ldHJ5LmNwcCAqLywKIAkJCQkwRjE3NEFBMjE0MkE0Q0I2MDAz
OTI1MEYgLyogQVBJR2VvbWV0cnkuaCAqLywKKwkJCQk5M0U2QTRFRjFCQzVFRkQ1MDBGOEEwRTcg
LyogQVBJSGl0VGVzdFJlc3VsdC5jcHAgKi8sCisJCQkJOTNFNkE0RjAxQkM1RUZENTAwRjhBMEU3
IC8qIEFQSUhpdFRlc3RSZXN1bHQuaCAqLywKIAkJCQlCQzMzREQ2NzEyMzg0NjQ2MDAzNjBGM0Yg
LyogQVBJTnVtYmVyLmggKi8sCiAJCQkJQjYzNDAzRjgxNDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9i
amVjdC5jcHAgKi8sCiAJCQkJQkNGMDRDOEMxMUZGOUI3RDAwRjg2QTU4IC8qIEFQSU9iamVjdC5o
ICovLApAQCAtNzcxMiw2ICs3NzMwLDcgQEAKIAkJCQkxQTIzMjkwMzE2MkM4NjczMDBEODJGN0Eg
LyogTWVzc2FnZURlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjMyOEZGMTYyQzg2NkEw
MEQ4MkY3QSAvKiBNZXNzYWdlRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNEM4Mjkx
NkI4NzZBOTAwNjlEQ0NEIC8qIE1lc3NhZ2VGbGFncy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNB
ODhCM0IxQkM3MTBEOTAwQUJBNUMyIC8qIF9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUEzRUVEMTIxNjFBNTNENjAwQUVCNEY1IC8qIE1lc3NhZ2VSZWNlaXZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRUVEMEYxNjFBNTM1NDAwQUVCNEY1IC8qIE1lc3Nh
Z2VSZWNlaXZlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1QUI2MkUxQTY5RDZGQjAwMTRB
OUNCIC8qIE1lc3NhZ2VSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODI4LDYgKzc4NDcs
NyBAQAogCQkJCUUxQjc4NDcxMTYzRjI0NjkwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzODAxODU5MEFFNDAwRjNFQzA1IC8qIFJl
bW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMxMzM4NjE4NTkwQzQ2
MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTNFNkE0RjMxQkM1RUZFRTAwRjhBMEU3IC8qIEFQSUhpdFRlc3RSZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNTk0NzkwMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3QTgxODdCNTE3NjAwNDM3
ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTk0NzlCMTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTc4NzMsNiArNzg5Myw3IEBACiAJCQkJQ0Ux
QTBCRDcxQTQ4RTZDNjAwNTRFRjc0IC8qIFRleHRJbnB1dFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFBRjI2MzkxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUYwNUQ4NzE0Njg4MzQ4MDA4QjFFODEgLyogVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNB
ODhCM0QxQkM3MUI4OTAwQUJBNUMyIC8qIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRkU0MzY2MThCNkMwODEwMDlDN0E0OCAvKiBVSURlbGVnYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRUU0QUUyQjFBNURDRjQzMDAwMkY0OUIgLyogVUlLaXRTUEkuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNUU3NzMwMTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJE
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTYxLDcgKzc5ODIsNiBAQAogCQkJCUJDMEU2
MTgzMTJENkNCMUQwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzBFNjA3MzEyRDZCQzIwMDAxMkE3MkEgLyogV2ViR2Vv
bG9jYXRpb25Qb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxQkUxRjIxMkQ1NERCRDAw
MDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTc4
MDFDMDlBMTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTFCMjRBQjEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTgzNDU5MzEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFi
YXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQwMkY2QTEzMkVDNzM3MDBCRUFBOTYg
LyogV2ViSWNvbkRhdGFiYXNlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODAwNyw2ICs4
MDI3LDcgQEAKIAkJCQlCQzg1N0Y4NTEyQjgyRDBCMDBFREVCMkUgLyogV2ViT3BlblBhbmVsUmVz
dWx0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMURGRUE0MTJCMzFGODcwMDVERjcz
MCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzAzMkQ4RjEwRjQzN0EwMDA1OEMxNUEgLyogV2ViUGFnZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTNBODhCMzMxQkM2RTlDRDAwQUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjIwNjEyOUEwQTY3
MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjI1MjEy
QTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjYwLDYgKzgyODEsNyBAQAogCQkJCUJDN0I2MzM3MTJBNDVBQkEwMEQxNzRBNCAvKiBXS1BhZ2VH
cm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5RUEzMEQxQTk2Q0I1OTAwMkQyODA3IC8qIFdL
UGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFFQzE4
NDAwODA5MDBFOUFFNjkgLyogV0tQYWdlTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5M0U2QTRFRTFCQzVERDM5MDBGOEEwRTcgLyogX1dLSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMyRDAyMTkxMkFDNDI2QzAwRTczMkEzIC8qIFdLUGFnZUxvYWRUeXBlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCREVCMDExNzFERDdBRjAwQkZFRTFCIC8qIFdLUGFnZUxv
YWRUeXBlc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzMwMzc5MUE3QzJCNzUwMEY4
RjQ4NyAvKiBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTkzMzks
NiArOTM2MSw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk5M0E4OEIzOTFCQzcwRjNG
MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3QTVF
MDEzMThCQkY5MzcwMDBBMDgxRSAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUExQTRGRTVCMThEQ0U5RkEwMEI1RUE4QSAvKiBfV0tEb3dubG9hZC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTM3OUE4NzM5MThCQkZFMEYwMDU4OEFGMiAvKiBfV0tFbGVtZW50
QWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05ODAwLDggKzk4MjMsNiBAQAogCQkJCUJDMEU2
MTgyMTJENkNCMUQwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzBFNjA3NDEyRDZCQzIwMDAxMkE3MkEg
LyogV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzFCRTFG
MzEyRDU0REJEMDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk3ODAxQzA5OTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUFEMzU3MzFBRDJGMzk0MDA1N0IzOEUgLyogV2ViSGl0
VGVzdFJlc3VsdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMUIyNEFBMTMyRTA5NzIwMDA2NUEw
QyAvKiBXZWJJY29uRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4MzQ1OTIxMzQ1
MzJFOTAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MUQwMkY2NDEzMkVDNUI5MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTkxOSw2ICs5OTQwLDcgQEAKIAkJCQlCQ0Ew
RUY4MDEyMzMxRTc4MDA3RDNDRkIgLyogV2ViVW5kb1N0ZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFBRjA4QUQxOTI2OTM2NzAwQjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFGMDhCNzE5MjY5RTZEMDBCNjM5MEMgLyogV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTkzRTZBNEY0MUJDNUVGRjcwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBQUYwOEExMTkyNjgxRDEwMEI2MzkwQyAvKiBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzM2MUQ3ODE5MjgwM0JEMDAz
NkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTU3MzlCQkUxQjQyMDQ2NjAwRDI1OEMxIC8qIFdlYlVzZXJN
ZWRpYUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5NjIsNiArOTk4NCw3IEBACiAJCQkJ
RURDQTcxQjcxMjhEREE4QzAwMjAxQjI2IC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM2MEM1N0ExMjQwQTU0NjAwOEM1RTI5IC8qIFdLQnVuZGxlUmFuZ2VI
YW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNERGOUUxMjBCNjM1RjAwODI2QzBDIC8q
IFdLQnVuZGxlU2NyaXB0V29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNBODhCMzYxQkM2
RUFENTAwQUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNDA3NUY1MTI0RkYwMjcwMDY4RjIwQSAvKiBXS0NlcnRpZmljYXRlSW5mby5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzQwNzYyODEyNEZGMDQwMDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0
ZUluZm9NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0EyODRENjE0OTJGMkM3MDAxRjkwNDIg
LyogV0tDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05OTk5LDYgKzEwMDIyLDcgQEAK
IAkJCQlCQ0QwMTM5QzExMEZBNDIwMDAzQjhBNjcgLyogV0tGcmFtZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTRENjY0QjE4QTMwMzBFMDBEODJFMjEgLyogV0tGcmFtZUluZm8ubW0gaW4gU291
cmNlcyAqLywKIAkJCQkyRDNBNjVFNjFBN0MzQUE3MDBDQUM2MzcgLyogV0tGcmFtZUluZm9SZWYu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNBODhCMzAxQkM2RTk5NzAwQUJBNUMyIC8qIFdlYkhp
dFRlc3RSZXN1bHREYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCOUY2QTYxMTIzREQwRDAw
QTEzN0UwIC8qIFdLRnJhbWVQb2xpY3lMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MUFFQTIzMDE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDQTg1QzgxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsOCArMzcsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJMYXllckhv
c3RpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgogCiBPQkpDX0NM
QVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1MgTlNPYmplY3Q7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaAkocmV2aXNpb24gMTkw
Njc0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVk
ZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIE9CSkNf
Q0xBU1MgQ0FMYXllcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBACiAvLyBGSVhNRTogRXZlbnR1YWxseSB0aGlzIHNob3VsZCBtb3ZlIHRvIFdl
YkNvcmUuCiAKICNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0
LmgiCisjaW5jbHVkZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgogCiBPQkpDX0NMQVNTIE5TRGljdGlv
bmFyeTsKIE9CSkNfQ0xBU1MgUERGU2VsZWN0aW9uOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RS
ZXN1bHQuaCIKICNlbmRpZgogCiAjaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShYMTEpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgJ
KHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVz
dFJlc3VsdC5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbmRPcHRpb25z
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgpAQCAtMTA0LDcgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKIAotICAgIFN0cmluZyBsb29rdXBUZXh0QXRMb2NhdGlvbihj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIFBERlNl
bGVjdGlvbiAqKiwgTlNEaWN0aW9uYXJ5ICoqKSBjb25zdDsKKyAgICBTdHJpbmcgbG9va3VwVGV4
dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdlYkhpdFRlc3RSZXN1bHRE
YXRhJiwgUERGU2VsZWN0aW9uICoqLCBOU0RpY3Rpb25hcnkgKiopIGNvbnN0OwogICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCB2aWV3UmVjdEZvclNlbGVjdGlvbihQREZTZWxlY3Rpb24gKikgY29uc3Q7
CiAKICAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24g
MTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4OTgsNyArMTg5OCw3IEBAIHN0YXRpYyBOU1BvaW50
IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW4KICAgICByZXR1cm4gTlNQb2ludEZyb21DR1BvaW50
KG5ld1BvaW50KTsKIH0KIAotU3RyaW5nIFBERlBsdWdpbjo6bG9va3VwVGV4dEF0TG9jYXRpb24o
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcywgV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YSYgZGF0YSwgUERGU2VsZWN0aW9uICoqc2VsZWN0aW9uUHRyLCBO
U0RpY3Rpb25hcnkgKipvcHRpb25zKSBjb25zdAorU3RyaW5nIFBERlBsdWdpbjo6bG9va3VwVGV4
dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29y
ZGluYXRlcywgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGRhdGEsIFBERlNlbGVjdGlvbiAqKnNlbGVj
dGlvblB0ciwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucykgY29uc3QKIHsKICAgICBQREZTZWxlY3Rp
b24qJiBzZWxlY3Rpb24gPSAqc2VsZWN0aW9uUHRyOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3
ICs2MDIsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsCiAgICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
bV9wYWdlLCBoaXRUZXN0UmVzdWx0LCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPiht
b2RpZmllckZsYWdzKSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3Mu
Ci0gICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSB3ZWJIaXRUZXN0UmVzdWx0RGF0YShoaXRUZXN0
UmVzdWx0KTsKKyAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSB3ZWJIaXRUZXN0UmVzdWx0RGF0YSho
aXRUZXN0UmVzdWx0KTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQod2ViSGl0VGVzdFJlc3VsdERhdGEsIG1vZGlmaWVyRmxh
Z3MsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hh
bmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCkBAIC02MTQsNyArNjE0LDcgQEAg
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEJlZ2luVHJhY2tpbmdQbwogICAgIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVVSUNsaWVudCgpLmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQ
cmVzcyhtX3BhZ2UsIG1vdXNlRG93blBvc2l0aW9uLCBoaXRUZXN0UmVzdWx0LCB1c2VyRGF0YSk7
CiAgICAgCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YSB3ZWJIaXRUZXN0UmVzdWx0RGF0YShoaXRUZXN0UmVzdWx0KTsKKyAgICBXZWJIaXRU
ZXN0UmVzdWx0RGF0YSB3ZWJIaXRUZXN0UmVzdWx0RGF0YShoaXRUZXN0UmVzdWx0KTsKICAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQmVnaW5UcmFja2luZ1BvdGVu
dGlhbExvbmdNb3VzZVByZXNzKG1vdXNlRG93blBvc2l0aW9uLCB3ZWJIaXRUZXN0UmVzdWx0RGF0
YSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFu
ZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9u
IDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgUExBVEZPUk0o
TUFDKQogCisjaW1wb3J0ICJBUElIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJBdHRyaWJ1dGVk
U3RyaW5nLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJFZGl0aW5nUmFu
Z2UuaCIKQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0ICJX
ZWJFdmVudENvbnZlcnNpb24uaCIKICNpbXBvcnQgIldlYkZyYW1lLmgiCi0jaW1wb3J0ICJXZWJI
aXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJXZWJJbWFnZS5oIgogI2ltcG9ydCAiV2ViSW5zcGVj
dG9yLmgiCiAjaW1wb3J0ICJXZWJQYWdlT3ZlcmxheS5oIgpAQCAtMTA3NSw3ICsxMDc1LDcgQEAg
dm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VAogCiAgICAgTWFpbkZyYW1l
JiBtYWluRnJhbWUgPSBjb3JlUGFnZSgpLT5tYWluRnJhbWUoKTsKICAgICBpZiAoIW1haW5GcmFt
ZS52aWV3KCkgfHwgIW1haW5GcmFtZS52aWV3KCktPnJlbmRlclZpZXcoKSkgewotICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRU
ZXN0KFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEoKSwgZmFsc2UsIFVzZXJEYXRhKCkpKTsKKyAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9u
SGl0VGVzdChXZWJIaXRUZXN0UmVzdWx0RGF0YSgpLCBmYWxzZSwgVXNlckRhdGEoKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDg5LDcgKzEwODksNyBAQCB2b2lkIFdlYlBhZ2U6
OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUCiAgICAgaWYgKGVsZW1lbnQpCiAgICAgICAgIGlt
bWVkaWF0ZUFjdGlvbkhpdFRlc3RQcmV2ZW50c0RlZmF1bHQgPSBlbGVtZW50LT5kaXNwYXRjaE1v
dXNlRm9yY2VXaWxsQmVnaW4oKTsKIAotICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaW1tZWRp
YXRlQWN0aW9uUmVzdWx0KGhpdFRlc3RSZXN1bHQpOworICAgIFdlYkhpdFRlc3RSZXN1bHREYXRh
IGltbWVkaWF0ZUFjdGlvblJlc3VsdChoaXRUZXN0UmVzdWx0KTsKIAogICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262750</attachid>
            <date>2015-10-08 22:53:34 -0700</date>
            <delta_ts>2015-10-09 10:50:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>146644</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDc1NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBAQAorMjAxNS0xMC0wOCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJWaWV3IG5lZWRzIFNQSSB0
byBjdXN0b21pemUgaW1tZWRpYXRlIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTkzOQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmct
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwMDE2ODQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBicmVha3MgV2ViSGl0VGVzdFJl
c3VsdCBpbnRvIHR3byBmaWxlcy4gV2ViSGlUZXN0UmVzdWx0RGF0YSAKKyAgICAgICAgY29udGlu
dWVzIHRvIGxpdmUgaW4gdGhlIFdlYktpdCBuYW1lc3BhY2UgYW5kIGNvbnRhaW5zIHRoZSBvbGQg
CisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgc3RydWN0LiBUaGUgcmVzdCBvZiBXZWJI
aXRUZXN0UmVzdWx0IGlzIG5vdyAKKyAgICAgICAgQVBJOjpIaXRUZXN0UmVzdWx0LiBUaGUgcGF0
Y2ggYWxzbyBhZGRzIF9XS0hpdFRlc3RSZXN1bHQgYXMgT2JqLUMgQVBJIHRvIHdyYXAgCisgICAg
ICAgIEFQSTo6SGl0VGVzdFJlc3VsdC4KKworICAgICAgICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1
bHQgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSBEYXRhIHN0cnVjdCBhbmQgaXMgbm93IGNhbGxlZCAK
KyAgICAgICAgQVBJOjpIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFNoYXJlZC9BUEkvQVBJSGl0
VGVzdFJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcC4K
KyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6On5EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1l
bnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIFNo
YXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oOiBDb3BpZWQgZnJvbSBTaGFyZWQvV2ViSGl0VGVz
dFJlc3VsdC5oLgorICAgICAgICAoQVBJOjpIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUltYWdlVVJM
KToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwpOgorICAgICAg
ICAoQVBJOjpIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOgorICAgICAgICAoQVBJOjpI
aXRUZXN0UmVzdWx0OjphYnNvbHV0ZU1lZGlhVVJMKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJl
c3VsdDo6bGlua0xhYmVsKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6bGlua1RpdGxl
KToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6bG9va3VwVGV4dCk6CisgICAgICAgIChB
UEk6OkhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKEFQSTo6SGl0
VGVzdFJlc3VsdDo6aXNEb3dubG9hZGFibGVNZWRpYSk6CisgICAgICAgIChBUEk6OkhpdFRlc3RS
ZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
OjphYnNvbHV0ZUltYWdlVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVz
dFJlc3VsdDo6YWJzb2x1dGVQREZVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJI
aXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZU1lZGlhVVJMKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bGlua0xhYmVsKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bGlua1RpdGxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bG9va3VwVGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6aXNEb3dubG9hZGFibGVNZWRpYSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OldlYkhpdFRlc3RS
ZXN1bHQpOiBEZWxldGVkLgorCisgICAgICAgIFRoaXMgaXMgYSBuZXcgb2JqLWMgb2JqZWN0IHRo
YXQgd2UgY2FuIHVzZSBmb3IgdGhlIG1vZGVybiBpbW1lZGlhdGUgYWN0aW9uIAorICAgICAgICBB
UEkuCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0Lmg6IEFkZGVk
LgorICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5tbTogQWRkZWQu
CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgZGVhbGxvY10pOgorICAgICAgICAoLVtfV0tI
aXRUZXN0UmVzdWx0IGFic29sdXRlSW1hZ2VVUkxdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJl
c3VsdCBhYnNvbHV0ZVBERlVSTF0pOgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVzdWx0IGFic29s
dXRlTGlua1VSTF0pOgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVzdWx0IGFic29sdXRlTWVkaWFV
UkxdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBsaW5rTGFiZWxdKToKKyAgICAgICAg
KC1bX1dLSGl0VGVzdFJlc3VsdCBsaW5rVGl0bGVdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJl
c3VsdCBsb29rdXBUZXh0XSk6CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgaXNDb250ZW50
RWRpdGFibGVdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBlbGVtZW50Qm91bmRpbmdC
b3hdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBjb3B5V2l0aFpvbmU6XSk6CisgICAg
ICAgICgtW19XS0hpdFRlc3RSZXN1bHQgX2FwaU9iamVjdF0pOgorCisgICAgICAgIF9XS0hpdFRl
c3RSZXN1bHQgd3JhcHMgQVBJOjpIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFNoYXJlZC9BUEkv
Q29jb2EvX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAoQVBJOjp3
cmFwcGVyKToKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tOgorICAgICAgICAo
QVBJOjpPYmplY3Q6Om5ld09iamVjdCk6CisKKyAgICAgICAgV2UgbmVlZCBhIG5ldyB2ZXJzaW9u
IG9mIHRoaXMgZW51bSB0b28uIFRoZSBuZXcgdmVyc2lvbiBoYXMgdGhlIHVuZm9ydHVuYXRlIAor
ICAgICAgICBuYW1lIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGVzIChub3RlIHRoZSBzKS4KKyAgICAg
ICAgKiBTaGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaDogQWRkZWQuCisK
KyAgICAgICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBpcyBub3cgV2ViSGl0VGVzdFJlc3VsdERh
dGEuCisgICAgICAgICogU2hhcmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEuaDoKKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0RGF0YTo6d2ViSGl0VGVzdFJlc3VsdERhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjpzZWxlY3RlZFRleHQpOgor
CisgICAgICAgIFJlbW92ZSBXZWJIaXRUZXN0UmVzdWx0LCBhbmQgYWRkIFdlYkhpdFRlc3RSZXN1
bHREYXRhIGZvciB0aGUgRGF0YSBzdHJ1Y3QuCisgICAgICAgICogU2hhcmVkL1dlYkhpdFRlc3RS
ZXN1bHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0Lmg6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpXZWJIaXRUZXN0UmVz
dWx0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjp+V2ViSGl0
VGVzdFJlc3VsdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6OmRlY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybURlY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjplbGVtZW50Qm91bmRpbmdC
b3hJbldpbmRvd0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKiBTaGFyZWQvV2ViSGl0VGVzdFJlc3Vs
dERhdGEuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1t
OiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW06
IENvcGllZCBmcm9tIFNoYXJlZC9tYWMvCisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQubW0uCisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybURlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZv
cm1EZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaXMg
bm93IFdlYkhpdFRlc3RSZXN1bHREYXRhLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29u
dGV4dE1lbnVDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6Q29udGV4dE1lbnVDbGllbnQ6On5Db250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChBUEk6OkNvbnRleHRNZW51Q2xpZW50OjpnZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUpOgorICAgICAgICAoQVBJOjpDb250ZXh0TWVudUNsaWVu
dDo6Y3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoQVBJOjpDb250ZXh0
TWVudUNsaWVudDo6Y29udGV4dE1lbnVEaXNtaXNzZWQpOgorICAgICAgICAoQVBJOjpDb250ZXh0
TWVudUNsaWVudDo6c2hvd0NvbnRleHRNZW51KToKKworICAgICAgICBXZWJIaXRUZXN0UmVzdWx0
IGlzIG5vdyBXZWJIaXRUZXN0UmVzdWx0CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNs
aWVudC5oOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21wdCk6Cisg
ICAgICAgIChBUEk6OlVJQ2xpZW50OjpzZXRTdGF0dXNUZXh0KToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50
OjpwaW5uZWRTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpkaWRCZWdp
blRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MpOgorICAgICAgICAoQVBJOjpVSUNsaWVu
dDo6ZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6
ZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0hp
dFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV0tIaXRUZXN0UmVzdWx0R2V0VHlwZUlEKToKKyAg
ICAgICAgKFdLSGl0VGVzdFJlc3VsdENvcHlBYnNvbHV0ZUltYWdlVVJMKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VDb250ZXh0
TWVudUNsaWVudCk6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlVUlDbGllbnQpOgorCisgICAgICAg
IE5ldyBXS1dlYlZpZXcgU1BJIF9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9y
SGl0VGVzdFJlc3VsdAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF9k
aWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDpjb250ZW50UHJldmVudHNEZWZhdWx0OnVz
ZXJEYXRhOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6
CisKKyAgICAgICAgUGFnZUNsaWVudCB3aWxsIGZpZ3VyZSBvdXQgd2hldGhlciB0byBjYWxsIGlu
dG8gV0tXZWJWaWV3IG9yIFdLVmlldyBmb3IgdGhpcyAKKyAgICAgICAgU1BJLgorICAgICAgICAq
IFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25D
b250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdCk6CisKKyAgICAgICAgV2ViS2l0OjpXZWJIaXRUZXN0
UmVzdWx0OjpEYXRhIGlzIG5vdyBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisKKyAgICAgICAgV0tJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIGNhbGxzIHRocm91Z2ggdG8gV2ViUGFnZVByb3h5IHdoaWNo
IGNhbGxzIHRvIAorICAgICAgICBQYWdlQ2xpZW50LCB3aGljaCBmaWd1cmVzIG91dCB3aGljaCBB
UEkgdG8gY2FsbC8KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9s
bGVyRm9ySGl0VGVzdFJlc3VsdCk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyIF91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtXSk6CisKKyAgICAgICAgV2ViSGl0VGVzdFJl
c3VsdDo6RGF0YSBpcyBub3cgV2ViSGl0VGVzdFJlc3VsdERhdGEuCisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6cGxhdGZvcm1Jbml0aWFsaXplU2hhcmVNZW51SXRlbSk6CisKKyAgICAgICAgTG90cyBvZiBj
aHVybi4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAg
ICAgICAgTmV3IG5hbWVzIGZvciB0aGluZ3MuIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgLT4gV2Vi
SGl0VGVzdFJlc3VsdERhdGEKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgor
ICAgICAgICAoV2ViS2l0Ojpwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZEJl
Z2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOgorCiAyMDE1LTEwLTA4ICBN
aWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBGb3Jt
YXQgc3RyaW5nIGlzc3VlcyBpbiBOZXR3b3JrQ2FjaGUuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTI0OCw3ICsyNDgsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgU2hhcmVkL1dlYkV2ZW50LmNwcAogICAgIFNoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3Bw
CiAgICAgU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCi0gICAgU2hhcmVkL1dlYkhp
dFRlc3RSZXN1bHQuY3BwCisgICAgU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmNwcAogICAg
IFNoYXJlZC9XZWJJbWFnZS5jcHAKICAgICBTaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAKICAg
ICBTaGFyZWQvV2ViS2l0MkluaXRpYWxpemUuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIAogI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNp
bmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogCiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNz
IEFyZ3VtZW50RGVjb2RlcjsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIENvbnRleHRN
ZW51Q29udGV4dERhdGEoKTsKICAgICBDb250ZXh0TWVudUNvbnRleHREYXRhKGNvbnN0IFdlYkNv
cmU6OkNvbnRleHRNZW51Q29udGV4dCYpOwogICAgIAotICAgIGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGEmIHdlYkhpdFRlc3RSZXN1bHREYXRhKCkgY29uc3QgeyByZXR1cm4gbV93ZWJIaXRU
ZXN0UmVzdWx0RGF0YTsgfQorICAgIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiB3ZWJIaXRU
ZXN0UmVzdWx0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViSGl0VGVzdFJlc3VsdERhdGE7IH0K
ICAgICBjb25zdCBTdHJpbmcmIHNlbGVjdGVkVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
ZWRUZXh0OyB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYs
IENvbnRleHRNZW51Q29udGV4dERhdGEmKTsKIAogcHJpdmF0ZToKLSAgICBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhIG1fd2ViSGl0VGVzdFJlc3VsdERhdGE7CisgICAgV2ViSGl0VGVzdFJlc3VsdERh
dGEgbV93ZWJIaXRUZXN0UmVzdWx0RGF0YTsKICAgICBTdHJpbmcgbV9zZWxlY3RlZFRleHQ7CiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJIaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YkhpdFRlc3RSZXN1bHQuaCIKLQotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hpdFRl
c3RSZXN1bHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvVVJMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob2RlLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotUGFzc1JlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBXZWJIaXRUZXN0UmVz
dWx0OjpjcmVhdGUoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERh
dGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJIaXRUZXN0UmVzdWx0KGhpdFRlc3RS
ZXN1bHREYXRhKSk7Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoKQotewotfQot
Ci1XZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRl
c3RSZXN1bHQpCi0gICAgOiBhYnNvbHV0ZUltYWdlVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVJ
bWFnZVVSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVQREZVUkwoaGl0VGVzdFJlc3VsdC5h
YnNvbHV0ZVBERlVSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVMaW5rVVJMKGhpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZU1lZGlhVVJM
KGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpKQotICAgICwgbGlua0xh
YmVsKGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKSkKLSAgICAsIGxpbmtUaXRsZShoaXRUZXN0
UmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpKQotICAgICwgaXNDb250ZW50RWRpdGFibGUoaGl0
VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICwgZWxlbWVudEJvdW5kaW5nQm94
KGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoaGl0VGVzdFJlc3VsdCkpCi0g
ICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0UmVzdWx0LnNjcm9sbGJhcigpKQotICAgICwgaXNTZWxl
Y3RlZChoaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSkKLSAgICAsIGlzVGV4dE5vZGUoaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5pc1RleHRO
b2RlKCkpCi0gICAgLCBpc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KGhpdFRlc3RS
ZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCgpKQotICAgICwgYWxsb3dz
Q29weShoaXRUZXN0UmVzdWx0LmFsbG93c0NvcHkoKSkKLSAgICAsIGlzRG93bmxvYWRhYmxlTWVk
aWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25sb2FkYWJsZU1lZGlhKCkpCi0gICAgLCBpbWFnZVNpemUo
MCkKLXsKLX0KLQotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YShjb25zdCBXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBib29sIGluY2x1ZGVJbWFnZSkKLSAgICA6IGFi
c29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkp
Ci0gICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlUERGVVJMKCkuc3Ry
aW5nKCkpCi0gICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtV
UkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVzdFJlc3VsdC5hYnNv
bHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBsaW5rTGFiZWwoaGl0VGVzdFJlc3VsdC50
ZXh0Q29udGVudCgpKQotICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQudGl0bGVEaXNwbGF5
U3RyaW5nKCkpCi0gICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkpCi0gICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudEJvdW5kaW5nQm94
SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKLSAgICAsIGlzU2Nyb2xsYmFyKGhp
dFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCi0gICAgLCBpc1NlbGVjdGVkKGhpdFRlc3RSZXN1bHQu
aXNTZWxlY3RlZCgpKQotICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgp
ICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKLSAgICAsIGlzT3Zl
clRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5pc092ZXJUZXh0SW5z
aWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgLCBhbGxvd3NDb3B5KGhpdFRlc3RSZXN1bHQu
YWxsb3dzQ29weSgpKQotICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRUZXN0UmVzdWx0Lmlz
RG93bmxvYWRhYmxlTWVkaWEoKSkKLSAgICAsIGltYWdlU2l6ZSgwKQotewotICAgIGlmICghaW5j
bHVkZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoSW1hZ2UqIGltYWdlID0gaGl0
VGVzdFJlc3VsdC5pbWFnZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
ciA9IGltYWdlLT5kYXRhKCk7Ci0gICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIGlt
YWdlU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShidWZmZXItPnNpemUoKSk7
Ci0gICAgICAgICAgICBtZW1jcHkoaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSwgYnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAgICAgICAgIGltYWdlU2l6ZSA9IGJ1ZmZlci0+
c2l6ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1XZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjp+
RGF0YSgpCi17Ci19Ci0KLXZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZW5jb2RlKElQQzo6
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgYWJzb2x1
dGVJbWFnZVVSTDsKLSAgICBlbmNvZGVyIDw8IGFic29sdXRlUERGVVJMOwotICAgIGVuY29kZXIg
PDwgYWJzb2x1dGVMaW5rVVJMOwotICAgIGVuY29kZXIgPDwgYWJzb2x1dGVNZWRpYVVSTDsKLSAg
ICBlbmNvZGVyIDw8IGxpbmtMYWJlbDsKLSAgICBlbmNvZGVyIDw8IGxpbmtUaXRsZTsKLSAgICBl
bmNvZGVyIDw8IGlzQ29udGVudEVkaXRhYmxlOwotICAgIGVuY29kZXIgPDwgZWxlbWVudEJvdW5k
aW5nQm94OwotICAgIGVuY29kZXIgPDwgaXNTY3JvbGxiYXI7Ci0gICAgZW5jb2RlciA8PCBpc1Nl
bGVjdGVkOwotICAgIGVuY29kZXIgPDwgaXNUZXh0Tm9kZTsKLSAgICBlbmNvZGVyIDw8IGlzT3Zl
clRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7Ci0gICAgZW5jb2RlciA8PCBhbGxvd3NDb3B5
OwotICAgIGVuY29kZXIgPDwgaXNEb3dubG9hZGFibGVNZWRpYTsKLSAgICBlbmNvZGVyIDw8IGxv
b2t1cFRleHQ7Ci0gICAgZW5jb2RlciA8PCBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotCi0gICAgU2hh
cmVkTWVtb3J5OjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKGltYWdlU2hhcmVkTWVtb3J5
ICYmIGltYWdlU2hhcmVkTWVtb3J5LT5kYXRhKCkpCi0gICAgICAgIGltYWdlU2hhcmVkTWVtb3J5
LT5jcmVhdGVIYW5kbGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVh
ZE9ubHkpOwotICAgIGVuY29kZXIgPDwgaW1hZ2VIYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBpbWFn
ZVNpemU7Ci0KLSAgICBib29sIGhhc0xpbmtUZXh0SW5kaWNhdG9yID0gbGlua1RleHRJbmRpY2F0
b3I7Ci0gICAgZW5jb2RlciA8PCBoYXNMaW5rVGV4dEluZGljYXRvcjsKLSAgICBpZiAoaGFzTGlu
a1RleHRJbmRpY2F0b3IpCi0gICAgICAgIGVuY29kZXIgPDwgbGlua1RleHRJbmRpY2F0b3ItPmRh
dGEoKTsKLQotICAgIHBsYXRmb3JtRW5jb2RlKGVuY29kZXIpOwotfQotCi1ib29sIFdlYkhpdFRl
c3RSZXN1bHQ6OkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCi17Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZUltYWdlVVJMKQotICAgICAgICB8
fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWJzb2x1dGVQREZVUkwpCi0gICAg
ICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZUxpbmtVUkwp
Ci0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZU1l
ZGlhVVJMKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEubGlu
a0xhYmVsKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEubGlu
a1RpdGxlKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXND
b250ZW50RWRpdGFibGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0
RGF0YS5lbGVtZW50Qm91bmRpbmdCb3gpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRU
ZXN0UmVzdWx0RGF0YS5pc1Njcm9sbGJhcikKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhp
dFRlc3RSZXN1bHREYXRhLmlzU2VsZWN0ZWQpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZSho
aXRUZXN0UmVzdWx0RGF0YS5pc1RleHROb2RlKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
aGl0VGVzdFJlc3VsdERhdGEuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCkKLSAg
ICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFsbG93c0NvcHkpCi0g
ICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc0Rvd25sb2FkYWJs
ZU1lZGlhKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEubG9v
a3VwVGV4dCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmRp
Y3Rpb25hcnlQb3B1cEluZm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaGFyZWRN
ZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGltYWdl
SGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpbWFnZUhhbmRsZS5p
c051bGwoKSkKLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaGFyZWRNZW1vcnkgPSBT
aGFyZWRNZW1vcnk6Om1hcChpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlt
YWdlU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGFzTGlua1RleHRJ
bmRpY2F0b3I7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNMaW5rVGV4dEluZGljYXRvcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChoYXNMaW5rVGV4dEluZGljYXRvcikg
ewotICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3JEYXRhOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZGljYXRvckRhdGEpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmxpbmtUZXh0SW5kaWNhdG9y
ID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRhdGEpOwotICAgIH0K
LQotICAgIHJldHVybiBwbGF0Zm9ybURlY29kZShkZWNvZGVyLCBoaXRUZXN0UmVzdWx0RGF0YSk7
Ci19Ci0KLSNpZiAhUExBVEZPUk0oTUFDKQotdm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpw
bGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLX0K
LQotYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZShJUEM6OkFyZ3Vt
ZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3Vs
dERhdGEpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykK
LQotSW50UmVjdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbGVtZW50Qm91bmRpbmdCb3hJbldp
bmRvd0Nvb3JkaW5hdGVzKGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCi17Ci0g
ICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgRnJhbWUqIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwot
ICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dp
bmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7Ci19Ci0KLX0gLy8gV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmgJKHJldmlz
aW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
V2ViSGl0VGVzdFJlc3VsdF9oCi0jZGVmaW5lIFdlYkhpdFRlc3RSZXN1bHRfaAotCi0jaW5jbHVk
ZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9EaWN0aW9uYXJ5UG9wdXBJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdl
T3ZlcmxheS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLU9CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OwotCi1uYW1lc3BhY2UgSVBD
IHsKLWNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKLWNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKLX0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSGl0VGVzdFJlc3VsdDsKLX0KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFdlYkZyYW1lOwotCi1jbGFzcyBXZWJIaXRUZXN0UmVzdWx0IDog
cHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SGl0VGVzdFJlc3VsdD4g
ewotcHVibGljOgotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAgU3RyaW5nIGFic29sdXRlSW1h
Z2VVUkw7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZVBERlVSTDsKLSAgICAgICAgU3RyaW5nIGFi
c29sdXRlTGlua1VSTDsKLSAgICAgICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkw7Ci0gICAgICAg
IFN0cmluZyBsaW5rTGFiZWw7Ci0gICAgICAgIFN0cmluZyBsaW5rVGl0bGU7Ci0gICAgICAgIGJv
b2wgaXNDb250ZW50RWRpdGFibGU7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJv
dW5kaW5nQm94OwotICAgICAgICBib29sIGlzU2Nyb2xsYmFyOwotICAgICAgICBib29sIGlzU2Vs
ZWN0ZWQ7Ci0gICAgICAgIGJvb2wgaXNUZXh0Tm9kZTsKLSAgICAgICAgYm9vbCBpc092ZXJUZXh0
SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50OwotICAgICAgICBib29sIGFsbG93c0NvcHk7Ci0gICAg
ICAgIGJvb2wgaXNEb3dubG9hZGFibGVNZWRpYTsKLQotICAgICAgICBTdHJpbmcgbG9va3VwVGV4
dDsKLSAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW1hZ2VTaGFyZWRNZW1vcnk7Ci0gICAg
ICAgIHVpbnQ2NF90IGltYWdlU2l6ZTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgUmV0
YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dDsKLSNlbmRp
ZgotICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7Ci0g
ICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBkZXRlY3RlZERhdGFUZXh0SW5k
aWNhdG9yOwotICAgICAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlJRCBkZXRl
Y3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5OwotCi0gICAgICAgIFdlYkNvcmU6OkRpY3Rp
b25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLQotICAgICAgICBSZWZQdHI8V2Vi
Q29yZTo6VGV4dEluZGljYXRvcj4gbGlua1RleHRJbmRpY2F0b3I7Ci0KLSAgICAgICAgRGF0YSgp
OwotICAgICAgICBleHBsaWNpdCBEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsK
LSAgICAgICAgRGF0YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgYm9vbCBpbmNsdWRl
SW1hZ2UpOwotICAgICAgICB+RGF0YSgpOwotCi0gICAgICAgIHZvaWQgZW5jb2RlKElQQzo6QXJn
dW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcGxhdGZvcm1FbmNvZGUoSVBDOjpB
cmd1bWVudEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6
QXJndW1lbnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOwotICAgICAgICBzdGF0
aWMgYm9vbCBwbGF0Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRlc3RS
ZXN1bHQ6OkRhdGEmKTsKLQotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRCb3VuZGlu
Z0JveEluV2luZG93Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOwot
ICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBjcmVhdGUo
Y29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOwotCi0gICAgU3RyaW5nIGFic29sdXRlSW1h
Z2VVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVJbWFnZVVSTDsgfQotICAgIFN0
cmluZyBhYnNvbHV0ZVBERlVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZVBERlVS
TDsgfQotICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
YWJzb2x1dGVMaW5rVVJMOyB9Ci0gICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkwoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEuYWJzb2x1dGVNZWRpYVVSTDsgfQotCi0gICAgU3RyaW5nIGxpbmtMYWJl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5saW5rTGFiZWw7IH0KLSAgICBTdHJpbmcgbGlua1Rp
dGxlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxpbmtUaXRsZTsgfQotICAgIFN0cmluZyBsb29r
dXBUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxvb2t1cFRleHQ7IH0KLQotICAgIGJvb2wg
aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNDb250ZW50RWRpdGFi
bGU7IH0KLQotICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmVsZW1lbnRCb3VuZGluZ0JveDsgfQotCi0gICAgYm9vbCBpc1Njcm9s
bGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc1Njcm9sbGJhcjsgfQotCi0gICAgYm9vbCBp
c1NlbGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzU2VsZWN0ZWQ7IH0KLQotICAgIGJv
b2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc1RleHROb2RlOyB9Ci0KLSAg
ICBib29sIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2RhdGEuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsgfQotCi0gICAgYm9v
bCBhbGxvd3NDb3B5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFsbG93c0NvcHk7IH0KLQotICAg
IGJvb2wgaXNEb3dubG9hZGFibGVNZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc0Rvd25s
b2FkYWJsZU1lZGlhOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViSGl0VGVzdFJlc3Vs
dChjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLSAgICAg
ICAgOiBtX2RhdGEoaGl0VGVzdFJlc3VsdERhdGEpCi0gICAgewotICAgIH0KLQotICAgIERhdGEg
bV9kYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJIaXRU
ZXN0UmVzdWx0X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RS
ZXN1bHREYXRhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJI
aXRUZXN0UmVzdWx0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVz
dWx0RGF0YS5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3Vs
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm9kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
T2JqZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJIaXRUZXN0UmVzdWx0RGF0YTo6V2ViSGl0VGVzdFJlc3VsdERhdGEoKQorewor
fQorCitXZWJIaXRUZXN0UmVzdWx0RGF0YTo6V2ViSGl0VGVzdFJlc3VsdERhdGEoY29uc3QgV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKKyAgICA6IGFic29sdXRlSW1hZ2VV
UkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNv
bHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlUERGVVJMKCkuc3RyaW5nKCkpCisgICAg
LCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmco
KSkKKyAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJM
KCkuc3RyaW5nKCkpCisgICAgLCBsaW5rTGFiZWwoaGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgp
KQorICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkpCisg
ICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29y
ZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKKyAgICAsIGlzU2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQu
c2Nyb2xsYmFyKCkpCisgICAgLCBpc1NlbGVjdGVkKGhpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgp
KQorICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpICYmIGhpdFRlc3RS
ZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICAsIGlzT3ZlclRleHRJbnNpZGVG
b3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRy
b2xFbGVtZW50KCkpCisgICAgLCBhbGxvd3NDb3B5KGhpdFRlc3RSZXN1bHQuYWxsb3dzQ29weSgp
KQorICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRUZXN0UmVzdWx0LmlzRG93bmxvYWRhYmxl
TWVkaWEoKSkKKyAgICAsIGltYWdlU2l6ZSgwKQoreworfQorCitXZWJIaXRUZXN0UmVzdWx0RGF0
YTo6V2ViSGl0VGVzdFJlc3VsdERhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdCwgYm9vbCBpbmNsdWRlSW1hZ2UpCisgICAgOiBhYnNvbHV0ZUltYWdlVVJMKGhp
dFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpKQorICAgICwgYWJzb2x1dGVQ
REZVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZVBERlVSTCgpLnN0cmluZygpKQorICAgICwgYWJz
b2x1dGVMaW5rVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkpCisg
ICAgLCBhYnNvbHV0ZU1lZGlhVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0
cmluZygpKQorICAgICwgbGlua0xhYmVsKGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKSkKKyAg
ICAsIGxpbmtUaXRsZShoaXRUZXN0UmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpKQorICAgICwg
aXNDb250ZW50RWRpdGFibGUoaGl0VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAg
ICwgZWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0
ZXMoaGl0VGVzdFJlc3VsdCkpCisgICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0UmVzdWx0LnNjcm9s
bGJhcigpKQorICAgICwgaXNTZWxlY3RlZChoaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSkKKyAg
ICAsIGlzVGV4dE5vZGUoaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0UmVzdWx0
LmlubmVyTm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgLCBpc092ZXJUZXh0SW5zaWRlRm9ybUNv
bnRyb2xFbGVtZW50KGhpdFRlc3RSZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxl
bWVudCgpKQorICAgICwgYWxsb3dzQ29weShoaXRUZXN0UmVzdWx0LmFsbG93c0NvcHkoKSkKKyAg
ICAsIGlzRG93bmxvYWRhYmxlTWVkaWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25sb2FkYWJsZU1lZGlh
KCkpCisgICAgLCBpbWFnZVNpemUoMCkKK3sKKyAgICBpZiAoIWluY2x1ZGVJbWFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKEltYWdlKiBpbWFnZSA9IGhpdFRlc3RSZXN1bHQuaW1hZ2Uo
KSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBpbWFnZS0+ZGF0YSgp
OworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICBpbWFnZVNoYXJlZE1lbW9yeSA9
IFdlYktpdDo6U2hhcmVkTWVtb3J5OjphbGxvY2F0ZShidWZmZXItPnNpemUoKSk7CisgICAgICAg
ICAgICBtZW1jcHkoaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1
ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGltYWdlU2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOwor
ICAgICAgICB9CisgICAgfQorfQorCitXZWJIaXRUZXN0UmVzdWx0RGF0YTo6fldlYkhpdFRlc3RS
ZXN1bHREYXRhKCkKK3sKK30KKwordm9pZCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6ZW5jb2RlKElQ
Qzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgYWJz
b2x1dGVJbWFnZVVSTDsKKyAgICBlbmNvZGVyIDw8IGFic29sdXRlUERGVVJMOworICAgIGVuY29k
ZXIgPDwgYWJzb2x1dGVMaW5rVVJMOworICAgIGVuY29kZXIgPDwgYWJzb2x1dGVNZWRpYVVSTDsK
KyAgICBlbmNvZGVyIDw8IGxpbmtMYWJlbDsKKyAgICBlbmNvZGVyIDw8IGxpbmtUaXRsZTsKKyAg
ICBlbmNvZGVyIDw8IGlzQ29udGVudEVkaXRhYmxlOworICAgIGVuY29kZXIgPDwgZWxlbWVudEJv
dW5kaW5nQm94OworICAgIGVuY29kZXIgPDwgaXNTY3JvbGxiYXI7CisgICAgZW5jb2RlciA8PCBp
c1NlbGVjdGVkOworICAgIGVuY29kZXIgPDwgaXNUZXh0Tm9kZTsKKyAgICBlbmNvZGVyIDw8IGlz
T3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7CisgICAgZW5jb2RlciA8PCBhbGxvd3ND
b3B5OworICAgIGVuY29kZXIgPDwgaXNEb3dubG9hZGFibGVNZWRpYTsKKyAgICBlbmNvZGVyIDw8
IGxvb2t1cFRleHQ7CisgICAgZW5jb2RlciA8PCBkaWN0aW9uYXJ5UG9wdXBJbmZvOworCisgICAg
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBpZiAoaW1hZ2VT
aGFyZWRNZW1vcnkgJiYgaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSkKKyAgICAgICAgaW1hZ2VT
aGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBlbmNvZGVyIDw8IGltYWdlSGFuZGxlOwor
ICAgIGVuY29kZXIgPDwgaW1hZ2VTaXplOworCisgICAgYm9vbCBoYXNMaW5rVGV4dEluZGljYXRv
ciA9IGxpbmtUZXh0SW5kaWNhdG9yOworICAgIGVuY29kZXIgPDwgaGFzTGlua1RleHRJbmRpY2F0
b3I7CisgICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKQorICAgICAgICBlbmNvZGVyIDw8IGxp
bmtUZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisKKyAgICBwbGF0Zm9ybUVuY29kZShlbmNvZGVyKTsK
K30KKworYm9vbCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCit7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZUltYWdl
VVJMKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWJzb2x1
dGVQREZVUkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5h
YnNvbHV0ZUxpbmtVUkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0
RGF0YS5hYnNvbHV0ZU1lZGlhVVJMKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVz
dFJlc3VsdERhdGEubGlua0xhYmVsKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVz
dFJlc3VsdERhdGEubGlua1RpdGxlKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVz
dFJlc3VsdERhdGEuaXNDb250ZW50RWRpdGFibGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5lbGVtZW50Qm91bmRpbmdCb3gpCisgICAgICAgIHx8ICFkZWNv
ZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1Njcm9sbGJhcikKKyAgICAgICAgfHwgIWRl
Y29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzU2VsZWN0ZWQpCisgICAgICAgIHx8ICFk
ZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1RleHROb2RlKQorICAgICAgICB8fCAh
ZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250
cm9sRWxlbWVudCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRh
LmFsbG93c0NvcHkpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5pc0Rvd25sb2FkYWJsZU1lZGlhKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVz
dFJlc3VsdERhdGEubG9va3VwVGV4dCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRl
c3RSZXN1bHREYXRhLmRpY3Rpb25hcnlQb3B1cEluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIWltYWdlSGFuZGxlLmlzTnVsbCgpKQorICAgICAgICBoaXRUZXN0UmVzdWx0RGF0
YS5pbWFnZVNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjptYXAoaW1hZ2VIYW5k
bGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmltYWdlU2l6ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaGFzTGlua1RleHRJbmRpY2F0b3I7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShoYXNMaW5rVGV4dEluZGljYXRvcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChoYXNMaW5rVGV4dEluZGljYXRvcikgeworICAgICAgICBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3JEYXRhOworICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGluZGljYXRvckRhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGhpdFRlc3RSZXN1bHREYXRhLmxpbmtUZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dElu
ZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRhdGEpOworICAgIH0KKworICAgIHJldHVybiBwbGF0
Zm9ybURlY29kZShkZWNvZGVyLCBoaXRUZXN0UmVzdWx0RGF0YSk7Cit9CisKKyNpZiAhUExBVEZP
Uk0oTUFDKQordm9pZCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6cGxhdGZvcm1FbmNvZGUoSVBDOjpB
cmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cit9CisKK2Jvb2wgV2ViSGl0VGVzdFJl
c3VsdERhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBX
ZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykKKworSW50UmVjdCBXZWJIaXRUZXN0UmVz
dWx0RGF0YTo6ZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIE5vZGUqIG5vZGUgPSBo
aXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50
KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOwor
CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gSW50
UmVjdCgpOworCisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVuZGVyZXItPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOworfQorCit9IC8vIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkhpdFRlc3RS
ZXN1bHREYXRhX2gKKyNkZWZpbmUgV2ViSGl0VGVzdFJlc3VsdERhdGFfaAorCisjaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EaWN0aW9uYXJ5UG9wdXBJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zl
cmxheS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK09CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OworCituYW1lc3BhY2UgSVBDIHsK
K2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSGl0VGVzdFJlc3VsdDsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0cnVjdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSB7CisgICAgU3RyaW5nIGFic29s
dXRlSW1hZ2VVUkw7CisgICAgU3RyaW5nIGFic29sdXRlUERGVVJMOworICAgIFN0cmluZyBhYnNv
bHV0ZUxpbmtVUkw7CisgICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkw7CisgICAgU3RyaW5nIGxp
bmtMYWJlbDsKKyAgICBTdHJpbmcgbGlua1RpdGxlOworICAgIGJvb2wgaXNDb250ZW50RWRpdGFi
bGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7CisgICAgYm9vbCBp
c1Njcm9sbGJhcjsKKyAgICBib29sIGlzU2VsZWN0ZWQ7CisgICAgYm9vbCBpc1RleHROb2RlOwor
ICAgIGJvb2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKKyAgICBib29sIGFs
bG93c0NvcHk7CisgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhOworCisgICAgU3RyaW5nIGxv
b2t1cFRleHQ7CisgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBpbWFnZVNoYXJlZE1l
bW9yeTsKKyAgICB1aW50NjRfdCBpbWFnZVNpemU7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dDsKKyNl
bmRpZgorICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRv
cjsKKyAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlJRCBkZXRlY3RlZERhdGFP
cmlnaW5hdGluZ1BhZ2VPdmVybGF5OworCisgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5m
byBkaWN0aW9uYXJ5UG9wdXBJbmZvOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0
b3I+IGxpbmtUZXh0SW5kaWNhdG9yOworCisgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEoKTsKKyAg
ICBleHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0RGF0YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0Jik7CisgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdCYsIGJvb2wgaW5jbHVkZUltYWdlKTsKKyAgICB+V2ViSGl0VGVzdFJlc3VsdERhdGEoKTsK
KworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgdm9p
ZCBwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRp
YyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRlc3RSZXN1bHREYXRh
Jik7CisgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXIm
LCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50
Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViSGl0VGVz
dFJlc3VsdERhdGFfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0
UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSUhp
dFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAxOTA2NzQpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcDoxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSGl0
VGVzdFJlc3VsdC5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJl
c3VsdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9VUkwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vZGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IFdlYkhpdFRlc3RSZXN1bHQ6
OmNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3Vs
dERhdGEpKTsKK30KKworV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSgpCit7Cit9CisKK1dl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJl
c3VsdCkKKyAgICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdl
VVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29s
dXRlUERGVVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3Vs
dC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0
VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCisgICAgLCBsaW5rTGFiZWwo
aGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKQorICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1
bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkpCisgICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0
UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxl
bWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKKyAgICAs
IGlzU2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCisgICAgLCBpc1NlbGVjdGVk
KGhpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKQorICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVz
dWx0LmlubmVyTm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUo
KSkKKyAgICAsIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3Vs
dC5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgLCBhbGxvd3NDb3B5
KGhpdFRlc3RSZXN1bHQuYWxsb3dzQ29weSgpKQorICAgICwgaXNEb3dubG9hZGFibGVNZWRpYSho
aXRUZXN0UmVzdWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKKyAgICAsIGltYWdlU2l6ZSgwKQor
eworfQorCitXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGJvb2wgaW5jbHVkZUltYWdlKQorICAgIDogYWJzb2x1
dGVJbWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKSkKKyAg
ICAsIGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwoKS5zdHJpbmco
KSkKKyAgICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgp
LnN0cmluZygpKQorICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRl
TWVkaWFVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVzdWx0LnRleHRD
b250ZW50KCkpCisgICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURpc3BsYXlTdHJp
bmcoKSkKKyAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRp
dGFibGUoKSkKKyAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRpbmdCb3hJbldp
bmRvd0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQorICAgICwgaXNTY3JvbGxiYXIoaGl0VGVz
dFJlc3VsdC5zY3JvbGxiYXIoKSkKKyAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJlc3VsdC5pc1Nl
bGVjdGVkKCkpCisgICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYg
aGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgICwgaXNPdmVyVGV4
dEluc2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVG
b3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJlc3VsdC5hbGxv
d3NDb3B5KCkpCisgICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1bHQuaXNEb3du
bG9hZGFibGVNZWRpYSgpKQorICAgICwgaW1hZ2VTaXplKDApCit7CisgICAgaWYgKCFpbmNsdWRl
SW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChJbWFnZSogaW1hZ2UgPSBoaXRUZXN0
UmVzdWx0LmltYWdlKCkpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
aW1hZ2UtPmRhdGEoKTsKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgaW1hZ2VT
aGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgIG1lbWNweShpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZmZXItPmRhdGEo
KSwgYnVmZmVyLT5zaXplKCkpOworICAgICAgICAgICAgaW1hZ2VTaXplID0gYnVmZmVyLT5zaXpl
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6On5EYXRh
KCkKK3sKK30KKwordm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbmNvZGUoSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZUlt
YWdlVVJMOworICAgIGVuY29kZXIgPDwgYWJzb2x1dGVQREZVUkw7CisgICAgZW5jb2RlciA8PCBh
YnNvbHV0ZUxpbmtVUkw7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZU1lZGlhVVJMOworICAgIGVu
Y29kZXIgPDwgbGlua0xhYmVsOworICAgIGVuY29kZXIgPDwgbGlua1RpdGxlOworICAgIGVuY29k
ZXIgPDwgaXNDb250ZW50RWRpdGFibGU7CisgICAgZW5jb2RlciA8PCBlbGVtZW50Qm91bmRpbmdC
b3g7CisgICAgZW5jb2RlciA8PCBpc1Njcm9sbGJhcjsKKyAgICBlbmNvZGVyIDw8IGlzU2VsZWN0
ZWQ7CisgICAgZW5jb2RlciA8PCBpc1RleHROb2RlOworICAgIGVuY29kZXIgPDwgaXNPdmVyVGV4
dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKKyAgICBlbmNvZGVyIDw8IGFsbG93c0NvcHk7Cisg
ICAgZW5jb2RlciA8PCBpc0Rvd25sb2FkYWJsZU1lZGlhOworICAgIGVuY29kZXIgPDwgbG9va3Vw
VGV4dDsKKyAgICBlbmNvZGVyIDw8IGRpY3Rpb25hcnlQb3B1cEluZm87CisKKyAgICBTaGFyZWRN
ZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBpZiAoaW1hZ2VTaGFyZWRNZW1vcnkgJiYg
aW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSkKKyAgICAgICAgaW1hZ2VTaGFyZWRNZW1vcnktPmNy
ZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25s
eSk7CisgICAgZW5jb2RlciA8PCBpbWFnZUhhbmRsZTsKKyAgICBlbmNvZGVyIDw8IGltYWdlU2l6
ZTsKKworICAgIGJvb2wgaGFzTGlua1RleHRJbmRpY2F0b3IgPSBsaW5rVGV4dEluZGljYXRvcjsK
KyAgICBlbmNvZGVyIDw8IGhhc0xpbmtUZXh0SW5kaWNhdG9yOworICAgIGlmIChoYXNMaW5rVGV4
dEluZGljYXRvcikKKyAgICAgICAgZW5jb2RlciA8PCBsaW5rVGV4dEluZGljYXRvci0+ZGF0YSgp
OworCisgICAgcGxhdGZvcm1FbmNvZGUoZW5jb2Rlcik7Cit9CisKK2Jvb2wgV2ViSGl0VGVzdFJl
c3VsdDo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRU
ZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKK3sKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCisgICAgICAgIHx8ICFk
ZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkKKyAgICAgICAg
fHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlua1VSTCkKKyAg
ICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTWVkaWFV
UkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rTGFi
ZWwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rVGl0
bGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc0NvbnRl
bnRFZGl0YWJsZSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRh
LmVsZW1lbnRCb3VuZGluZ0JveCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmlzU2Nyb2xsYmFyKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVz
dFJlc3VsdERhdGEuaXNTZWxlY3RlZCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRl
c3RSZXN1bHREYXRhLmlzVGV4dE5vZGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRU
ZXN0UmVzdWx0RGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KQorICAgICAg
ICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29weSkKKyAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxvYWRhYmxlTWVk
aWEpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5sb29rdXBU
ZXh0KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZGljdGlv
bmFyeVBvcHVwSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNoYXJlZE1lbW9y
eTo6SGFuZGxlIGltYWdlSGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VIYW5k
bGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWltYWdlSGFuZGxlLmlzTnVs
bCgpKQorICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5pbWFnZVNoYXJlZE1lbW9yeSA9IFNoYXJl
ZE1lbW9yeTo6bWFwKGltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRP
bmx5KTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VT
aXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNMaW5rVGV4dEluZGlj
YXRvcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSB7Cisg
ICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEubGlua1RleHRJbmRpY2F0b3IgPSBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHBsYXRmb3JtRGVjb2RlKGRlY29kZXIsIGhpdFRlc3RSZXN1bHREYXRhKTsKK30K
KworI2lmICFQTEFURk9STShNQUMpCit2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRm
b3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworfQorCiti
b29sIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnRE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0
YSkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQorCitJ
bnRSZWN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93
Q29vcmRpbmF0ZXMoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBO
b2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBu
b2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAg
aWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93
KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKK30KKworfSAvLyBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmNw
cAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0
UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsMTkyICsxOCwxNSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCi0KLSNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJPYmplY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvTm9kZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1
ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IFdlYkhpdFRl
c3RSZXN1bHQ6OmNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVz
dWx0RGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkhpdFRlc3RSZXN1bHQoaGl0
VGVzdFJlc3VsdERhdGEpKTsKLX0KLQotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSgpCi17
Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29uc3QgSGl0VGVzdFJlc3VsdCYg
aGl0VGVzdFJlc3VsdCkKLSAgICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNv
bHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVz
dWx0LmFic29sdXRlUERGVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0
VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTWVk
aWFVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBs
aW5rTGFiZWwoaGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKQotICAgICwgbGlua1RpdGxlKGhp
dFRlc3RSZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkpCi0gICAgLCBpc0NvbnRlbnRFZGl0YWJs
ZShoaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgLCBlbGVtZW50Qm91bmRp
bmdCb3goZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0
KSkKLSAgICAsIGlzU2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCi0gICAgLCBp
c1NlbGVjdGVkKGhpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKQotICAgICwgaXNUZXh0Tm9kZSho
aXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlz
VGV4dE5vZGUoKSkKLSAgICAsIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0
VGVzdFJlc3VsdC5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgLCBh
bGxvd3NDb3B5KGhpdFRlc3RSZXN1bHQuYWxsb3dzQ29weSgpKQotICAgICwgaXNEb3dubG9hZGFi
bGVNZWRpYShoaXRUZXN0UmVzdWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKLSAgICAsIGltYWdl
U2l6ZSgwKQotewotfQotCi1XZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKGNvbnN0IFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGJvb2wgaW5jbHVkZUltYWdlKQotICAg
IDogYWJzb2x1dGVJbWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJp
bmcoKSkKLSAgICAsIGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwo
KS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRl
TGlua1VSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0
LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVz
dWx0LnRleHRDb250ZW50KCkpCi0gICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURp
c3BsYXlTdHJpbmcoKSkKLSAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXND
b250ZW50RWRpdGFibGUoKSkKLSAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRp
bmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQotICAgICwgaXNTY3JvbGxi
YXIoaGl0VGVzdFJlc3VsdC5zY3JvbGxiYXIoKSkKLSAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJl
c3VsdC5pc1NlbGVjdGVkKCkpCi0gICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJO
b2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICwg
aXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRl
eHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJl
c3VsdC5hbGxvd3NDb3B5KCkpCi0gICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1
bHQuaXNEb3dubG9hZGFibGVNZWRpYSgpKQotICAgICwgaW1hZ2VTaXplKDApCi17Ci0gICAgaWYg
KCFpbmNsdWRlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChJbWFnZSogaW1hZ2Ug
PSBoaXRUZXN0UmVzdWx0LmltYWdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gaW1hZ2UtPmRhdGEoKTsKLSAgICAgICAgaWYgKGJ1ZmZlcikgewotICAgICAgICAg
ICAgaW1hZ2VTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1ZmZlci0+c2l6
ZSgpKTsKLSAgICAgICAgICAgIG1lbWNweShpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZm
ZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgaW1hZ2VTaXplID0gYnVm
ZmVyLT5zaXplKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRh
dGE6On5EYXRhKCkKLXsKLX0KK25hbWVzcGFjZSBBUEkgewogCi12b2lkIFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGE6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK1Bh
c3NSZWZQdHI8SGl0VGVzdFJlc3VsdD4gSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGNvbnN0IFdlYktp
dDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQogewotICAgIGVuY29k
ZXIgPDwgYWJzb2x1dGVJbWFnZVVSTDsKLSAgICBlbmNvZGVyIDw8IGFic29sdXRlUERGVVJMOwot
ICAgIGVuY29kZXIgPDwgYWJzb2x1dGVMaW5rVVJMOwotICAgIGVuY29kZXIgPDwgYWJzb2x1dGVN
ZWRpYVVSTDsKLSAgICBlbmNvZGVyIDw8IGxpbmtMYWJlbDsKLSAgICBlbmNvZGVyIDw8IGxpbmtU
aXRsZTsKLSAgICBlbmNvZGVyIDw8IGlzQ29udGVudEVkaXRhYmxlOwotICAgIGVuY29kZXIgPDwg
ZWxlbWVudEJvdW5kaW5nQm94OwotICAgIGVuY29kZXIgPDwgaXNTY3JvbGxiYXI7Ci0gICAgZW5j
b2RlciA8PCBpc1NlbGVjdGVkOwotICAgIGVuY29kZXIgPDwgaXNUZXh0Tm9kZTsKLSAgICBlbmNv
ZGVyIDw8IGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7Ci0gICAgZW5jb2RlciA8
PCBhbGxvd3NDb3B5OwotICAgIGVuY29kZXIgPDwgaXNEb3dubG9hZGFibGVNZWRpYTsKLSAgICBl
bmNvZGVyIDw8IGxvb2t1cFRleHQ7Ci0gICAgZW5jb2RlciA8PCBkaWN0aW9uYXJ5UG9wdXBJbmZv
OwotCi0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKGltYWdl
U2hhcmVkTWVtb3J5ICYmIGltYWdlU2hhcmVkTWVtb3J5LT5kYXRhKCkpCi0gICAgICAgIGltYWdl
U2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJv
dGVjdGlvbjo6UmVhZE9ubHkpOwotICAgIGVuY29kZXIgPDwgaW1hZ2VIYW5kbGU7Ci0gICAgZW5j
b2RlciA8PCBpbWFnZVNpemU7Ci0KLSAgICBib29sIGhhc0xpbmtUZXh0SW5kaWNhdG9yID0gbGlu
a1RleHRJbmRpY2F0b3I7Ci0gICAgZW5jb2RlciA8PCBoYXNMaW5rVGV4dEluZGljYXRvcjsKLSAg
ICBpZiAoaGFzTGlua1RleHRJbmRpY2F0b3IpCi0gICAgICAgIGVuY29kZXIgPDwgbGlua1RleHRJ
bmRpY2F0b3ItPmRhdGEoKTsKLQotICAgIHBsYXRmb3JtRW5jb2RlKGVuY29kZXIpOwotfQotCi1i
b29sIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYg
ZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCi17Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZUltYWdlVVJM
KQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWJzb2x1dGVQ
REZVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNv
bHV0ZUxpbmtVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5hYnNvbHV0ZU1lZGlhVVJMKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEubGlua0xhYmVsKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEubGlua1RpdGxlKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEuaXNDb250ZW50RWRpdGFibGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZSho
aXRUZXN0UmVzdWx0RGF0YS5lbGVtZW50Qm91bmRpbmdCb3gpCi0gICAgICAgIHx8ICFkZWNvZGVy
LmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1Njcm9sbGJhcikKLSAgICAgICAgfHwgIWRlY29k
ZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzU2VsZWN0ZWQpCi0gICAgICAgIHx8ICFkZWNv
ZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1RleHROb2RlKQotICAgICAgICB8fCAhZGVj
b2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9s
RWxlbWVudCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFs
bG93c0NvcHkpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5p
c0Rvd25sb2FkYWJsZU1lZGlhKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEubG9va3VwVGV4dCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmRpY3Rpb25hcnlQb3B1cEluZm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGltYWdlSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFp
bWFnZUhhbmRsZS5pc051bGwoKSkKLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaGFy
ZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcChpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQ
cm90ZWN0aW9uOjpSZWFkT25seSk7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmltYWdlU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wg
aGFzTGlua1RleHRJbmRpY2F0b3I7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNMaW5rVGV4
dEluZGljYXRvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChoYXNMaW5rVGV4
dEluZGljYXRvcikgewotICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0
b3JEYXRhOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZGljYXRvckRhdGEpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmxpbmtU
ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRh
dGEpOwotICAgIH0KLQotICAgIHJldHVybiBwbGF0Zm9ybURlY29kZShkZWNvZGVyLCBoaXRUZXN0
UmVzdWx0RGF0YSk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oTUFDKQotdm9pZCBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhOjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLX0KLQotYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYg
aGl0VGVzdFJlc3VsdERhdGEpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gIVBM
QVRGT1JNKE1BQykKLQotSW50UmVjdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbGVtZW50Qm91
bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RS
ZXN1bHQpCi17Ci0gICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAg
RnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFt
ZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQot
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICgh
cmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICByZXR1cm4gdmlldy0+
Y29udGVudHNUb1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHREYXRhKSk7
CiB9CiAKLX0gLy8gV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiAxOTA2NzQpCShm
cm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0Lmg6MTkwNjc0KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViSGl0VGVzdFJl
c3VsdF9oCisjZGVmaW5lIFdlYkhpdFRlc3RSZXN1bHRfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0
LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaWN0aW9u
YXJ5UG9wdXBJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K09CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OworCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEFy
Z3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgSGl0VGVzdFJlc3VsdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkZyYW1lOworCitjbGFzcyBXZWJIaXRUZXN0UmVzdWx0IDogcHVibGljIEFQSTo6
T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SGl0VGVzdFJlc3VsdD4geworcHVibGljOgor
ICAgIHN0cnVjdCBEYXRhIHsKKyAgICAgICAgU3RyaW5nIGFic29sdXRlSW1hZ2VVUkw7CisgICAg
ICAgIFN0cmluZyBhYnNvbHV0ZVBERlVSTDsKKyAgICAgICAgU3RyaW5nIGFic29sdXRlTGlua1VS
TDsKKyAgICAgICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkw7CisgICAgICAgIFN0cmluZyBsaW5r
TGFiZWw7CisgICAgICAgIFN0cmluZyBsaW5rVGl0bGU7CisgICAgICAgIGJvb2wgaXNDb250ZW50
RWRpdGFibGU7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94Owor
ICAgICAgICBib29sIGlzU2Nyb2xsYmFyOworICAgICAgICBib29sIGlzU2VsZWN0ZWQ7CisgICAg
ICAgIGJvb2wgaXNUZXh0Tm9kZTsKKyAgICAgICAgYm9vbCBpc092ZXJUZXh0SW5zaWRlRm9ybUNv
bnRyb2xFbGVtZW50OworICAgICAgICBib29sIGFsbG93c0NvcHk7CisgICAgICAgIGJvb2wgaXNE
b3dubG9hZGFibGVNZWRpYTsKKworICAgICAgICBTdHJpbmcgbG9va3VwVGV4dDsKKyAgICAgICAg
UmVmUHRyPFNoYXJlZE1lbW9yeT4gaW1hZ2VTaGFyZWRNZW1vcnk7CisgICAgICAgIHVpbnQ2NF90
IGltYWdlU2l6ZTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgUmV0YWluUHRyPEREQWN0
aW9uQ29udGV4dD4gZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dDsKKyNlbmRpZgorICAgICAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7CisgICAgICAgIFJlZlB0
cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOworICAg
ICAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlJRCBkZXRlY3RlZERhdGFPcmln
aW5hdGluZ1BhZ2VPdmVybGF5OworCisgICAgICAgIFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cElu
Zm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKKworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dElu
ZGljYXRvcj4gbGlua1RleHRJbmRpY2F0b3I7CisKKyAgICAgICAgRGF0YSgpOworICAgICAgICBl
eHBsaWNpdCBEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsKKyAgICAgICAgRGF0
YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgYm9vbCBpbmNsdWRlSW1hZ2UpOworICAg
ICAgICB+RGF0YSgpOworCisgICAgICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVy
JikgY29uc3Q7CisgICAgICAgIHZvaWQgcGxhdGZvcm1FbmNvZGUoSVBDOjpBcmd1bWVudEVuY29k
ZXImKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOworICAgICAgICBzdGF0aWMgYm9vbCBwbGF0
Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEm
KTsKKworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93
Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOworICAgIH07CisKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBjcmVhdGUoY29uc3QgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YSYpOworCisgICAgU3RyaW5nIGFic29sdXRlSW1hZ2VVUkwoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVJbWFnZVVSTDsgfQorICAgIFN0cmluZyBhYnNvbHV0
ZVBERlVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZVBERlVSTDsgfQorICAgIFN0
cmluZyBhYnNvbHV0ZUxpbmtVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVMaW5r
VVJMOyB9CisgICAgU3RyaW5nIGFic29sdXRlTWVkaWFVUkwoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEuYWJzb2x1dGVNZWRpYVVSTDsgfQorCisgICAgU3RyaW5nIGxpbmtMYWJlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YS5saW5rTGFiZWw7IH0KKyAgICBTdHJpbmcgbGlua1RpdGxlKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmxpbmtUaXRsZTsgfQorICAgIFN0cmluZyBsb29rdXBUZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLmxvb2t1cFRleHQ7IH0KKworICAgIGJvb2wgaXNDb250ZW50RWRp
dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNDb250ZW50RWRpdGFibGU7IH0KKworICAg
IFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmVsZW1lbnRCb3VuZGluZ0JveDsgfQorCisgICAgYm9vbCBpc1Njcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5pc1Njcm9sbGJhcjsgfQorCisgICAgYm9vbCBpc1NlbGVjdGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLmlzU2VsZWN0ZWQ7IH0KKworICAgIGJvb2wgaXNUZXh0Tm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc1RleHROb2RlOyB9CisKKyAgICBib29sIGlzT3Zl
clRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNP
dmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsgfQorCisgICAgYm9vbCBhbGxvd3NDb3B5
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFsbG93c0NvcHk7IH0KKworICAgIGJvb2wgaXNEb3du
bG9hZGFibGVNZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc0Rvd25sb2FkYWJsZU1lZGlh
OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgV2ViSGl0VGVzdFJlc3VsdChjb25zdCBXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKKyAgICAgICAgOiBtX2RhdGEo
aGl0VGVzdFJlc3VsdERhdGEpCisgICAgeworICAgIH0KKworICAgIERhdGEgbV9kYXRhOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJIaXRUZXN0UmVzdWx0X2gK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1
bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcsMTEgKzE3LDEyIEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYkhpdFRlc3RSZXN1bHRfaAotI2RlZmlu
ZSBXZWJIaXRUZXN0UmVzdWx0X2gKKyNpZm5kZWYgQVBJSGl0VGVzdFJlc3VsdF9oCisjZGVmaW5l
IEFQSUhpdFRlc3RSZXN1bHRfaAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0RpY3Rpb25hcnlQb3B1cEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KQEAgLTQyLDY2ICs0Mywy
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogfQogCi1uYW1l
c3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBBUEkgewogCiBjbGFzcyBXZWJGcmFtZTsKIAotY2xh
c3MgV2ViSGl0VGVzdFJlc3VsdCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6
OlR5cGU6OkhpdFRlc3RSZXN1bHQ+IHsKK2NsYXNzIEhpdFRlc3RSZXN1bHQgOiBwdWJsaWMgQVBJ
OjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpIaXRUZXN0UmVzdWx0PiB7CiBwdWJsaWM6
Ci0gICAgc3RydWN0IERhdGEgewotICAgICAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTDsKLSAg
ICAgICAgU3RyaW5nIGFic29sdXRlUERGVVJMOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVMaW5r
VVJMOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVSTDsKLSAgICAgICAgU3RyaW5nIGxp
bmtMYWJlbDsKLSAgICAgICAgU3RyaW5nIGxpbmtUaXRsZTsKLSAgICAgICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZTsKLSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7
Ci0gICAgICAgIGJvb2wgaXNTY3JvbGxiYXI7Ci0gICAgICAgIGJvb2wgaXNTZWxlY3RlZDsKLSAg
ICAgICAgYm9vbCBpc1RleHROb2RlOwotICAgICAgICBib29sIGlzT3ZlclRleHRJbnNpZGVGb3Jt
Q29udHJvbEVsZW1lbnQ7Ci0gICAgICAgIGJvb2wgYWxsb3dzQ29weTsKLSAgICAgICAgYm9vbCBp
c0Rvd25sb2FkYWJsZU1lZGlhOwotCi0gICAgICAgIFN0cmluZyBsb29rdXBUZXh0OwotICAgICAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbWFnZVNoYXJlZE1lbW9yeTsKLSAgICAgICAgdWludDY0
X3QgaW1hZ2VTaXplOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBSZXRhaW5QdHI8RERB
Y3Rpb25Db250ZXh0PiBkZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0OwotI2VuZGlmCi0gICAgICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgUmVm
UHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7Ci0g
ICAgICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9y
aWdpbmF0aW5nUGFnZU92ZXJsYXk7Ci0KLSAgICAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVw
SW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotCi0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yPiBsaW5rVGV4dEluZGljYXRvcjsKLQotICAgICAgICBEYXRhKCk7Ci0gICAgICAg
IGV4cGxpY2l0IERhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOwotICAgICAgICBE
YXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCBib29sIGluY2x1ZGVJbWFnZSk7Ci0g
ICAgICAgIH5EYXRhKCk7Ci0KLSAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29k
ZXImKSBjb25zdDsKLSAgICAgICAgdm9pZCBwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5j
b2RlciYpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0gICAgICAgIHN0YXRpYyBib29sIHBs
YXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0
YSYpOwotCi0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94SW5XaW5k
b3dDb29yZGluYXRlcyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jik7Ci0gICAgfTsKLQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGNyZWF0ZShjb25zdCBXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0KLSAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUltYWdlVVJMOyB9Ci0gICAgU3RyaW5nIGFic29s
dXRlUERGVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlUERGVVJMOyB9Ci0gICAg
U3RyaW5nIGFic29sdXRlTGlua1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUxp
bmtVUkw7IH0KLSAgICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5hYnNvbHV0ZU1lZGlhVVJMOyB9Ci0KLSAgICBTdHJpbmcgbGlua0xhYmVsKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmxpbmtMYWJlbDsgfQotICAgIFN0cmluZyBsaW5rVGl0bGUoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEubGlua1RpdGxlOyB9Ci0gICAgU3RyaW5nIGxvb2t1cFRleHQoKSBj
b25zdCB7IHJldHVybiBtX2RhdGEubG9va3VwVGV4dDsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhpdFRlc3RSZXN1bHQ+IGNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRh
Jik7CisKKyAgICBXVEY6OlN0cmluZyBhYnNvbHV0ZUltYWdlVVJMKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmFic29sdXRlSW1hZ2VVUkw7IH0KKyAgICBXVEY6OlN0cmluZyBhYnNvbHV0ZVBERlVS
TCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZVBERlVSTDsgfQorICAgIFdURjo6U3Ry
aW5nIGFic29sdXRlTGlua1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUxpbmtV
Ukw7IH0KKyAgICBXVEY6OlN0cmluZyBhYnNvbHV0ZU1lZGlhVVJMKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmFic29sdXRlTWVkaWFVUkw7IH0KKworICAgIFdURjo6U3RyaW5nIGxpbmtMYWJlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5saW5rTGFiZWw7IH0KKyAgICBXVEY6OlN0cmluZyBsaW5r
VGl0bGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubGlua1RpdGxlOyB9CisgICAgV1RGOjpTdHJp
bmcgbG9va3VwVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5sb29rdXBUZXh0OyB9CiAKICAg
ICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzQ29udGVu
dEVkaXRhYmxlOyB9CiAKQEAgLTEyMCwxNCArNzcsMTQgQEAgcHVibGljOgogICAgIGJvb2wgaXNE
b3dubG9hZGFibGVNZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc0Rvd25sb2FkYWJsZU1l
ZGlhOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViSGl0VGVzdFJlc3VsdChjb25zdCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKKyAgICBleHBsaWNpdCBI
aXRUZXN0UmVzdWx0KGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RS
ZXN1bHREYXRhKQogICAgICAgICA6IG1fZGF0YShoaXRUZXN0UmVzdWx0RGF0YSkKICAgICB7CiAg
ICAgfQogCi0gICAgRGF0YSBtX2RhdGE7CisgICAgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0
YSBtX2RhdGE7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIEFQ
SQogCi0jZW5kaWYgLy8gV2ViSGl0VGVzdFJlc3VsdF9oCisjZW5kaWYgLy8gQVBJSGl0VGVzdFJl
c3VsdF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0hpdFRlc3RS
ZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19X
S0hpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9B
UEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBX
S19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworV0tf
Q0xBU1NfQVZBSUxBQkxFKFdLX01BQ19UQkEsIE5BKQorQGludGVyZmFjZSBfV0tIaXRUZXN0UmVz
dWx0IDogTlNPYmplY3QgPE5TQ29weWluZz4KKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5LCBjb3B5KSBOU1VSTCAqYWJzb2x1dGVJbWFnZVVSTDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSwgY29weSkgTlNVUkwgKmFic29sdXRlUERGVVJMOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VSTCAqYWJzb2x1dGVMaW5rVVJMOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VSTCAqYWJzb2x1dGVNZWRpYVVSTDsKKwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqbGlua0xhYmVs
OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqbGlua1Rp
dGxlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqbG9v
a3VwVGV4dDsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNDb250
ZW50RWRpdGFibGUpIEJPT0wgY29udGVudEVkaXRhYmxlOworCitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIENHUmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7CisKK0BlbmQKKworI2VuZGlm
IC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29h
L19XS0hpdFRlc3RSZXN1bHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIl9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKwor
QGltcGxlbWVudGF0aW9uIF9XS0hpdFRlc3RSZXN1bHQKKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgX2hpdFRlc3RSZXN1bHQtPn5IaXRUZXN0UmVzdWx0KCk7CisKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKE5TVVJMICopYWJzb2x1dGVJbWFnZVVSTAoreworICAgIHJldHVybiBbTlNV
UkwgVVJMV2l0aFN0cmluZzpfaGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVJbWFnZVVSTCgpXTsKK30K
KworLSAoTlNVUkwgKilhYnNvbHV0ZVBERlVSTAoreworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0
aFN0cmluZzpfaGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVQREZVUkwoKV07Cit9CisKKy0gKE5TVVJM
ICopYWJzb2x1dGVMaW5rVVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9o
aXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUxpbmtVUkwoKV07Cit9CisKKy0gKE5TVVJMICopYWJzb2x1
dGVNZWRpYVVSTAoreworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpfaGl0VGVzdFJl
c3VsdC0+YWJzb2x1dGVNZWRpYVVSTCgpXTsKK30KKworLSAoTlNTdHJpbmcgKilsaW5rTGFiZWwK
K3sKKyAgICByZXR1cm4gX2hpdFRlc3RSZXN1bHQtPmxpbmtMYWJlbCgpOworfQorCistIChOU1N0
cmluZyAqKWxpbmtUaXRsZQoreworICAgIHJldHVybiBfaGl0VGVzdFJlc3VsdC0+bGlua1RpdGxl
KCk7Cit9CisKKy0gKE5TU3RyaW5nICopbG9va3VwVGV4dAoreworICAgIHJldHVybiBfaGl0VGVz
dFJlc3VsdC0+bG9va3VwVGV4dCgpOworfQorCistIChCT09MKWlzQ29udGVudEVkaXRhYmxlCit7
CisgICAgcmV0dXJuIF9oaXRUZXN0UmVzdWx0LT5pc0NvbnRlbnRFZGl0YWJsZSgpOworfQorCist
IChDR1JlY3QpZWxlbWVudEJvdW5kaW5nQm94Cit7CisgICAgcmV0dXJuIF9oaXRUZXN0UmVzdWx0
LT5lbGVtZW50Qm91bmRpbmdCb3goKTsKK30KKworLSAoaWQpY29weVdpdGhab25lOihOU1pvbmUg
Kil6b25lCit7CisgICAgcmV0dXJuIFtzZWxmIHJldGFpbl07Cit9CisKKyNwcmFnbWEgbWFyayBX
S09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9iamVjdCYpX2FwaU9i
amVjdAoreworICAgIHJldHVybiAqX2hpdFRlc3RSZXN1bHQ7Cit9CisKK0BlbmQKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0hpdFRlc3RSZXN1bHRJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2Ev
X1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0NvY29hL19XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJfV0tIaXRUZXN0UmVz
dWx0LmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElIaXRUZXN0UmVzdWx0
LmgiCisjaW1wb3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgQVBJIHsKKworaW5saW5lIF9X
S0hpdFRlc3RSZXN1bHQgKndyYXBwZXIoQVBJOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0
KQoreworICAgIEFTU0VSVChbaGl0VGVzdFJlc3VsdC53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpb
X1dLSGl0VGVzdFJlc3VsdCBjbGFzc11dKTsKKworICAgIHJldHVybiAoX1dLSGl0VGVzdFJlc3Vs
dCAqKWhpdFRlc3RSZXN1bHQud3JhcHBlcigpOworfQorCit9CisKK0BpbnRlcmZhY2UgX1dLSGl0
VGVzdFJlc3VsdCAoKSA8V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9y
YWdlPEFQSTo6SGl0VGVzdFJlc3VsdD4gX2hpdFRlc3RSZXN1bHQ7Cit9CitAZW5kCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tJbW1lZGlhdGVBY3Rp
b25UeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9f
V0tJbW1lZGlhdGVBY3Rpb25UeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlv
bi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
X1dLSW1tZWRpYXRlQWN0aW9uVHlwZXMpIHsKKyAgICBfV0tJbW1lZGlhdGVBY3Rpb25Ob25lLAor
ICAgIF9XS0ltbWVkaWF0ZUFjdGlvbkxpbmtQcmV2aWV3LAorICAgIF9XS0ltbWVkaWF0ZUFjdGlv
bkRhdGFEZXRlY3RlZEl0ZW0sCisgICAgX1dLSW1tZWRpYXRlQWN0aW9uTG9va3VwVGV4dCwKKyAg
ICBfV0tJbW1lZGlhdGVBY3Rpb25NYWlsdG9MaW5rLAorICAgIF9XS0ltbWVkaWF0ZUFjdGlvblRl
bExpbmsKK30gV0tfQVZBSUxBQkxFKFdLX01BQ19UQkEsIE5BKTsKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHJldmlzaW9uIDE5MDY3NCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbXBvcnQgIldLV2luZG93RmVhdHVyZXNJbnRlcm5hbC5o
IgogI2ltcG9ydCAiX1dLRG93bmxvYWRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLRnJhbWVIYW5k
bGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCiAjaW1w
b3J0ICJfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29u
dGVudEZpbHRlckludGVybmFsLmgiCkBAIC0xNTQsNiArMTU1LDEwIEBAIHZvaWQqIE9iamVjdDo6
bmV3T2JqZWN0KHNpemVfdCBzaXplLCBUeXAKICAgICAgICAgd3JhcHBlciA9IFtXS0ZyYW1lSW5m
byBhbGxvY107CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBUeXBlOjpIaXRUZXN0UmVzdWx0
OgorICAgICAgICB3cmFwcGVyID0gW19XS0hpdFRlc3RSZXN1bHQgYWxsb2NdOworICAgICAgICBi
cmVhazsKKwogICAgIGNhc2UgVHlwZTo6TmF2aWdhdGlvbjoKICAgICAgICAgd3JhcHBlciA9IFtX
S05hdmlnYXRpb24gYWxsb2NdOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHQubW0JKHJldmlzaW9uIDE5MDY3NCkKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1w
b3J0ICJBcmd1bWVudENvZGVyc0NGLmgiCi0jaW1wb3J0ICJBcmd1bWVudERlY29kZXIuaCIKLSNp
bXBvcnQgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCi0jaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3RvcnNTUEkuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvVGV4dEluZGljYXRvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJIaXRU
ZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlcikgY29uc3QKLXsKLSAgICBib29sIGhhc0FjdGlvbkNvbnRleHQgPSBkZXRlY3RlZERhdGFB
Y3Rpb25Db250ZXh0OwotICAgIGVuY29kZXIgPDwgaGFzQWN0aW9uQ29udGV4dDsKLSAgICBpZiAo
IWhhc0FjdGlvbkNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU011
dGFibGVEYXRhPiBkYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRdKTsK
LSAgICBSZXRhaW5QdHI8TlNLZXllZEFyY2hpdmVyPiBhcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tl
eWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JXcml0aW5nV2l0aE11dGFibGVEYXRhOmRhdGEuZ2V0
KCldKTsKLSAgICBbYXJjaGl2ZXIgc2V0UmVxdWlyZXNTZWN1cmVDb2Rpbmc6WUVTXTsKLSAgICBb
YXJjaGl2ZXIgZW5jb2RlT2JqZWN0OmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQuZ2V0KCkgZm9y
S2V5OkAiYWN0aW9uQ29udGV4dCJdOwotICAgIFthcmNoaXZlciBmaW5pc2hFbmNvZGluZ107Ci0K
LSAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4oZGF0
YS5nZXQoKSkpOwotCi0gICAgZW5jb2RlciA8PCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAg
ICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7Ci0KLSAgICBi
b29sIGhhc0RldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBkZXRlY3RlZERhdGFUZXh0SW5kaWNh
dG9yOwotICAgIGVuY29kZXIgPDwgaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcjsKLSAgICBp
ZiAoaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcikKLSAgICAgICAgZW5jb2RlciA8PCBkZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yLT5kYXRhKCk7Ci19Ci0KLWJvb2wgV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YTo6cGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQotewotICAgIGJvb2wgaGFz
QWN0aW9uQ29udGV4dDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0FjdGlvbkNvbnRleHQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhhc0FjdGlvbkNvbnRleHQpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAg
ICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBSZXRhaW5QdHI8TlNLZXllZFVuYXJjaGl2ZXI+IHVuYXJjaGl2ZXIgPSBhZG9wdE5T
KFtbTlNLZXllZFVuYXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JSZWFkaW5nV2l0aERhdGE6KE5TRGF0
YSAqKWRhdGEuZ2V0KCldKTsKLSAgICBbdW5hcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGlu
ZzpZRVNdOwotICAgIEB0cnkgewotICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERh
dGFBY3Rpb25Db250ZXh0ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpnZXREREFj
dGlvbkNvbnRleHRDbGFzcygpIGZvcktleTpAImFjdGlvbkNvbnRleHQiXTsKLSAgICB9IEBjYXRj
aCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBkZWNvZGUgRERBY3Rpb25Db250ZXh0OiAlQCIsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2RpbmddOwot
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERhdGFC
b3VuZGluZ0JveCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQYWdlT3Zlcmxh
eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGFzRGV0ZWN0ZWREYXRhVGV4
dEluZGljYXRvcjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0RldGVjdGVkRGF0YVRleHRJ
bmRpY2F0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaGFzRGV0ZWN0ZWRE
YXRhVGV4dEluZGljYXRvcikgewotICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBp
bmRpY2F0b3JEYXRhOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZGljYXRvckRhdGEp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGhpdFRlc3RSZXN1bHREYXRh
LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVh
dGUoaW5kaWNhdG9yRGF0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0RGF0YS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHREYXRhLm1tCShyZXZp
c2lvbiAxOTA2NzQpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJl
c3VsdC5tbToxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkhpdFRlc3RS
ZXN1bHREYXRhLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJIaXRUZXN0UmVzdWx0LmgiCisKKyNp
ZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbXBvcnQg
IkFyZ3VtZW50RGVjb2Rlci5oIgorI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW1wb3J0
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGF0YURldGVjdG9y
c1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jb2RlKElQ
Qzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGJvb2wgaGFzQWN0aW9u
Q29udGV4dCA9IGRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQ7CisgICAgZW5jb2RlciA8PCBoYXNB
Y3Rpb25Db250ZXh0OworICAgIGlmICghaGFzQWN0aW9uQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGF0YSBhbGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxOU0tleWVkQXJjaGl2ZXI+IGFy
Y2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNoaXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdX
aXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0pOworICAgIFthcmNoaXZlciBzZXRSZXF1aXJlc1Nl
Y3VyZUNvZGluZzpZRVNdOworICAgIFthcmNoaXZlciBlbmNvZGVPYmplY3Q6ZGV0ZWN0ZWREYXRh
QWN0aW9uQ29udGV4dC5nZXQoKSBmb3JLZXk6QCJhY3Rpb25Db250ZXh0Il07CisgICAgW2FyY2hp
dmVyIGZpbmlzaEVuY29kaW5nXTsKKworICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhLmdldCgpKSk7CisKKyAgICBlbmNvZGVyIDw8IGRldGVj
dGVkRGF0YUJvdW5kaW5nQm94OworICAgIGVuY29kZXIgPDwgZGV0ZWN0ZWREYXRhT3JpZ2luYXRp
bmdQYWdlT3ZlcmxheTsKKworICAgIGJvb2wgaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9
IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7CisgICAgZW5jb2RlciA8PCBoYXNEZXRlY3RlZERh
dGFUZXh0SW5kaWNhdG9yOworICAgIGlmIChoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yKQor
ICAgICAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3ItPmRhdGEoKTsKK30K
KworYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZShJUEM6OkFyZ3Vt
ZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3Vs
dERhdGEpCit7CisgICAgYm9vbCBoYXNBY3Rpb25Db250ZXh0OworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGFzQWN0aW9uQ29udGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghaGFzQWN0aW9uQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBkYXRhOworICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZGF0YSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxOU0tleWVkVW5hcmNoaXZl
cj4gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxvY10gaW5pdEZv
clJlYWRpbmdXaXRoRGF0YTooTlNEYXRhICopZGF0YS5nZXQoKV0pOworICAgIFt1bmFyY2hpdmVy
IHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisgICAgQHRyeSB7CisgICAgICAgIGhpdFRl
c3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBbdW5hcmNoaXZlciBkZWNv
ZGVPYmplY3RPZkNsYXNzOmdldEREQWN0aW9uQ29udGV4dENsYXNzKCkgZm9yS2V5OkAiYWN0aW9u
Q29udGV4dCJdOworICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBEREFjdGlvbkNvbnRleHQ6ICVAIiwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBbdW5hcmNo
aXZlciBmaW5pc2hEZWNvZGluZ107CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmRldGVjdGVkRGF0YUJvdW5kaW5nQm94KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERh
dGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaGl0VGVzdFJlc3VsdERhdGEuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFdlYkNv
cmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZShpbmRpY2F0b3JEYXRhKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1
bHREYXRhLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0
VGVzdFJlc3VsdERhdGEubW0JKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0
LDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkhpdFRlc3RSZXN1
bHQuaCIKKyNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCiAKICNpZiBQTEFURk9STShN
QUMpCiAKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit2b2lkIFdlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29k
ZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBib29sIGhhc0Fj
dGlvbkNvbnRleHQgPSBkZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0OwogICAgIGVuY29kZXIgPDwg
aGFzQWN0aW9uQ29udGV4dDsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhOjpwbGF0Zm9ybUVuYwogICAgICAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YVRleHRJ
bmRpY2F0b3ItPmRhdGEoKTsKIH0KIAotYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0
Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCitib29sIFdlYkhpdFRlc3RSZXN1bHREYXRhOjpw
bGF0Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJl
c3VsdERhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQogewogICAgIGJvb2wgaGFzQWN0aW9uQ29udGV4
dDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0FjdGlvbkNvbnRleHQpKQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEs
NyArMzMxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5k
Q29sb3IoKSA9IDA7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lkIGRpZFBl
cmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEm
LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0KikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3Qq
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQqIGltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRy
b2xsZXJGb3JIaXRUZXN0UmVzdWx0KFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+LCBfV0tJbW1l
ZGlhdGVBY3Rpb25UeXBlLCBSZWZQdHI8QVBJOjpPYmplY3Q+KSA9IDA7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMTkw
Njc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJBUElGcmFtZUluZm8uaCIKICNp
bmNsdWRlICJBUElHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkFQSUhpc3RvcnlDbGllbnQuaCIKKyNp
bmNsdWRlICJBUElIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiQVBJTGVnYWN5Q29udGV4dEhp
c3RvcnlDbGllbnQuaCIKICNpbmNsdWRlICJBUElMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJB
UElOYXZpZ2F0aW9uLmgiCkBAIC0zNTY0LDE2ICszNTY1LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFMKICAgICBtX3VpQ2xpZW50LT5zZXRTdGF0dXNUZXh0KHRo
aXMsIHRleHQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIHVpbnQz
Ml90IG9wYXF1ZU1vZGlmaWVycywgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQordm9pZCBXZWJQ
YWdlUHJveHk6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHRE
YXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3Qgb3BhcXVlTW9kaWZpZXJzLCBjb25zdCBV
c2VyRGF0YSYgdXNlckRhdGEpCiB7Ci0gICAgbV9sYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdCA9
IFdlYkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShoaXRUZXN0UmVzdWx0RGF0YSk7CisgICAgbV9sYXN0
TW91c2VNb3ZlSGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGhpdFRl
c3RSZXN1bHREYXRhKTsKIAogICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gc3Rh
dGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4ob3BhcXVlTW9kaWZpZXJzKTsKIAogICAgIG1f
dWlDbGllbnQtPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHRoaXMsIGhpdFRlc3RSZXN1bHREYXRh
LCBtb2RpZmllcnMsIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0
YS5vYmplY3QoKSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQmVnaW5UcmFj
a2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKGNvbnN0IEludFBvaW50JiBtb3VzZURvd25Qb3Np
dGlvbiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIGNv
bnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRCZWdpblRyYWNr
aW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoY29uc3QgSW50UG9pbnQmIG1vdXNlRG93blBvc2l0
aW9uLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIGNvbnN0
IFVzZXJEYXRhJiB1c2VyRGF0YSkKIHsKICAgICBtX3VpQ2xpZW50LT5kaWRCZWdpblRyYWNraW5n
UG90ZW50aWFsTG9uZ01vdXNlUHJlc3ModGhpcywgbW91c2VEb3duUG9zaXRpb24sIGhpdFRlc3RS
ZXN1bHREYXRhLCBtX3Byb2Nlc3MtPnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEu
b2JqZWN0KCkpLmdldCgpKTsKIH0KQEAgLTU5ODMsMTEgKzU5ODQsMTYgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZENvbQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6SW1tZWRpYXRlQWN0aW9uRGlkQ29tcGxldGUoKSwgbV9wYWdlSUQpOwogfQog
Ci12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29u
c3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgcmVzdWx0LCBib29sIGNvbnRlbnRQcmV2ZW50c0Rl
ZmF1bHQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRQ
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYg
cmVzdWx0LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIGNvbnN0IFVzZXJEYXRhJiB1c2Vy
RGF0YSkKIHsKICAgICBtX3BhZ2VDbGllbnQuZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRl
c3QocmVzdWx0LCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBtX3Byb2Nlc3MtPnRyYW5zZm9ybUhh
bmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKIH0KIAordm9pZCogV2Vi
UGFnZVByb3h5OjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJl
c3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0LCBfV0tJbW1lZGlh
dGVBY3Rpb25UeXBlIHR5cGUsIFJlZlB0cjxBUEk6Ok9iamVjdD4gdXNlckRhdGEpCit7CisgICAg
cmV0dXJuIG1fcGFnZUNsaWVudC5pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9y
SGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0LCB0eXBlLCB1c2VyRGF0YSk7Cit9CisKIHZvaWQg
V2ViUGFnZVByb3h5OjppbnN0YWxsVmlld1N0YXRlQ2hhbmdlQ29tcGxldGlvbkhhbmRsZXIodm9p
ZCAoXmNvbXBsZXRpb25IYW5kbGVyKSgpKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxOTA2NzQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIlZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8u
aCIKICNpbmNsdWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlICJXS0ltbWVkaWF0ZUFjdGlvblR5cGVz
LmgiCiAjaW5jbHVkZSAiV0tQYWdlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkNvbG9yUGlja2Vy
LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgpAQCAtMTAxNSwxMyArMTAx
NiwxNSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgcmVtb3ZlTmF2aWdh
dGlvbkdlc3R1cmVTbmFwc2hvdCgpOwogCi0gICAgV2ViSGl0VGVzdFJlc3VsdCogbGFzdE1vdXNl
TW92ZUhpdFRlc3RSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0
UmVzdWx0LmdldCgpOyB9CisgICAgQVBJOjpIaXRUZXN0UmVzdWx0KiBsYXN0TW91c2VNb3ZlSGl0
VGVzdFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQu
Z2V0KCk7IH0KICAgICB2b2lkIHBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlv
bihXZWJDb3JlOjpGbG9hdFBvaW50KTsKIAogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkVXBk
YXRlKCk7CiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRDYW5jZWwoKTsKICAgICB2b2lkIGlt
bWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRlKCk7CiAKKyAgICB2b2lkKiBpbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVz
dWx0PiwgX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSwgUmVmUHRyPEFQSTo6T2JqZWN0Pik7CisKICAg
ICB2b2lkIGluc3RhbGxWaWV3U3RhdGVDaGFuZ2VDb21wbGV0aW9uSGFuZGxlcih2b2lkKF5jb21w
bGV0aW9uSGFuZGxlcikoKSk7CiAjZW5kaWYKIApAQCAtMTE1MCw5ICsxMTUzLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJ1bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6RGVsYXllZFJlcGx5Pik7
CiAgICAgdm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IFJlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpEZWxh
eWVkUmVwbHk+KTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7Ci0gICAg
dm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRh
JiBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3QgbW9kaWZpZXJzLCBjb25zdCBVc2VyRGF0YSYp
OworICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViSGl0VGVzdFJlc3Vs
dERhdGEmLCB1aW50MzJfdCBtb2RpZmllcnMsIGNvbnN0IFVzZXJEYXRhJik7CiAKLSAgICB2b2lk
IGRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEm
IGhpdFRlc3RSZXN1bHREYXRhLCBjb25zdCBVc2VyRGF0YSYpOworICAgIHZvaWQgZGlkQmVnaW5U
cmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBt
b3VzZURvd25Qb3NpdGlvbiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBjb25zdCBVc2Vy
RGF0YSYpOwogICAgIHZvaWQgZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MoY29uc3QgVXNlckRh
dGEmKTsKICAgICB2b2lkIGRpZENhbmNlbFRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3Mo
Y29uc3QgVXNlckRhdGEmKTsKIApAQCAtMTQ1MSw3ICsxNDU0LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHZpZXdEaWRFbnRlcldpbmRvdygpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQg
ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6
RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgY29uc3QgVXNlckRhdGEmKTsKKyAg
ICB2b2lkIGRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RS
ZXN1bHREYXRhJiwgYm9vbCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBjb25zdCBVc2VyRGF0YSYp
OwogI2VuZGlmCiAKICAgICB2b2lkIHVzZUZpeGVkTGF5b3V0RGlkQ2hhbmdlKGJvb2wgdXNlRml4
ZWRMYXlvdXQpIHsgbV91c2VGaXhlZExheW91dCA9IHVzZUZpeGVkTGF5b3V0OyB9CkBAIC0xNTU1
LDcgKzE1NTgsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBt
X2FjdGl2ZUNvbnRleHRNZW51OwogICAgIENvbnRleHRNZW51Q29udGV4dERhdGEgbV9hY3RpdmVD
b250ZXh0TWVudUNvbnRleHREYXRhOwogI2VuZGlmCi0gICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1
bHQ+IG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQ7CisgICAgUmVmUHRyPEFQSTo6SGl0VGVz
dFJlc3VsdD4gbV9sYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdDsKIAogICAgIFJlZlB0cjxXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5PiBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyOwog
ICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkgbV9nZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTkwNjc0KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAg
IFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhIGZyYW1lU2VjdXJpdHlPcmlnaW4sIFN0cmluZyBtZXNzYWdlKSAtPiAo
KSBEZWxheWVkCiAgICAgUnVuSmF2YVNjcmlwdENvbmZpcm0odWludDY0X3QgZnJhbWVJRCwgc3Ry
dWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBmcmFtZVNlY3VyaXR5T3JpZ2luLCBTdHJp
bmcgbWVzc2FnZSkgLT4gKGJvb2wgcmVzdWx0KSBEZWxheWVkCiAgICAgUnVuSmF2YVNjcmlwdFBy
b21wdCh1aW50NjRfdCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
IGZyYW1lU2VjdXJpdHlPcmlnaW4sIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgZGVmYXVsdFZhbHVl
KSAtPiAoU3RyaW5nIHJlc3VsdCkgRGVsYXllZAotICAgIE1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMy
X3QgbW9kaWZpZXJzLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQorICAgIE1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50KHN0cnVjdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIGhpdFRlc3RS
ZXN1bHREYXRhLCB1aW50MzJfdCBtb2RpZmllcnMsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEp
CiAKLSAgICBEaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViQ29yZTo6
SW50UG9pbnQgbW91c2VEb3duUG9zaXRpb24sIFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0
YSBoaXRUZXN0UmVzdWx0RGF0YSwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKKyAgICBEaWRC
ZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViQ29yZTo6SW50UG9pbnQgbW91
c2VEb3duUG9zaXRpb24sIHN0cnVjdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIGhpdFRl
c3RSZXN1bHREYXRhLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogICAgIERpZFJlY29nbml6
ZUxvbmdNb3VzZVByZXNzKFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCiAgICAgRGlkQ2FuY2Vs
VHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRh
KQogCkBAIC00MzEsNyArNDMxLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIERpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRU
ZXN0KHN0cnVjdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgcmVzdWx0LCBib29sIGNv
bnRlbnRQcmV2ZW50c0RlZmF1bHQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCisgICAgRGlk
UGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Qoc3RydWN0IFdlYktpdDo6V2ViSGl0VGVzdFJl
c3VsdERhdGEgcmVzdWx0LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIFdlYktpdDo6VXNl
ckRhdGEgdXNlckRhdGEpCiAjZW5kaWYKICAgICBIYW5kbGVNZXNzYWdlKFN0cmluZyBtZXNzYWdl
TmFtZSwgV2ViS2l0OjpVc2VyRGF0YSBtZXNzYWdlQm9keSkgV2FudHNDb25uZWN0aW9uCiAgICAg
SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKFN0cmluZyBtZXNzYWdlTmFtZSwgV2ViS2l0OjpVc2Vy
RGF0YSBtZXNzYWdlQm9keSkgLT4gKFdlYktpdDo6VXNlckRhdGEgcmV0dXJuRGF0YSkgV2FudHND
b25uZWN0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRleHRN
ZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElDb250ZXh0TWVudUNsaWVudC5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRleHRNZW51Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogCi0jaW5jbHVkZSAi
V2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDgs
NyArNDgsNyBAQCBjbGFzcyBDb250ZXh0TWVudUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+Q29udGV4dE1lbnVDbGllbnQoKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBnZXRDb250ZXh0
TWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBjb25zdCBWZWN0b3I8
UmVmUHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mIC8qIHByb3Bvc2VkTWVudSAqLywg
VmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiAvKiBjdXN0b21NZW51
ICovLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBBUEk6Ok9iamVjdCog
LyogdXNlckRhdGEgKi8pIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGdldENv
bnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYgLyogcHJvcG9zZWRNZW51
ICovLCBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mIC8qIGN1c3Rv
bU1lbnUgKi8sIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmLCBBUEk6Ok9iamVj
dCogLyogdXNlckRhdGEgKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGN1
c3RvbUNvbnRleHRNZW51SXRlbVNlbGVjdGVkKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgY29uc3Qg
V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW1EYXRhJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNv
bnRleHRNZW51RGlzbWlzc2VkKFdlYktpdDo6V2ViUGFnZVByb3h5JikgeyB9CiAgICAgdmlydHVh
bCBib29sIHNob3dDb250ZXh0TWVudShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51
SXRlbT4+JikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSVVJQ2xpZW50LmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaW5jbHVkZSAiV0tQYWdlLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNs
dWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEu
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJLaXQ6OldlYkZyYW1l
UHJveHkqLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKGNvbnN0IFdURjo6U3RyaW5nJik+IGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRp
b25IYW5kbGVyKFdURjo6U3RyaW5nKCkpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
VGV4dChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYktpdDo6V2ViUGFnZVByb3h5
KiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiwgV2ViS2l0OjpXZWJFdmVu
dDo6TW9kaWZpZXJzLCBBUEk6Ok9iamVjdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZURp
ZE1vdmVPdmVyRWxlbWVudChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdlYktpdDo6V2Vi
SGl0VGVzdFJlc3VsdERhdGEmLCBXZWJLaXQ6OldlYkV2ZW50OjpNb2RpZmllcnMsIEFQSTo6T2Jq
ZWN0KikgeyB9CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgdmlydHVhbCB2
b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24sIEFQSTo6RGljdGlvbmFyeSopIHsgfQogI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwaW5uZWRTdGF0ZURpZENoYW5nZShXZWJLaXQ6Oldl
YlBhZ2VQcm94eSYpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luVHJhY2tpbmdQb3Rl
bnRpYWxMb25nTW91c2VQcmVzcyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiwgQVBJOjpP
YmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExv
bmdNb3VzZVByZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJiwgQVBJOjpPYmplY3QqKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBBUEk6Ok9iamVjdCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5j
ZWxUcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
QVBJOjpPYmplY3QqKSB7IH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS0FQSUNhc3QuaAkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAK
IG5hbWVzcGFjZSBBUEkgewogY2xhc3MgRnJhbWVJbmZvOworY2xhc3MgSGl0VGVzdFJlc3VsdDsK
IGNsYXNzIE5hdmlnYXRpb247CiBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOwogY2xhc3MgTmF2aWdh
dGlvbkRhdGE7CkBAIC04OSw3ICs5MCw2IEBAIGNsYXNzIFdlYkZyYW1lUHJveHk7CiBjbGFzcyBX
ZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYkdlb2xvY2F0aW9uUG9zaXRpb247
CiBjbGFzcyBXZWJHcmFtbWFyRGV0YWlsOwotY2xhc3MgV2ViSGl0VGVzdFJlc3VsdDsKIGNsYXNz
IFdlYkljb25EYXRhYmFzZTsKIGNsYXNzIFdlYkluc3BlY3RvclByb3h5OwogY2xhc3MgV2ViTWVk
aWFDYWNoZU1hbmFnZXJQcm94eTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBXS19BRERfQVBJX01BUFBJ
TkcoV0tHZW9sb2NhdGlvbk1hbmFnZXJSCiBXS19BRERfQVBJX01BUFBJTkcoV0tHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0UmVmLCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkp
CiBXS19BRERfQVBJX01BUFBJTkcoV0tHZW9sb2NhdGlvblBvc2l0aW9uUmVmLCBXZWJHZW9sb2Nh
dGlvblBvc2l0aW9uKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLR3JhbW1hckRldGFpbFJlZiwgV2Vi
R3JhbW1hckRldGFpbCkKLVdLX0FERF9BUElfTUFQUElORyhXS0hpdFRlc3RSZXN1bHRSZWYsIFdl
YkhpdFRlc3RSZXN1bHQpCitXS19BRERfQVBJX01BUFBJTkcoV0tIaXRUZXN0UmVzdWx0UmVmLCBB
UEk6OkhpdFRlc3RSZXN1bHQpCiBXS19BRERfQVBJX01BUFBJTkcoV0tJY29uRGF0YWJhc2VSZWYs
IFdlYkljb25EYXRhYmFzZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0luc3BlY3RvclJlZiwgV2Vi
SW5zcGVjdG9yUHJveHkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tNZWRpYUNhY2hlTWFuYWdlclJl
ZiwgV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAxOTA2NzQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV0tIaXRUZXN0UmVzdWx0LmgiCiAKKyNpbmNsdWRlICJBUElIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5o
IgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBXS1R5cGVJRCBXS0hpdFRlc3RSZXN1bHRH
ZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShXZWJIaXRUZXN0UmVzdWx0OjpBUElUeXBl
KTsKKyAgICByZXR1cm4gdG9BUEkoQVBJOjpIaXRUZXN0UmVzdWx0OjpBUElUeXBlKTsKIH0KIAog
V0tVUkxSZWYgV0tIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlSW1hZ2VVUkwoV0tIaXRUZXN0UmVz
dWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJBUElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiQVBJRmluZENsaWVudC5oIgog
I2luY2x1ZGUgIkFQSUZyYW1lSW5mby5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJBUElMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0
aW9uLmgiCiAjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkNsaWVudC5oIgpAQCAtNzY4LDcgKzc2OSw3
IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KFdLUGEKICAgICAgICAgfQog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCBib29sIGdldENvbnRleHRNZW51RnJvbVBy
b3Bvc2VkTWVudShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViS2l0
OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYgcHJvcG9zZWRNZW51VmVjdG9yLCBWZWN0b3I8UmVmUHRy
PFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mIGN1c3RvbU1lbnUsIGNvbnN0IFdlYkhpdFRl
c3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhLCBBUEk6Ok9iamVjdCogdXNlckRhdGEp
IG92ZXJyaWRlCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3Nl
ZE1lbnUoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2Vi
Q29udGV4dE1lbnVJdGVtPj4mIHByb3Bvc2VkTWVudVZlY3RvciwgVmVjdG9yPFJlZlB0cjxXZWJL
aXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiBjdXN0b21NZW51LCBjb25zdCBXZWJIaXRUZXN0UmVz
dWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJp
ZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5nZXRDb250ZXh0TWVudUZy
b21Qcm9wb3NlZE1lbnUgJiYgIW1fY2xpZW50LmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVu
dV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc4NCw3ICs3ODUsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVudChX
S1BhCiAKICAgICAgICAgICAgIFdLQXJyYXlSZWYgbmV3TWVudSA9IG51bGxwdHI7CiAgICAgICAg
ICAgICBpZiAobV9jbGllbnQuYmFzZS52ZXJzaW9uID49IDIpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVzdFJlc3VsdCA9IFdlYkhpdFRlc3RSZXN1
bHQ6OmNyZWF0ZShoaXRUZXN0UmVzdWx0RGF0YSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEFQ
STo6SGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVzdFJlc3VsdDo6
Y3JlYXRlKGhpdFRlc3RSZXN1bHREYXRhKTsKICAgICAgICAgICAgICAgICBtX2NsaWVudC5nZXRD
b250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUodG9BUEkoJnBhZ2UpLCB0b0FQSShBUEk6OkFycmF5
OjpjcmVhdGUoV1RGOjptb3ZlKHByb3Bvc2VkTWVudUl0ZW1zKSkucHRyKCkpLCAmbmV3TWVudSwg
dG9BUEkod2ViSGl0VGVzdFJlc3VsdC5nZXQoKSksIHRvQVBJKHVzZXJEYXRhKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1f
Y2xpZW50LmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVkRm9yVXNlV2l0
aFYwKHRvQVBJKCZwYWdlKSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURjo6bW92ZShwcm9w
b3NlZE1lbnVJdGVtcykpLnB0cigpKSwgJm5ld01lbnUsIHRvQVBJKHVzZXJEYXRhKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKQEAgLTE2MzcsNyArMTYzOCw3IEBAIHZvaWQgV0tQYWdlU2V0
UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgICAgIG1fY2xpZW50LnNldFN0YXR1
c1RleHQodG9BUEkocGFnZSksIHRvQVBJKHRleHQuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVP
dmVyRWxlbWVudChXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRh
dGEmIGRhdGEsIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzLCBBUEk6Ok9iamVjdCogdXNl
ckRhdGEpIG92ZXJyaWRlCisgICAgICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxl
bWVudChXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRh
LCBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycywgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBv
dmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50ICYmICFtX2NsaWVudC5tb3VzZURpZE1vdmVPdmVyRWxlbWVudF9kZXByZWNh
dGVkRm9yVXNlV2l0aFYwKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2NTAsNyArMTY1
MSw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZlB0cjxXZWJI
aXRUZXN0UmVzdWx0PiB3ZWJIaXRUZXN0UmVzdWx0ID0gV2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRl
KGRhdGEpOworICAgICAgICAgICAgUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVz
dFJlc3VsdCA9IEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGRhdGEpOwogICAgICAgICAgICAg
bV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQodG9BUEkocGFnZSksIHRvQVBJKHdlYkhp
dFRlc3RSZXN1bHQuZ2V0KCkpLCB0b0FQSShtb2RpZmllcnMpLCB0b0FQSSh1c2VyRGF0YSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIApAQCAtMTkxOCwxMiArMTkxOSwx
MiBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnCiAgICAgICAgICAg
ICBtX2NsaWVudC5waW5uZWRTdGF0ZURpZENoYW5nZSh0b0FQSSgmcGFnZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVn
aW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKFdlYlBhZ2VQcm94eSogcGFnZSwgY29u
c3QgSW50UG9pbnQmIG1vdXNlRG93blBvc2l0aW9uLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhJiBkYXRhLCBBUEk6Ok9iamVjdCogdXNlckluZm8pIG92ZXJyaWRlCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViUGFnZVBy
b3h5KiBwYWdlLCBjb25zdCBJbnRQb2ludCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IFdlYkhp
dFRlc3RSZXN1bHREYXRhJiBkYXRhLCBBUEk6Ok9iamVjdCogdXNlckluZm8pIG92ZXJyaWRlCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZGlkQmVnaW5UcmFja2luZ1BvdGVu
dGlhbExvbmdNb3VzZVByZXNzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IHdlYkhpdFRlc3RSZXN1bHQgPSBXZWJIaXRUZXN0
UmVzdWx0OjpjcmVhdGUoZGF0YSk7CisgICAgICAgICAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVz
dWx0PiB3ZWJIaXRUZXN0UmVzdWx0ID0gQVBJOjpIaXRUZXN0UmVzdWx0OjpjcmVhdGUoZGF0YSk7
CiAgICAgICAgICAgICBtX2NsaWVudC5kaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNl
UHJlc3ModG9BUEkocGFnZSksIHRvQVBJKG1vdXNlRG93blBvc2l0aW9uKSwgdG9BUEkod2ViSGl0
VGVzdFJlc3VsdC5nZXQoKSksIHRvQVBJKHVzZXJJbmZvKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMx
MTEsNiArMzExMSwxMSBAQCAtIChCT09MKV9hdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNl
CiAgICAgcmV0dXJuIFtfd2tWaWV3IF9hdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHNd
OwogfQogCistIChpZClfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRl
c3RSZXN1bHQ6KF9XS0hpdFRlc3RSZXN1bHQgKiloaXRUZXN0UmVzdWx0IHdpdGhUeXBlOihfV0tJ
bW1lZGlhdGVBY3Rpb25UeXBlcyl0eXBlIHVzZXJEYXRhOihpZDxOU1NlY3VyZUNvZGluZz4pdXNl
ckRhdGEKK3sKKyAgICByZXR1cm4gbmlsOworfQorCiAjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkocmV2
aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBXS19B
UElfRU5BQkxFRAogCiAjaW1wb3J0IDxXZWJLaXQvX1dLRmluZE9wdGlvbnMuaD4KKyNpbXBvcnQg
PFdlYktpdC9fV0tJbW1lZGlhdGVBY3Rpb25UeXBlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLTGF5
b3V0TW9kZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzLmg+
CiAKQEAgLTQwLDYgKzQxLDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLUGFnaW5h
dGlvbgogfSBXS19FTlVNX0FWQUlMQUJMRSgxMF8xMCwgOF8wKTsKIAogQGNsYXNzIFdLQnJvd3Np
bmdDb250ZXh0SGFuZGxlOworQGNsYXNzIF9XS0hpdFRlc3RSZXN1bHQ7CiBAY2xhc3MgX1dLUmVt
b3RlT2JqZWN0UmVnaXN0cnk7CiBAY2xhc3MgX1dLU2Vzc2lvblN0YXRlOwogQGNsYXNzIF9XS1dl
YlZpZXdQcmludEZvcm1hdHRlcjsKQEAgLTE2NSwxMyArMTY3LDE2IEBAIHR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIF9XS1BhZ2luYXRpb24KIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxMDAwCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRBdXRv
bWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6KSBCT09MIF9hdXRvbWF0aWNhbGx5QWRqdXN0
c0NvbnRlbnRJbnNldHM7CisKKy8vIENsaWVudHMgdGhhdCB3YW50IHRvIG1haW50YWluIGRlZmF1
bHQgYmVoYXZpb3IgY2FuIHJldHVybiBuaWwuIFRvIGRpc2FibGUgdGhlIGltbWVkaWF0ZSBhY3Rp
b24gZW50aXJlbHksIHJldHVybiBOU051bGwuIEFuZCB0bworLy8gZG8gc29tZXRoaW5nIGN1c3Rv
bSwgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGNvbmZvcm1zIHRvIHRoZSBOU0ltbWVkaWF0ZUFjdGlv
bkFuaW1hdGlvbkNvbnRyb2xsZXIgcHJvdG9jb2wuCistIChpZClfaW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6KF9XS0hpdFRlc3RSZXN1bHQgKiloaXRU
ZXN0UmVzdWx0IHdpdGhUeXBlOihfV0tJbW1lZGlhdGVBY3Rpb25UeXBlcyl0eXBlIHVzZXJEYXRh
OihpZDxOU1NlY3VyZUNvZGluZz4pdXNlckRhdGE7CiAjZW5kaWYKIAogLy8gRGVmYXVsdCB2YWx1
ZSBpcyAwLiBBIHZhbHVlIG9mIDAgbWVhbnMgdGhlIHdpbmRvdydzIGJhY2tpbmcgc2NhbGUgZmFj
dG9yIHdpbGwgYmUgdXNlZCBhbmQgYXV0b21hdGljYWxseSB1cGRhdGUgd2hlbiB0aGUgd2luZG93
IG1vdmVzIHNjcmVlbnMuCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRPdmVycmlk
ZURldmljZVNjYWxlRmFjdG9yOikgQ0dGbG9hdCBfb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvciBX
S19BVkFJTEFCTEUoMTBfMTEsIE5BKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1f
c2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDopIEJPT0wgX3dpbmRvd09jY2x1c2lv
bkRldGVjdGlvbkVuYWJsZWQ7Ci0KICNlbmRpZgogCiAtICh2b2lkKV9raWxsV2ViQ29udGVudFBy
b2Nlc3NBbmRSZXNldFN0YXRlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvV2ViQWNjZXNzaWJpbGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvV2ViQWNjZXNzaWJpbGl0eS5jcHAJKHJldmlzaW9uIDE5MDY3NCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYkFjY2Vzc2liaWxpdHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAj
aW5jbHVkZSAiV0tWaWV3RWZsLmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Q29udGV4dE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBib29sIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXZWJQYWdlUHJveHkmLCBj
b25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvbnRleHRNZW51SXRlbT4+JiBwcm9wb3NlZE1lbnUsIFZl
Y3RvcjxSZWZQdHI8V2ViQ29udGV4dE1lbnVJdGVtPj4mLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlk
ZQorICAgIGJvb2wgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29udGV4dE1lbnVJdGVtPj4mIHByb3Bvc2VkTWVudSwg
VmVjdG9yPFJlZlB0cjxXZWJDb250ZXh0TWVudUl0ZW0+PiYsIGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlk
ZQogICAgIHsKICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudDsKICAgICAgICAgaWYg
KHVzZXJEYXRhKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRIaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gMTkwNjc0KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJLaXRIaXRUZXN0UmVzdWx0LmgiCiAKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVz
dWx0LmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbmNsdWRlICJXZWJL
aXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oIgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMjIxLDcgKzIyMSw3IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY2xhc3MKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1GbGFncykpOwogfQogCi1XZWJL
aXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKGNvbnN0IFdlYkhpdFRl
c3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHQpCitXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJr
aXRIaXRUZXN0UmVzdWx0Q3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0
UmVzdWx0KQogewogICAgIHVuc2lnbmVkIGNvbnRleHQgPSBXRUJLSVRfSElUX1RFU1RfUkVTVUxU
X0NPTlRFWFRfRE9DVU1FTlQ7CiAKQEAgLTI1OCw3ICsyNTgsNyBAQCBzdGF0aWMgYm9vbCBzdHJp
bmdJc0VxdWFsVG9DU3RyaW5nKGNvbnN0CiAgICAgcmV0dXJuICgoc3RyaW5nLmlzRW1wdHkoKSAm
JiBjU3RyaW5nLmlzTnVsbCgpKSB8fCAoc3RyaW5nLnV0ZjgoKSA9PSBjU3RyaW5nKSk7CiB9CiAK
LWJvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0
VGVzdFJlc3VsdCwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgd2ViSGl0VGVzdFJlc3Vs
dCkKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJlc3VsdCog
aGl0VGVzdFJlc3VsdCwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIHdlYkhpdFRlc3RSZXN1
bHQpCiB7CiAgICAgV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUqIHByaXYgPSBoaXRUZXN0UmVz
dWx0LT5wcml2OwogICAgIHJldHVybiB3ZWJIaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxl
ID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVz
dWx0KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVz
dFJlc3VsdFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oCShyZXZpc2lvbiAxOTA2NzQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAotV2ViS2l0SGl0
VGVzdFJlc3VsdCogd2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkhp
dFRlc3RSZXN1bHQ6OkRhdGEmKTsKLWJvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2Vi
S2l0SGl0VGVzdFJlc3VsdCosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYp
OworV2ViS2l0SGl0VGVzdFJlc3VsdCogd2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShjb25zdCBX
ZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJik7Citib29sIHdlYmtpdEhpdFRlc3RSZXN1bHRD
b21wYXJlKFdlYktpdEhpdFRlc3RSZXN1bHQqLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1
bHREYXRhJik7CiAKICNlbmRpZiAvLyBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZV9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGll
bnQuY3BwCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRVSUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RyaW5nOjpmcm9tVVRGOChyZXN1
bHQuZGF0YSgpKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGRhdGEs
IFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzLCBBUEk6Ok9iamVjdCopIG92ZXJyaWRlCisg
ICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYlBhZ2VQcm94eSosIGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlm
aWVycywgQVBJOjpPYmplY3QqKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmll
d01vdXNlVGFyZ2V0Q2hhbmdlZChtX3dlYlZpZXcsIGRhdGEsIHRvR2RrTW9kaWZpZXJzKG1vZGlm
aWVycykpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkzMiw3ICsxOTMyLDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1
ZXN0KAogICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tQRVJNSVNTSU9OX1JFUVVF
U1RdLCAwLCByZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOwogfQogCi12b2lkIHdlYmtpdFdlYlZpZXdN
b3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgV2ViSGl0VGVz
dFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJzKQordm9pZCB3
ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmll
cnMpCiB7CiAgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwQXJlYShXRUJLSVRfV0VCX1ZJ
RVdfQkFTRSh3ZWJWaWV3KSwgaGl0VGVzdFJlc3VsdC5lbGVtZW50Qm91bmRpbmdCb3gpOwogCkBA
IC0yMDc2LDcgKzIwNzYsNyBAQCBzdGF0aWMgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZChHdGtN
ZW51CiAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0NPTlRFWFRfTUVOVV9ESVNN
SVNTRURdLCAwLCBOVUxMKTsKIH0KIAotdm9pZCB3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0
TWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJ
dGVtRGF0YT4mIHByb3Bvc2VkTWVudSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0
VGVzdFJlc3VsdERhdGEsIEdWYXJpYW50KiB1c2VyRGF0YSkKK3ZvaWQgd2Via2l0V2ViVmlld1Bv
cHVsYXRlQ29udGV4dE1lbnUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgVmVjdG9yPFdl
YkNvbnRleHRNZW51SXRlbURhdGE+JiBwcm9wb3NlZE1lbnUsIGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgR1ZhcmlhbnQqIHVzZXJEYXRhKQogewogICAgIFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZp
ZXcpOwogICAgIFdlYkNvbnRleHRNZW51UHJveHlHdGsqIGNvbnRleHRNZW51UHJveHkgPSB3ZWJr
aXRXZWJWaWV3QmFzZUdldEFjdGl2ZUNvbnRleHRNZW51UHJveHkod2ViVmlld0Jhc2UpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJJbnN0YWxsTWlzc2luZ01lZGlhUGx1Z2luc1Blcm1p
c3Npb25SZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgotI2lu
Y2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0
YS5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCB3ZWJr
aXRXZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0oVwogQ1N0cmluZyB3ZWJraXRXZWJWaWV3UnVu
SmF2YVNjcmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwg
Y29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1p
c3Npb25SZXF1ZXN0KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCopOwog
dm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJL
aXRQb2xpY3lEZWNpc2lvblR5cGUsIFdlYktpdFBvbGljeURlY2lzaW9uKik7Ci12b2lkIHdlYmtp
dFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIGNvbnN0IFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIHVuc2lnbmVkIG1vZGlmaWVycyk7Cit2b2lkIHdlYmtp
dFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIGNvbnN0IFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdERhdGEmLCB1bnNpZ25lZCBtb2RpZmllcnMpOwogdm9pZCB3ZWJraXRX
ZWJWaWV3UHJpbnRGcmFtZShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5Kik7
CiB2b2lkIHdlYmtpdFdlYlZpZXdSZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXQ6OldlYkZyYW1lUHJveHkqLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYktp
dFVSSVJlcXVlc3QqKTsKIHZvaWQgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Kik7CkBAIC01NSw3ICs1NSw3
IEBAIHZvaWQgd2ViS2l0V2ViVmlld0RpZFJlY2VpdmVTbmFwc2hvdChXZWIKIHZvaWQgd2Via2l0
V2ViVmlld1JlbW92ZUxvYWRpbmdXZWJSZXNvdXJjZShXZWJLaXRXZWJWaWV3KiwgdWludDY0X3Qg
cmVzb3VyY2VJZGVudGlmaWVyKTsKIGJvb2wgd2Via2l0V2ViVmlld0VudGVyRnVsbFNjcmVlbihX
ZWJLaXRXZWJWaWV3Kik7CiBib29sIHdlYmtpdFdlYlZpZXdMZWF2ZUZ1bGxTY3JlZW4oV2ViS2l0
V2ViVmlldyopOwotdm9pZCB3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShXZWJLaXRX
ZWJWaWV3KiwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHBy
b3Bvc2VkTWVudSwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiwgR1Zhcmlh
bnQqKTsKK3ZvaWQgd2Via2l0V2ViVmlld1BvcHVsYXRlQ29udGV4dE1lbnUoV2ViS2l0V2ViVmll
dyosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGE+JiBwcm9wb3Nl
ZE1lbnUsIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmLCBHVmFyaWFudCopOwog
dm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktp
dEZvcm1TdWJtaXNzaW9uUmVxdWVzdCopOwogdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyosIFdlYktpdDo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eSopOwogdm9pZCB3ZWJraXRXZWJWaWV3SW5zZWN1cmVDb250ZW50RGV0ZWN0
ZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50KTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDE5MDY3
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQAogI2ltcG9ydCAiV0tXZWJWaWV3LmgiCiAjaW1wb3J0
ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgotI2lt
cG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdERhdGEu
aCIKICNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCiAjaW1wb3J0ICJXZWJLaXQySW5pdGlh
bGl6ZS5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgpAQCAtMzk4MCw3ICszOTgwLDcgQEAgLSAodm9p
ZClfcmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAogCiAjaWYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKIAotLSAodm9pZClfZGlkUGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3Q6KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1
bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDooQk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0IHVz
ZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRhdGEKKy0gKHZvaWQpX2RpZFBlcmZvcm1JbW1lZGlh
dGVBY3Rpb25IaXRUZXN0Oihjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJlc3Vs
dCBjb250ZW50UHJldmVudHNEZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNl
ckRhdGE6KEFQSTo6T2JqZWN0Kil1c2VyRGF0YQogewogICAgIFtfZGF0YS0+X2ltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXIgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6aGl0VGVzdFJl
c3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0OmNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRh
dGE6dXNlckRhdGFdOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIK
ICNpbXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXZWJGaW5k
T3B0aW9ucy5oIgotI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiV2ViSGl0
VGVzdFJlc3VsdERhdGEuaCIKICNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNDUsNyArMTQ1LDcgQEAg
QGludGVyZmFjZSBXS1ZpZXcgKCkKIC0gKHZvaWQpX3ByZXBhcmVGb3JEaWN0aW9uYXJ5TG9va3Vw
OwogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKLS0gKHZv
aWQpX2RpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0Oihjb25zdCBXZWJLaXQ6OldlYkhp
dFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDoo
Qk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRh
dGE7CistICh2b2lkKV9kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2Vi
S2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNE
ZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0
Kil1c2VyRGF0YTsKICNlbmRpZgogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDExMDAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsLmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw5IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JN
YWluRnJhbWUoU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpP
YmplY3QqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0ZUFj
dGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBib29sIGNvbnRlbnRQcmV2
ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkKiBp
bW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8
QVBJOjpIaXRUZXN0UmVzdWx0PiwgX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSwgUmVmUHRyPEFQSTo6
T2JqZWN0Pikgb3ZlcnJpZGU7CisKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXRmb3JtQ29udGV4
dE1lbnUoTlNNZW51ICosIFdlYkNvcmU6OkludFBvaW50KSBvdmVycmlkZTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24g
MTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2ltcG9ydCAiV2ViUG9wdXBNZW51
UHJveHlNYWMuaCIKICNpbXBvcnQgIldpbmRvd1NlcnZlckNvbm5lY3Rpb24uaCIKICNpbXBvcnQg
Il9XS0Rvd25sb2FkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHRJbnRlcm5h
bC5oIgogI2ltcG9ydCAiX1dLVGh1bWJuYWlsVmlldy5oIgogI2ltcG9ydCA8V2ViQ29yZS9BbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQml0bWFwSW1hZ2Uu
aD4KQEAgLTgxMSwxMyArODEyLDQ0IEBAIENHUmVjdCBQYWdlQ2xpZW50SW1wbDo6Ym91bmRzT2ZM
YXllckluTGEKICAgICByZXR1cm4gW3dpbmRvd0NvbnRlbnRMYXllciBjb252ZXJ0UmVjdDpsYXll
ci5ib3VuZHMgZnJvbUxheWVyOmxheWVyXTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlk
UGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0
YSYgcmVzdWx0LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0KiB1c2Vy
RGF0YSkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRU
ZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1bHQsIGJvb2wgY29udGVudFByZXZl
bnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQogewogI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAgICAgW21fd2tWaWV3IF9kaWRQZXJmb3JtSW1t
ZWRpYXRlQWN0aW9uSGl0VGVzdDpyZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDpjb250ZW50
UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOnVzZXJEYXRhXTsKICNlbmRpZgogfQogCit2b2lkKiBQ
YWdlQ2xpZW50SW1wbDo6aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRl
c3RSZXN1bHQoUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCwgX1dLSW1t
ZWRpYXRlQWN0aW9uVHlwZSB0eXBlLCBSZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhKQorewor
I2lmIFdLX0FQSV9FTkFCTEVECisgICAgaWYgKG1fd2ViVmlldykgeworICAgICAgICBfV0tJbW1l
ZGlhdGVBY3Rpb25UeXBlcyB3a1R5cGU7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIGtXS0ltbWVkaWF0ZUFjdGlvbk5vbmU6CisgICAgICAgICAgICB3a1R5cGUgPSBfV0tJ
bW1lZGlhdGVBY3Rpb25Ob25lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1dL
SW1tZWRpYXRlQWN0aW9uTGlua1ByZXZpZXc6CisgICAgICAgICAgICB3a1R5cGUgPSBfV0tJbW1l
ZGlhdGVBY3Rpb25MaW5rUHJldmlldzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IGtXS0ltbWVkaWF0ZUFjdGlvbkRhdGFEZXRlY3RlZEl0ZW06CisgICAgICAgICAgICB3a1R5cGUg
PSBfV0tJbW1lZGlhdGVBY3Rpb25EYXRhRGV0ZWN0ZWRJdGVtOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2Uga1dLSW1tZWRpYXRlQWN0aW9uTG9va3VwVGV4dDoKKyAgICAgICAgICAg
IHdrVHlwZSA9IF9XS0ltbWVkaWF0ZUFjdGlvbkxvb2t1cFRleHQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBrV0tJbW1lZGlhdGVBY3Rpb25NYWlsdG9MaW5rOgorICAgICAgICAg
ICAgd2tUeXBlID0gX1dLSW1tZWRpYXRlQWN0aW9uTWFpbHRvTGluazsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIGtXS0ltbWVkaWF0ZUFjdGlvblRlbExpbms6CisgICAgICAgICAg
ICB3a1R5cGUgPSBfV0tJbW1lZGlhdGVBY3Rpb25UZWxMaW5rOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFttX3dlYlZpZXcgX2ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OndyYXBwZXIoKmhpdFRlc3RSZXN1bHQp
IHdpdGhUeXBlOndrVHlwZSB1c2VyRGF0YTooaWQpKHVzZXJEYXRhLmdldCgpKV07CisgICAgfQor
I2VuZGlmCisgICAgcmV0dXJuIFttX3drVmlldyBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29u
dHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6dG9BUEkoaGl0VGVzdFJlc3VsdC5nZXQoKSkgd2l0aFR5
cGU6dHlwZSB1c2VyRGF0YTp0b0FQSSh1c2VyRGF0YS5nZXQoKSldOworfQorCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpzaG93UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUgKm1lbnUsIEludFBvaW50
IGxvY2F0aW9uKQogewogICAgIFttZW51IHBvcFVwTWVudVBvc2l0aW9uaW5nSXRlbTpuaWwgYXRM
b2NhdGlvbjpsb2NhdGlvbiBpblZpZXc6bV93a1ZpZXddOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxl
ci5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dL
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3
IEBACiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMAogCiAjaW1wb3J0ICJXS0ltbWVkaWF0ZUFjdGlvblR5cGVzLmgiCi0jaW1wb3J0
ICJXZWJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgog
I2ltcG9ydCA8V2ViQ29yZS9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTU0LDcgKzU0LDcgQEAgQGludGVyZmFj
ZSBXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgOgogICAgIFdLVmlldyAqX3drVmlldzsKIAog
ICAgIFdlYktpdDo6SW1tZWRpYXRlQWN0aW9uU3RhdGUgX3N0YXRlOwotICAgIFdlYktpdDo6V2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YSBfaGl0VGVzdFJlc3VsdERhdGE7CisgICAgV2ViS2l0OjpXZWJI
aXRUZXN0UmVzdWx0RGF0YSBfaGl0VGVzdFJlc3VsdERhdGE7CiAgICAgQk9PTCBfY29udGVudFBy
ZXZlbnRzRGVmYXVsdDsKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IF91c2VyRGF0YTsKICAgICBf
V0tJbW1lZGlhdGVBY3Rpb25UeXBlIF90eXBlOwpAQCAtNjksNyArNjksNyBAQCBAaW50ZXJmYWNl
IFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciA6CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlIHZpZXc6KFdLVmlldyAqKXdrVmlldyBy
ZWNvZ25pemVyOihOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyICopaW1tZWRpYXRl
QWN0aW9uUmVjb2duaXplcjsKIC0gKHZvaWQpd2lsbERlc3Ryb3lWaWV3OihXS1ZpZXcgKil2aWV3
OwotLSAodm9pZClkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiloaXRUZXN0UmVzdWx0IGNvbnRlbnRQcmV2ZW50c0Rl
ZmF1bHQ6KEJPT0wpY29udGVudFByZXZlbnRzRGVmYXVsdCB1c2VyRGF0YTooQVBJOjpPYmplY3Qq
KXVzZXJEYXRhOworLSAodm9pZClkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29u
c3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJl
dmVudHNEZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6
T2JqZWN0Kil1c2VyRGF0YTsKIC0gKHZvaWQpZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2lu
ZG93czsKIC0gKEJPT0wpaGFzQWN0aXZlSW1tZWRpYXRlQWN0aW9uOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlci5tbQkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKIAorI2ltcG9ydCAiQVBJSGl0VGVzdFJlc3VsdC5oIgog
I2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNp
bXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgpAQCAtODMsNyArODQsNyBAQCAtICh2b2lkKXdpbGxE
ZXN0cm95VmlldzooV0tWaWV3ICopdmlldwogewogICAgIF9wYWdlID0gbnVsbHB0cjsKICAgICBf
d2tWaWV3ID0gbmlsOwotICAgIF9oaXRUZXN0UmVzdWx0RGF0YSA9IFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEoKTsKKyAgICBfaGl0VGVzdFJlc3VsdERhdGEgPSBXZWJIaXRUZXN0UmVzdWx0RGF0YSgp
OwogICAgIF9jb250ZW50UHJldmVudHNEZWZhdWx0ID0gTk87CiAgICAgCiAgICAgaWQgYW5pbWF0
aW9uQ29udHJvbGxlciA9IFtfaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplciBhbmltYXRpb25Db250
cm9sbGVyXTsKQEAgLTEyMyw3ICsxMjQsNyBAQCAtICh2b2lkKV9jbGVhckltbWVkaWF0ZUFjdGlv
blN0YXRlCiAgICAgfQogCiAgICAgX3N0YXRlID0gSW1tZWRpYXRlQWN0aW9uU3RhdGU6Ok5vbmU7
Ci0gICAgX2hpdFRlc3RSZXN1bHREYXRhID0gV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSgpOworICAg
IF9oaXRUZXN0UmVzdWx0RGF0YSA9IFdlYkhpdFRlc3RSZXN1bHREYXRhKCk7CiAgICAgX2NvbnRl
bnRQcmV2ZW50c0RlZmF1bHQgPSBOTzsKICAgICBfdHlwZSA9IGtXS0ltbWVkaWF0ZUFjdGlvbk5v
bmU7CiAgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0gbmlsOwpAQCAtMTMyLDcgKzEzMyw3IEBA
IC0gKHZvaWQpX2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGUKICAgICBfaGFzQWN0aXZlSW1tZWRp
YXRlQWN0aW9uID0gTk87CiB9CiAKLS0gKHZvaWQpZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhp
dFRlc3Q6KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29udGVu
dFByZXZlbnRzRGVmYXVsdDooQk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOihB
UEk6Ok9iamVjdCopdXNlckRhdGEKKy0gKHZvaWQpZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhp
dFRlc3Q6KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiloaXRUZXN0UmVzdWx0IGNvbnRlbnRQ
cmV2ZW50c0RlZmF1bHQ6KEJPT0wpY29udGVudFByZXZlbnRzRGVmYXVsdCB1c2VyRGF0YTooQVBJ
OjpPYmplY3QqKXVzZXJEYXRhCiB7CiAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnaXZlbiB1cCBv
biB0aGlzIGdlc3R1cmUgKGVpdGhlciBiZWNhdXNlIGl0IHdhcyBjYW5jZWxlZCBvciB0aGUKICAg
ICAvLyB3aWxsQmVnaW5BbmltYXRpb24gdGltZW91dCBleHBpcmVkKSwgd2Ugc2hvdWxkbid0IGJ1
aWxkIGEgbmV3IGFuaW1hdGlvbkNvbnRyb2xsZXIgZm9yIGl0LgpAQCAtMjQ5LDExICsyNTAsMTEg
QEAgLSAodm9pZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyRGlkQ29tcAogICAgIF9wYWdlLT5z
ZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3MoMSk7CiB9CiAKLS0gKFBhc3NSZWZQdHI8
V2ViSGl0VGVzdFJlc3VsdD4pX3dlYkhpdFRlc3RSZXN1bHQKKy0gKFBhc3NSZWZQdHI8QVBJOjpI
aXRUZXN0UmVzdWx0Pilfd2ViSGl0VGVzdFJlc3VsdAogewotICAgIFJlZlB0cjxXZWJIaXRUZXN0
UmVzdWx0PiBoaXRUZXN0UmVzdWx0OworICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IGhp
dFRlc3RSZXN1bHQ7CiAgICAgaWYgKF9zdGF0ZSA9PSBJbW1lZGlhdGVBY3Rpb25TdGF0ZTo6UmVh
ZHkpCi0gICAgICAgIGhpdFRlc3RSZXN1bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpjcmVhdGUoX2hp
dFRlc3RSZXN1bHREYXRhKTsKKyAgICAgICAgaGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVzdFJl
c3VsdDo6Y3JlYXRlKF9oaXRUZXN0UmVzdWx0RGF0YSk7CiAgICAgZWxzZQogICAgICAgICBoaXRU
ZXN0UmVzdWx0ID0gX3BhZ2UtPmxhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0KCk7CiAKQEAgLTI2
OSw3ICsyNzAsNyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sCiAg
ICAgICAgIHJldHVybiBkdW1teUNvbnRyb2xsZXIuZ2V0KCk7CiAgICAgfQogCi0gICAgUmVmUHRy
PFdlYkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3Vs
dF07CisgICAgUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxm
IF93ZWJIaXRUZXN0UmVzdWx0XTsKIAogICAgIGlmICghaGl0VGVzdFJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG5pbDsKQEAgLTMyNyw5ICszMjgsOCBAQCAtICh2b2lkKV91cGRhdGVJbW1lZGlhdGVB
Y3Rpb25JdGVtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViSGl0VGVz
dFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKLSAgICBp
ZCBjdXN0b21DbGllbnRBbmltYXRpb25Db250cm9sbGVyID0gW193a1ZpZXcgX2ltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OnRvQVBJKGhpdFRlc3RSZXN1
bHQuZ2V0KCkpIHdpdGhUeXBlOl90eXBlIHVzZXJEYXRhOnRvQVBJKF91c2VyRGF0YS5nZXQoKSld
OwotCisgICAgUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxm
IF93ZWJIaXRUZXN0UmVzdWx0XTsKKyAgICBpZCBjdXN0b21DbGllbnRBbmltYXRpb25Db250cm9s
bGVyID0gKGlkKShfcGFnZS0+aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhp
dFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdCwgX3R5cGUsIF91c2VyRGF0YSkpOwogICAgIGlmIChj
dXN0b21DbGllbnRBbmltYXRpb25Db250cm9sbGVyID09IFtOU051bGwgbnVsbF0pIHsKICAgICAg
ICAgW3NlbGYgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbl07CiAgICAgICAgIHJldHVybjsKQEAgLTM1
Myw3ICszNTMsNyBAQCAtIChpZDxRTFByZXZpZXdJdGVtPiltZW51SXRlbTooTlNNZW51SXRlCiAg
ICAgaWYgKCFfd2tWaWV3KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgUmVmUHRyPFdlYkhp
dFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3VsdF07Cisg
ICAgUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJI
aXRUZXN0UmVzdWx0XTsKICAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpo
aXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUxpbmtVUkwoKV07CiB9CiAKQEAgLTM3Miw3ICszNzIsNyBA
QCAtIChOU1JlY3QpbWVudUl0ZW06KE5TTWVudUl0ZW0gKiltZW51SXRlCiAgICAgaWYgKCFfd2tW
aWV3KQogICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIAotICAgIFJlZlB0cjxXZWJIaXRUZXN0
UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOworICAgIFJl
ZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVz
dFJlc3VsdF07CiAgICAgcmV0dXJuIFtfd2tWaWV3IGNvbnZlcnRSZWN0OmhpdFRlc3RSZXN1bHQt
PmVsZW1lbnRCb3VuZGluZ0JveCgpIHRvVmlldzpuaWxdOwogfQogCkBAIC00NDUsNyArNDQ1LDcg
QEAgLSAoaWQ8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbAogCiAgICAgW19jdXJy
ZW50QWN0aW9uQ29udGV4dCBzZXRIaWdobGlnaHRGcmFtZTpbX3drVmlldy53aW5kb3cgY29udmVy
dFJlY3RUb1NjcmVlbjpbX3drVmlldyBjb252ZXJ0UmVjdDpfaGl0VGVzdFJlc3VsdERhdGEuZWxl
bWVudEJvdW5kaW5nQm94IHRvVmlldzpuaWxdXV07CiAKLSAgICBSZWZQdHI8V2ViSGl0VGVzdFJl
c3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKKyAgICBSZWZQ
dHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RS
ZXN1bHRdOwogICAgIE5TQXJyYXkgKm1lbnVJdGVtcyA9IFtbZ2V0RERBY3Rpb25zTWFuYWdlckNs
YXNzKCkgc2hhcmVkTWFuYWdlcl0gbWVudUl0ZW1zRm9yVGFyZ2V0VVJMOmhpdFRlc3RSZXN1bHQt
PmFic29sdXRlTGlua1VSTCgpIGFjdGlvbkNvbnRleHQ6X2N1cnJlbnRBY3Rpb25Db250ZXh0Lmdl
dCgpXTsKIAogICAgIGlmIChtZW51SXRlbXMuY291bnQgIT0gMSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAxOTA2
NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNzUxLDcgKzc1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZGl0
b3JTdGF0ZUNoYW5nZWQoY28KICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKIENvbnRleHRN
ZW51SXRlbSBXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZVNoYXJlTWVudUl0ZW0oY29u
c3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYgY29udGV4dE1lbnVDb250ZXh0RGF0YSkKIHsKLSAg
ICBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0RGF0YSA9IGNvbnRleHRNZW51
Q29udGV4dERhdGEud2ViSGl0VGVzdFJlc3VsdERhdGEoKTsKKyAgICBjb25zdCBXZWJIaXRUZXN0
UmVzdWx0RGF0YSYgaGl0VGVzdERhdGEgPSBjb250ZXh0TWVudUNvbnRleHREYXRhLndlYkhpdFRl
c3RSZXN1bHREYXRhKCk7CiAKICAgICBVUkwgYWJzb2x1dGVMaW5rVVJMOwogICAgIGlmICghaGl0
VGVzdERhdGEuYWJzb2x1dGVMaW5rVVJMLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDY3
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtOTg1LDcgKzk4NSw2IEBACiAJCTUxQUNCQjgyMTI3QThCQUQwMEQy
MDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI4MTEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4
dE1lbnVQcm94eS5oICovOyB9OwogCQk1MUFDQkJBMDEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29u
dGV4dE1lbnVQcm94eU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFBQ0JCOUUxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlN
YWMuaCAqLzsgfTsKIAkJNTFBQ0JCQTExMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51
UHJveHlNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUFDQkI5RjEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSAq
LzsgfTsKLQkJNTFBRDM1NzMxQUQyRjM5NDAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFEMzU3MjFB
RDJGMzc1MDA1N0IzOEUgLyogV2ViSGl0VGVzdFJlc3VsdC5tbSAqLzsgfTsKIAkJNTFCMTVBODQx
Mzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjE1QTgyMTM4NDNBMzkwMDMyMUFE
OCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5jcHAgKi87IH07CiAJCTUxQjE1QTg1MTM4NDNBMzkw
MDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMTVBODMxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmly
b25tZW50VXRpbGl0aWVzLmggKi87IH07CiAJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBX
ZWJDcm9zc1RocmVhZENvcGllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUJBMjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwICovOyB9OwpAQCAtMTA2MCw4ICsxMDU5LDYgQEAKIAkJNzVBOEQyRTExODdERUMx
QTAwQzM5QzlFIC8qIEFQSVNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc1QThEMkRFMTg3REU4NzQwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmgg
Ki87IH07CiAJCTc1QThEMkUyMTg3REVDMUUwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkREMTg3REU4
NzQwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmNwcCAqLzsgfTsKIAkJNzYyQjc0OEQxMjBCQzc1QzAw
ODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQ
cmVmZXJlbmNlc1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk3ODAxQzA5OTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJl
c3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
ODAxQzA5NTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07Ci0J
CTc4MDFDMDlBMTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3ODAxQzA5NjE0MjI5MEM0MDBG
QUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5oICovOyB9OwogCQk3QzEzNUFBODE3M0IwQkNBMDA1
ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVn
aW5JbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBX
S1BsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzEzNUFBNzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdD
MTM1QUFDMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYw
MDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsKQEAgLTExOTksNyArMTE5
NiwxNiBAQAogCQk5MzkxRjJDQjEyMUI2N0FEMDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM5MUYyODMxMjFCMzhGNTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCAq
LzsgfTsKIAkJOTM5QUU3NjYxMzE2RTk5QzAwQUUwNkE2IC8qIFdlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlB
RTc2NTEzMTZFOTlDMDBBRTA2QTYgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLzsgfTsK
IAkJOTM5RjQwMUMxOUZCMEJCQzAwMkIyQjQyIC8qIFdLQWN0aW9uTWVudVR5cGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlGNDAxQjE5RkIwQkJD
MDAyQjJCNDIgLyogV0tBY3Rpb25NZW51VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5M0E4OEIzMDFCQzZFOTk3MDBBQkE1QzIgLyogV2Vi
SGl0VGVzdFJlc3VsdERhdGEubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0E4OEIyRTFCQzZFOThGMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERh
dGEubW0gKi87IH07CisJCTkzQTg4QjMzMUJDNkU5Q0QwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVz
dWx0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNBODhCMzExQkM2RTlDMDAwQUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmggKi87IH07
CisJCTkzQTg4QjM2MUJDNkVBRDUwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIzNDFC
QzZFQUJBMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEuY3BwICovOyB9OworCQk5M0E4
OEIzOTFCQzcwRjNGMDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTg4QjM3MUJDNzBGMkUwMEFCQTVD
MiAvKiBfV0tIaXRUZXN0UmVzdWx0Lm1tICovOyB9OworCQk5M0E4OEIzQjFCQzcxMEQ5MDBBQkE1
QzIgLyogX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIzQTFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0
VGVzdFJlc3VsdEludGVybmFsLmggKi87IH07CisJCTkzQTg4QjNEMUJDNzFCODkwMEFCQTVDMiAv
KiBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIzQzFCQzcxQjg5MDBBQkE1QzIgLyogX1dLSW1tZWRpYXRl
QWN0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzQkRFQjAxMTcxREQ3QUYwMEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JERUIw
MDE3MUREN0FGMDBCRkVFMUIgLyogV0tQYWdlTG9hZFR5cGVzUHJpdmF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzRTZBNEVFMUJDNUREMzkw
MEY4QTBFNyAvKiBfV0tIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U2QTRFRDFCQzVERDM5MDBGOEEwRTcgLyogX1dLSGl0VGVz
dFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTkzRTZBNEYzMUJDNUVGRUUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U2QTRGMDFCQzVFRkQ1
MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5oICovOyB9OworCQk5M0U2QTRGNDFCQzVFRkY3
MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U2QTRFRjFCQzVFRkQ1MDBGOEEwRTcgLyogQVBJSGl0
VGVzdFJlc3VsdC5jcHAgKi87IH07CiAJCTlGNTRGODhGMTY0ODhFODcwMDdERjgxQSAvKiBDaGls
ZFByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEgLyogQ2hpbGRQcm9jZXNzTWFjLm1tICovOyB9
OwogCQk5RjU0Rjg5NTE2NDhBRTBGMDA3REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjU0Rjg5
NDE2NDhBRTBFMDA3REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gKi87IH07CiAJ
CTlGQjVGMzk0MTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUZCNUYzOTIxNjlFNkE4
MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMubW0gKi87IH07CkBAIC0zMTYzLDcgKzMx
NjksNiBAQAogCQk1MUFDQkI5RjEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94
eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbnRl
eHRNZW51UHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUNDOTM0
MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VS
ZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUNDOTM1MTYyODA2
NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTFBRDM1NzIxQUQyRjM3NTAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1
bHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJIaXRUZXN0UmVzdWx0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUIxNUE4MjEzODQzQTM5MDAzMjFBRDggLyogRW52aXJv
bm1lbnRVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOyBwYXRoID0gdW5peC9FbnZpcm9ubWVudFV0aWxpdGll
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjE1QTgzMTM4NDNBMzkwMDMy
MUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBFbnZpcm9ubWVudFV0aWxpdGllcy5oOyBwYXRoID0gdW5peC9FbnZpcm9ubWVudFV0
aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUJBMjQ0NTE4NThGNDE1
MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzI1MSw4ICszMjU2LDYgQEAKIAkJNzVBOEQyREUxODdERTg3NDAwQzM5QzlFIC8qIEFQSVNlc3Np
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVBJU2Vzc2lvbi5oOyBwYXRo
ID0gVUlQcm9jZXNzL0FQSS9BUElTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKIAkJNzYyQjc0ODExMjBCQkEwMTAwODE5MzM5IC8qIEZvbnRTbW9vdGhpbmdMZXZlbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250U21vb3RoaW5nTGV2ZWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdL
UHJlZmVyZW5jZXNSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTc4MDFDMDk1MTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkhpdFRlc3RSZXN1bHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3ODAxQzA5NjE0MjI5MEM0MDBGQUY5QUYgLyogV2Vi
SGl0VGVzdFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJIaXRU
ZXN0UmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMEJCOUE4MThEQ0RF
ODkwMDA2QzA4NiAvKiBXZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9ICJXZWJD
b250ZW50LWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzBCQjlBOTE4RENERjVBMDAwNkMwODYgLyogTmV0d29yay1pT1MuZW50aXRsZW1lbnRzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBh
dGggPSAiTmV0d29yay1pT1MuZW50aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MxMzVBQTYxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tQbHVnaW5JbmZvcm1hdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzk4LDcgKzM0MDEsMTYgQEAK
IAkJOTM5MUYyODQxMjFCMzhGNTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzlBRTc2NTEz
MTZFOTlDMDBBRTA2QTYgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVBcmd1bWVudENvZGVycy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOUY0MDFCMTlGQjBCQkMwMDJCMkI0MiAvKiBXS0Fj
dGlvbk1lbnVUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FjdGlv
bk1lbnVUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E4OEIyRTFCQzZF
OThGMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJIaXRUZXN0UmVzdWx0RGF0YS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBODhCMzExQkM2RTlDMDAwQUJBNUMyIC8qIFdlYkhpdFRl
c3RSZXN1bHREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhpdFRl
c3RSZXN1bHREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTg4QjM0MUJD
NkVBQkEwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTg4QjM3MUJDNzBGMkUwMEFCQTVDMiAvKiBfV0tIaXRU
ZXN0UmVzdWx0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dL
SGl0VGVzdFJlc3VsdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBODhCM0Ex
QkM3MTBEOTAwQUJBNUMyIC8qIF9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBODhCM0MxQkM3MUI4OTAwQUJBNUMyIC8qIF9XS0lt
bWVkaWF0ZUFjdGlvblR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dL
SW1tZWRpYXRlQWN0aW9uVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0JE
RUIwMDE3MUREN0FGMDBCRkVFMUIgLyogV0tQYWdlTG9hZFR5cGVzUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VMb2FkVHlwZXNQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTZBNEVEMUJDNUREMzkwMEY4QTBFNyAvKiBfV0tI
aXRUZXN0UmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0hpdFRl
c3RSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNkE0RUYxQkM1RUZE
NTAwRjhBMEU3IC8qIEFQSUhpdFRlc3RSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQVBJSGl0VGVzdFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzRTZBNEYwMUJDNUVGRDUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUhpdFRlc3RSZXN1bHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8qIENo
aWxkUHJvY2Vzc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENoaWxkUHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY1NEY4
OTQxNjQ4QUUwRTAwN0RGODFBIC8qIFBsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGQjVGMzkyMTY5RTZBODAwMDJDMjVC
RiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV0tDb250ZXh0UHJpdmF0ZU1hYy5tbTsgcGF0aCA9IG1hYy9XS0NvbnRleHRQ
cml2YXRlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc3OCw4ICs0Nzkw
LDggQEAKIAkJCQkxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAq
LywKIAkJCQlCQzBFNjA3MjEyRDZCQzIwMDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlv
bi5jcHAgKi8sCiAJCQkJQkMwRTYwNzExMkQ2QkMyMDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9u
UG9zaXRpb24uaCAqLywKLQkJCQk3ODAxQzA5NTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVz
dFJlc3VsdC5jcHAgKi8sCi0JCQkJNzgwMUMwOTYxNDIyOTBDNDAwRkFGOUFGIC8qIFdlYkhpdFRl
c3RSZXN1bHQuaCAqLywKKwkJCQk5M0E4OEIzNDFCQzZFQUJBMDBBQkE1QzIgLyogV2ViSGl0VGVz
dFJlc3VsdERhdGEuY3BwICovLAorCQkJCTkzQTg4QjMxMUJDNkU5QzAwMEFCQTVDMiAvKiBXZWJI
aXRUZXN0UmVzdWx0RGF0YS5oICovLAogCQkJCUJDQ0Y2QUJBMTJDOTFFRjkwMDhGOUMzNSAvKiBX
ZWJJbWFnZS5jcHAgKi8sCiAJCQkJQkNDRjZBQkIxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdl
LmggKi8sCiAJCQkJQzAzMzdERDIxMjdBMkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQu
Y3BwICovLApAQCAtNTQzNyw2ICs1NDQ5LDEwIEBACiAJCQkJMzczRDEyMjExOEE0NzMwMTAwNjZE
OUNDIC8qIF9XS0ZyYW1lSGFuZGxlLmggKi8sCiAJCQkJMzczRDEyMjAxOEE0NzMwMTAwNjZEOUND
IC8qIF9XS0ZyYW1lSGFuZGxlLm1tICovLAogCQkJCTM3M0QxMjI2MThBNDczRjYwMDY2RDlDQyAv
KiBfV0tGcmFtZUhhbmRsZUludGVybmFsLmggKi8sCisJCQkJOTNFNkE0RUQxQkM1REQzOTAwRjhB
MEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQuaCAqLywKKwkJCQk5M0E4OEIzNzFCQzcwRjJFMDBBQkE1
QzIgLyogX1dLSGl0VGVzdFJlc3VsdC5tbSAqLywKKwkJCQk5M0E4OEIzQTFCQzcxMEQ5MDBBQkE1
QzIgLyogX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmggKi8sCisJCQkJOTNBODhCM0MxQkM3MUI4
OTAwQUJBNUMyIC8qIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaCAqLywKIAkJCQlBMTE4QTlGMTE5
MDhCOEVBMDBGN0M5MkIgLyogX1dLTlNGaWxlTWFuYWdlckV4dHJhcy5oICovLAogCQkJCUExMThB
OUYwMTkwOEI4RUEwMEY3QzkyQiAvKiBfV0tOU0ZpbGVNYW5hZ2VyRXh0cmFzLm1tICovLAogCQkJ
CTFBOUUzMjhCMTgyMTY1QTkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UuaCAq
LywKQEAgLTY1MTIsNyArNjUyOCw3IEBACiAJCQkJQkNFMjMyNjIxMjJDNkNGMzAwRDVDMzVBIC8q
IFdlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSAqLywKIAkJCQlCQzExMUI1QjExMkY2Mjk4MDAz
MzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5LmggKi8sCiAJCQkJQkMxMTFCNUMxMTJGNjI5ODAwMzM3
QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLywKLQkJCQk1MUFEMzU3MjFBRDJGMzc1MDA1N0Iz
OEUgLyogV2ViSGl0VGVzdFJlc3VsdC5tbSAqLywKKwkJCQk5M0E4OEIyRTFCQzZFOThGMDBBQkE1
QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEubW0gKi8sCiAJCQkJOTA1NjIwRTUxMkJDMjQ3NjAw
MDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBt
YWM7CkBAIC03MDM4LDYgKzcwNTQsOCBAQAogCQkJCTFBQzEzMzcwMTg1NjZDN0MwMEYzRUMwNSAv
KiBBUElGcmFtZUhhbmRsZS5oICovLAogCQkJCTFBQzEzMzczMTg1N0MyMUUwMEYzRUMwNSAvKiBB
UElHZW9tZXRyeS5jcHAgKi8sCiAJCQkJMEYxNzRBQTIxNDJBNENCNjAwMzkyNTBGIC8qIEFQSUdl
b21ldHJ5LmggKi8sCisJCQkJOTNFNkE0RUYxQkM1RUZENTAwRjhBMEU3IC8qIEFQSUhpdFRlc3RS
ZXN1bHQuY3BwICovLAorCQkJCTkzRTZBNEYwMUJDNUVGRDUwMEY4QTBFNyAvKiBBUElIaXRUZXN0
UmVzdWx0LmggKi8sCiAJCQkJQkMzM0RENjcxMjM4NDY0NjAwMzYwRjNGIC8qIEFQSU51bWJlci5o
ICovLAogCQkJCUI2MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovLAog
CQkJCUJDRjA0QzhDMTFGRjlCN0QwMEY4NkE1OCAvKiBBUElPYmplY3QuaCAqLywKQEAgLTc3MTIs
NiArNzczMCw3IEBACiAJCQkJMUEyMzI5MDMxNjJDODY3MzAwRDgyRjdBIC8qIE1lc3NhZ2VEZWNv
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTIzMjhGRjE2MkM4NjZBMDBEODJGN0EgLyogTWVz
c2FnZUVuY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzRDODI5MTZCODc2QTkwMDY5REND
RCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQTg4QjNCMUJDNzEwRDkw
MEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBM0VFRDEyMTYxQTUzRDYwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBM0VFRDBGMTYxQTUzNTQwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXJNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJENUFCNjJFMUE2OUQ2RkIwMDE0QTlDQiAvKiBNZXNzYWdl
UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzgyOCw2ICs3ODQ3LDcgQEAKIAkJCQlFMUI3
ODQ3MTE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBQzEzMzgwMTg1OTBBRTQwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzODYxODU5MEM0NjAwRjNFQzA1IC8qIFJl
bW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTZBNEYz
MUJDNUVGRUUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU5NDc5MDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0N0E4MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDc5
QjE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC03ODczLDYgKzc4OTMsNyBAQAogCQkJCUNFMUEwQkQ3MUE0OEU2QzYw
MDU0RUY3NCAvKiBUZXh0SW5wdXRTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUYyNjM5MTQ2
ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFGMDVEODcxNDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQTg4QjNEMUJDNzFCODkw
MEFCQTVDMiAvKiBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUZFNDM2NjE4QjZDMDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0VFNEFFMkIxQTVEQ0Y0MzAwMDJGNDlCIC8qIFVJS2l0U1BJLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTVFNzczMDE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzk2MSw3ICs3OTgyLDYgQEAKIAkJCQlCQzBFNjE4MzEyRDZDQjFEMDAx
MkE3MkEgLyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwRTYwNzMxMkQ2QkMyMDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUJFMUYyMTJENTREQkQwMDA0QTIyOCAvKiBXZWJH
ZW9sb2NhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk3ODAxQzA5QTE0MjI5MEM0
MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExQjI0
QUIxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE4MzQ1OTMxMzQ1MzJFOTAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFEMDJGNkExMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRh
YmFzZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMDcsNiArODAyNyw3IEBACiAJCQkJ
QkM4NTdGODUxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzFERkVBNDEyQjMxRjg3MDA1REY3MzAgLyogV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEOEYxMEY0
MzdBMDAwNThDMTVBIC8qIFdlYlBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQTg4QjMzMUJD
NkU5Q0QwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODM3MkRCMjkxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMDYxMjlBMEE2NzAwRDE3NEE0IC8qIFdl
YlBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyNTIxMkE0M0M5NjAwRDE3NEE0
IC8qIFdlYlBhZ2VHcm91cERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODI2MCw2ICs4MjgxLDcg
QEAKIAkJCQlCQzdCNjMzNzEyQTQ1QUJBMDBEMTc0QTQgLyogV0tQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJEOUVBMzBEMUE5NkNCNTkwMDJEMjgwNyAvKiBXS1BhZ2VJbmplY3RlZEJ1
bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRUMxODQwMDgwOTAwRTlBRTY5
IC8qIFdLUGFnZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNkE0RUUxQkM1
REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzQkRFQjAxMTcxREQ3QUYwMEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDczMDM3OTFBN0MyQjc1MDBGOEY0ODcgLyogV0tQYWdl
TmF2aWdhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzM5LDYgKzkzNjEsNyBAQAog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJOTNBODhCMzkxQkM3MEYzRjAwQUJBNUMyIC8qIF9X
S0hpdFRlc3RSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0E1RTAxMzE4QkJGOTM3MDAw
QTA4MUUgLyogX1dLQWN0aXZhdGVkRWxlbWVudEluZm8ubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
MUE0RkU1QjE4RENFOUZBMDBCNUVBOEEgLyogX1dLRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywK
IAkJCQkzNzlBODczOTE4QkJGRTBGMDA1ODhBRjIgLyogX1dLRWxlbWVudEFjdGlvbi5tbSBpbiBT
b3VyY2VzICovLApAQCAtOTgwMCw4ICs5ODIzLDYgQEAKIAkJCQlCQzBFNjE4MjEyRDZDQjFEMDAx
MkE3MkEgLyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMwRTYwNzQxMkQ2QkMyMDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0
aW9uUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxQkUxRjMxMkQ1NERCRDAwMDRB
MjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzgw
MUMwOTkxNDIyOTBDNDAwRkFGOUFGIC8qIFdlYkhpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNTFBRDM1NzMxQUQyRjM5NDAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MTFCMjRBQTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRh
dGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODM0NTkyMTM0NTMyRTkwMDkyQjY5NiAv
KiBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMDJGNjQx
MzJFQzVCOTAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTk5MTksNiArOTk0MCw3IEBACiAJCQkJQkNBMEVGODAxMjMzMUU3ODAw
N0QzQ0ZCIC8qIFdlYlVuZG9TdGVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQUYwOEFEMTky
NjkzNjcwMEI2MzkwQyAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFBRjA4QjcxOTI2OUU2RDAwQjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0U2QTRGNDFCQzVF
RkY3MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUFGMDhBMTE5MjY4MUQxMDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE1NzM5QkJFMUI0MjA0NjYwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC05OTYyLDYgKzk5ODQsNyBAQAogCQkJCUVEQ0E3MUI3MTI4RERB
OEMwMDIwMUIyNiAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDNjBDNTdBMTI0MEE1NDYwMDhDNUUyOSAvKiBXS0J1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDMTRERjlFMTIwQjYzNUYwMDgyNkMwQyAvKiBXS0J1bmRsZVNjcmlw
dFdvcmxkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzQTg4QjM2MUJDNkVBRDUwMEFCQTVDMiAv
KiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGNTEy
NEZGMDI3MDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM0MDc2MjgxMjRGRjA0MDAwNjhGMjBBIC8qIFdLQ2VydGlmaWNhdGVJbmZvTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNBMjg0RDYxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlv
bi5tbSBpbiBTb3VyY2VzICovLApAQCAtOTk5OSw2ICsxMDAyMiw3IEBACiAJCQkJQkNEMDEzOUMx
MTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0RDY2
NEIxOEEzMDMwRTAwRDgyRTIxIC8qIFdLRnJhbWVJbmZvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkQzQTY1RTYxQTdDM0FBNzAwQ0FDNjM3IC8qIFdLRnJhbWVJbmZvUmVmLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTkzQTg4QjMwMUJDNkU5OTcwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0
YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQjlGNkE2MTEyM0REMEQwMEExMzdFMCAvKiBXS0Zy
YW1lUG9saWN5TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBRUEyMzAxNDY4N0JE
QjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUNEQ0E4NUM4MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpbi5oCShyZXZpc2lvbiAxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDgg
QEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNs
dWRlICJBUElIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKIAogT0JKQ19DTEFTUyBOU0RpY3Rpb25h
cnk7CiBPQkpDX0NMQVNTIE5TT2JqZWN0OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgJKHJldmlzaW9uIDE5MDY3NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiBPQkpDX0NMQVNTIENBTGF5ZXI7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaAkocmV2aXNpb24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAog
Ly8gRklYTUU6IEV2ZW50dWFsbHkgdGhpcyBzaG91bGQgbW92ZSB0byBXZWJDb3JlLgogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUg
IkFQSUhpdFRlc3RSZXN1bHQuaCIKIAogT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7CiBPQkpDX0NM
QVNTIFBERlNlbGVjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCShyZXZpc2lvbiAx
OTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUg
IldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJBUElIaXRUZXN0UmVzdWx0LmgiCiAjZW5k
aWYKIAogI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoWDExKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCShyZXZpc2lvbiAxOTA2
NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJQbHVnaW4uaCIK
ICNpbmNsdWRlICJXZWJFdmVudC5oIgotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNp
bmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5l
VHJhbnNmb3JtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBzaG93Q29udGV4dE1lbnVBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50Jik7CiAKLSAgICBTdHJpbmcgbG9va3VwVGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBQREZTZWxlY3Rpb24gKiosIE5T
RGljdGlvbmFyeSAqKikgY29uc3Q7CisgICAgU3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9uKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFBERlNlbGVj
dGlvbiAqKiwgTlNEaWN0aW9uYXJ5ICoqKSBjb25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
dmlld1JlY3RGb3JTZWxlY3Rpb24oUERGU2VsZWN0aW9uICopIGNvbnN0OwogCiAgICAgQ0dGbG9h
dCBzY2FsZUZhY3RvcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDE5MDY3NCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xODk4LDcgKzE4OTgsNyBAQCBzdGF0aWMgTlNQb2ludCBwb2ludEluTGF5b3V0
U3BhY2VGb3JQb2luCiAgICAgcmV0dXJuIE5TUG9pbnRGcm9tQ0dQb2ludChuZXdQb2ludCk7CiB9
CiAKLVN0cmluZyBQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEmIGRhdGEsIFBERlNlbGVjdGlvbiAqKnNlbGVjdGlvblB0ciwgTlNEaWN0aW9uYXJ5ICoq
b3B0aW9ucykgY29uc3QKK1N0cmluZyBQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhp
dFRlc3RSZXN1bHREYXRhJiBkYXRhLCBQREZTZWxlY3Rpb24gKipzZWxlY3Rpb25QdHIsIE5TRGlj
dGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0CiB7CiAgICAgUERGU2VsZWN0aW9uKiYgc2VsZWN0aW9u
ID0gKnNlbGVjdGlvblB0cjsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNp
b24gMTkwNjc0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbAogICAgIG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVVSUNsaWVudCgpLm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1fcGFnZSwgaGl0VGVz
dFJlc3VsdCwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJGbGFncyks
IHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYkhpdFRl
c3RSZXN1bHQ6OkRhdGEgd2ViSGl0VGVzdFJlc3VsdERhdGEoaGl0VGVzdFJlc3VsdCk7CisgICAg
V2ViSGl0VGVzdFJlc3VsdERhdGEgd2ViSGl0VGVzdFJlc3VsdERhdGEoaGl0VGVzdFJlc3VsdCk7
CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KHdlYkhpdFRlc3RSZXN1bHREYXRhLCBtb2RpZmllckZsYWdzLCBVc2VyRGF0YShX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKIH0KIApAQCAtNjE0LDcgKzYxNCw3IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpkaWRCZWdpblRyYWNraW5nUG8KICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlVUlD
bGllbnQoKS5kaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MobV9wYWdlLCBt
b3VzZURvd25Qb3NpdGlvbiwgaGl0VGVzdFJlc3VsdCwgdXNlckRhdGEpOwogICAgIAogICAgIC8v
IE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgd2ViSGl0
VGVzdFJlc3VsdERhdGEoaGl0VGVzdFJlc3VsdCk7CisgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEg
d2ViSGl0VGVzdFJlc3VsdERhdGEoaGl0VGVzdFJlc3VsdCk7CiAgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQ
cmVzcyhtb3VzZURvd25Qb3NpdGlvbiwgd2ViSGl0VGVzdFJlc3VsdERhdGEsIFVzZXJEYXRhKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxOTA2NzQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFBMQVRGT1JNKE1BQykKIAorI2ltcG9y
dCAiQVBJSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2lt
cG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRWRpdGluZ1JhbmdlLmgiCkBAIC00NCw3
ICs0NSw2IEBACiAjaW1wb3J0ICJXZWJFdmVudC5oIgogI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJz
aW9uLmgiCiAjaW1wb3J0ICJXZWJGcmFtZS5oIgotI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5o
IgogI2ltcG9ydCAiV2ViSW1hZ2UuaCIKICNpbXBvcnQgIldlYkluc3BlY3Rvci5oIgogI2ltcG9y
dCAiV2ViUGFnZU92ZXJsYXkuaCIKQEAgLTEwNzUsNyArMTA3NSw3IEBAIHZvaWQgV2ViUGFnZTo6
cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFQKIAogICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lID0g
Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCk7CiAgICAgaWYgKCFtYWluRnJhbWUudmlldygpIHx8ICFt
YWluRnJhbWUudmlldygpLT5yZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChXZWJIaXRUZXN0
UmVzdWx0OjpEYXRhKCksIGZhbHNlLCBVc2VyRGF0YSgpKSk7CisgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoV2ViSGl0
VGVzdFJlc3VsdERhdGEoKSwgZmFsc2UsIFVzZXJEYXRhKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTA4OSw3ICsxMDg5LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRp
YXRlQWN0aW9uSGl0VAogICAgIGlmIChlbGVtZW50KQogICAgICAgICBpbW1lZGlhdGVBY3Rpb25I
aXRUZXN0UHJldmVudHNEZWZhdWx0ID0gZWxlbWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJl
Z2luKCk7CiAKLSAgICBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIGltbWVkaWF0ZUFjdGlvblJlc3Vs
dChoaXRUZXN0UmVzdWx0KTsKKyAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSBpbW1lZGlhdGVBY3Rp
b25SZXN1bHQoaGl0VGVzdFJlc3VsdCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJh
bmdlID0gY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262779</attachid>
            <date>2015-10-09 10:50:09 -0700</date>
            <delta_ts>2015-10-09 14:56:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>146468</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBAQAorMjAxNS0xMC0wOSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJWaWV3IG5lZWRzIFNQSSB0
byBjdXN0b21pemUgaW1tZWRpYXRlIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTkzOQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmct
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwMDE2ODQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBicmVha3MgV2ViSGl0VGVzdFJl
c3VsdCBpbnRvIHR3byBmaWxlcy4gV2ViSGlUZXN0UmVzdWx0RGF0YSAKKyAgICAgICAgY29udGlu
dWVzIHRvIGxpdmUgaW4gdGhlIFdlYktpdCBuYW1lc3BhY2UgYW5kIGNvbnRhaW5zIHRoZSBvbGQg
CisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgc3RydWN0LiBUaGUgcmVzdCBvZiBXZWJI
aXRUZXN0UmVzdWx0IGlzIG5vdyAKKyAgICAgICAgQVBJOjpIaXRUZXN0UmVzdWx0LiBUaGUgcGF0
Y2ggYWxzbyBhZGRzIF9XS0hpdFRlc3RSZXN1bHQgYXMgT2JqLUMgQVBJIHRvIHdyYXAgCisgICAg
ICAgIEFQSTo6SGl0VGVzdFJlc3VsdC4KKworICAgICAgICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1
bHQgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSBEYXRhIHN0cnVjdCBhbmQgaXMgbm93IGNhbGxlZCAK
KyAgICAgICAgQVBJOjpIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFNoYXJlZC9BUEkvQVBJSGl0
VGVzdFJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcC4K
KyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6On5EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1l
bnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIFNo
YXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oOiBDb3BpZWQgZnJvbSBTaGFyZWQvV2ViSGl0VGVz
dFJlc3VsdC5oLgorICAgICAgICAoQVBJOjpIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUltYWdlVVJM
KToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwpOgorICAgICAg
ICAoQVBJOjpIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOgorICAgICAgICAoQVBJOjpI
aXRUZXN0UmVzdWx0OjphYnNvbHV0ZU1lZGlhVVJMKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJl
c3VsdDo6bGlua0xhYmVsKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6bGlua1RpdGxl
KToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6bG9va3VwVGV4dCk6CisgICAgICAgIChB
UEk6OkhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKEFQSTo6SGl0
VGVzdFJlc3VsdDo6aXNEb3dubG9hZGFibGVNZWRpYSk6CisgICAgICAgIChBUEk6OkhpdFRlc3RS
ZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
OjphYnNvbHV0ZUltYWdlVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVz
dFJlc3VsdDo6YWJzb2x1dGVQREZVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJI
aXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZU1lZGlhVVJMKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bGlua0xhYmVsKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bGlua1RpdGxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bG9va3VwVGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6aXNEb3dubG9hZGFibGVNZWRpYSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OldlYkhpdFRlc3RS
ZXN1bHQpOiBEZWxldGVkLgorCisgICAgICAgIFRoaXMgaXMgYSBuZXcgb2JqLWMgb2JqZWN0IHRo
YXQgd2UgY2FuIHVzZSBmb3IgdGhlIG1vZGVybiBpbW1lZGlhdGUgYWN0aW9uIAorICAgICAgICBB
UEkuCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0Lmg6IEFkZGVk
LgorICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5tbTogQWRkZWQu
CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgZGVhbGxvY10pOgorICAgICAgICAoLVtfV0tI
aXRUZXN0UmVzdWx0IGFic29sdXRlSW1hZ2VVUkxdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJl
c3VsdCBhYnNvbHV0ZVBERlVSTF0pOgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVzdWx0IGFic29s
dXRlTGlua1VSTF0pOgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVzdWx0IGFic29sdXRlTWVkaWFV
UkxdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBsaW5rTGFiZWxdKToKKyAgICAgICAg
KC1bX1dLSGl0VGVzdFJlc3VsdCBsaW5rVGl0bGVdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJl
c3VsdCBsb29rdXBUZXh0XSk6CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgaXNDb250ZW50
RWRpdGFibGVdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBlbGVtZW50Qm91bmRpbmdC
b3hdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBjb3B5V2l0aFpvbmU6XSk6CisgICAg
ICAgICgtW19XS0hpdFRlc3RSZXN1bHQgX2FwaU9iamVjdF0pOgorCisgICAgICAgIF9XS0hpdFRl
c3RSZXN1bHQgd3JhcHMgQVBJOjpIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFNoYXJlZC9BUEkv
Q29jb2EvX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAoQVBJOjp3
cmFwcGVyKToKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tOgorICAgICAgICAo
QVBJOjpPYmplY3Q6Om5ld09iamVjdCk6CisKKyAgICAgICAgV2UgbmVlZCBhIG5ldyB2ZXJzaW9u
IG9mIHRoaXMgZW51bSB0b28uIFRoZSBuZXcgdmVyc2lvbiBoYXMgdGhlIHVuZm9ydHVuYXRlIAor
ICAgICAgICBuYW1lIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGVzIChub3RlIHRoZSBzKS4KKyAgICAg
ICAgKiBTaGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaDogQWRkZWQuCisK
KyAgICAgICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBpcyBub3cgV2ViSGl0VGVzdFJlc3VsdERh
dGEuCisgICAgICAgICogU2hhcmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEuaDoKKyAgICAgICAg
KFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0RGF0YTo6d2ViSGl0VGVzdFJlc3VsdERhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjpzZWxlY3RlZFRleHQpOgor
CisgICAgICAgIFJlbW92ZSBXZWJIaXRUZXN0UmVzdWx0LCBhbmQgYWRkIFdlYkhpdFRlc3RSZXN1
bHREYXRhIGZvciB0aGUgRGF0YSBzdHJ1Y3QuCisgICAgICAgICogU2hhcmVkL1dlYkhpdFRlc3RS
ZXN1bHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0Lmg6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpXZWJIaXRUZXN0UmVz
dWx0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjp+V2ViSGl0
VGVzdFJlc3VsdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6OmRlY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybURlY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjplbGVtZW50Qm91bmRpbmdC
b3hJbldpbmRvd0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKiBTaGFyZWQvV2ViSGl0VGVzdFJlc3Vs
dERhdGEuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1t
OiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW06
IENvcGllZCBmcm9tIFNoYXJlZC9tYWMvCisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQubW0uCisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybURlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZv
cm1EZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaXMg
bm93IFdlYkhpdFRlc3RSZXN1bHREYXRhLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29u
dGV4dE1lbnVDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6Q29udGV4dE1lbnVDbGllbnQ6On5Db250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChBUEk6OkNvbnRleHRNZW51Q2xpZW50OjpnZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUpOgorICAgICAgICAoQVBJOjpDb250ZXh0TWVudUNsaWVu
dDo6Y3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoQVBJOjpDb250ZXh0
TWVudUNsaWVudDo6Y29udGV4dE1lbnVEaXNtaXNzZWQpOgorICAgICAgICAoQVBJOjpDb250ZXh0
TWVudUNsaWVudDo6c2hvd0NvbnRleHRNZW51KToKKworICAgICAgICBXZWJIaXRUZXN0UmVzdWx0
IGlzIG5vdyBXZWJIaXRUZXN0UmVzdWx0CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNs
aWVudC5oOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21wdCk6Cisg
ICAgICAgIChBUEk6OlVJQ2xpZW50OjpzZXRTdGF0dXNUZXh0KToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50
OjpwaW5uZWRTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpkaWRCZWdp
blRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MpOgorICAgICAgICAoQVBJOjpVSUNsaWVu
dDo6ZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6
ZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0hp
dFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV0tIaXRUZXN0UmVzdWx0R2V0VHlwZUlEKToKKyAg
ICAgICAgKFdLSGl0VGVzdFJlc3VsdENvcHlBYnNvbHV0ZUltYWdlVVJMKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VDb250ZXh0
TWVudUNsaWVudCk6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlVUlDbGllbnQpOgorCisgICAgICAg
IE5ldyBXS1dlYlZpZXcgU1BJIF9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9y
SGl0VGVzdFJlc3VsdAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF9k
aWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDpjb250ZW50UHJldmVudHNEZWZhdWx0OnVz
ZXJEYXRhOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6
CisKKyAgICAgICAgUGFnZUNsaWVudCB3aWxsIGZpZ3VyZSBvdXQgd2hldGhlciB0byBjYWxsIGlu
dG8gV0tXZWJWaWV3IG9yIFdLVmlldyBmb3IgdGhpcyAKKyAgICAgICAgU1BJLgorICAgICAgICAq
IFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25D
b250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdCk6CisKKyAgICAgICAgV2ViS2l0OjpXZWJIaXRUZXN0
UmVzdWx0OjpEYXRhIGlzIG5vdyBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisKKyAgICAgICAgV0tJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIGNhbGxzIHRocm91Z2ggdG8gV2ViUGFnZVByb3h5IHdoaWNo
IGNhbGxzIHRvIAorICAgICAgICBQYWdlQ2xpZW50LCB3aGljaCBmaWd1cmVzIG91dCB3aGljaCBB
UEkgdG8gY2FsbC8KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9s
bGVyRm9ySGl0VGVzdFJlc3VsdCk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyIF91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtXSk6CisKKyAgICAgICAgV2ViSGl0VGVzdFJl
c3VsdDo6RGF0YSBpcyBub3cgV2ViSGl0VGVzdFJlc3VsdERhdGEuCisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6cGxhdGZvcm1Jbml0aWFsaXplU2hhcmVNZW51SXRlbSk6CisKKyAgICAgICAgTG90cyBvZiBj
aHVybi4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAg
ICAgICAgTmV3IG5hbWVzIGZvciB0aGluZ3MuIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgLT4gV2Vi
SGl0VGVzdFJlc3VsdERhdGEKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgor
ICAgICAgICAoV2ViS2l0Ojpwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZEJl
Z2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOgorCiAyMDE1LTEwLTA5ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHR3
byB1bnVzZWQgV0tGcmFtZSBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQv
V2ViRXZlbnQuY3BwCiAgICAgU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKICAgICBTaGFy
ZWQvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAKLSAgICBTaGFyZWQvV2ViSGl0VGVzdFJlc3Vs
dC5jcHAKKyAgICBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEuY3BwCiAgICAgU2hhcmVkL1dl
YkltYWdlLmNwcAogICAgIFNoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcAogICAgIFNoYXJlZC9X
ZWJLaXQySW5pdGlhbGl6ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0
TWVudUNvbnRleHREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
bnRleHRNZW51Q29udGV4dERhdGEuaAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogCiAjaW5jbHVkZSAiU2hhcmVh
YmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIldl
YkhpdFRlc3RSZXN1bHREYXRhLmgiCiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgQXJndW1lbnRE
ZWNvZGVyOwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgQ29udGV4dE1lbnVDb250ZXh0
RGF0YSgpOwogICAgIENvbnRleHRNZW51Q29udGV4dERhdGEoY29uc3QgV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250ZXh0Jik7CiAgICAgCi0gICAgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYg
d2ViSGl0VGVzdFJlc3VsdERhdGEoKSBjb25zdCB7IHJldHVybiBtX3dlYkhpdFRlc3RSZXN1bHRE
YXRhOyB9CisgICAgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIHdlYkhpdFRlc3RSZXN1bHRE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV93ZWJIaXRUZXN0UmVzdWx0RGF0YTsgfQogICAgIGNvbnN0
IFN0cmluZyYgc2VsZWN0ZWRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZFRleHQ7IH0K
IAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgQ29udGV4dE1l
bnVDb250ZXh0RGF0YSYpOwogCiBwcml2YXRlOgotICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEg
bV93ZWJIaXRUZXN0UmVzdWx0RGF0YTsKKyAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSBtX3dlYkhp
dFRlc3RSZXN1bHREYXRhOwogICAgIFN0cmluZyBtX3NlbGVjdGVkVGV4dDsKIAogI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRl
c3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRU
ZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkhpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJl
c3VsdC5oIgotCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9V
UkwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vZGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1QYXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IFdlYkhpdFRlc3RSZXN1bHQ6OmNyZWF0
ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdERhdGEp
KTsKLX0KLQotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YSgpCi17Ci19Ci0KLVdlYkhpdFRl
c3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkK
LSAgICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCku
c3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlUERG
VVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVzdFJl
c3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBsaW5rTGFiZWwoaGl0VGVz
dFJlc3VsdC50ZXh0Q29udGVudCgpKQotICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQudGl0
bGVEaXNwbGF5U3RyaW5nKCkpCi0gICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVzdWx0
LmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudEJv
dW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKLSAgICAsIGlzU2Ny
b2xsYmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCi0gICAgLCBpc1NlbGVjdGVkKGhpdFRl
c3RSZXN1bHQuaXNTZWxlY3RlZCgpKQotICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0Lmlu
bmVyTm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKLSAg
ICAsIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5pc092
ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgLCBhbGxvd3NDb3B5KGhpdFRl
c3RSZXN1bHQuYWxsb3dzQ29weSgpKQotICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRUZXN0
UmVzdWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKLSAgICAsIGltYWdlU2l6ZSgwKQotewotfQot
Ci1XZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQmIGhpdFRlc3RSZXN1bHQsIGJvb2wgaW5jbHVkZUltYWdlKQotICAgIDogYWJzb2x1dGVJbWFn
ZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFi
c29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwoKS5zdHJpbmcoKSkKLSAg
ICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmlu
ZygpKQotICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFV
UkwoKS5zdHJpbmcoKSkKLSAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVzdWx0LnRleHRDb250ZW50
KCkpCi0gICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKSkK
LSAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUo
KSkKLSAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nv
b3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQotICAgICwgaXNTY3JvbGxiYXIoaGl0VGVzdFJlc3Vs
dC5zY3JvbGxiYXIoKSkKLSAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJlc3VsdC5pc1NlbGVjdGVk
KCkpCi0gICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICwgaXNPdmVyVGV4dEluc2lk
ZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKLSAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJlc3VsdC5hbGxvd3NDb3B5
KCkpCi0gICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1bHQuaXNEb3dubG9hZGFi
bGVNZWRpYSgpKQotICAgICwgaW1hZ2VTaXplKDApCi17Ci0gICAgaWYgKCFpbmNsdWRlSW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChJbWFnZSogaW1hZ2UgPSBoaXRUZXN0UmVzdWx0
LmltYWdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaW1hZ2Ut
PmRhdGEoKTsKLSAgICAgICAgaWYgKGJ1ZmZlcikgewotICAgICAgICAgICAgaW1hZ2VTaGFyZWRN
ZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAgICAg
ICAgIG1lbWNweShpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgYnVm
ZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgaW1hZ2VTaXplID0gYnVmZmVyLT5zaXplKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6On5EYXRhKCkKLXsK
LX0KLQotdm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZUltYWdlVVJM
OwotICAgIGVuY29kZXIgPDwgYWJzb2x1dGVQREZVUkw7Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0
ZUxpbmtVUkw7Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZU1lZGlhVVJMOwotICAgIGVuY29kZXIg
PDwgbGlua0xhYmVsOwotICAgIGVuY29kZXIgPDwgbGlua1RpdGxlOwotICAgIGVuY29kZXIgPDwg
aXNDb250ZW50RWRpdGFibGU7Ci0gICAgZW5jb2RlciA8PCBlbGVtZW50Qm91bmRpbmdCb3g7Ci0g
ICAgZW5jb2RlciA8PCBpc1Njcm9sbGJhcjsKLSAgICBlbmNvZGVyIDw8IGlzU2VsZWN0ZWQ7Ci0g
ICAgZW5jb2RlciA8PCBpc1RleHROb2RlOwotICAgIGVuY29kZXIgPDwgaXNPdmVyVGV4dEluc2lk
ZUZvcm1Db250cm9sRWxlbWVudDsKLSAgICBlbmNvZGVyIDw8IGFsbG93c0NvcHk7Ci0gICAgZW5j
b2RlciA8PCBpc0Rvd25sb2FkYWJsZU1lZGlhOwotICAgIGVuY29kZXIgPDwgbG9va3VwVGV4dDsK
LSAgICBlbmNvZGVyIDw8IGRpY3Rpb25hcnlQb3B1cEluZm87Ci0KLSAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBpZiAoaW1hZ2VTaGFyZWRNZW1vcnkgJiYgaW1hZ2VT
aGFyZWRNZW1vcnktPmRhdGEoKSkKLSAgICAgICAgaW1hZ2VTaGFyZWRNZW1vcnktPmNyZWF0ZUhh
bmRsZShpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0g
ICAgZW5jb2RlciA8PCBpbWFnZUhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IGltYWdlU2l6ZTsKLQot
ICAgIGJvb2wgaGFzTGlua1RleHRJbmRpY2F0b3IgPSBsaW5rVGV4dEluZGljYXRvcjsKLSAgICBl
bmNvZGVyIDw8IGhhc0xpbmtUZXh0SW5kaWNhdG9yOwotICAgIGlmIChoYXNMaW5rVGV4dEluZGlj
YXRvcikKLSAgICAgICAgZW5jb2RlciA8PCBsaW5rVGV4dEluZGljYXRvci0+ZGF0YSgpOwotCi0g
ICAgcGxhdGZvcm1FbmNvZGUoZW5jb2Rlcik7Ci19Ci0KLWJvb2wgV2ViSGl0VGVzdFJlc3VsdDo6
RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVy
LmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkKLSAgICAgICAgfHwgIWRl
Y29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlua1VSTCkKLSAgICAgICAg
fHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTWVkaWFVUkwpCi0g
ICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rTGFiZWwpCi0g
ICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rVGl0bGUpCi0g
ICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc0NvbnRlbnRFZGl0
YWJsZSkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmVsZW1l
bnRCb3VuZGluZ0JveCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHRE
YXRhLmlzU2Nyb2xsYmFyKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3Vs
dERhdGEuaXNTZWxlY3RlZCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1
bHREYXRhLmlzVGV4dE5vZGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVz
dWx0RGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KQotICAgICAgICB8fCAh
ZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29weSkKLSAgICAgICAgfHwg
IWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxvYWRhYmxlTWVkaWEpCi0g
ICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5sb29rdXBUZXh0KQot
ICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZGljdGlvbmFyeVBv
cHVwSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNoYXJlZE1lbW9yeTo6SGFu
ZGxlIGltYWdlSGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VIYW5kbGUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWltYWdlSGFuZGxlLmlzTnVsbCgpKQot
ICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5pbWFnZVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6bWFwKGltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaXplKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXNMaW5rVGV4dEluZGljYXRvcjsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAg
IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEubGlua1RleHRJbmRpY2F0b3IgPSBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHBsYXRmb3JtRGVjb2RlKGRlY29kZXIsIGhpdFRlc3RSZXN1bHREYXRhKTsKLX0KLQotI2lm
ICFQTEFURk9STShNQUMpCi12b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5j
b2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotfQotCi1ib29sIFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVy
JiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQotCi1JbnRSZWN0
IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRp
bmF0ZXMoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKLXsKLSAgICBOb2RlKiBu
b2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5k
b2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKLQotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlbmRl
cmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKLX0KLQotfSAvLyBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gMTkwODA3
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJIaXRUZXN0
UmVzdWx0X2gKLSNkZWZpbmUgV2ViSGl0VGVzdFJlc3VsdF9oCi0KLSNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKLSNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RpY3Rp
b25hcnlQb3B1cEluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3Mg
QXJndW1lbnREZWNvZGVyOwotY2xhc3MgQXJndW1lbnRFbmNvZGVyOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBIaXRUZXN0UmVzdWx0OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViRnJhbWU7Ci0KLWNsYXNzIFdlYkhpdFRlc3RSZXN1bHQgOiBwdWJsaWMgQVBJ
OjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpIaXRUZXN0UmVzdWx0PiB7Ci1wdWJsaWM6
Ci0gICAgc3RydWN0IERhdGEgewotICAgICAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTDsKLSAg
ICAgICAgU3RyaW5nIGFic29sdXRlUERGVVJMOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVMaW5r
VVJMOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVSTDsKLSAgICAgICAgU3RyaW5nIGxp
bmtMYWJlbDsKLSAgICAgICAgU3RyaW5nIGxpbmtUaXRsZTsKLSAgICAgICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZTsKLSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7
Ci0gICAgICAgIGJvb2wgaXNTY3JvbGxiYXI7Ci0gICAgICAgIGJvb2wgaXNTZWxlY3RlZDsKLSAg
ICAgICAgYm9vbCBpc1RleHROb2RlOwotICAgICAgICBib29sIGlzT3ZlclRleHRJbnNpZGVGb3Jt
Q29udHJvbEVsZW1lbnQ7Ci0gICAgICAgIGJvb2wgYWxsb3dzQ29weTsKLSAgICAgICAgYm9vbCBp
c0Rvd25sb2FkYWJsZU1lZGlhOwotCi0gICAgICAgIFN0cmluZyBsb29rdXBUZXh0OwotICAgICAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbWFnZVNoYXJlZE1lbW9yeTsKLSAgICAgICAgdWludDY0
X3QgaW1hZ2VTaXplOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBSZXRhaW5QdHI8RERB
Y3Rpb25Db250ZXh0PiBkZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0OwotI2VuZGlmCi0gICAgICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgUmVm
UHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7Ci0g
ICAgICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9y
aWdpbmF0aW5nUGFnZU92ZXJsYXk7Ci0KLSAgICAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVw
SW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOwotCi0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yPiBsaW5rVGV4dEluZGljYXRvcjsKLQotICAgICAgICBEYXRhKCk7Ci0gICAgICAg
IGV4cGxpY2l0IERhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOwotICAgICAgICBE
YXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCBib29sIGluY2x1ZGVJbWFnZSk7Ci0g
ICAgICAgIH5EYXRhKCk7Ci0KLSAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29k
ZXImKSBjb25zdDsKLSAgICAgICAgdm9pZCBwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5j
b2RlciYpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0gICAgICAgIHN0YXRpYyBib29sIHBs
YXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0
YSYpOwotCi0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94SW5XaW5k
b3dDb29yZGluYXRlcyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jik7Ci0gICAgfTsKLQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGNyZWF0ZShjb25zdCBXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0KLSAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUltYWdlVVJMOyB9Ci0gICAgU3RyaW5nIGFic29s
dXRlUERGVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlUERGVVJMOyB9Ci0gICAg
U3RyaW5nIGFic29sdXRlTGlua1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUxp
bmtVUkw7IH0KLSAgICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5hYnNvbHV0ZU1lZGlhVVJMOyB9Ci0KLSAgICBTdHJpbmcgbGlua0xhYmVsKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmxpbmtMYWJlbDsgfQotICAgIFN0cmluZyBsaW5rVGl0bGUoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEubGlua1RpdGxlOyB9Ci0gICAgU3RyaW5nIGxvb2t1cFRleHQoKSBj
b25zdCB7IHJldHVybiBtX2RhdGEubG9va3VwVGV4dDsgfQotCi0gICAgYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc0NvbnRlbnRFZGl0YWJsZTsgfQotCi0g
ICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuZWxlbWVudEJvdW5kaW5nQm94OyB9Ci0KLSAgICBib29sIGlzU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLmlzU2Nyb2xsYmFyOyB9Ci0KLSAgICBib29sIGlzU2VsZWN0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNTZWxlY3RlZDsgfQotCi0gICAgYm9vbCBpc1RleHRO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzVGV4dE5vZGU7IH0KLQotICAgIGJvb2wgaXNP
dmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5p
c092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50OyB9Ci0KLSAgICBib29sIGFsbG93c0Nv
cHkoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWxsb3dzQ29weTsgfQotCi0gICAgYm9vbCBpc0Rv
d25sb2FkYWJsZU1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzRG93bmxvYWRhYmxlTWVk
aWE7IH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0KGNvbnN0IFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQotICAgICAgICA6IG1fZGF0
YShoaXRUZXN0UmVzdWx0RGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgRGF0YSBtX2RhdGE7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYkhpdFRlc3RSZXN1bHRf
aApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1
bHREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgi
CisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Ob2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YkhpdFRlc3RSZXN1bHREYXRhOjpXZWJIaXRUZXN0UmVzdWx0RGF0YSgpCit7Cit9CisKK1dlYkhp
dFRlc3RSZXN1bHREYXRhOjpXZWJIaXRUZXN0UmVzdWx0RGF0YShjb25zdCBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQorICAgIDogYWJzb2x1dGVJbWFnZVVSTChoaXRUZXN0
UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlUERGVVJM
KGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRl
TGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpKQorICAgICwg
YWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmco
KSkKKyAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpCisgICAgLCBs
aW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKSkKKyAgICAsIGlzQ29u
dGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAsIGVs
ZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGhp
dFRlc3RSZXN1bHQpKQorICAgICwgaXNTY3JvbGxiYXIoaGl0VGVzdFJlc3VsdC5zY3JvbGxiYXIo
KSkKKyAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJlc3VsdC5pc1NlbGVjdGVkKCkpCisgICAgLCBp
c1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5l
ck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgICwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9s
RWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJlc3VsdC5hbGxvd3NDb3B5KCkpCisgICAgLCBp
c0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1bHQuaXNEb3dubG9hZGFibGVNZWRpYSgpKQor
ICAgICwgaW1hZ2VTaXplKDApCit7Cit9CisKK1dlYkhpdFRlc3RSZXN1bHREYXRhOjpXZWJIaXRU
ZXN0UmVzdWx0RGF0YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0
LCBib29sIGluY2x1ZGVJbWFnZSkKKyAgICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3Vs
dC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZVBERlVSTChoaXRU
ZXN0UmVzdWx0LmFic29sdXRlUERGVVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZUxpbmtV
UkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29s
dXRlTWVkaWFVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCisg
ICAgLCBsaW5rTGFiZWwoaGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKQorICAgICwgbGlua1Rp
dGxlKGhpdFRlc3RSZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkpCisgICAgLCBpc0NvbnRlbnRF
ZGl0YWJsZShoaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgLCBlbGVtZW50
Qm91bmRpbmdCb3goZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0
UmVzdWx0KSkKKyAgICAsIGlzU2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCisg
ICAgLCBpc1NlbGVjdGVkKGhpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKQorICAgICwgaXNUZXh0
Tm9kZShoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2Rl
KCktPmlzVGV4dE5vZGUoKSkKKyAgICAsIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1l
bnQoaGl0VGVzdFJlc3VsdC5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCisg
ICAgLCBhbGxvd3NDb3B5KGhpdFRlc3RSZXN1bHQuYWxsb3dzQ29weSgpKQorICAgICwgaXNEb3du
bG9hZGFibGVNZWRpYShoaXRUZXN0UmVzdWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKKyAgICAs
IGltYWdlU2l6ZSgwKQoreworICAgIGlmICghaW5jbHVkZUltYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoSW1hZ2UqIGltYWdlID0gaGl0VGVzdFJlc3VsdC5pbWFnZSgpKSB7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGltYWdlLT5kYXRhKCk7CisgICAgICAg
IGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgIGltYWdlU2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNw
eShpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXpl
KCkpOworICAgICAgICAgICAgaW1hZ2VTaXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK1dlYkhpdFRlc3RSZXN1bHREYXRhOjp+V2ViSGl0VGVzdFJlc3VsdERhdGEo
KQoreworfQorCit2b2lkIFdlYkhpdFRlc3RSZXN1bHREYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZUltYWdl
VVJMOworICAgIGVuY29kZXIgPDwgYWJzb2x1dGVQREZVUkw7CisgICAgZW5jb2RlciA8PCBhYnNv
bHV0ZUxpbmtVUkw7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZU1lZGlhVVJMOworICAgIGVuY29k
ZXIgPDwgbGlua0xhYmVsOworICAgIGVuY29kZXIgPDwgbGlua1RpdGxlOworICAgIGVuY29kZXIg
PDwgaXNDb250ZW50RWRpdGFibGU7CisgICAgZW5jb2RlciA8PCBlbGVtZW50Qm91bmRpbmdCb3g7
CisgICAgZW5jb2RlciA8PCBpc1Njcm9sbGJhcjsKKyAgICBlbmNvZGVyIDw8IGlzU2VsZWN0ZWQ7
CisgICAgZW5jb2RlciA8PCBpc1RleHROb2RlOworICAgIGVuY29kZXIgPDwgaXNPdmVyVGV4dElu
c2lkZUZvcm1Db250cm9sRWxlbWVudDsKKyAgICBlbmNvZGVyIDw8IGFsbG93c0NvcHk7CisgICAg
ZW5jb2RlciA8PCBpc0Rvd25sb2FkYWJsZU1lZGlhOworICAgIGVuY29kZXIgPDwgbG9va3VwVGV4
dDsKKyAgICBlbmNvZGVyIDw8IGRpY3Rpb25hcnlQb3B1cEluZm87CisKKyAgICBXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlOworICAgIGlmIChpbWFnZVNoYXJlZE1lbW9y
eSAmJiBpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpKQorICAgICAgICBpbWFnZVNoYXJlZE1lbW9y
eS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpOworICAgIGVuY29kZXIgPDwgaW1hZ2VIYW5kbGU7CisgICAgZW5jb2Rl
ciA8PCBpbWFnZVNpemU7CisKKyAgICBib29sIGhhc0xpbmtUZXh0SW5kaWNhdG9yID0gbGlua1Rl
eHRJbmRpY2F0b3I7CisgICAgZW5jb2RlciA8PCBoYXNMaW5rVGV4dEluZGljYXRvcjsKKyAgICBp
ZiAoaGFzTGlua1RleHRJbmRpY2F0b3IpCisgICAgICAgIGVuY29kZXIgPDwgbGlua1RleHRJbmRp
Y2F0b3ItPmRhdGEoKTsKKworICAgIHBsYXRmb3JtRW5jb2RlKGVuY29kZXIpOworfQorCitib29s
IFdlYkhpdFRlc3RSZXN1bHREYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKK3sKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCisgICAg
ICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkK
KyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlu
a1VSTCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29s
dXRlTWVkaWFVUkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5saW5rTGFiZWwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5saW5rVGl0bGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmVsZW1lbnRCb3VuZGluZ0JveCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2Rl
KGhpdFRlc3RSZXN1bHREYXRhLmlzU2Nyb2xsYmFyKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNv
ZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNTZWxlY3RlZCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVj
b2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzVGV4dE5vZGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRl
Y29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50
KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29w
eSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxv
YWRhYmxlTWVkaWEpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5sb29rdXBUZXh0KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEuZGljdGlvbmFyeVBvcHVwSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdl
YktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaW1hZ2VIYW5kbGU7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShpbWFnZUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
aW1hZ2VIYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmltYWdlU2hh
cmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6Om1hcChpbWFnZUhhbmRsZSwgV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaXplKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYm9vbCBoYXNMaW5rVGV4dEluZGljYXRvcjsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JEYXRhIGluZGljYXRvckRhdGE7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5k
aWNhdG9yRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaGl0VGVz
dFJlc3VsdERhdGEubGlua1RleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpj
cmVhdGUoaW5kaWNhdG9yRGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIHBsYXRmb3JtRGVjb2Rl
KGRlY29kZXIsIGhpdFRlc3RSZXN1bHREYXRhKTsKK30KKworI2lmICFQTEFURk9STShNQUMpCit2
b2lkIFdlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3sKK30KKworYm9vbCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6
cGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkhpdFRlc3RS
ZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNl
bmRpZiAvLyAhUExBVEZPUk0oTUFDKQorCitJbnRSZWN0IFdlYkhpdFRlc3RSZXN1bHREYXRhOjpl
bGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworCisgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgp
OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5k
ZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisK
KyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoKSk7Cit9CisKK30gLy8gV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViSGl0VGVzdFJlc3VsdERhdGFf
aAorI2RlZmluZSBXZWJIaXRUZXN0UmVzdWx0RGF0YV9oCisKKyNpbmNsdWRlICJBUElPYmplY3Qu
aCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3Rpb25h
cnlQb3B1cEluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
T0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJn
dW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RydWN0IFdlYkhpdFRlc3RSZXN1bHREYXRhIHsKKyAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVS
TDsKKyAgICBTdHJpbmcgYWJzb2x1dGVQREZVUkw7CisgICAgU3RyaW5nIGFic29sdXRlTGlua1VS
TDsKKyAgICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVSTDsKKyAgICBTdHJpbmcgbGlua0xhYmVsOwor
ICAgIFN0cmluZyBsaW5rVGl0bGU7CisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKKyAgICBX
ZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRCb3VuZGluZ0JveDsKKyAgICBib29sIGlzU2Nyb2xsYmFy
OworICAgIGJvb2wgaXNTZWxlY3RlZDsKKyAgICBib29sIGlzVGV4dE5vZGU7CisgICAgYm9vbCBp
c092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50OworICAgIGJvb2wgYWxsb3dzQ29weTsK
KyAgICBib29sIGlzRG93bmxvYWRhYmxlTWVkaWE7CisKKyAgICBTdHJpbmcgbG9va3VwVGV4dDsK
KyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IGltYWdlU2hhcmVkTWVtb3J5OworICAg
IHVpbnQ2NF90IGltYWdlU2l6ZTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8
RERBY3Rpb25Db250ZXh0PiBkZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0OworI2VuZGlmCisgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OworICAgIFJlZlB0cjxX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOworICAgIFdl
YkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5n
UGFnZU92ZXJsYXk7CisKKyAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25h
cnlQb3B1cEluZm87CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gbGlua1Rl
eHRJbmRpY2F0b3I7CisKKyAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSgpOworICAgIGV4cGxpY2l0
IFdlYkhpdFRlc3RSZXN1bHREYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsKKyAg
ICBXZWJIaXRUZXN0UmVzdWx0RGF0YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgYm9v
bCBpbmNsdWRlSW1hZ2UpOworICAgIH5XZWJIaXRUZXN0UmVzdWx0RGF0YSgpOworCisgICAgdm9p
ZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICB2b2lkIHBsYXRmb3Jt
RW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVj
b2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdERhdGEmKTsKKyAgICBz
dGF0aWMgYm9vbCBwbGF0Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRl
c3RSZXN1bHREYXRhJik7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRCb3VuZGluZ0Jv
eEluV2luZG93Q29vcmRpbmF0ZXMoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJIaXRUZXN0UmVzdWx0RGF0
YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3Vs
dC5jcHAJKHJldmlzaW9uIDE5MDY3NCkJKGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhp
dFRlc3RSZXN1bHQuY3BwOjE5MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJ
SGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0
LmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvTm9kZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1Bhc3NSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gV2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViSGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0RGF0YSkpOwor
fQorCitXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKCkKK3sKK30KKworV2ViSGl0VGVzdFJl
c3VsdDo6RGF0YTo6RGF0YShjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQorICAg
IDogYWJzb2x1dGVJbWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJp
bmcoKSkKKyAgICAsIGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwo
KS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRl
TGlua1VSTCgpLnN0cmluZygpKQorICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0
LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVz
dWx0LnRleHRDb250ZW50KCkpCisgICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURp
c3BsYXlTdHJpbmcoKSkKKyAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXND
b250ZW50RWRpdGFibGUoKSkKKyAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRp
bmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQorICAgICwgaXNTY3JvbGxi
YXIoaGl0VGVzdFJlc3VsdC5zY3JvbGxiYXIoKSkKKyAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJl
c3VsdC5pc1NlbGVjdGVkKCkpCisgICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJO
b2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgICwg
aXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRl
eHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJl
c3VsdC5hbGxvd3NDb3B5KCkpCisgICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1
bHQuaXNEb3dubG9hZGFibGVNZWRpYSgpKQorICAgICwgaW1hZ2VTaXplKDApCit7Cit9CisKK1dl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYg
aGl0VGVzdFJlc3VsdCwgYm9vbCBpbmNsdWRlSW1hZ2UpCisgICAgOiBhYnNvbHV0ZUltYWdlVVJM
KGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpKQorICAgICwgYWJzb2x1
dGVQREZVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZVBERlVSTCgpLnN0cmluZygpKQorICAgICwg
YWJzb2x1dGVMaW5rVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkp
CisgICAgLCBhYnNvbHV0ZU1lZGlhVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgp
LnN0cmluZygpKQorICAgICwgbGlua0xhYmVsKGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKSkK
KyAgICAsIGxpbmtUaXRsZShoaXRUZXN0UmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpKQorICAg
ICwgaXNDb250ZW50RWRpdGFibGUoaGl0VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQor
ICAgICwgZWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRp
bmF0ZXMoaGl0VGVzdFJlc3VsdCkpCisgICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0UmVzdWx0LnNj
cm9sbGJhcigpKQorICAgICwgaXNTZWxlY3RlZChoaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSkK
KyAgICAsIGlzVGV4dE5vZGUoaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0UmVz
dWx0LmlubmVyTm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgLCBpc092ZXJUZXh0SW5zaWRlRm9y
bUNvbnRyb2xFbGVtZW50KGhpdFRlc3RSZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9s
RWxlbWVudCgpKQorICAgICwgYWxsb3dzQ29weShoaXRUZXN0UmVzdWx0LmFsbG93c0NvcHkoKSkK
KyAgICAsIGlzRG93bmxvYWRhYmxlTWVkaWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25sb2FkYWJsZU1l
ZGlhKCkpCisgICAgLCBpbWFnZVNpemUoMCkKK3sKKyAgICBpZiAoIWluY2x1ZGVJbWFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKEltYWdlKiBpbWFnZSA9IGhpdFRlc3RSZXN1bHQuaW1h
Z2UoKSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBpbWFnZS0+ZGF0
YSgpOworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICBpbWFnZVNoYXJlZE1lbW9y
eSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoYnVmZmVyLT5zaXplKCkpOworICAgICAgICAgICAg
bWVtY3B5KGltYWdlU2hhcmVkTWVtb3J5LT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXIt
PnNpemUoKSk7CisgICAgICAgICAgICBpbWFnZVNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6fkRhdGEoKQoreworfQor
Cit2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGFic29sdXRlSW1hZ2VVUkw7Cisg
ICAgZW5jb2RlciA8PCBhYnNvbHV0ZVBERlVSTDsKKyAgICBlbmNvZGVyIDw8IGFic29sdXRlTGlu
a1VSTDsKKyAgICBlbmNvZGVyIDw8IGFic29sdXRlTWVkaWFVUkw7CisgICAgZW5jb2RlciA8PCBs
aW5rTGFiZWw7CisgICAgZW5jb2RlciA8PCBsaW5rVGl0bGU7CisgICAgZW5jb2RlciA8PCBpc0Nv
bnRlbnRFZGl0YWJsZTsKKyAgICBlbmNvZGVyIDw8IGVsZW1lbnRCb3VuZGluZ0JveDsKKyAgICBl
bmNvZGVyIDw8IGlzU2Nyb2xsYmFyOworICAgIGVuY29kZXIgPDwgaXNTZWxlY3RlZDsKKyAgICBl
bmNvZGVyIDw8IGlzVGV4dE5vZGU7CisgICAgZW5jb2RlciA8PCBpc092ZXJUZXh0SW5zaWRlRm9y
bUNvbnRyb2xFbGVtZW50OworICAgIGVuY29kZXIgPDwgYWxsb3dzQ29weTsKKyAgICBlbmNvZGVy
IDw8IGlzRG93bmxvYWRhYmxlTWVkaWE7CisgICAgZW5jb2RlciA8PCBsb29rdXBUZXh0OworICAg
IGVuY29kZXIgPDwgZGljdGlvbmFyeVBvcHVwSW5mbzsKKworICAgIFNoYXJlZE1lbW9yeTo6SGFu
ZGxlIGltYWdlSGFuZGxlOworICAgIGlmIChpbWFnZVNoYXJlZE1lbW9yeSAmJiBpbWFnZVNoYXJl
ZE1lbW9yeS0+ZGF0YSgpKQorICAgICAgICBpbWFnZVNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxl
KGltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBl
bmNvZGVyIDw8IGltYWdlSGFuZGxlOworICAgIGVuY29kZXIgPDwgaW1hZ2VTaXplOworCisgICAg
Ym9vbCBoYXNMaW5rVGV4dEluZGljYXRvciA9IGxpbmtUZXh0SW5kaWNhdG9yOworICAgIGVuY29k
ZXIgPDwgaGFzTGlua1RleHRJbmRpY2F0b3I7CisgICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9y
KQorICAgICAgICBlbmNvZGVyIDw8IGxpbmtUZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisKKyAgICBw
bGF0Zm9ybUVuY29kZShlbmNvZGVyKTsKK30KKworYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRh
OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0
VGVzdFJlc3VsdERhdGEuYWJzb2x1dGVJbWFnZVVSTCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVj
b2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlUERGVVJMKQorICAgICAgICB8fCAhZGVjb2Rl
ci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWJzb2x1dGVMaW5rVVJMKQorICAgICAgICB8fCAh
ZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWJzb2x1dGVNZWRpYVVSTCkKKyAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmxpbmtMYWJlbCkKKyAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmxpbmtUaXRsZSkKKyAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzQ29udGVudEVkaXRhYmxl
KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZWxlbWVudEJv
dW5kaW5nQm94KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEu
aXNTY3JvbGxiYXIpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5pc1NlbGVjdGVkKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEuaXNUZXh0Tm9kZSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHRE
YXRhLmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQpCisgICAgICAgIHx8ICFkZWNv
ZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hbGxvd3NDb3B5KQorICAgICAgICB8fCAhZGVj
b2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNEb3dubG9hZGFibGVNZWRpYSkKKyAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmxvb2t1cFRleHQpCisgICAg
ICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5kaWN0aW9uYXJ5UG9wdXBJ
bmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUg
aW1hZ2VIYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbWFnZUhhbmRsZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaW1hZ2VIYW5kbGUuaXNOdWxsKCkpCisgICAg
ICAgIGhpdFRlc3RSZXN1bHREYXRhLmltYWdlU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5Ojpt
YXAoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pbWFnZVNpemUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhc0xpbmtUZXh0SW5kaWNhdG9yOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaGFzTGlua1RleHRJbmRpY2F0b3IpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoaGFzTGlua1RleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgV2Vi
Q29yZTo6VGV4dEluZGljYXRvckRhdGEgaW5kaWNhdG9yRGF0YTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShpbmRpY2F0b3JEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5saW5rVGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3I6OmNyZWF0ZShpbmRpY2F0b3JEYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cGxhdGZvcm1EZWNvZGUoZGVjb2RlciwgaGl0VGVzdFJlc3VsdERhdGEpOworfQorCisjaWYgIVBM
QVRGT1JNKE1BQykKK3ZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUo
SVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cit9CisKK2Jvb2wgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRl
Y29kZXIsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQoreworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmIC8vICFQTEFURk9STShNQUMpCisKK0ludFJlY3QgV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YTo6ZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRl
cyhjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQoreworICAgIE5vZGUqIG5vZGUg
PSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSW50UmVjdCgp
OworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcp
CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworCisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVuZGVyZXIt
PmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOworfQorCit9IC8vIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCwxOTIgKzE4LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKLQotI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
ck9iamVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9O
b2RlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSAiQVBJSGl0
VGVzdFJlc3VsdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLVBhc3NSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gV2ViSGl0VGVzdFJlc3VsdDo6
Y3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViSGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0
RGF0YSkpOwotfQotCi1XZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpEYXRhKCkKLXsKLX0KLQotV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YShjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVz
dWx0KQotICAgIDogYWJzb2x1dGVJbWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VV
UkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1
dGVQREZVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0
LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRU
ZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGxpbmtMYWJlbCho
aXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpCi0gICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3Vs
dC50aXRsZURpc3BsYXlTdHJpbmcoKSkKLSAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RS
ZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVt
ZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQotICAgICwg
aXNTY3JvbGxiYXIoaGl0VGVzdFJlc3VsdC5zY3JvbGxiYXIoKSkKLSAgICAsIGlzU2VsZWN0ZWQo
aGl0VGVzdFJlc3VsdC5pc1NlbGVjdGVkKCkpCi0gICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1
bHQuaW5uZXJOb2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgp
KQotICAgICwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0
LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAsIGFsbG93c0NvcHko
aGl0VGVzdFJlc3VsdC5hbGxvd3NDb3B5KCkpCi0gICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhp
dFRlc3RSZXN1bHQuaXNEb3dubG9hZGFibGVNZWRpYSgpKQotICAgICwgaW1hZ2VTaXplKDApCi17
Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgYm9vbCBpbmNsdWRlSW1hZ2UpCi0gICAgOiBhYnNvbHV0
ZUltYWdlVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpKQotICAg
ICwgYWJzb2x1dGVQREZVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZVBERlVSTCgpLnN0cmluZygp
KQotICAgICwgYWJzb2x1dGVMaW5rVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCku
c3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0ZU1lZGlhVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVN
ZWRpYVVSTCgpLnN0cmluZygpKQotICAgICwgbGlua0xhYmVsKGhpdFRlc3RSZXN1bHQudGV4dENv
bnRlbnQoKSkKLSAgICAsIGxpbmtUaXRsZShoaXRUZXN0UmVzdWx0LnRpdGxlRGlzcGxheVN0cmlu
ZygpKQotICAgICwgaXNDb250ZW50RWRpdGFibGUoaGl0VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0
YWJsZSgpKQotICAgICwgZWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnRCb3VuZGluZ0JveEluV2lu
ZG93Q29vcmRpbmF0ZXMoaGl0VGVzdFJlc3VsdCkpCi0gICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0
UmVzdWx0LnNjcm9sbGJhcigpKQotICAgICwgaXNTZWxlY3RlZChoaXRUZXN0UmVzdWx0LmlzU2Vs
ZWN0ZWQoKSkKLSAgICAsIGlzVGV4dE5vZGUoaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBo
aXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5pc1RleHROb2RlKCkpCi0gICAgLCBpc092ZXJUZXh0
SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KGhpdFRlc3RSZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZv
cm1Db250cm9sRWxlbWVudCgpKQotICAgICwgYWxsb3dzQ29weShoaXRUZXN0UmVzdWx0LmFsbG93
c0NvcHkoKSkKLSAgICAsIGlzRG93bmxvYWRhYmxlTWVkaWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25s
b2FkYWJsZU1lZGlhKCkpCi0gICAgLCBpbWFnZVNpemUoMCkKLXsKLSAgICBpZiAoIWluY2x1ZGVJ
bWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEltYWdlKiBpbWFnZSA9IGhpdFRlc3RS
ZXN1bHQuaW1hZ2UoKSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBp
bWFnZS0+ZGF0YSgpOwotICAgICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICBpbWFnZVNo
YXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoYnVmZmVyLT5zaXplKCkpOwotICAg
ICAgICAgICAgbWVtY3B5KGltYWdlU2hhcmVkTWVtb3J5LT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgp
LCBidWZmZXItPnNpemUoKSk7Ci0gICAgICAgICAgICBpbWFnZVNpemUgPSBidWZmZXItPnNpemUo
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6fkRhdGEo
KQotewotfQorbmFtZXNwYWNlIEFQSSB7CiAKLXZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6
ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorUGFzc1JlZlB0cjxI
aXRUZXN0UmVzdWx0PiBIaXRUZXN0UmVzdWx0OjpjcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCiB7Ci0gICAgZW5jb2RlciA8PCBhYnNv
bHV0ZUltYWdlVVJMOwotICAgIGVuY29kZXIgPDwgYWJzb2x1dGVQREZVUkw7Ci0gICAgZW5jb2Rl
ciA8PCBhYnNvbHV0ZUxpbmtVUkw7Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZU1lZGlhVVJMOwot
ICAgIGVuY29kZXIgPDwgbGlua0xhYmVsOwotICAgIGVuY29kZXIgPDwgbGlua1RpdGxlOwotICAg
IGVuY29kZXIgPDwgaXNDb250ZW50RWRpdGFibGU7Ci0gICAgZW5jb2RlciA8PCBlbGVtZW50Qm91
bmRpbmdCb3g7Ci0gICAgZW5jb2RlciA8PCBpc1Njcm9sbGJhcjsKLSAgICBlbmNvZGVyIDw8IGlz
U2VsZWN0ZWQ7Ci0gICAgZW5jb2RlciA8PCBpc1RleHROb2RlOwotICAgIGVuY29kZXIgPDwgaXNP
dmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKLSAgICBlbmNvZGVyIDw8IGFsbG93c0Nv
cHk7Ci0gICAgZW5jb2RlciA8PCBpc0Rvd25sb2FkYWJsZU1lZGlhOwotICAgIGVuY29kZXIgPDwg
bG9va3VwVGV4dDsKLSAgICBlbmNvZGVyIDw8IGRpY3Rpb25hcnlQb3B1cEluZm87Ci0KLSAgICBT
aGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBpZiAoaW1hZ2VTaGFyZWRNZW1v
cnkgJiYgaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSkKLSAgICAgICAgaW1hZ2VTaGFyZWRNZW1v
cnktPmNyZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7Ci0gICAgZW5jb2RlciA8PCBpbWFnZUhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IGlt
YWdlU2l6ZTsKLQotICAgIGJvb2wgaGFzTGlua1RleHRJbmRpY2F0b3IgPSBsaW5rVGV4dEluZGlj
YXRvcjsKLSAgICBlbmNvZGVyIDw8IGhhc0xpbmtUZXh0SW5kaWNhdG9yOwotICAgIGlmIChoYXNM
aW5rVGV4dEluZGljYXRvcikKLSAgICAgICAgZW5jb2RlciA8PCBsaW5rVGV4dEluZGljYXRvci0+
ZGF0YSgpOwotCi0gICAgcGxhdGZvcm1FbmNvZGUoZW5jb2Rlcik7Ci19Ci0KLWJvb2wgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCi0gICAgICAg
IHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkKLSAg
ICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlua1VS
TCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRl
TWVkaWFVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5s
aW5rTGFiZWwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5s
aW5rVGl0bGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5p
c0NvbnRlbnRFZGl0YWJsZSkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1
bHREYXRhLmVsZW1lbnRCb3VuZGluZ0JveCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhp
dFRlc3RSZXN1bHREYXRhLmlzU2Nyb2xsYmFyKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
aGl0VGVzdFJlc3VsdERhdGEuaXNTZWxlY3RlZCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2Rl
KGhpdFRlc3RSZXN1bHREYXRhLmlzVGV4dE5vZGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KQot
ICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29weSkK
LSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxvYWRh
YmxlTWVkaWEpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5s
b29rdXBUZXh0KQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEu
ZGljdGlvbmFyeVBvcHVwSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1h
Z2VIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWltYWdlSGFuZGxl
LmlzTnVsbCgpKQotICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5pbWFnZVNoYXJlZE1lbW9yeSA9
IFNoYXJlZE1lbW9yeTo6bWFwKGltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246
OlJlYWRPbmx5KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEu
aW1hZ2VTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXNMaW5rVGV4
dEluZGljYXRvcjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNhdG9y
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9y
KSB7Ci0gICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEubGlua1RleHRJbmRpY2F0
b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHBsYXRmb3JtRGVjb2RlKGRlY29kZXIsIGhpdFRlc3RSZXN1bHREYXRh
KTsKLX0KLQotI2lmICFQTEFURk9STShNQUMpCi12b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6
OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
fQotCi1ib29sIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJn
dW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVz
dWx0RGF0YSkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFD
KQotCi1JbnRSZWN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVsZW1lbnRCb3VuZGluZ0JveElu
V2luZG93Q29vcmRpbmF0ZXMoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKLXsK
LSAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGcmFtZSogZnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7
Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1Rv
V2luZG93KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdERhdGEpKTsKIH0KIAotfSAv
LyBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSS9BUElIaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmgJKHJldmlzaW9uIDE5MDY3NCkJKGZyb20gU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuaDoxOTA2NzQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJIaXRUZXN0UmVzdWx0X2gKKyNk
ZWZpbmUgV2ViSGl0VGVzdFJlc3VsdF9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNs
dWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3Rpb25hcnlQb3B1cElu
Zm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworT0JKQ19DTEFT
UyBEREFjdGlvbkNvbnRleHQ7CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1lbnREZWNv
ZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBIaXRUZXN0UmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
RnJhbWU7CisKK2NsYXNzIFdlYkhpdFRlc3RSZXN1bHQgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBs
PEFQSTo6T2JqZWN0OjpUeXBlOjpIaXRUZXN0UmVzdWx0PiB7CitwdWJsaWM6CisgICAgc3RydWN0
IERhdGEgeworICAgICAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTDsKKyAgICAgICAgU3RyaW5n
IGFic29sdXRlUERGVVJMOworICAgICAgICBTdHJpbmcgYWJzb2x1dGVMaW5rVVJMOworICAgICAg
ICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVSTDsKKyAgICAgICAgU3RyaW5nIGxpbmtMYWJlbDsKKyAg
ICAgICAgU3RyaW5nIGxpbmtUaXRsZTsKKyAgICAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsK
KyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7CisgICAgICAgIGJv
b2wgaXNTY3JvbGxiYXI7CisgICAgICAgIGJvb2wgaXNTZWxlY3RlZDsKKyAgICAgICAgYm9vbCBp
c1RleHROb2RlOworICAgICAgICBib29sIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1l
bnQ7CisgICAgICAgIGJvb2wgYWxsb3dzQ29weTsKKyAgICAgICAgYm9vbCBpc0Rvd25sb2FkYWJs
ZU1lZGlhOworCisgICAgICAgIFN0cmluZyBsb29rdXBUZXh0OworICAgICAgICBSZWZQdHI8U2hh
cmVkTWVtb3J5PiBpbWFnZVNoYXJlZE1lbW9yeTsKKyAgICAgICAgdWludDY0X3QgaW1hZ2VTaXpl
OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0
PiBkZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0OworI2VuZGlmCisgICAgICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6
OlRleHRJbmRpY2F0b3I+IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7CisgICAgICAgIFdlYkNv
cmU6OlBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFn
ZU92ZXJsYXk7CisKKyAgICAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9u
YXJ5UG9wdXBJbmZvOworCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBs
aW5rVGV4dEluZGljYXRvcjsKKworICAgICAgICBEYXRhKCk7CisgICAgICAgIGV4cGxpY2l0IERh
dGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOworICAgICAgICBEYXRhKGNvbnN0IFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQmLCBib29sIGluY2x1ZGVJbWFnZSk7CisgICAgICAgIH5EYXRh
KCk7CisKKyAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsK
KyAgICAgICAgdm9pZCBwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0
OworICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJik7CisgICAgICAgIHN0YXRpYyBib29sIHBsYXRmb3JtRGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOworCisgICAg
ICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRl
cyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jik7CisgICAgfTsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJik7CisKKyAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5hYnNvbHV0ZUltYWdlVVJMOyB9CisgICAgU3RyaW5nIGFic29sdXRlUERGVVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlUERGVVJMOyB9CisgICAgU3RyaW5nIGFic29s
dXRlTGlua1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUxpbmtVUkw7IH0KKyAg
ICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0
ZU1lZGlhVVJMOyB9CisKKyAgICBTdHJpbmcgbGlua0xhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmxpbmtMYWJlbDsgfQorICAgIFN0cmluZyBsaW5rVGl0bGUoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEubGlua1RpdGxlOyB9CisgICAgU3RyaW5nIGxvb2t1cFRleHQoKSBjb25zdCB7IHJldHVy
biBtX2RhdGEubG9va3VwVGV4dDsgfQorCisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5pc0NvbnRlbnRFZGl0YWJsZTsgfQorCisgICAgV2ViQ29yZTo6
SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZWxlbWVu
dEJvdW5kaW5nQm94OyB9CisKKyAgICBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmlzU2Nyb2xsYmFyOyB9CisKKyAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuaXNTZWxlY3RlZDsgfQorCisgICAgYm9vbCBpc1RleHROb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmlzVGV4dE5vZGU7IH0KKworICAgIGJvb2wgaXNPdmVyVGV4dEluc2lk
ZUZvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc092ZXJUZXh0SW5z
aWRlRm9ybUNvbnRyb2xFbGVtZW50OyB9CisKKyAgICBib29sIGFsbG93c0NvcHkoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEuYWxsb3dzQ29weTsgfQorCisgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1l
ZGlhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzRG93bmxvYWRhYmxlTWVkaWE7IH0KKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0KGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQorICAgICAgICA6IG1fZGF0YShoaXRUZXN0UmVz
dWx0RGF0YSkKKyAgICB7CisgICAgfQorCisgICAgRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkhpdFRlc3RSZXN1bHRfaApJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNywxMSArMTcsMTIgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogICovCiAKLSNpZm5kZWYgV2ViSGl0VGVzdFJlc3VsdF9oCi0jZGVmaW5lIFdlYkhpdFRl
c3RSZXN1bHRfaAorI2lmbmRlZiBBUElIaXRUZXN0UmVzdWx0X2gKKyNkZWZpbmUgQVBJSGl0VGVz
dFJlc3VsdF9oCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1v
cnkuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvRGljdGlvbmFyeVBvcHVwSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgpAQCAtNDIsNjYgKzQzLDIyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiB9CiAKLW5hbWVzcGFjZSBXZWJL
aXQgeworbmFtZXNwYWNlIEFQSSB7CiAKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBXZWJIaXRU
ZXN0UmVzdWx0IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SGl0
VGVzdFJlc3VsdD4geworY2xhc3MgSGl0VGVzdFJlc3VsdCA6IHB1YmxpYyBBUEk6Ok9iamVjdElt
cGw8QVBJOjpPYmplY3Q6OlR5cGU6OkhpdFRlc3RSZXN1bHQ+IHsKIHB1YmxpYzoKLSAgICBzdHJ1
Y3QgRGF0YSB7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZUltYWdlVVJMOwotICAgICAgICBTdHJp
bmcgYWJzb2x1dGVQREZVUkw7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkw7Ci0gICAg
ICAgIFN0cmluZyBhYnNvbHV0ZU1lZGlhVVJMOwotICAgICAgICBTdHJpbmcgbGlua0xhYmVsOwot
ICAgICAgICBTdHJpbmcgbGlua1RpdGxlOwotICAgICAgICBib29sIGlzQ29udGVudEVkaXRhYmxl
OwotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRCb3VuZGluZ0JveDsKLSAgICAgICAg
Ym9vbCBpc1Njcm9sbGJhcjsKLSAgICAgICAgYm9vbCBpc1NlbGVjdGVkOwotICAgICAgICBib29s
IGlzVGV4dE5vZGU7Ci0gICAgICAgIGJvb2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxl
bWVudDsKLSAgICAgICAgYm9vbCBhbGxvd3NDb3B5OwotICAgICAgICBib29sIGlzRG93bmxvYWRh
YmxlTWVkaWE7Ci0KLSAgICAgICAgU3RyaW5nIGxvb2t1cFRleHQ7Ci0gICAgICAgIFJlZlB0cjxT
aGFyZWRNZW1vcnk+IGltYWdlU2hhcmVkTWVtb3J5OwotICAgICAgICB1aW50NjRfdCBpbWFnZVNp
emU7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRl
eHQ+IGRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQ7Ci0jZW5kaWYKLSAgICAgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6VGV4dEluZGljYXRvcj4gZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcjsKLSAgICAgICAgV2Vi
Q29yZTo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5SUQgZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQ
YWdlT3ZlcmxheTsKLQotICAgICAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rp
b25hcnlQb3B1cEluZm87Ci0KLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+
IGxpbmtUZXh0SW5kaWNhdG9yOwotCi0gICAgICAgIERhdGEoKTsKLSAgICAgICAgZXhwbGljaXQg
RGF0YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIERhdGEoY29uc3Qg
V2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIGJvb2wgaW5jbHVkZUltYWdlKTsKLSAgICAgICAgfkRh
dGEoKTsKLQotICAgICAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0
OwotICAgICAgICB2b2lkIHBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29u
c3Q7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGEmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1EZWNv
ZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0KLSAg
ICAgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5h
dGVzKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsKLSAgICB9OwotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gY3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGEmKTsKLQotICAgIFN0cmluZyBhYnNvbHV0ZUltYWdlVVJMKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmFic29sdXRlSW1hZ2VVUkw7IH0KLSAgICBTdHJpbmcgYWJzb2x1dGVQREZVUkwo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVQREZVUkw7IH0KLSAgICBTdHJpbmcgYWJz
b2x1dGVMaW5rVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlTGlua1VSTDsgfQot
ICAgIFN0cmluZyBhYnNvbHV0ZU1lZGlhVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29s
dXRlTWVkaWFVUkw7IH0KLQotICAgIFN0cmluZyBsaW5rTGFiZWwoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEubGlua0xhYmVsOyB9Ci0gICAgU3RyaW5nIGxpbmtUaXRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5saW5rVGl0bGU7IH0KLSAgICBTdHJpbmcgbG9va3VwVGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5sb29rdXBUZXh0OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SGl0VGVzdFJl
c3VsdD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmKTsKKworICAg
IFdURjo6U3RyaW5nIGFic29sdXRlSW1hZ2VVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJz
b2x1dGVJbWFnZVVSTDsgfQorICAgIFdURjo6U3RyaW5nIGFic29sdXRlUERGVVJMKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmFic29sdXRlUERGVVJMOyB9CisgICAgV1RGOjpTdHJpbmcgYWJzb2x1
dGVMaW5rVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlTGlua1VSTDsgfQorICAg
IFdURjo6U3RyaW5nIGFic29sdXRlTWVkaWFVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJz
b2x1dGVNZWRpYVVSTDsgfQorCisgICAgV1RGOjpTdHJpbmcgbGlua0xhYmVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmxpbmtMYWJlbDsgfQorICAgIFdURjo6U3RyaW5nIGxpbmtUaXRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5saW5rVGl0bGU7IH0KKyAgICBXVEY6OlN0cmluZyBsb29rdXBU
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxvb2t1cFRleHQ7IH0KIAogICAgIGJvb2wgaXND
b250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNDb250ZW50RWRpdGFibGU7
IH0KIApAQCAtMTIwLDE0ICs3NywxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rvd25sb2FkYWJs
ZU1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzRG93bmxvYWRhYmxlTWVkaWE7IH0KIAog
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0KGNvbnN0IFdlYkhpdFRlc3RS
ZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQorICAgIGV4cGxpY2l0IEhpdFRlc3RSZXN1
bHQoY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEp
CiAgICAgICAgIDogbV9kYXRhKGhpdFRlc3RSZXN1bHREYXRhKQogICAgIHsKICAgICB9CiAKLSAg
ICBEYXRhIG1fZGF0YTsKKyAgICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIG1fZGF0YTsK
IH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQVBJCiAKLSNlbmRp
ZiAvLyBXZWJIaXRUZXN0UmVzdWx0X2gKKyNlbmRpZiAvLyBBUElIaXRUZXN0UmVzdWx0X2gKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJl
c3VsdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9f
V0tIaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFC
TEVECisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitXS19DTEFTU19BVkFJ
TEFCTEUoV0tfTUFDX1RCQSwgTkEpCitAaW50ZXJmYWNlIF9XS0hpdFRlc3RSZXN1bHQgOiBOU09i
amVjdCA8TlNDb3B5aW5nPgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkp
IE5TVVJMICphYnNvbHV0ZUltYWdlVVJMOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
LCBjb3B5KSBOU1VSTCAqYWJzb2x1dGVQREZVUkw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHksIGNvcHkpIE5TVVJMICphYnNvbHV0ZUxpbmtVUkw7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICphYnNvbHV0ZU1lZGlhVVJMOworCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpsaW5rTGFiZWw7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpsaW5rVGl0bGU7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpsb29rdXBUZXh0Owor
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc0NvbnRlbnRFZGl0YWJs
ZSkgQk9PTCBjb250ZW50RWRpdGFibGU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgQ0dSZWN0IGVsZW1lbnRCb3VuZGluZ0JveDsKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJ
X0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVz
dFJlc3VsdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29h
L19XS0hpdFRlc3RSZXN1bHQubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL0NvY29hL19XS0hpdFRlc3RSZXN1bHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLSGl0
VGVzdFJlc3VsdEludGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50
YXRpb24gX1dLSGl0VGVzdFJlc3VsdAorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfaGl0VGVz
dFJlc3VsdC0+fkhpdFRlc3RSZXN1bHQoKTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAoTlNVUkwgKilhYnNvbHV0ZUltYWdlVVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRo
U3RyaW5nOl9oaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJMKCldOworfQorCistIChOU1VS
TCAqKWFic29sdXRlUERGVVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9o
aXRUZXN0UmVzdWx0LT5hYnNvbHV0ZVBERlVSTCgpXTsKK30KKworLSAoTlNVUkwgKilhYnNvbHV0
ZUxpbmtVUkwKK3sKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6X2hpdFRlc3RSZXN1
bHQtPmFic29sdXRlTGlua1VSTCgpXTsKK30KKworLSAoTlNVUkwgKilhYnNvbHV0ZU1lZGlhVVJM
Cit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9oaXRUZXN0UmVzdWx0LT5hYnNv
bHV0ZU1lZGlhVVJMKCldOworfQorCistIChOU1N0cmluZyAqKWxpbmtMYWJlbAoreworICAgIHJl
dHVybiBfaGl0VGVzdFJlc3VsdC0+bGlua0xhYmVsKCk7Cit9CisKKy0gKE5TU3RyaW5nICopbGlu
a1RpdGxlCit7CisgICAgcmV0dXJuIF9oaXRUZXN0UmVzdWx0LT5saW5rVGl0bGUoKTsKK30KKwor
LSAoTlNTdHJpbmcgKilsb29rdXBUZXh0Cit7CisgICAgcmV0dXJuIF9oaXRUZXN0UmVzdWx0LT5s
b29rdXBUZXh0KCk7Cit9CisKKy0gKEJPT0wpaXNDb250ZW50RWRpdGFibGUKK3sKKyAgICByZXR1
cm4gX2hpdFRlc3RSZXN1bHQtPmlzQ29udGVudEVkaXRhYmxlKCk7Cit9CisKKy0gKENHUmVjdCll
bGVtZW50Qm91bmRpbmdCb3gKK3sKKyAgICByZXR1cm4gX2hpdFRlc3RSZXN1bHQtPmVsZW1lbnRC
b3VuZGluZ0JveCgpOworfQorCistIChpZCljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUKK3sK
KyAgICByZXR1cm4gW3NlbGYgcmV0YWluXTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHBy
b3RvY29sIGltcGxlbWVudGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7Cisg
ICAgcmV0dXJuICpfaGl0VGVzdFJlc3VsdDsKK30KKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0
UmVzdWx0SW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9B
UEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHQuaCIKKwor
I2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUhpdFRlc3RSZXN1bHQuaCIKKyNpbXBv
cnQgIldLT2JqZWN0LmgiCisKK25hbWVzcGFjZSBBUEkgeworCitpbmxpbmUgX1dLSGl0VGVzdFJl
c3VsdCAqd3JhcHBlcihBUEk6OkhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAg
QVNTRVJUKFtoaXRUZXN0UmVzdWx0LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tIaXRUZXN0
UmVzdWx0IGNsYXNzXV0pOworCisgICAgcmV0dXJuIChfV0tIaXRUZXN0UmVzdWx0ICopaGl0VGVz
dFJlc3VsdC53cmFwcGVyKCk7Cit9CisKK30KKworQGludGVyZmFjZSBfV0tIaXRUZXN0UmVzdWx0
ICgpIDxXS09iamVjdD4geworQHBhY2thZ2UKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpI
aXRUZXN0UmVzdWx0PiBfaGl0VGVzdFJlc3VsdDsKK30KK0BlbmQKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0ltbWVkaWF0
ZUFjdGlvblR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Q29jb2EvX1dLSW1tZWRpYXRlQWN0aW9uVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNp
ZiBXS19BUElfRU5BQkxFRAorCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlh
dGVBY3Rpb25UeXBlcykgeworICAgIF9XS0ltbWVkaWF0ZUFjdGlvbk5vbmUsCisgICAgX1dLSW1t
ZWRpYXRlQWN0aW9uTGlua1ByZXZpZXcsCisgICAgX1dLSW1tZWRpYXRlQWN0aW9uRGF0YURldGVj
dGVkSXRlbSwKKyAgICBfV0tJbW1lZGlhdGVBY3Rpb25Mb29rdXBUZXh0LAorICAgIF9XS0ltbWVk
aWF0ZUFjdGlvbk1haWx0b0xpbmssCisgICAgX1dLSW1tZWRpYXRlQWN0aW9uVGVsTGluaworfSBX
S19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgTkEpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMs
NiArNjMsNyBAQAogI2ltcG9ydCAiV0tXaW5kb3dGZWF0dXJlc0ludGVybmFsLmgiCiAjaW1wb3J0
ICJfV0tEb3dubG9hZEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVybmFs
LmgiCisjaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1By
b2Nlc3NQb29sQ29uZmlndXJhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVy
SW50ZXJuYWwuaCIKQEAgLTE1NCw2ICsxNTUsMTAgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qo
c2l6ZV90IHNpemUsIFR5cAogICAgICAgICB3cmFwcGVyID0gW1dLRnJhbWVJbmZvIGFsbG9jXTsK
ICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFR5cGU6OkhpdFRlc3RSZXN1bHQ6CisgICAgICAg
IHdyYXBwZXIgPSBbX1dLSGl0VGVzdFJlc3VsdCBhbGxvY107CisgICAgICAgIGJyZWFrOworCiAg
ICAgY2FzZSBUeXBlOjpOYXZpZ2F0aW9uOgogICAgICAgICB3cmFwcGVyID0gW1dLTmF2aWdhdGlv
biBhbGxvY107CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9XZWJIaXRUZXN0UmVzdWx0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvV2ViSGl0VGVzdFJlc3VsdC5tbQkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJX
ZWJIaXRUZXN0UmVzdWx0LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkFyZ3Vt
ZW50Q29kZXJzQ0YuaCIKLSNpbXBvcnQgIkFyZ3VtZW50RGVjb2Rlci5oIgotI2ltcG9ydCAiQXJn
dW1lbnRFbmNvZGVyLmgiCi0jaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBv
cnQgPFdlYkNvcmUvRGF0YURldGVjdG9yc1NQSS5oPgotI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5k
aWNhdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGE6OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotewotICAgIGJvb2wgaGFzQWN0aW9uQ29udGV4dCA9IGRldGVjdGVkRGF0YUFjdGlvbkNvbnRl
eHQ7Ci0gICAgZW5jb2RlciA8PCBoYXNBY3Rpb25Db250ZXh0OwotICAgIGlmICghaGFzQWN0aW9u
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURhdGE+
IGRhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF0pOwotICAgIFJldGFp
blB0cjxOU0tleWVkQXJjaGl2ZXI+IGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNoaXZl
ciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0pOwotICAg
IFthcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNdOwotICAgIFthcmNoaXZlciBl
bmNvZGVPYmplY3Q6ZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dC5nZXQoKSBmb3JLZXk6QCJhY3Rp
b25Db250ZXh0Il07Ci0gICAgW2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKLQotICAgIElQQzo6
ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhLmdldCgpKSk7
Ci0KLSAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgIGVuY29kZXIg
PDwgZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQYWdlT3ZlcmxheTsKLQotICAgIGJvb2wgaGFzRGV0
ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7Ci0gICAg
ZW5jb2RlciA8PCBoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOwotICAgIGlmIChoYXNEZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yKQotICAgICAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YVRl
eHRJbmRpY2F0b3ItPmRhdGEoKTsKLX0KLQotYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpw
bGF0Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJl
c3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCi17Ci0gICAgYm9vbCBoYXNBY3Rpb25Db250
ZXh0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzQWN0aW9uQ29udGV4dCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaGFzQWN0aW9uQ29udGV4dCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgIGlmICghSVBD
OjpkZWNvZGUoZGVjb2RlciwgZGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJl
dGFpblB0cjxOU0tleWVkVW5hcmNoaXZlcj4gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVk
VW5hcmNoaXZlciBhbGxvY10gaW5pdEZvclJlYWRpbmdXaXRoRGF0YTooTlNEYXRhICopZGF0YS5n
ZXQoKV0pOwotICAgIFt1bmFyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107Ci0g
ICAgQHRyeSB7Ci0gICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YUFjdGlvbkNv
bnRleHQgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzOmdldEREQWN0aW9uQ29udGV4
dENsYXNzKCkgZm9yS2V5OkAiYWN0aW9uQ29udGV4dCJdOwotICAgIH0gQGNhdGNoIChOU0V4Y2Vw
dGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBE
REFjdGlvbkNvbnRleHQ6ICVAIiwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YUJvdW5kaW5nQm94
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoaXRU
ZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9y
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChoYXNEZXRlY3RlZERhdGFUZXh0SW5k
aWNhdG9yKSB7Ci0gICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRh
dGE7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEuZGV0ZWN0ZWRE
YXRhVGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZShpbmRpY2F0
b3JEYXRhKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHREYXRhLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW0JKHJldmlzaW9uIDE5MDY3
NCkJKGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1tOjE5
MDY3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHQuaCIKKworI2lmIFBMQVRGT1JN
KE1BQykKKworI2ltcG9ydCAiQXJndW1lbnRDb2RlcnNDRi5oIgorI2ltcG9ydCAiQXJndW1lbnRE
ZWNvZGVyLmgiCisjaW1wb3J0ICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0b3JzU1BJLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3ZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUoSVBDOjpBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgYm9vbCBoYXNBY3Rpb25Db250ZXh0ID0g
ZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dDsKKyAgICBlbmNvZGVyIDw8IGhhc0FjdGlvbkNvbnRl
eHQ7CisgICAgaWYgKCFoYXNBY3Rpb25Db250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFs
bG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRyPE5TS2V5ZWRBcmNoaXZlcj4gYXJjaGl2ZXIgPSBh
ZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yV3JpdGluZ1dpdGhNdXRhYmxl
RGF0YTpkYXRhLmdldCgpXSk7CisgICAgW2FyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5n
OllFU107CisgICAgW2FyY2hpdmVyIGVuY29kZU9iamVjdDpkZXRlY3RlZERhdGFBY3Rpb25Db250
ZXh0LmdldCgpIGZvcktleTpAImFjdGlvbkNvbnRleHQiXTsKKyAgICBbYXJjaGl2ZXIgZmluaXNo
RW5jb2RpbmddOworCisgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxD
RkRhdGFSZWY+KGRhdGEuZ2V0KCkpKTsKKworICAgIGVuY29kZXIgPDwgZGV0ZWN0ZWREYXRhQm91
bmRpbmdCb3g7CisgICAgZW5jb2RlciA8PCBkZXRlY3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVy
bGF5OworCisgICAgYm9vbCBoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gZGV0ZWN0ZWRE
YXRhVGV4dEluZGljYXRvcjsKKyAgICBlbmNvZGVyIDw8IGhhc0RldGVjdGVkRGF0YVRleHRJbmRp
Y2F0b3I7CisgICAgaWYgKGhhc0RldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IpCisgICAgICAgIGVu
Y29kZXIgPDwgZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvci0+ZGF0YSgpOworfQorCitib29sIFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVy
JiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKK3sK
KyAgICBib29sIGhhc0FjdGlvbkNvbnRleHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNB
Y3Rpb25Db250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFoYXNBY3Rp
b25Db250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGRhdGE7CisgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPE5TS2V5ZWRVbmFyY2hpdmVyPiB1bmFyY2hp
dmVyID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ1dp
dGhEYXRhOihOU0RhdGEgKilkYXRhLmdldCgpXSk7CisgICAgW3VuYXJjaGl2ZXIgc2V0UmVxdWly
ZXNTZWN1cmVDb2Rpbmc6WUVTXTsKKyAgICBAdHJ5IHsKKyAgICAgICAgaGl0VGVzdFJlc3VsdERh
dGEuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9m
Q2xhc3M6Z2V0RERBY3Rpb25Db250ZXh0Q2xhc3MoKSBmb3JLZXk6QCJhY3Rpb25Db250ZXh0Il07
CisgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gZGVjb2RlIEREQWN0aW9uQ29udGV4dDogJUAiLCBleGNlcHRpb24pOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFt1bmFyY2hpdmVyIGZpbmlz
aERlY29kaW5nXTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEu
ZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YU9yaWdpbmF0
aW5nUGFnZU92ZXJsYXkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhc0Rl
dGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNEZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGhhc0RldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgV2ViQ29yZTo6VGV4dElu
ZGljYXRvckRhdGEgaW5kaWNhdG9yRGF0YTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
bmRpY2F0b3JEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBoaXRU
ZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dElu
ZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRhdGEpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0
RGF0YS5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJI
aXRUZXN0UmVzdWx0RGF0YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICov
CiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2lt
cG9ydCAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykKIApAQCAt
MzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhOjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3ZvaWQgV2ViSGl0VGVzdFJlc3VsdERhdGE6OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGJvb2wgaGFzQWN0aW9uQ29udGV4
dCA9IGRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQ7CiAgICAgZW5jb2RlciA8PCBoYXNBY3Rpb25D
b250ZXh0OwpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBs
YXRmb3JtRW5jCiAgICAgICAgIGVuY29kZXIgPDwgZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvci0+
ZGF0YSgpOwogfQogCi1ib29sIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBo
aXRUZXN0UmVzdWx0RGF0YSkKK2Jvb2wgV2ViSGl0VGVzdFJlc3VsdERhdGE6OnBsYXRmb3JtRGVj
b2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYg
aGl0VGVzdFJlc3VsdERhdGEpCiB7CiAgICAgYm9vbCBoYXNBY3Rpb25Db250ZXh0OwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzQWN0aW9uQ29udGV4dCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw3ICszMzEsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUJhY2tncm91bmRDb2xvcigpID0g
MDsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVk
aWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIGJvb2wgY29u
dGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHRE
YXRhJiwgYm9vbCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBBUEk6Ok9iamVjdCopID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCogaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhp
dFRlc3RSZXN1bHQoUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4sIF9XS0ltbWVkaWF0ZUFjdGlv
blR5cGUsIFJlZlB0cjxBUEk6Ok9iamVjdD4pID0gMDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxOTA4MDcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkFQSUZyYW1lSW5mby5oIgogI2luY2x1ZGUgIkFQ
SUdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiQVBJSGlzdG9yeUNsaWVudC5oIgorI2luY2x1ZGUgIkFQ
SUhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJBUElMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dC5oIgogI2luY2x1ZGUgIkFQSUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkFQSU5hdmlnYXRp
b24uaCIKQEAgLTM1NjQsMTYgKzM1NjUsMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFN0YXR1
c1RleHQoY29uc3QgUwogICAgIG1fdWlDbGllbnQtPnNldFN0YXR1c1RleHQodGhpcywgdGV4dCk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3Qgb3BhcXVl
TW9kaWZpZXJzLCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRl
c3RSZXN1bHREYXRhLCB1aW50MzJfdCBvcGFxdWVNb2RpZmllcnMsIGNvbnN0IFVzZXJEYXRhJiB1
c2VyRGF0YSkKIHsKLSAgICBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0ID0gV2ViSGl0VGVz
dFJlc3VsdDo6Y3JlYXRlKGhpdFRlc3RSZXN1bHREYXRhKTsKKyAgICBtX2xhc3RNb3VzZU1vdmVI
aXRUZXN0UmVzdWx0ID0gQVBJOjpIaXRUZXN0UmVzdWx0OjpjcmVhdGUoaGl0VGVzdFJlc3VsdERh
dGEpOwogCiAgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxX
ZWJFdmVudDo6TW9kaWZpZXJzPihvcGFxdWVNb2RpZmllcnMpOwogCiAgICAgbV91aUNsaWVudC0+
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQodGhpcywgaGl0VGVzdFJlc3VsdERhdGEsIG1vZGlmaWVy
cywgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgp
KS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRCZWdpblRyYWNraW5nUG90ZW50
aWFsTG9uZ01vdXNlUHJlc3MoY29uc3QgSW50UG9pbnQmIG1vdXNlRG93blBvc2l0aW9uLCBjb25z
dCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgY29uc3QgVXNlckRh
dGEmIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRp
YWxMb25nTW91c2VQcmVzcyhjb25zdCBJbnRQb2ludCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0
IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgY29uc3QgVXNlckRhdGEm
IHVzZXJEYXRhKQogewogICAgIG1fdWlDbGllbnQtPmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxM
b25nTW91c2VQcmVzcyh0aGlzLCBtb3VzZURvd25Qb3NpdGlvbiwgaGl0VGVzdFJlc3VsdERhdGEs
IG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSku
Z2V0KCkpOwogfQpAQCAtNTk4MywxMSArNTk4NCwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW1t
ZWRpYXRlQWN0aW9uRGlkQ29tCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpJbW1lZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRU
ZXN0UmVzdWx0OjpEYXRhJiByZXN1bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgY29u
c3QgVXNlckRhdGEmIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1JbW1l
ZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1bHQsIGJv
b2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogewog
ICAgIG1fcGFnZUNsaWVudC5kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChyZXN1bHQs
IGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2Jq
ZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogfQogCit2b2lkKiBXZWJQYWdlUHJveHk6
OmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KFJlZlB0
cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQsIF9XS0ltbWVkaWF0ZUFjdGlvblR5
cGUgdHlwZSwgUmVmUHRyPEFQSTo6T2JqZWN0PiB1c2VyRGF0YSkKK3sKKyAgICByZXR1cm4gbV9w
YWdlQ2xpZW50LmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVz
dWx0KGhpdFRlc3RSZXN1bHQsIHR5cGUsIHVzZXJEYXRhKTsKK30KKwogdm9pZCBXZWJQYWdlUHJv
eHk6Omluc3RhbGxWaWV3U3RhdGVDaGFuZ2VDb21wbGV0aW9uSGFuZGxlcih2b2lkICheY29tcGxl
dGlvbkhhbmRsZXIpKCkpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksNyBAQAogI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5LmgiCiAjaW5jbHVkZSAiVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5oIgogI2luY2x1
ZGUgIldLQmFzZS5oIgorI2luY2x1ZGUgIldLSW1tZWRpYXRlQWN0aW9uVHlwZXMuaCIKICNpbmNs
dWRlICJXS1BhZ2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JQaWNrZXIuaCIKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCkBAIC0xMDE1LDEzICsxMDE2LDE1IEBAIHB1
YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCByZW1vdmVOYXZpZ2F0aW9uR2VzdHVy
ZVNuYXBzaG90KCk7CiAKLSAgICBXZWJIaXRUZXN0UmVzdWx0KiBsYXN0TW91c2VNb3ZlSGl0VGVz
dFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQuZ2V0
KCk7IH0KKyAgICBBUEk6OkhpdFRlc3RSZXN1bHQqIGxhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdC5nZXQoKTsgfQog
ICAgIHZvaWQgcGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6
OkZsb2F0UG9pbnQpOwogCiAgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKTsKICAg
ICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZENhbmNlbCgpOwogICAgIHZvaWQgaW1tZWRpYXRlQWN0
aW9uRGlkQ29tcGxldGUoKTsKIAorICAgIHZvaWQqIGltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNv
bnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+LCBfV0tJ
bW1lZGlhdGVBY3Rpb25UeXBlLCBSZWZQdHI8QVBJOjpPYmplY3Q+KTsKKwogICAgIHZvaWQgaW5z
dGFsbFZpZXdTdGF0ZUNoYW5nZUNvbXBsZXRpb25IYW5kbGVyKHZvaWQoXmNvbXBsZXRpb25IYW5k
bGVyKSgpKTsKICNlbmRpZgogCkBAIC0xMTUwLDkgKzExNTMsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgcnVuSmF2YVNjcmlwdENvbmZpcm0odWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtOjpEZWxheWVkUmVwbHk+KTsKICAgICB2b2lk
IHJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4p
OwogICAgIHZvaWQgc2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RS
ZXN1bHREYXRhLCB1aW50MzJfdCBtb2RpZmllcnMsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9p
ZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIHVp
bnQzMl90IG1vZGlmaWVycywgY29uc3QgVXNlckRhdGEmKTsKIAotICAgIHZvaWQgZGlkQmVnaW5U
cmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBt
b3VzZURvd25Qb3NpdGlvbiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJl
c3VsdERhdGEsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkaWRCZWdpblRyYWNraW5nUG90
ZW50aWFsTG9uZ01vdXNlUHJlc3MoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1vdXNlRG93blBv
c2l0aW9uLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJik7CiAg
ICAgdm9pZCBkaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcyhjb25zdCBVc2VyRGF0YSYpOwogICAg
IHZvaWQgZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhjb25zdCBVc2Vy
RGF0YSYpOwogCkBAIC0xNDUxLDcgKzE0NTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdmlld0Rp
ZEVudGVyV2luZG93KCk7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBkaWRQZXJmb3Jt
SW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiwgYm9v
bCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBjb25zdCBVc2VyRGF0YSYpOworICAgIHZvaWQgZGlk
UGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEm
LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIGNvbnN0IFVzZXJEYXRhJik7CiAjZW5kaWYK
IAogICAgIHZvaWQgdXNlRml4ZWRMYXlvdXREaWRDaGFuZ2UoYm9vbCB1c2VGaXhlZExheW91dCkg
eyBtX3VzZUZpeGVkTGF5b3V0ID0gdXNlRml4ZWRMYXlvdXQ7IH0KQEAgLTE1NTUsNyArMTU1OCw3
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IG1fYWN0aXZlQ29u
dGV4dE1lbnU7CiAgICAgQ29udGV4dE1lbnVDb250ZXh0RGF0YSBtX2FjdGl2ZUNvbnRleHRNZW51
Q29udGV4dERhdGE7CiAjZW5kaWYKLSAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gbV9sYXN0
TW91c2VNb3ZlSGl0VGVzdFJlc3VsdDsKKyAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBt
X2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0OwogCiAgICAgUmVmUHRyPFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHk+IG1fb3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CiAgICAgR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eSBtX2dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw5ICsyOCw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgUnVuSmF2YVNj
cmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEgZnJhbWVTZWN1cml0eU9yaWdpbiwgU3RyaW5nIG1lc3NhZ2UpIC0+ICgpIERlbGF5ZWQK
ICAgICBSdW5KYXZhU2NyaXB0Q29uZmlybSh1aW50NjRfdCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhIGZyYW1lU2VjdXJpdHlPcmlnaW4sIFN0cmluZyBtZXNzYWdl
KSAtPiAoYm9vbCByZXN1bHQpIERlbGF5ZWQKICAgICBSdW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2
NF90IGZyYW1lSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgZnJhbWVTZWN1
cml0eU9yaWdpbiwgU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBkZWZhdWx0VmFsdWUpIC0+IChTdHJp
bmcgcmVzdWx0KSBEZWxheWVkCi0gICAgTW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViS2l0OjpX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhIGhpdFRlc3RSZXN1bHREYXRhLCB1aW50MzJfdCBtb2RpZmll
cnMsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCisgICAgTW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoc3RydWN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEgaGl0VGVzdFJlc3VsdERhdGEs
IHVpbnQzMl90IG1vZGlmaWVycywgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKIAotICAgIERp
ZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJDb3JlOjpJbnRQb2ludCBt
b3VzZURvd25Qb3NpdGlvbiwgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIGhpdFRlc3RS
ZXN1bHREYXRhLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQorICAgIERpZEJlZ2luVHJhY2tp
bmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJDb3JlOjpJbnRQb2ludCBtb3VzZURvd25Qb3Np
dGlvbiwgc3RydWN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEgaGl0VGVzdFJlc3VsdERh
dGEsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCiAgICAgRGlkUmVjb2duaXplTG9uZ01vdXNl
UHJlc3MoV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKICAgICBEaWRDYW5jZWxUcmFja2luZ1Bv
dGVudGlhbExvbmdNb3VzZVByZXNzKFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCiAKQEAgLTQz
MSw3ICs0MzEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShNQUMpCi0gICAgRGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Qoc3RydWN0
IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSByZXN1bHQsIGJvb2wgY29udGVudFByZXZl
bnRzRGVmYXVsdCwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKKyAgICBEaWRQZXJmb3JtSW1t
ZWRpYXRlQWN0aW9uSGl0VGVzdChzdHJ1Y3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSBy
ZXN1bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgV2ViS2l0OjpVc2VyRGF0YSB1c2Vy
RGF0YSkKICNlbmRpZgogICAgIEhhbmRsZU1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VOYW1lLCBXZWJL
aXQ6OlVzZXJEYXRhIG1lc3NhZ2VCb2R5KSBXYW50c0Nvbm5lY3Rpb24KICAgICBIYW5kbGVTeW5j
aHJvbm91c01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VOYW1lLCBXZWJLaXQ6OlVzZXJEYXRhIG1lc3Nh
Z2VCb2R5KSAtPiAoV2ViS2l0OjpVc2VyRGF0YSByZXR1cm5EYXRhKSBXYW50c0Nvbm5lY3Rpb24K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGV4dE1lbnVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRleHRN
ZW51Q2xpZW50LmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJQ29udGV4dE1lbnVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAKLSNpbmNsdWRlICJXZWJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00OCw3ICs0OCw3IEBA
IGNsYXNzIENvbnRleHRNZW51Q2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db250ZXh0
TWVudUNsaWVudCgpIHsgfQogCi0gICAgdmlydHVhbCBib29sIGdldENvbnRleHRNZW51RnJvbVBy
b3Bvc2VkTWVudShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2Vi
S2l0OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYgLyogcHJvcG9zZWRNZW51ICovLCBWZWN0b3I8UmVm
UHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mIC8qIGN1c3RvbU1lbnUgKi8sIGNvbnN0
IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIEFQSTo6T2JqZWN0KiAvKiB1c2VyRGF0
YSAqLykgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Q29udGV4dE1lbnVG
cm9tUHJvcG9zZWRNZW51KFdlYktpdDo6V2ViUGFnZVByb3h5JiwgY29uc3QgVmVjdG9yPFJlZlB0
cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiAvKiBwcm9wb3NlZE1lbnUgKi8sIFZlY3Rv
cjxSZWZQdHI8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYgLyogY3VzdG9tTWVudSAqLywg
Y29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIEFQSTo6T2JqZWN0KiAvKiB1c2Vy
RGF0YSAqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgY3VzdG9tQ29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJLaXQ6Oldl
YkNvbnRleHRNZW51SXRlbURhdGEmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVE
aXNtaXNzZWQoV2ViS2l0OjpXZWJQYWdlUHJveHkmKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hv
d0NvbnRleHRNZW51KFdlYktpdDo6V2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mKSB7
IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
SUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
VUlDbGllbnQuaAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElVSUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNp
bmNsdWRlICJXS1BhZ2UuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgotI2luY2x1ZGUgIldlYkhp
dFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5j
bHVkZSA8ZnVuY3Rpb25hbD4KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV1RG
OjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29u
c3QgV1RGOjpTdHJpbmcmKT4gY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIo
V1RGOjpTdHJpbmcoKSk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNUZXh0KFdlYktp
dDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBX
ZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBXZWJLaXQ6OldlYkV2ZW50OjpNb2RpZmll
cnMsIEFQSTo6T2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVz
dWx0RGF0YSYsIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVycywgQVBJOjpPYmplY3QqKSB7IH0K
ICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICB2aXJ0dWFsIHZvaWQgdW5hdmFp
bGFibGVQbHVnaW5CdXR0b25DbGlja2VkKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgV0tQbHVnaW5V
bmF2YWlsYWJpbGl0eVJlYXNvbiwgQVBJOjpEaWN0aW9uYXJ5KikgeyB9CiAjZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIHBpbm5lZFN0YXRlRGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZVByb3h5
JikgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdN
b3VzZVByZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBBUEk6Ok9iamVjdCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJl
c3MoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0
IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmLCBBUEk6Ok9iamVjdCopIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcyhXZWJLaXQ6OldlYlBhZ2VQcm94
eSosIEFQSTo6T2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbFRyYWNraW5n
UG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBBUEk6Ok9iamVj
dCopIHsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2Fz
dC5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAKIAogbmFtZXNwYWNl
IEFQSSB7CiBjbGFzcyBGcmFtZUluZm87CitjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgTmF2
aWdhdGlvbjsKIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247CiBjbGFzcyBOYXZpZ2F0aW9uRGF0YTsK
QEAgLTg5LDcgKzkwLDYgQEAgY2xhc3MgV2ViRnJhbWVQcm94eTsKIGNsYXNzIFdlYkdlb2xvY2F0
aW9uTWFuYWdlclByb3h5OwogY2xhc3MgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbjsKIGNsYXNzIFdl
YkdyYW1tYXJEZXRhaWw7Ci1jbGFzcyBXZWJIaXRUZXN0UmVzdWx0OwogY2xhc3MgV2ViSWNvbkRh
dGFiYXNlOwogY2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7CiBjbGFzcyBXZWJNZWRpYUNhY2hlTWFu
YWdlclByb3h5OwpAQCAtMTM0LDcgKzEzNCw3IEBAIFdLX0FERF9BUElfTUFQUElORyhXS0dlb2xv
Y2F0aW9uTWFuYWdlclIKIFdLX0FERF9BUElfTUFQUElORyhXS0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RSZWYsIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSkKIFdLX0FERF9B
UElfTUFQUElORyhXS0dlb2xvY2F0aW9uUG9zaXRpb25SZWYsIFdlYkdlb2xvY2F0aW9uUG9zaXRp
b24pCiBXS19BRERfQVBJX01BUFBJTkcoV0tHcmFtbWFyRGV0YWlsUmVmLCBXZWJHcmFtbWFyRGV0
YWlsKQotV0tfQUREX0FQSV9NQVBQSU5HKFdLSGl0VGVzdFJlc3VsdFJlZiwgV2ViSGl0VGVzdFJl
c3VsdCkKK1dLX0FERF9BUElfTUFQUElORyhXS0hpdFRlc3RSZXN1bHRSZWYsIEFQSTo6SGl0VGVz
dFJlc3VsdCkKIFdLX0FERF9BUElfTUFQUElORyhXS0ljb25EYXRhYmFzZVJlZiwgV2ViSWNvbkRh
dGFiYXNlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLSW5zcGVjdG9yUmVmLCBXZWJJbnNwZWN0b3JQ
cm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS01lZGlhQ2FjaGVNYW5hZ2VyUmVmLCBXZWJNZWRp
YUNhY2hlTWFuYWdlclByb3h5KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxNCArMjcsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
S0hpdFRlc3RSZXN1bHQuaCIKIAorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVHlwZUlEIFdLSGl0VGVzdFJlc3VsdEdldFR5cGVJRCgp
CiB7Ci0gICAgcmV0dXJuIHRvQVBJKFdlYkhpdFRlc3RSZXN1bHQ6OkFQSVR5cGUpOworICAgIHJl
dHVybiB0b0FQSShBUEk6OkhpdFRlc3RSZXN1bHQ6OkFQSVR5cGUpOwogfQogCiBXS1VSTFJlZiBX
S0hpdFRlc3RSZXN1bHRDb3B5QWJzb2x1dGVJbWFnZVVSTChXS0hpdFRlc3RSZXN1bHRSZWYgaGl0
VGVzdFJlc3VsdFJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkFQSURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJBUElGaW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAi
QVBJRnJhbWVJbmZvLmgiCisjaW5jbHVkZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IkFQSUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKICNp
bmNsdWRlICJBUElOYXZpZ2F0aW9uQ2xpZW50LmgiCkBAIC03NjgsNyArNzY5LDcgQEAgdm9pZCBX
S1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVDbGllbnQoV0tQYQogICAgICAgICB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51
KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRl
eHRNZW51SXRlbT4+JiBwcm9wb3NlZE1lbnVWZWN0b3IsIFZlY3RvcjxSZWZQdHI8V2ViS2l0OjpX
ZWJDb250ZXh0TWVudUl0ZW0+PiYgY3VzdG9tTWVudSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6
RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGUK
KyAgICAgICAgdmlydHVhbCBib29sIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXZWJQ
YWdlUHJveHkmIHBhZ2UsIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViS2l0OjpXZWJDb250ZXh0TWVu
dUl0ZW0+PiYgcHJvcG9zZWRNZW51VmVjdG9yLCBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2ViQ29u
dGV4dE1lbnVJdGVtPj4mIGN1c3RvbU1lbnUsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBo
aXRUZXN0UmVzdWx0RGF0YSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmdldENvbnRleHRNZW51RnJvbVByb3Bvc2Vk
TWVudSAmJiAhbV9jbGllbnQuZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0
ZWRGb3JVc2VXaXRoVjApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzg0LDcg
Kzc4NSw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KFdLUGEKIAogICAg
ICAgICAgICAgV0tBcnJheVJlZiBuZXdNZW51ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmICht
X2NsaWVudC5iYXNlLnZlcnNpb24gPj0gMikgewotICAgICAgICAgICAgICAgIFJlZlB0cjxXZWJI
aXRUZXN0UmVzdWx0PiB3ZWJIaXRUZXN0UmVzdWx0ID0gV2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRl
KGhpdFRlc3RSZXN1bHREYXRhKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QVBJOjpIaXRUZXN0
UmVzdWx0PiB3ZWJIaXRUZXN0UmVzdWx0ID0gQVBJOjpIaXRUZXN0UmVzdWx0OjpjcmVhdGUoaGl0
VGVzdFJlc3VsdERhdGEpOwogICAgICAgICAgICAgICAgIG1fY2xpZW50LmdldENvbnRleHRNZW51
RnJvbVByb3Bvc2VkTWVudSh0b0FQSSgmcGFnZSksIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShX
VEY6Om1vdmUocHJvcG9zZWRNZW51SXRlbXMpKS5wdHIoKSksICZuZXdNZW51LCB0b0FQSSh3ZWJI
aXRUZXN0UmVzdWx0LmdldCgpKSwgdG9BUEkodXNlckRhdGEpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9jbGllbnQuZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAodG9BUEko
JnBhZ2UpLCB0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKHByb3Bvc2VkTWVudUl0
ZW1zKSkucHRyKCkpLCAmbmV3TWVudSwgdG9BUEkodXNlckRhdGEpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOwpAQCAtMTYzNyw3ICsxNjM4LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGll
bnQoV0tQYWdlUmVmIHBhZwogICAgICAgICAgICAgbV9jbGllbnQuc2V0U3RhdHVzVGV4dCh0b0FQ
SShwYWdlKSwgdG9BUEkodGV4dC5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwog
ICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgZGF0YSwg
V2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3Zl
cnJpZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYlBh
Z2VQcm94eSogcGFnZSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGRhdGEsIFdlYkV2ZW50
OjpNb2RpZmllcnMgbW9kaWZpZXJzLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQgJiYgIW1fY2xpZW50Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VX
aXRoVjApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTY1MCw3ICsxNjUxLDcgQEAgdm9p
ZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1
bHQ+IHdlYkhpdFRlc3RSZXN1bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpjcmVhdGUoZGF0YSk7Cisg
ICAgICAgICAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiB3ZWJIaXRUZXN0UmVzdWx0ID0g
QVBJOjpIaXRUZXN0UmVzdWx0OjpjcmVhdGUoZGF0YSk7CiAgICAgICAgICAgICBtX2NsaWVudC5t
b3VzZURpZE1vdmVPdmVyRWxlbWVudCh0b0FQSShwYWdlKSwgdG9BUEkod2ViSGl0VGVzdFJlc3Vs
dC5nZXQoKSksIHRvQVBJKG1vZGlmaWVycyksIHRvQVBJKHVzZXJEYXRhKSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCkBAIC0xOTE4LDEyICsxOTE5LDEyIEBAIHZvaWQg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgICAgIG1fY2xpZW50
LnBpbm5lZFN0YXRlRGlkQ2hhbmdlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpblRyYWNraW5n
UG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBJbnRQb2lu
dCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGRhdGEs
IEFQSTo6T2JqZWN0KiB1c2VySW5mbykgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJQYWdlUHJveHkqIHBhZ2Us
IGNvbnN0IEludFBvaW50JiBtb3VzZURvd25Qb3NpdGlvbiwgY29uc3QgV2ViSGl0VGVzdFJlc3Vs
dERhdGEmIGRhdGEsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykgb3ZlcnJpZGUKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01v
dXNlUHJlc3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBSZWZQdHI8
V2ViSGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVzdFJlc3VsdCA9IFdlYkhpdFRlc3RSZXN1bHQ6OmNy
ZWF0ZShkYXRhKTsKKyAgICAgICAgICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IHdlYkhp
dFRlc3RSZXN1bHQgPSBBUEk6OkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShkYXRhKTsKICAgICAgICAg
ICAgIG1fY2xpZW50LmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyh0b0FQ
SShwYWdlKSwgdG9BUEkobW91c2VEb3duUG9zaXRpb24pLCB0b0FQSSh3ZWJIaXRUZXN0UmVzdWx0
LmdldCgpKSwgdG9BUEkodXNlckluZm8pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA3OSw2ICszMDc5
LDExIEBAIC0gKENHRmxvYXQpX292ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IKICAgICByZXR1cm4g
W193a1ZpZXcgX292ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JdOwogfQogCistIChpZClfaW1tZWRp
YXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6KF9XS0hpdFRlc3RS
ZXN1bHQgKiloaXRUZXN0UmVzdWx0IHdpdGhUeXBlOihfV0tJbW1lZGlhdGVBY3Rpb25UeXBlcyl0
eXBlIHVzZXJEYXRhOihpZDxOU1NlY3VyZUNvZGluZz4pdXNlckRhdGEKK3sKKyAgICByZXR1cm4g
bmlsOworfQorCiAtICh2b2lkKV9zZXRUb3BDb250ZW50SW5zZXQ6KENHRmxvYXQpY29udGVudElu
c2V0CiB7CiAgICAgW193a1ZpZXcgX3NldFRvcENvbnRlbnRJbnNldDpjb250ZW50SW5zZXRdOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCA8V2ViS2l0L19XS0ZpbmRP
cHRpb25zLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLSW1tZWRpYXRlQWN0aW9uVHlwZS5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS0xheW91dE1vZGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tSZW5kZXJp
bmdQcm9ncmVzc0V2ZW50cy5oPgogCkBAIC00MCw2ICs0MSw3IEBAIHR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIF9XS1BhZ2luYXRpb24KIH0gV0tfRU5VTV9BVkFJTEFCTEUoMTBfMTAsIDhfMCk7
CiAKIEBjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZTsKK0BjbGFzcyBfV0tIaXRUZXN0UmVz
dWx0OwogQGNsYXNzIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogQGNsYXNzIF9XS1Nlc3Npb25T
dGF0ZTsKIEBjbGFzcyBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXI7CkBAIC0xNzIsNiArMTc0LDkg
QEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLUGFnaW5hdGlvbgogCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgc2V0dGVyPV9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOikg
Qk9PTCBfd2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDsKIAorLy8gQ2xpZW50cyB0aGF0
IHdhbnQgdG8gbWFpbnRhaW4gZGVmYXVsdCBiZWhhdmlvciBjYW4gcmV0dXJuIG5pbC4gVG8gZGlz
YWJsZSB0aGUgaW1tZWRpYXRlIGFjdGlvbiBlbnRpcmVseSwgcmV0dXJuIE5TTnVsbC4gQW5kIHRv
CisvLyBkbyBzb21ldGhpbmcgY3VzdG9tLCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgY29uZm9ybXMg
dG8gdGhlIE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlciBwcm90b2NvbC4KKy0g
KGlkKV9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDoo
X1dLSGl0VGVzdFJlc3VsdCAqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0ZUFj
dGlvblR5cGVzKXR5cGUgdXNlckRhdGE6KGlkPE5TU2VjdXJlQ29kaW5nPil1c2VyRGF0YTsKICNl
bmRpZgogCiAtICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViQWNjZXNzaWJpbGl0eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViQWNjZXNz
aWJpbGl0eS5jcHAJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL1dlYkFjY2Vzc2liaWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw2IEBACiAKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV0tWaWV3RWZsLmgiCi0j
aW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVDbGllbnQu
Y3BwCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGdldENvbnRleHRNZW51
RnJvbVByb3Bvc2VkTWVudShXZWJQYWdlUHJveHkmLCBjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNv
bnRleHRNZW51SXRlbT4+JiBwcm9wb3NlZE1lbnUsIFZlY3RvcjxSZWZQdHI8V2ViQ29udGV4dE1l
bnVJdGVtPj4mLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0
YSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQorICAgIGJvb2wgZ2V0Q29udGV4dE1l
bnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2Vi
Q29udGV4dE1lbnVJdGVtPj4mIHByb3Bvc2VkTWVudSwgVmVjdG9yPFJlZlB0cjxXZWJDb250ZXh0
TWVudUl0ZW0+PiYsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0
YSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgR1JlZlB0
cjxHVmFyaWFudD4gdmFyaWFudDsKICAgICAgICAgaWYgKHVzZXJEYXRhKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0
UmVzdWx0LmNwcAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcg
KzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRIaXRUZXN0UmVz
dWx0LmgiCiAKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiV2ViSGl0
VGVzdFJlc3VsdERhdGEuaCIKICNpbmNsdWRlICJXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5o
IgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgpAQCAtMjIxLDcgKzIyMSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY2xhc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1GbGFncykpOwogfQogCi1XZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRI
aXRUZXN0UmVzdWx0Q3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RS
ZXN1bHQpCitXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0KQogewogICAgIHVuc2lnbmVk
IGNvbnRleHQgPSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ7CiAKQEAg
LTI1OCw3ICsyNTgsNyBAQCBzdGF0aWMgYm9vbCBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKGNvbnN0
CiAgICAgcmV0dXJuICgoc3RyaW5nLmlzRW1wdHkoKSAmJiBjU3RyaW5nLmlzTnVsbCgpKSB8fCAo
c3RyaW5nLnV0ZjgoKSA9PSBjU3RyaW5nKSk7CiB9CiAKLWJvb2wgd2Via2l0SGl0VGVzdFJlc3Vs
dENvbXBhcmUoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgY29uc3QgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YSYgd2ViSGl0VGVzdFJlc3VsdCkKK2Jvb2wgd2Via2l0SGl0VGVzdFJl
c3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgY29uc3QgV2Vi
SGl0VGVzdFJlc3VsdERhdGEmIHdlYkhpdFRlc3RSZXN1bHQpCiB7CiAgICAgV2ViS2l0SGl0VGVz
dFJlc3VsdFByaXZhdGUqIHByaXYgPSBoaXRUZXN0UmVzdWx0LT5wcml2OwogICAgIHJldHVybiB3
ZWJIaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0UHJpdmF0ZS5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKIAotV2ViS2l0SGl0VGVzdFJlc3VsdCogd2Via2l0SGl0VGVz
dFJlc3VsdENyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKTsKLWJv
b2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJlc3VsdCosIGNvbnN0
IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOworV2ViS2l0SGl0VGVzdFJlc3VsdCog
d2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHRE
YXRhJik7Citib29sIHdlYmtpdEhpdFRlc3RSZXN1bHRDb21wYXJlKFdlYktpdEhpdFRlc3RSZXN1
bHQqLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJik7CiAKICNlbmRpZiAvLyBX
ZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCShyZXZpc2lvbiAxOTA4MDcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQuZGF0YSgpKSk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYlBhZ2VQcm94eSosIGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGRhdGEsIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9k
aWZpZXJzLCBBUEk6Ok9iamVjdCopIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRh
JiBkYXRhLCBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycywgQVBJOjpPYmplY3QqKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChtX3dl
YlZpZXcsIGRhdGEsIHRvR2RrTW9kaWZpZXJzKG1vZGlmaWVycykpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzMiw3ICsxOTMyLDcgQEAgdm9p
ZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KAogICAgIGdfc2lnbmFsX2VtaXQo
d2ViVmlldywgc2lnbmFsc1tQRVJNSVNTSU9OX1JFUVVFU1RdLCAwLCByZXF1ZXN0LCAmcmV0dXJu
VmFsdWUpOwogfQogCi12b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJl
c3VsdCwgdW5zaWduZWQgbW9kaWZpZXJzKQordm9pZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRh
JiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllcnMpCiB7CiAgICAgd2Via2l0V2ViVmll
d0Jhc2VTZXRUb29sdGlwQXJlYShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgaGl0VGVz
dFJlc3VsdC5lbGVtZW50Qm91bmRpbmdCb3gpOwogCkBAIC0yMDc2LDcgKzIwNzYsNyBAQCBzdGF0
aWMgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZChHdGtNZW51CiAgICAgZ19zaWduYWxfZW1pdCh3
ZWJWaWV3LCBzaWduYWxzW0NPTlRFWFRfTUVOVV9ESVNNSVNTRURdLCAwLCBOVUxMKTsKIH0KIAot
dm9pZCB3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHByb3Bvc2VkTWVudSwg
Y29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIEdWYXJpYW50
KiB1c2VyRGF0YSkKK3ZvaWQgd2Via2l0V2ViVmlld1BvcHVsYXRlQ29udGV4dE1lbnUoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBw
cm9wb3NlZE1lbnUsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0RGF0
YSwgR1ZhcmlhbnQqIHVzZXJEYXRhKQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3
QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpOwogICAgIFdlYkNvbnRleHRNZW51
UHJveHlHdGsqIGNvbnRleHRNZW51UHJveHkgPSB3ZWJraXRXZWJWaWV3QmFzZUdldEFjdGl2ZUNv
bnRleHRNZW51UHJveHkod2ViVmlld0Jhc2UpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lv
biAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJJbnN0YWxsTWlzc2luZ01lZGlhUGx1Z2luc1Blcm1pc3Npb25SZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQu
aCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIldlYkltYWdl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENv
bmZpcm0oVwogQ1N0cmluZyB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXRX
ZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRl
eHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCopOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBv
bGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUsIFdl
YktpdFBvbGljeURlY2lzaW9uKik7Ci12b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5n
ZWQoV2ViS2l0V2ViVmlldyosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYs
IHVuc2lnbmVkIG1vZGlmaWVycyk7Cit2b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5n
ZWQoV2ViS2l0V2ViVmlldyosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmLCB1
bnNpZ25lZCBtb2RpZmllcnMpOwogdm9pZCB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXZWJLaXRX
ZWJWaWV3KiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdSZXNv
dXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCB1
aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYktpdFVSSVJlcXVlc3QqKTsKIHZvaWQgd2Vi
a2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0Kik7CkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgd2ViS2l0V2ViVmlld0Rp
ZFJlY2VpdmVTbmFwc2hvdChXZWIKIHZvaWQgd2Via2l0V2ViVmlld1JlbW92ZUxvYWRpbmdXZWJS
ZXNvdXJjZShXZWJLaXRXZWJWaWV3KiwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKIGJv
b2wgd2Via2l0V2ViVmlld0VudGVyRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3Kik7CiBib29sIHdl
YmtpdFdlYlZpZXdMZWF2ZUZ1bGxTY3JlZW4oV2ViS2l0V2ViVmlldyopOwotdm9pZCB3ZWJraXRX
ZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3KiwgY29uc3QgVmVjdG9yPFdl
YktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHByb3Bvc2VkTWVudSwgY29uc3QgV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiwgR1ZhcmlhbnQqKTsKK3ZvaWQgd2Via2l0V2ViVmll
d1BvcHVsYXRlQ29udGV4dE1lbnUoV2ViS2l0V2ViVmlldyosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6
OldlYkNvbnRleHRNZW51SXRlbURhdGE+JiBwcm9wb3NlZE1lbnUsIGNvbnN0IFdlYktpdDo6V2Vi
SGl0VGVzdFJlc3VsdERhdGEmLCBHVmFyaWFudCopOwogdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0
Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCop
Owogdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0
V2ViVmlldyosIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOwogdm9pZCB3
ZWJraXRXZWJWaWV3SW5zZWN1cmVDb250ZW50RGV0ZWN0ZWQoV2ViS2l0V2ViVmlldyosIFdlYktp
dEluc2VjdXJlQ29udGVudEV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBA
QAogI2ltcG9ydCAiV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIK
ICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgotI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5o
IgorI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbXBvcnQgIldlYkluc3BlY3Rv
clByb3h5LmgiCiAjaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2ltcG9ydCAiV2ViUGFn
ZS5oIgpAQCAtMzk4MCw3ICszOTgwLDcgQEAgLSAodm9pZClfcmVtb3ZlTmF2aWdhdGlvbkdlc3R1
cmVTbmFwc2hvdAogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEw
MDAKIAotLSAodm9pZClfZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6KGNvbnN0IFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVs
dDooQk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNl
ckRhdGEKKy0gKHZvaWQpX2RpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0Oihjb25zdCBX
ZWJIaXRUZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0
OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1c2Vy
RGF0YQogewogICAgIFtfZGF0YS0+X2ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgZGlkUGVyZm9y
bUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6aGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZh
dWx0OmNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6dXNlckRhdGFdOwogfQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5o
CShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0
ICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKICNpbXBvcnQgIlNhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXZWJGaW5kT3B0aW9ucy5oIgotI2ltcG9ydCAiV2Vi
SGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbXBv
cnQgPHd0Zi9Gb3J3YXJkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3
dGYvVmVjdG9yLmg+CkBAIC0xNDUsNyArMTQ1LDcgQEAgQGludGVyZmFjZSBXS1ZpZXcgKCkKIC0g
KHZvaWQpX3ByZXBhcmVGb3JEaWN0aW9uYXJ5TG9va3VwOwogCiAjaWYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKLS0gKHZvaWQpX2RpZFBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0Oihjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRl
c3RSZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDooQk9PTCljb250ZW50UHJldmVudHNEZWZh
dWx0IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRhdGE7CistICh2b2lkKV9kaWRQZXJmb3Jt
SW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0
YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2
ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1c2VyRGF0YTsKICNlbmRpZgogCiAj
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDE5
MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUoU2FtZURvY3VtZW50TmF2
aWdhdGlvblR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOYXZpZ2F0aW9u
R2VzdHVyZVNuYXBzaG90KCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9y
bUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIGJv
b2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0
VGVzdFJlc3VsdERhdGEmLCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0
Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkKiBpbW1lZGlhdGVBY3Rpb25BbmltYXRpb25D
b250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiwgX1dL
SW1tZWRpYXRlQWN0aW9uVHlwZSwgUmVmUHRyPEFQSTo6T2JqZWN0Pikgb3ZlcnJpZGU7CisKICAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXRmb3JtQ29udGV4dE1lbnUoTlNNZW51ICosIFdlYkNvcmU6
OkludFBvaW50KSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrZ3Jv
dW5kQ29sb3IoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcs
NiArNDcsNyBAQAogI2ltcG9ydCAiV2ViUG9wdXBNZW51UHJveHlNYWMuaCIKICNpbXBvcnQgIldp
bmRvd1NlcnZlckNvbm5lY3Rpb24uaCIKICNpbXBvcnQgIl9XS0Rvd25sb2FkSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVGh1bWJu
YWlsVmlldy5oIgogI2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KQEAgLTgxMSwxMyArODEyLDQ0IEBA
IENHUmVjdCBQYWdlQ2xpZW50SW1wbDo6Ym91bmRzT2ZMYXllckluTGEKICAgICByZXR1cm4gW3dp
bmRvd0NvbnRlbnRMYXllciBjb252ZXJ0UmVjdDpsYXllci5ib3VuZHMgZnJvbUxheWVyOmxheWVy
XTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhp
dFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgcmVzdWx0LCBib29sIGNvbnRlbnRQ
cmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHREYXRhJiByZXN1bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3Qq
IHVzZXJEYXRhKQogewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
MDAwCiAgICAgW21fd2tWaWV3IF9kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDpyZXN1
bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDpjb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRh
OnVzZXJEYXRhXTsKICNlbmRpZgogfQogCit2b2lkKiBQYWdlQ2xpZW50SW1wbDo6aW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoUmVmUHRyPEFQSTo6SGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCwgX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSB0eXBlLCBS
ZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhKQoreworI2lmIFdLX0FQSV9FTkFCTEVECisgICAg
aWYgKG1fd2ViVmlldykgeworICAgICAgICBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlcyB3a1R5cGU7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIGtXS0ltbWVkaWF0ZUFjdGlv
bk5vbmU6CisgICAgICAgICAgICB3a1R5cGUgPSBfV0tJbW1lZGlhdGVBY3Rpb25Ob25lOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1dLSW1tZWRpYXRlQWN0aW9uTGlua1ByZXZp
ZXc6CisgICAgICAgICAgICB3a1R5cGUgPSBfV0tJbW1lZGlhdGVBY3Rpb25MaW5rUHJldmlldzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtXS0ltbWVkaWF0ZUFjdGlvbkRhdGFE
ZXRlY3RlZEl0ZW06CisgICAgICAgICAgICB3a1R5cGUgPSBfV0tJbW1lZGlhdGVBY3Rpb25EYXRh
RGV0ZWN0ZWRJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1dLSW1tZWRp
YXRlQWN0aW9uTG9va3VwVGV4dDoKKyAgICAgICAgICAgIHdrVHlwZSA9IF9XS0ltbWVkaWF0ZUFj
dGlvbkxvb2t1cFRleHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrV0tJbW1l
ZGlhdGVBY3Rpb25NYWlsdG9MaW5rOgorICAgICAgICAgICAgd2tUeXBlID0gX1dLSW1tZWRpYXRl
QWN0aW9uTWFpbHRvTGluazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtXS0lt
bWVkaWF0ZUFjdGlvblRlbExpbms6CisgICAgICAgICAgICB3a1R5cGUgPSBfV0tJbW1lZGlhdGVB
Y3Rpb25UZWxMaW5rOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIFttX3dlYlZpZXcgX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRU
ZXN0UmVzdWx0OndyYXBwZXIoKmhpdFRlc3RSZXN1bHQpIHdpdGhUeXBlOndrVHlwZSB1c2VyRGF0
YTooaWQpKHVzZXJEYXRhLmdldCgpKV07CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIFttX3dr
VmlldyBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6
dG9BUEkoaGl0VGVzdFJlc3VsdC5nZXQoKSkgd2l0aFR5cGU6dHlwZSB1c2VyRGF0YTp0b0FQSSh1
c2VyRGF0YS5nZXQoKSldOworfQorCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93UGxhdGZvcm1D
b250ZXh0TWVudShOU01lbnUgKm1lbnUsIEludFBvaW50IGxvY2F0aW9uKQogewogICAgIFttZW51
IHBvcFVwTWVudVBvc2l0aW9uaW5nSXRlbTpuaWwgYXRMb2NhdGlvbjpsb2NhdGlvbiBpblZpZXc6
bV93a1ZpZXddOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxOTA4MDcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTAwMAogCiAjaW1wb3J0ICJX
S0ltbWVkaWF0ZUFjdGlvblR5cGVzLmgiCi0jaW1wb3J0ICJXZWJIaXRUZXN0UmVzdWx0LmgiCisj
aW1wb3J0ICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2ltcG9ydCA8V2ViQ29yZS9OU0ltbWVk
aWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CiAKQEAgLTU0LDcgKzU0LDcgQEAgQGludGVyZmFjZSBXS0ltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIgOgogICAgIFdLVmlldyAqX3drVmlldzsKIAogICAgIFdlYktpdDo6SW1tZWRpYXRlQWN0
aW9uU3RhdGUgX3N0YXRlOwotICAgIFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBfaGl0
VGVzdFJlc3VsdERhdGE7CisgICAgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSBfaGl0VGVz
dFJlc3VsdERhdGE7CiAgICAgQk9PTCBfY29udGVudFByZXZlbnRzRGVmYXVsdDsKICAgICBSZWZQ
dHI8QVBJOjpPYmplY3Q+IF91c2VyRGF0YTsKICAgICBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlIF90
eXBlOwpAQCAtNjksNyArNjksNyBAQCBAaW50ZXJmYWNlIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlciA6CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBhZ2U6KFdlYktpdDo6V2ViUGFnZVBy
b3h5JilwYWdlIHZpZXc6KFdLVmlldyAqKXdrVmlldyByZWNvZ25pemVyOihOU0ltbWVkaWF0ZUFj
dGlvbkdlc3R1cmVSZWNvZ25pemVyICopaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcjsKIC0gKHZv
aWQpd2lsbERlc3Ryb3lWaWV3OihXS1ZpZXcgKil2aWV3OwotLSAodm9pZClkaWRQZXJmb3JtSW1t
ZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRh
JiloaXRUZXN0UmVzdWx0IGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQ6KEJPT0wpY29udGVudFByZXZl
bnRzRGVmYXVsdCB1c2VyRGF0YTooQVBJOjpPYmplY3QqKXVzZXJEYXRhOworLSAodm9pZClkaWRQ
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVz
dWx0RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0OihCT09MKWNvbnRl
bnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1c2VyRGF0YTsKIC0gKHZv
aWQpZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93czsKIC0gKEJPT0wpaGFzQWN0aXZl
SW1tZWRpYXRlQWN0aW9uOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dL
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24g
MTkwODA3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlv
bkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAK
IAorI2ltcG9ydCAiQVBJSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5o
IgogI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5o
IgpAQCAtODMsNyArODQsNyBAQCAtICh2b2lkKXdpbGxEZXN0cm95VmlldzooV0tWaWV3ICopdmll
dwogewogICAgIF9wYWdlID0gbnVsbHB0cjsKICAgICBfd2tWaWV3ID0gbmlsOwotICAgIF9oaXRU
ZXN0UmVzdWx0RGF0YSA9IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEoKTsKKyAgICBfaGl0VGVzdFJl
c3VsdERhdGEgPSBXZWJIaXRUZXN0UmVzdWx0RGF0YSgpOwogICAgIF9jb250ZW50UHJldmVudHNE
ZWZhdWx0ID0gTk87CiAgICAgCiAgICAgaWQgYW5pbWF0aW9uQ29udHJvbGxlciA9IFtfaW1tZWRp
YXRlQWN0aW9uUmVjb2duaXplciBhbmltYXRpb25Db250cm9sbGVyXTsKQEAgLTEyMyw3ICsxMjQs
NyBAQCAtICh2b2lkKV9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlCiAgICAgfQogCiAgICAgX3N0
YXRlID0gSW1tZWRpYXRlQWN0aW9uU3RhdGU6Ok5vbmU7Ci0gICAgX2hpdFRlc3RSZXN1bHREYXRh
ID0gV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSgpOworICAgIF9oaXRUZXN0UmVzdWx0RGF0YSA9IFdl
YkhpdFRlc3RSZXN1bHREYXRhKCk7CiAgICAgX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQgPSBOTzsK
ICAgICBfdHlwZSA9IGtXS0ltbWVkaWF0ZUFjdGlvbk5vbmU7CiAgICAgX2N1cnJlbnRBY3Rpb25D
b250ZXh0ID0gbmlsOwpAQCAtMTMyLDcgKzEzMyw3IEBAIC0gKHZvaWQpX2NsZWFySW1tZWRpYXRl
QWN0aW9uU3RhdGUKICAgICBfaGFzQWN0aXZlSW1tZWRpYXRlQWN0aW9uID0gTk87CiB9CiAKLS0g
KHZvaWQpZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6KGNvbnN0IFdlYkhpdFRlc3RS
ZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDooQk9PTClj
b250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRhdGEKKy0g
KHZvaWQpZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6KGNvbnN0IFdlYkhpdFRlc3RS
ZXN1bHREYXRhJiloaXRUZXN0UmVzdWx0IGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQ6KEJPT0wpY29u
dGVudFByZXZlbnRzRGVmYXVsdCB1c2VyRGF0YTooQVBJOjpPYmplY3QqKXVzZXJEYXRhCiB7CiAg
ICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnaXZlbiB1cCBvbiB0aGlzIGdlc3R1cmUgKGVpdGhlciBi
ZWNhdXNlIGl0IHdhcyBjYW5jZWxlZCBvciB0aGUKICAgICAvLyB3aWxsQmVnaW5BbmltYXRpb24g
dGltZW91dCBleHBpcmVkKSwgd2Ugc2hvdWxkbid0IGJ1aWxkIGEgbmV3IGFuaW1hdGlvbkNvbnRy
b2xsZXIgZm9yIGl0LgpAQCAtMjQ5LDExICsyNTAsMTEgQEAgLSAodm9pZClpbW1lZGlhdGVBY3Rp
b25SZWNvZ25pemVyRGlkQ29tcAogICAgIF9wYWdlLT5zZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9u
UHJvZ3Jlc3MoMSk7CiB9CiAKLS0gKFBhc3NSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4pX3dlYkhp
dFRlc3RSZXN1bHQKKy0gKFBhc3NSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0Pilfd2ViSGl0VGVz
dFJlc3VsdAogewotICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0Owor
ICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQ7CiAgICAgaWYgKF9z
dGF0ZSA9PSBJbW1lZGlhdGVBY3Rpb25TdGF0ZTo6UmVhZHkpCi0gICAgICAgIGhpdFRlc3RSZXN1
bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpjcmVhdGUoX2hpdFRlc3RSZXN1bHREYXRhKTsKKyAgICAg
ICAgaGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKF9oaXRUZXN0UmVz
dWx0RGF0YSk7CiAgICAgZWxzZQogICAgICAgICBoaXRUZXN0UmVzdWx0ID0gX3BhZ2UtPmxhc3RN
b3VzZU1vdmVIaXRUZXN0UmVzdWx0KCk7CiAKQEAgLTI2OSw3ICsyNzAsNyBAQCAtIChpZCA8TlNJ
bW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sCiAgICAgICAgIHJldHVybiBkdW1teUNvbnRy
b2xsZXIuZ2V0KCk7CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGhpdFRl
c3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3VsdF07CisgICAgUmVmUHRyPEFQSTo6SGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKIAog
ICAgIGlmICghaGl0VGVzdFJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTMyNyw5ICsz
MjgsOCBAQCAtICh2b2lkKV91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9
IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKLSAgICBpZCBjdXN0b21DbGllbnRBbmltYXRpb25D
b250cm9sbGVyID0gW193a1ZpZXcgX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JIaXRUZXN0UmVzdWx0OnRvQVBJKGhpdFRlc3RSZXN1bHQuZ2V0KCkpIHdpdGhUeXBlOl90eXBl
IHVzZXJEYXRhOnRvQVBJKF91c2VyRGF0YS5nZXQoKSldOwotCisgICAgUmVmUHRyPEFQSTo6SGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKKyAg
ICBpZCBjdXN0b21DbGllbnRBbmltYXRpb25Db250cm9sbGVyID0gKGlkKShfcGFnZS0+aW1tZWRp
YXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3Vs
dCwgX3R5cGUsIF91c2VyRGF0YSkpOwogICAgIGlmIChjdXN0b21DbGllbnRBbmltYXRpb25Db250
cm9sbGVyID09IFtOU051bGwgbnVsbF0pIHsKICAgICAgICAgW3NlbGYgX2NhbmNlbEltbWVkaWF0
ZUFjdGlvbl07CiAgICAgICAgIHJldHVybjsKQEAgLTM1Myw3ICszNTMsNyBAQCAtIChpZDxRTFBy
ZXZpZXdJdGVtPiltZW51SXRlbTooTlNNZW51SXRlCiAgICAgaWYgKCFfd2tWaWV3KQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1
bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3VsdF07CisgICAgUmVmUHRyPEFQSTo6SGl0VGVzdFJl
c3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKICAgICByZXR1
cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpoaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUxp
bmtVUkwoKV07CiB9CiAKQEAgLTM3Miw3ICszNzIsNyBAQCAtIChOU1JlY3QpbWVudUl0ZW06KE5T
TWVudUl0ZW0gKiltZW51SXRlCiAgICAgaWYgKCFfd2tWaWV3KQogICAgICAgICByZXR1cm4gTlNa
ZXJvUmVjdDsKIAotICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0g
W3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOworICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+
IGhpdFRlc3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3VsdF07CiAgICAgcmV0dXJuIFtf
d2tWaWV3IGNvbnZlcnRSZWN0OmhpdFRlc3RSZXN1bHQtPmVsZW1lbnRCb3VuZGluZ0JveCgpIHRv
VmlldzpuaWxdOwogfQogCkBAIC00NDUsNyArNDQ1LDcgQEAgLSAoaWQ8TlNJbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbAogCiAgICAgW19jdXJyZW50QWN0aW9uQ29udGV4dCBzZXRIaWdo
bGlnaHRGcmFtZTpbX3drVmlldy53aW5kb3cgY29udmVydFJlY3RUb1NjcmVlbjpbX3drVmlldyBj
b252ZXJ0UmVjdDpfaGl0VGVzdFJlc3VsdERhdGEuZWxlbWVudEJvdW5kaW5nQm94IHRvVmlldzpu
aWxdXV07CiAKLSAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtz
ZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKKyAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBo
aXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOwogICAgIE5TQXJyYXkgKm1l
bnVJdGVtcyA9IFtbZ2V0RERBY3Rpb25zTWFuYWdlckNsYXNzKCkgc2hhcmVkTWFuYWdlcl0gbWVu
dUl0ZW1zRm9yVGFyZ2V0VVJMOmhpdFRlc3RSZXN1bHQtPmFic29sdXRlTGlua1VSTCgpIGFjdGlv
bkNvbnRleHQ6X2N1cnJlbnRBY3Rpb25Db250ZXh0LmdldCgpXTsKIAogICAgIGlmIChtZW51SXRl
bXMuY291bnQgIT0gMSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUxLDcg
Kzc1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY28KICNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKIENvbnRleHRNZW51SXRlbSBXZWJQYWdlUHJveHk6OnBs
YXRmb3JtSW5pdGlhbGl6ZVNoYXJlTWVudUl0ZW0oY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0
YSYgY29udGV4dE1lbnVDb250ZXh0RGF0YSkKIHsKLSAgICBjb25zdCBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJiBoaXRUZXN0RGF0YSA9IGNvbnRleHRNZW51Q29udGV4dERhdGEud2ViSGl0VGVzdFJl
c3VsdERhdGEoKTsKKyAgICBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdERhdGEg
PSBjb250ZXh0TWVudUNvbnRleHREYXRhLndlYkhpdFRlc3RSZXN1bHREYXRhKCk7CiAKICAgICBV
UkwgYWJzb2x1dGVMaW5rVVJMOwogICAgIGlmICghaGl0VGVzdERhdGEuYWJzb2x1dGVMaW5rVVJM
LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTg1LDcg
Kzk4NSw2IEBACiAJCTUxQUNCQjgyMTI3QThCQUQwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVBy
b3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFD
QkI4MTEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eS5oICovOyB9OwogCQk1
MUFDQkJBMDEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0JCOUUxMjdBOEYy
QzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMuaCAqLzsgfTsKIAkJNTFBQ0JCQTEx
MjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI5RjEyN0E4RjJDMDBEMjAz
QjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSAqLzsgfTsKLQkJNTFBRDM1NzMxQUQyRjM5
NDAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFEMzU3MjFBRDJGMzc1MDA1N0IzOEUgLyogV2ViSGl0
VGVzdFJlc3VsdC5tbSAqLzsgfTsKIAkJNTFCMTVBODQxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmly
b25tZW50VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQjE1QTgyMTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGll
cy5jcHAgKi87IH07CiAJCTUxQjE1QTg1MTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFCMTVBODMxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggKi87IH07
CiAJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1RocmVhZENvcGllci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJBMjQ0NTE4
NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovOyB9OwpAQCAtMTA2
MCw4ICsxMDU5LDYgQEAKIAkJNzVBOEQyRTExODdERUMxQTAwQzM5QzlFIC8qIEFQSVNlc3Npb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkRF
MTg3REU4NzQwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmggKi87IH07CiAJCTc1QThEMkUyMTg3REVD
MUUwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkREMTg3REU4NzQwMEMzOUM5RSAvKiBBUElTZXNzaW9u
LmNwcCAqLzsgfTsKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNS
ZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3ODAxQzA5
OTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3ODAxQzA5NTE0MjI5MEM0MDBGQUY5QUYg
LyogV2ViSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07Ci0JCTc4MDFDMDlBMTQyMjkwQzQwMEZBRjlB
RiAvKiBXZWJIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3ODAxQzA5NjE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3Vs
dC5oICovOyB9OwogCQk3QzEzNUFBODE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1h
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi87IH07
CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFBNzE3M0Iw
QkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTM1QUFDMTczQjBDRkYwMDU4NkFFMiAv
KiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1h
dGlvbk1hYy5tbSAqLzsgfTsKQEAgLTExOTksNyArMTE5NiwxNiBAQAogCQk5MzkxRjJDQjEyMUI2
N0FEMDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MUYyODMxMjFCMzhGNTAwRUJGN0U4
IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCAqLzsgfTsKIAkJOTM5QUU3NjYxMzE2RTk5
QzAwQUUwNkE2IC8qIFdlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlBRTc2NTEzMTZFOTlDMDBBRTA2QTYgLyog
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLzsgfTsKIAkJOTM5RjQwMUMxOUZCMEJCQzAwMkIy
QjQyIC8qIFdLQWN0aW9uTWVudVR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzlGNDAxQjE5RkIwQkJDMDAyQjJCNDIgLyogV0tBY3Rpb25NZW51
VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk5M0E4OEIzMDFCQzZFOTk3MDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIyRTFCQzZF
OThGMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEubW0gKi87IH07CisJCTkzQTg4QjMz
MUJDNkU5Q0QwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBODhCMzExQkM2RTlDMDAwQUJBNUMy
IC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmggKi87IH07CisJCTkzQTg4QjM2MUJDNkVBRDUwMEFC
QTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIzNDFCQzZFQUJBMDBBQkE1QzIgLyogV2ViSGl0
VGVzdFJlc3VsdERhdGEuY3BwICovOyB9OworCQk5M0E4OEIzOTFCQzcwRjNGMDBBQkE1QzIgLyog
X1dLSGl0VGVzdFJlc3VsdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzQTg4QjM3MUJDNzBGMkUwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0Lm1t
ICovOyB9OworCQk5M0E4OEIzQjFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0E4OEIzQTFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmggKi87
IH07CisJCTkzQTg4QjNEMUJDNzFCODkwMEFCQTVDMiAvKiBfV0tJbW1lZGlhdGVBY3Rpb25UeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIz
QzFCQzcxQjg5MDBBQkE1QzIgLyogX1dLSW1tZWRpYXRlQWN0aW9uVHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzQkRFQjAxMTcxREQ3QUYw
MEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JERUIwMDE3MUREN0FGMDBCRkVFMUIgLyogV0tQ
YWdlTG9hZFR5cGVzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTkzRTZBNEVFMUJDNUREMzkwMEY4QTBFNyAvKiBfV0tIaXRUZXN0UmVz
dWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U2
QTRFRDFCQzVERDM5MDBGOEEwRTcgLyogX1dLSGl0VGVzdFJlc3VsdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzRTZBNEYzMUJDNUVGRUUwMEY4
QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0U2QTRGMDFCQzVFRkQ1MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJl
c3VsdC5oICovOyB9OworCQk5M0U2QTRGNDFCQzVFRkY3MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJl
c3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0U2QTRFRjFCQzVFRkQ1MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07CiAJ
CTlGNTRGODhGMTY0ODhFODcwMDdERjgxQSAvKiBDaGlsZFByb2Nlc3NNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjU0Rjg4RTE2NDg4RTg3MDA3
REY4MUEgLyogQ2hpbGRQcm9jZXNzTWFjLm1tICovOyB9OwogCQk5RjU0Rjg5NTE2NDhBRTBGMDA3
REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjU0Rjg5NDE2NDhBRTBFMDA3REY4MUEgLyogUGx1
Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gKi87IH07CiAJCTlGQjVGMzk0MTY5RTZBODAwMDJDMjVC
RiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUZCNUYzOTIxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFBy
aXZhdGVNYWMubW0gKi87IH07CkBAIC0zMTYzLDcgKzMxNjksNiBAQAogCQk1MUFDQkI5RjEyN0E4
RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbnRleHRNZW51UHJveHlNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUNDOTM0MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3
b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxQUNDOTM1MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJv
Y2Vzc01lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFBRDM1NzIx
QUQyRjM3NTAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJIaXRUZXN0UmVzdWx0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUIxNUE4MjEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRW52aXJvbm1lbnRVdGlsaXRpZXMuY3Bw
OyBwYXRoID0gdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxQjE1QTgzMTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudFV0aWxp
dGllcy5oOyBwYXRoID0gdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUJBMjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJl
YWRDb3BpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI1MSw4ICszMjU2LDYgQEAKIAkJNzVB
OEQyREUxODdERTg3NDAwQzM5QzlFIC8qIEFQSVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQVBJU2Vzc2lvbi5oOyBwYXRoID0gVUlQcm9jZXNzL0FQSS9BUElTZXNz
aW9uLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNzYyQjc0ODExMjBCQkEwMTAw
ODE5MzM5IC8qIEZvbnRTbW9vdGhpbmdMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb250U21vb3RoaW5nTGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNSZWZQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4MDFDMDk1MTQyMjkwQzQwMEZBRjlB
RiAvKiBXZWJIaXRUZXN0UmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYkhpdFRlc3RSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3ODAxQzA5NjE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJIaXRUZXN0UmVzdWx0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDMEJCOUE4MThEQ0RFODkwMDA2QzA4NiAvKiBXZWJDb250ZW50
LWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9ICJXZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzBCQjlBOTE4RENERjVBMDAwNkMwODYg
LyogTmV0d29yay1pT1MuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSAiTmV0d29yay1pT1MuZW50aXRs
ZW1lbnRzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxMzVBQTYxNzNCMEJDQTAw
NTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zMzk4LDcgKzM0MDEsMTYgQEAKIAkJOTM5MUYyODQxMjFCMzhGNTAwRUJG
N0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5MzlBRTc2NTEzMTZFOTlDMDBBRTA2QTYgLyogV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkNvcmVBcmd1bWVudENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzOUY0MDFCMTlGQjBCQkMwMDJCMkI0MiAvKiBXS0FjdGlvbk1lbnVUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FjdGlvbk1lbnVUeXBlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5M0E4OEIyRTFCQzZFOThGMDBBQkE1QzIgLyogV2ViSGl0VGVz
dFJlc3VsdERhdGEubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJIaXRUZXN0UmVzdWx0RGF0YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNB
ODhCMzExQkM2RTlDMDAwQUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhpdFRlc3RSZXN1bHREYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTg4QjM0MUJDNkVBQkEwMEFCQTVDMiAvKiBXZWJIaXRU
ZXN0UmVzdWx0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkz
QTg4QjM3MUJDNzBGMkUwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLSGl0VGVzdFJlc3VsdC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBODhCM0ExQkM3MTBEOTAwQUJBNUMyIC8qIF9XS0hp
dFRlc3RSZXN1bHRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBf
V0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTNBODhCM0MxQkM3MUI4OTAwQUJBNUMyIC8qIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLSW1tZWRpYXRlQWN0aW9uVHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0JERUIwMDE3MUREN0FGMDBCRkVFMUIgLyog
V0tQYWdlTG9hZFR5cGVzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS1BhZ2VMb2FkVHlwZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTkzRTZBNEVEMUJDNUREMzkwMEY4QTBFNyAvKiBfV0tIaXRUZXN0UmVzdWx0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0hpdFRlc3RSZXN1bHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNkE0RUYxQkM1RUZENTAwRjhBMEU3IC8qIEFQSUhpdFRlc3RS
ZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJSGl0VGVz
dFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTZBNEYwMUJDNUVG
RDUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSUhpdFRlc3RSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8qIENoaWxkUHJvY2Vzc01hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENoaWxkUHJvY2Vzc01hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY1NEY4OTQxNjQ4QUUwRTAwN0RGODFBIC8qIFBs
dWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlGQjVGMzkyMTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tDb250ZXh0UHJp
dmF0ZU1hYy5tbTsgcGF0aCA9IG1hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDc3OCw4ICs0NzkwLDggQEAKIAkJCQkxQTkwQzFFRDEyNjRG
RDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLywKIAkJCQlCQzBFNjA3MjEyRDZCQzIw
MDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAgKi8sCiAJCQkJQkMwRTYwNzEx
MkQ2QkMyMDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCAqLywKLQkJCQk3ODAx
QzA5NTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5jcHAgKi8sCi0JCQkJNzgw
MUMwOTYxNDIyOTBDNDAwRkFGOUFGIC8qIFdlYkhpdFRlc3RSZXN1bHQuaCAqLywKKwkJCQk5M0E4
OEIzNDFCQzZFQUJBMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEuY3BwICovLAorCQkJ
CTkzQTg4QjMxMUJDNkU5QzAwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5oICovLAog
CQkJCUJDQ0Y2QUJBMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5jcHAgKi8sCiAJCQkJQkND
RjZBQkIxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdlLmggKi8sCiAJCQkJQzAzMzdERDIxMjdB
MkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQuY3BwICovLApAQCAtNTQzNyw2ICs1NDQ5
LDEwIEBACiAJCQkJMzczRDEyMjExOEE0NzMwMTAwNjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxlLmgg
Ki8sCiAJCQkJMzczRDEyMjAxOEE0NzMwMTAwNjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxlLm1tICov
LAogCQkJCTM3M0QxMjI2MThBNDczRjYwMDY2RDlDQyAvKiBfV0tGcmFtZUhhbmRsZUludGVybmFs
LmggKi8sCisJCQkJOTNFNkE0RUQxQkM1REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQu
aCAqLywKKwkJCQk5M0E4OEIzNzFCQzcwRjJFMDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdC5t
bSAqLywKKwkJCQk5M0E4OEIzQTFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdElu
dGVybmFsLmggKi8sCisJCQkJOTNBODhCM0MxQkM3MUI4OTAwQUJBNUMyIC8qIF9XS0ltbWVkaWF0
ZUFjdGlvblR5cGUuaCAqLywKIAkJCQlBMTE4QTlGMTE5MDhCOEVBMDBGN0M5MkIgLyogX1dLTlNG
aWxlTWFuYWdlckV4dHJhcy5oICovLAogCQkJCUExMThBOUYwMTkwOEI4RUEwMEY3QzkyQiAvKiBf
V0tOU0ZpbGVNYW5hZ2VyRXh0cmFzLm1tICovLAogCQkJCTFBOUUzMjhCMTgyMTY1QTkwMEY1RDA0
QyAvKiBfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UuaCAqLywKQEAgLTY1MTIsNyArNjUyOCw3IEBA
CiAJCQkJQkNFMjMyNjIxMjJDNkNGMzAwRDVDMzVBIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc01h
Yy5tbSAqLywKIAkJCQlCQzExMUI1QjExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5
LmggKi8sCiAJCQkJQkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5t
bSAqLywKLQkJCQk1MUFEMzU3MjFBRDJGMzc1MDA1N0IzOEUgLyogV2ViSGl0VGVzdFJlc3VsdC5t
bSAqLywKKwkJCQk5M0E4OEIyRTFCQzZFOThGMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERh
dGEubW0gKi8sCiAJCQkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBs
ZXIubWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC03MDM4LDYgKzcwNTQsOCBA
QAogCQkJCTFBQzEzMzcwMTg1NjZDN0MwMEYzRUMwNSAvKiBBUElGcmFtZUhhbmRsZS5oICovLAog
CQkJCTFBQzEzMzczMTg1N0MyMUUwMEYzRUMwNSAvKiBBUElHZW9tZXRyeS5jcHAgKi8sCiAJCQkJ
MEYxNzRBQTIxNDJBNENCNjAwMzkyNTBGIC8qIEFQSUdlb21ldHJ5LmggKi8sCisJCQkJOTNFNkE0
RUYxQkM1RUZENTAwRjhBMEU3IC8qIEFQSUhpdFRlc3RSZXN1bHQuY3BwICovLAorCQkJCTkzRTZB
NEYwMUJDNUVGRDUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmggKi8sCiAJCQkJQkMzM0RE
NjcxMjM4NDY0NjAwMzYwRjNGIC8qIEFQSU51bWJlci5oICovLAogCQkJCUI2MzQwM0Y4MTQ5MTBE
NTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovLAogCQkJCUJDRjA0QzhDMTFGRjlCN0QwMEY4
NkE1OCAvKiBBUElPYmplY3QuaCAqLywKQEAgLTc3MTIsNiArNzczMCw3IEBACiAJCQkJMUEyMzI5
MDMxNjJDODY3MzAwRDgyRjdBIC8qIE1lc3NhZ2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTIzMjhGRjE2MkM4NjZBMDBEODJGN0EgLyogTWVzc2FnZUVuY29kZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTkzQTg4QjNCMUJDNzEwRDkwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVz
dWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0VFRDEyMTYxQTUzRDYwMEFFQjRG
NSAvKiBNZXNzYWdlUmVjZWl2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0VFRDBGMTYxQTUz
NTQwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXJNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
NUFCNjJFMUE2OUQ2RkIwMDE0QTlDQiAvKiBNZXNzYWdlUmVjb3JkZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtNzgyOCw2ICs3ODQ3LDcgQEAKIAkJCQlFMUI3ODQ3MTE2M0YyNDY5MDAwN0I2OTIgLyog
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzEzMzgwMTg1
OTBBRTQwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFDMTMzODYxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTZBNEYzMUJDNUVGRUUwMEY4QTBFNyAvKiBBUElI
aXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDc5MDE4N0IzQjNBMDA0Mzc4
NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTk0N0E4MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDc5QjE4N0IzQjYwMDA0Mzc4NTcgLyogUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODczLDYg
Kzc4OTMsNyBAQAogCQkJCUNFMUEwQkQ3MUE0OEU2QzYwMDU0RUY3NCAvKiBUZXh0SW5wdXRTUEku
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUYyNjM5MTQ2ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGMDVEODcxNDY4
ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTkzQTg4QjNEMUJDNzFCODkwMEFCQTVDMiAvKiBfV0tJbW1lZGlhdGVB
Y3Rpb25UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFNDM2NjE4QjZDMDgxMDA5QzdBNDgg
LyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VFNEFFMkIxQTVEQ0Y0MzAwMDJG
NDlCIC8qIFVJS2l0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVFNzczMDE4NDAxNTgwMDAw
NzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNzk2MSw3ICs3
OTgyLDYgQEAKIAkJCQlCQzBFNjE4MzEyRDZDQjFEMDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwRTYwNzMxMkQ2QkMy
MDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMUJFMUYyMTJENTREQkQwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3ODAxQzA5QTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJl
c3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExQjI0QUIxMzJFMDk3MjAwMDY1QTBDIC8qIFdl
Ykljb25EYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4MzQ1OTMxMzQ1MzJFOTAwOTJC
Njk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFEMDJG
NkExMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZU1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgwMDcsNiArODAyNyw3IEBACiAJCQkJQkM4NTdGODUxMkI4MkQwQjAwRURFQjJF
IC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFE
RkVBNDEyQjMxRjg3MDA1REY3MzAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEOEYxMEY0MzdBMDAwNThDMTVBIC8qIFdlYlBhZ2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTkzQTg4QjMzMUJDNkU5Q0QwMEFCQTVDMiAvKiBXZWJIaXRU
ZXN0UmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM3MkRCMjkxQTY3NTYyODAwQzY5
N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM3QjYyMDYxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM3QjYyNTIxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cERhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtODI2MCw2ICs4MjgxLDcgQEAKIAkJCQlCQzdCNjMzNzEyQTQ1QUJB
MDBEMTc0QTQgLyogV0tQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOUVBMzBEMUE5
NkNCNTkwMDJEMjgwNyAvKiBXS1BhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFCOEExRUMxODQwMDgwOTAwRTlBRTY5IC8qIFdLUGFnZUxvYWRlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNkE0RUUxQkM1REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRl
c3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAv
KiBXS1BhZ2VMb2FkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQkRFQjAxMTcxREQ3QUYw
MEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQky
RDczMDM3OTFBN0MyQjc1MDBGOEY0ODcgLyogV0tQYWdlTmF2aWdhdGlvbkNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MzM5LDYgKzkzNjEsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJ
CQkJOTNBODhCMzkxQkM3MEYzRjAwQUJBNUMyIC8qIF9XS0hpdFRlc3RSZXN1bHQubW0gaW4gU291
cmNlcyAqLywKIAkJCQkzN0E1RTAxMzE4QkJGOTM3MDAwQTA4MUUgLyogX1dLQWN0aXZhdGVkRWxl
bWVudEluZm8ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMUE0RkU1QjE4RENFOUZBMDBCNUVBOEEg
LyogX1dLRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzNzlBODczOTE4QkJGRTBGMDA1
ODhBRjIgLyogX1dLRWxlbWVudEFjdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAtOTgwMCw4ICs5
ODIzLDYgQEAKIAkJCQlCQzBFNjE4MjEyRDZDQjFEMDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25N
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwRTYw
NzQxMkQ2QkMyMDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkMxQkUxRjMxMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzgwMUMwOTkxNDIyOTBDNDAwRkFGOUFGIC8q
IFdlYkhpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFBRDM1NzMxQUQyRjM5
NDAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTFC
MjRBQTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxODM0NTkyMTM0NTMyRTkwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMDJGNjQxMzJFQzVCOTAwQkVBQTk2IC8qIFdlYklj
b25EYXRhYmFzZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5MTksNiAr
OTk0MCw3IEBACiAJCQkJQkNBMEVGODAxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYlVuZG9TdGVwLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBQUYwOEFEMTkyNjkzNjcwMEI2MzkwQyAvKiBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjA4QjcxOTI2OUU2
RDAwQjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5M0U2QTRGNDFCQzVFRkY3MDBGOEEwRTcgLyogQVBJSGl0VGVz
dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFGMDhBMTE5MjY4MUQxMDBCNjM5MEMg
LyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJFMUI0MjA0NjYw
MEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05OTYy
LDYgKzk5ODQsNyBAQAogCQkJCUVEQ0E3MUI3MTI4RERBOEMwMDIwMUIyNiAvKiBXS0J1bmRsZVBh
Z2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjBDNTdBMTI0MEE1NDYwMDhDNUUy
OSAvKiBXS0J1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTRERjlF
MTIwQjYzNUYwMDgyNkMwQyAvKiBXS0J1bmRsZVNjcmlwdFdvcmxkLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTkzQTg4QjM2MUJDNkVBRDUwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGNTEyNEZGMDI3MDA2OEYyMEEgLyogV0tDZXJ0
aWZpY2F0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MjgxMjRGRjA0MDAwNjhG
MjBBIC8qIFdLQ2VydGlmaWNhdGVJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMjg0
RDYxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAt
OTk5OSw2ICsxMDAyMiw3IEBACiAJCQkJQkNEMDEzOUMxMTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJh
bWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0RDY2NEIxOEEzMDMwRTAwRDgyRTIxIC8qIFdL
RnJhbWVJbmZvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQzQTY1RTYxQTdDM0FBNzAwQ0FDNjM3
IC8qIFdLRnJhbWVJbmZvUmVmLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzQTg4QjMwMUJDNkU5
OTcwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQjlGNkE2MTEyM0REMEQwMEExMzdFMCAvKiBXS0ZyYW1lUG9saWN5TGlzdGVuZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFBRUEyMzAxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJv
YXJkQWNjZXNzV2F0Y2hlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQ0E4NUM4MTMyQUJBNEUw
MEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCShyZXZp
c2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJBUElIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkhpdFRlc3RS
ZXN1bHQuaCIKIAogT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7CiBPQkpDX0NMQVNTIE5TT2JqZWN0
OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b3h5LmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5j
bHVkZSA8bWVtb3J5PgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViSGl0VGVz
dFJlc3VsdC5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiBPQkpDX0NMQVNTIENBTGF5ZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMTkw
ODA3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogLy8gRklYTUU6IEV2ZW50dWFsbHkgdGhp
cyBzaG91bGQgbW92ZSB0byBXZWJDb3JlLgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVk
ZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIKIAog
T0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7CiBPQkpDX0NMQVNTIFBERlNlbGVjdGlvbjsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbi5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
IAogI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNp
bmNsdWRlICJBUElIaXRUZXN0UmVzdWx0LmgiCiAjZW5kaWYKIAogI2lmIFBMVUdJTl9BUkNISVRF
Q1RVUkUoWDExKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgot
I2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0
RGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEu
aD4KQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBzaG93Q29udGV4
dE1lbnVBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAKLSAgICBTdHJpbmcgbG9v
a3VwVGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdlYkhpdFRlc3RS
ZXN1bHQ6OkRhdGEmLCBQREZTZWxlY3Rpb24gKiosIE5TRGljdGlvbmFyeSAqKikgY29uc3Q7Cisg
ICAgU3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
LCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFBERlNlbGVjdGlvbiAqKiwgTlNEaWN0aW9uYXJ5ICoq
KSBjb25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlld1JlY3RGb3JTZWxlY3Rpb24oUERG
U2VsZWN0aW9uICopIGNvbnN0OwogCiAgICAgQ0dGbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0JKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODk4LDcgKzE4OTgs
NyBAQCBzdGF0aWMgTlNQb2ludCBwb2ludEluTGF5b3V0U3BhY2VGb3JQb2luCiAgICAgcmV0dXJu
IE5TUG9pbnRGcm9tQ0dQb2ludChuZXdQb2ludCk7CiB9CiAKLVN0cmluZyBQREZQbHVnaW46Omxv
b2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5W
aWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGRhdGEsIFBERlNlbGVjdGlv
biAqKnNlbGVjdGlvblB0ciwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucykgY29uc3QKK1N0cmluZyBQ
REZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBQ
REZTZWxlY3Rpb24gKipzZWxlY3Rpb25QdHIsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0
CiB7CiAgICAgUERGU2VsZWN0aW9uKiYgc2VsZWN0aW9uID0gKnNlbGVjdGlvblB0cjsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNs
dWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5h
Z2VyLmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbmNsdWRlICJXZWJJ
bWFnZS5oIgogI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJX
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIgpAQCAtNjAyLDcgKzYwMyw3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWwKICAgICBtX3BhZ2UtPmluamVjdGVkQnVu
ZGxlVUlDbGllbnQoKS5tb3VzZURpZE1vdmVPdmVyRWxlbWVudChtX3BhZ2UsIGhpdFRlc3RSZXN1
bHQsIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVyRmxhZ3MpLCB1c2Vy
RGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhIHdlYkhpdFRlc3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOworICAgIFdlYkhp
dFRlc3RSZXN1bHREYXRhIHdlYkhpdFRlc3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOwogICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpNb3VzZURpZE1vdmVPdmVyRWxl
bWVudCh3ZWJIaXRUZXN0UmVzdWx0RGF0YSwgbW9kaWZpZXJGbGFncywgVXNlckRhdGEoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQo
KSkuZ2V0KCkpKSk7CiB9CiAKQEAgLTYxNCw3ICs2MTUsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6ZGlkQmVnaW5UcmFja2luZ1BvCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50
KCkuZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKG1fcGFnZSwgbW91c2VE
b3duUG9zaXRpb24sIGhpdFRlc3RSZXN1bHQsIHVzZXJEYXRhKTsKICAgICAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIHdlYkhpdFRlc3RS
ZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOworICAgIFdlYkhpdFRlc3RSZXN1bHREYXRhIHdlYkhp
dFRlc3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOwogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3Mo
bW91c2VEb3duUG9zaXRpb24sIHdlYkhpdFRlc3RSZXN1bHREYXRhLCBVc2VyRGF0YShXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgp
KS5nZXQoKSkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgIkFQ
SUhpdFRlc3RSZXN1bHQuaCIKICNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQg
IkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgpAQCAtNDQsNyArNDUs
NiBAQAogI2ltcG9ydCAiV2ViRXZlbnQuaCIKICNpbXBvcnQgIldlYkV2ZW50Q29udmVyc2lvbi5o
IgogI2ltcG9ydCAiV2ViRnJhbWUuaCIKLSNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHQuaCIKICNp
bXBvcnQgIldlYkltYWdlLmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3IuaCIKICNpbXBvcnQgIldl
YlBhZ2VPdmVybGF5LmgiCkBAIC0xMDc1LDcgKzEwNzUsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1JbW1lZGlhdGVBY3Rpb25IaXRUCiAKICAgICBNYWluRnJhbWUmIG1haW5GcmFtZSA9IGNvcmVQ
YWdlKCktPm1haW5GcmFtZSgpOwogICAgIGlmICghbWFpbkZyYW1lLnZpZXcoKSB8fCAhbWFpbkZy
YW1lLnZpZXcoKS0+cmVuZGVyVmlldygpKSB7Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YSgpLCBmYWxzZSwgVXNlckRhdGEoKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KFdlYkhpdFRlc3RS
ZXN1bHREYXRhKCksIGZhbHNlLCBVc2VyRGF0YSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTEwODksNyArMTA4OSw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFj
dGlvbkhpdFQKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uSGl0VGVz
dFByZXZlbnRzRGVmYXVsdCA9IGVsZW1lbnQtPmRpc3BhdGNoTW91c2VGb3JjZVdpbGxCZWdpbigp
OwogCi0gICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBpbW1lZGlhdGVBY3Rpb25SZXN1bHQoaGl0
VGVzdFJlc3VsdCk7CisgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEgaW1tZWRpYXRlQWN0aW9uUmVz
dWx0KGhpdFRlc3RSZXN1bHQpOwogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9
IGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262796</attachid>
            <date>2015-10-09 14:56:18 -0700</date>
            <delta_ts>2015-10-09 15:23:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-5.txt</filename>
            <type>text/plain</type>
            <size>146522</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDgxOSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNSBAQAorMjAxNS0xMC0wOSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgV0tXZWJWaWV3IG5lZWRzIFNQSSB0
byBjdXN0b21pemUgaW1tZWRpYXRlIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTkzOQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmct
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwMDE2ODQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBicmVha3MgV2ViSGl0VGVzdFJl
c3VsdCBpbnRvIHR3byBmaWxlcy4gV2ViSGlUZXN0UmVzdWx0RGF0YSAKKyAgICAgICAgY29udGlu
dWVzIHRvIGxpdmUgaW4gdGhlIFdlYktpdCBuYW1lc3BhY2UgYW5kIGNvbnRhaW5zIHRoZSBvbGQg
CisgICAgICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgc3RydWN0LiBUaGUgcmVzdCBvZiBXZWJI
aXRUZXN0UmVzdWx0IGlzIG5vdyAKKyAgICAgICAgQVBJOjpIaXRUZXN0UmVzdWx0LiBUaGUgcGF0
Y2ggYWxzbyBhZGRzIF9XS0hpdFRlc3RSZXN1bHQgYXMgT2JqLUMgQVBJIHRvIHdyYXAgCisgICAg
ICAgIEFQSTo6SGl0VGVzdFJlc3VsdC4KKworICAgICAgICBBdHRlbXB0IHRvIGtlZXAgb3RoZXIg
cG9ydHMgaGFwcHkgd2l0aCBuZXcgZmlsZXMuCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisK
KyAgICAgICAgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0IG5vIGxvbmdlciBjb250YWlucyB0aGUg
RGF0YSBzdHJ1Y3QgYW5kIGlzIG5vdyBjYWxsZWQgCisgICAgICAgIEFQSTo6SGl0VGVzdFJlc3Vs
dC4KKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3BwOiBDb3BpZWQgZnJv
bSBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5jcHAuCisgICAgICAgIChBUEk6OkhpdFRlc3RSZXN1
bHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjp+RGF0
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OmVu
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRh
dGE6OnBsYXRmb3JtRW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVz
dFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1EZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjplbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3Jk
aW5hdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQu
aDogQ29waWVkIGZyb20gU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuaC4KKyAgICAgICAgKEFQSTo6
SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCk6CisgICAgICAgIChBUEk6OkhpdFRlc3RS
ZXN1bHQ6OmFic29sdXRlUERGVVJMKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6YWJz
b2x1dGVMaW5rVVJMKToKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVNZWRp
YVVSTCk6CisgICAgICAgIChBUEk6OkhpdFRlc3RSZXN1bHQ6OmxpbmtMYWJlbCk6CisgICAgICAg
IChBUEk6OkhpdFRlc3RSZXN1bHQ6OmxpbmtUaXRsZSk6CisgICAgICAgIChBUEk6OkhpdFRlc3RS
ZXN1bHQ6Omxvb2t1cFRleHQpOgorICAgICAgICAoQVBJOjpIaXRUZXN0UmVzdWx0Ojppc0NvbnRl
bnRFZGl0YWJsZSk6CisgICAgICAgIChBUEk6OkhpdFRlc3RSZXN1bHQ6OmlzRG93bmxvYWRhYmxl
TWVkaWEpOgorICAgICAgICAoQVBJOjpIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVMaW5r
VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6YWJzb2x1
dGVNZWRpYVVSTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6
OmxpbmtMYWJlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6
OmxpbmtUaXRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6
Omxvb2t1cFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
Ojppc0NvbnRlbnRFZGl0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RSZXN1bHQ6OmlzRG93bmxvYWRhYmxlTWVkaWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0OjpXZWJIaXRUZXN0UmVzdWx0KTogRGVsZXRlZC4KKworICAgICAg
ICBUaGlzIGlzIGEgbmV3IG9iai1jIG9iamVjdCB0aGF0IHdlIGNhbiB1c2UgZm9yIHRoZSBtb2Rl
cm4gaW1tZWRpYXRlIGFjdGlvbiAKKyAgICAgICAgQVBJLgorICAgICAgICAqIFNoYXJlZC9BUEkv
Q29jb2EvX1dLSGl0VGVzdFJlc3VsdC5oOiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvQVBJL0Nv
Y29hL19XS0hpdFRlc3RSZXN1bHQubW06IEFkZGVkLgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVz
dWx0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBhYnNvbHV0ZUltYWdl
VVJMXSk6CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgYWJzb2x1dGVQREZVUkxdKToKKyAg
ICAgICAgKC1bX1dLSGl0VGVzdFJlc3VsdCBhYnNvbHV0ZUxpbmtVUkxdKToKKyAgICAgICAgKC1b
X1dLSGl0VGVzdFJlc3VsdCBhYnNvbHV0ZU1lZGlhVVJMXSk6CisgICAgICAgICgtW19XS0hpdFRl
c3RSZXN1bHQgbGlua0xhYmVsXSk6CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgbGlua1Rp
dGxlXSk6CisgICAgICAgICgtW19XS0hpdFRlc3RSZXN1bHQgbG9va3VwVGV4dF0pOgorICAgICAg
ICAoLVtfV0tIaXRUZXN0UmVzdWx0IGlzQ29udGVudEVkaXRhYmxlXSk6CisgICAgICAgICgtW19X
S0hpdFRlc3RSZXN1bHQgZWxlbWVudEJvdW5kaW5nQm94XSk6CisgICAgICAgICgtW19XS0hpdFRl
c3RSZXN1bHQgY29weVdpdGhab25lOl0pOgorICAgICAgICAoLVtfV0tIaXRUZXN0UmVzdWx0IF9h
cGlPYmplY3RdKToKKworICAgICAgICBfV0tIaXRUZXN0UmVzdWx0IHdyYXBzIEFQSTo6SGl0VGVz
dFJlc3VsdC4KKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL19XS0hpdFRlc3RSZXN1bHRJbnRl
cm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKEFQSTo6d3JhcHBlcik6CisgICAgICAgICogU2hhcmVk
L0NvY29hL0FQSU9iamVjdC5tbToKKyAgICAgICAgKEFQSTo6T2JqZWN0OjpuZXdPYmplY3QpOgor
CisgICAgICAgIFNpbmNlIHdlIHdhbnQgdG8gdXNlIHRoZSBzYW1lIGVudW0gbmFtZSBmb3IgdGhl
IG5ldyBlbnVtLCB1c2UgYSAjZGVmaW5lIGluc3RlYWQgb2YgYSB0eXBlZGVmIGluIHRoZSBvbGQg
QyBTUEkuIFRoaXMgc2hvdWxkIGtlZXAgb2xkIGNsaWVudHMgd29ya2luZyBpbiB0aGUgbWVhbnRp
bWUuCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLSW1tZWRpYXRlQWN0aW9uVHlwZXMuaDoKKwor
ICAgICAgICBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIGlzIG5vdyBXZWJIaXRUZXN0UmVzdWx0RGF0
YS4KKyAgICAgICAgKiBTaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5oOgorICAgICAgICAo
V2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjp3ZWJIaXRUZXN0UmVzdWx0RGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dERhdGE6OnNlbGVjdGVkVGV4dCk6CisK
KyAgICAgICAgUmVtb3ZlIFdlYkhpdFRlc3RSZXN1bHQsIGFuZCBhZGQgV2ViSGl0VGVzdFJlc3Vs
dERhdGEgZm9yIHRoZSBEYXRhIHN0cnVjdC4KKyAgICAgICAgKiBTaGFyZWQvV2ViSGl0VGVzdFJl
c3VsdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6OldlYkhpdFRlc3RSZXN1
bHREYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6On5XZWJIaXRU
ZXN0UmVzdWx0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhOjpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6OnBsYXRmb3JtRW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6OnBsYXRmb3JtRGVjb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGE6OmVsZW1lbnRCb3VuZGluZ0Jv
eEluV2luZG93Q29vcmRpbmF0ZXMpOgorICAgICAgICAqIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHQubW06
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0RGF0YS5tbTog
Q29waWVkIGZyb20gU2hhcmVkL21hYy9XZWJIaXRUZXN0UmVzdWx0Lm1tLgorICAgICAgICAoV2Vi
S2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YTo6cGxhdGZvcm1FbmNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YTo6cGxhdGZvcm1EZWNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybUVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKTog
RGVsZXRlZC4KKworICAgICAgICBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIGlzIG5vdyBXZWJIaXRU
ZXN0UmVzdWx0RGF0YS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRleHRNZW51Q2xp
ZW50Lmg6CisgICAgICAgIChBUEk6OkNvbnRleHRNZW51Q2xpZW50Ojp+Q29udGV4dE1lbnVDbGll
bnQpOgorICAgICAgICAoQVBJOjpDb250ZXh0TWVudUNsaWVudDo6Z2V0Q29udGV4dE1lbnVGcm9t
UHJvcG9zZWRNZW51KToKKyAgICAgICAgKEFQSTo6Q29udGV4dE1lbnVDbGllbnQ6OmN1c3RvbUNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAgKEFQSTo6Q29udGV4dE1lbnVDbGllbnQ6
OmNvbnRleHRNZW51RGlzbWlzc2VkKToKKyAgICAgICAgKEFQSTo6Q29udGV4dE1lbnVDbGllbnQ6
OnNob3dDb250ZXh0TWVudSk6CisKKyAgICAgICAgV2ViSGl0VGVzdFJlc3VsdCBpcyBub3cgV2Vi
SGl0VGVzdFJlc3VsdAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaDoKKyAg
ICAgICAgKEFQSTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoQVBJ
OjpVSUNsaWVudDo6c2V0U3RhdHVzVGV4dCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50Ojptb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50Ojp1bmF2YWlsYWJs
ZVBsdWdpbkJ1dHRvbkNsaWNrZWQpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6cGlubmVkU3Rh
dGVEaWRDaGFuZ2UpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6ZGlkQmVnaW5UcmFja2luZ1Bv
dGVudGlhbExvbmdNb3VzZVByZXNzKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmRpZFJlY29n
bml6ZUxvbmdNb3VzZVByZXNzKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmRpZENhbmNlbFRy
YWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0FQSUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0
LmNwcDoKKyAgICAgICAgKFdLSGl0VGVzdFJlc3VsdEdldFR5cGVJRCk6CisgICAgICAgIChXS0hp
dFRlc3RSZXN1bHRDb3B5QWJzb2x1dGVJbWFnZVVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVDbGllbnQp
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKworICAgICAgICBOZXcgV0tXZWJW
aWV3IFNQSSBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1
bHQKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKworICAgICAgICBBdHRlbXB0cyB0byBr
ZWVwIG90aGVyIHBvcnRzIGhhcHB5IHdpdGggdGhlIHJlLW5hbWUuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvV2ViQWNjZXNzaWJpbGl0eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUp
OgorICAgICAgICAoc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyk6CisgICAgICAgICh3ZWJraXRIaXRU
ZXN0UmVzdWx0Q29tcGFyZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0
VGVzdFJlc3VsdFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRV
SUNsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQpOgorICAgICAgICAoY29udGV4dE1l
bnVEaXNtaXNzZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld1BvcHVsYXRlQ29udGV4dE1lbnUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisK
KyAgICAgICAgUmUtbmFtZSwgYW5kIGp1c3QgdXNlIHVpbnQzMl90IGZvciB0aGUgb2xkIFNQSS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmll
dyBfZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6Y29udGVudFByZXZlbnRzRGVmYXVs
dDp1c2VyRGF0YTpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9zZXREaWRNb3ZlU3dpcGVTbmFwc2hv
dENhbGxiYWNrOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OndpdGhUeXBlOnVzZXJEYXRhOl0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6CisKKyAgICAgICAgUGFnZUNs
aWVudCB3aWxsIGZpZ3VyZSBvdXQgd2hldGhlciB0byBjYWxsIGludG8gV0tXZWJWaWV3IG9yIFdL
VmlldyBmb3IgdGhpcyAKKyAgICAgICAgU1BJLgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xp
ZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZv
ckhpdFRlc3RSZXN1bHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KToK
KworICAgICAgICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaXMgbm93IFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdERhdGEuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbjoKKworICAgICAgICBXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgY2FsbHMg
dGhyb3VnaCB0byBXZWJQYWdlUHJveHkgd2hpY2ggY2FsbHMgdG8gCisgICAgICAgIFBhZ2VDbGll
bnQsIHdoaWNoIGZpZ3VyZXMgb3V0IHdoaWNoIEFQSSB0byBjYWxsLiBBbHNvIGNhY2hlIHRoZSB0
eXBlIGFzIGEgCisgICAgICAgIHVpbnQzMl90CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS0lt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tJbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyIF91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtXSk6CisKKyAgICAgICAgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YSBpcyBub3cgV2ViSGl0VGVzdFJlc3VsdERhdGEuCisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplU2hhcmVNZW51SXRlbSk6CisKKyAgICAgICAgTmV3
IGZpbGVzIQorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwor
ICAgICAgICBEZWFsIHdpdGggdGhlICNkZWZpbmUgc2l0dWF0aW9uIGZvciB0aGUgZW51bS4KKyAg
ICAgICAgKiBXZWJLaXQyUHJlZml4Lmg6CisKKyAgICAgICAgTmV3IG5hbWVzIGZvciB0aGluZ3Mu
IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgLT4gV2ViSGl0VGVzdFJlc3VsdERhdGEKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0Ojpwb2ludEluTGF5
b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46Omxvb2t1cFRleHRBdExvY2F0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91
c2VQcmVzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVz
dEF0TG9jYXRpb24pOgorCiAyMDE1LTEwLTA5ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHR3byB1bnVzZWQgV0tGcmFtZSBmdW5jdGlvbnMK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHNl
dChXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvV2ViRXZlbnQuY3BwCiAgICAgU2hhcmVkL1dl
YkV2ZW50Q29udmVyc2lvbi5jcHAKICAgICBTaGFyZWQvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHAKLSAgICBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5jcHAKKyAgICBTaGFyZWQvV2ViSGl0VGVz
dFJlc3VsdERhdGEuY3BwCiAgICAgU2hhcmVkL1dlYkltYWdlLmNwcAogICAgIFNoYXJlZC9XZWJL
ZXlib2FyZEV2ZW50LmNwcAogICAgIFNoYXJlZC9XZWJLaXQySW5pdGlhbGl6ZS5jcHAKQEAgLTI3
NCw2ICsyNzQsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL0FQSS9BUElFcnJv
ci5jcHAKICAgICBTaGFyZWQvQVBJL0FQSUZyYW1lSGFuZGxlLmNwcAogICAgIFNoYXJlZC9BUEkv
QVBJR2VvbWV0cnkuY3BwCisgICAgU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmNwcAogICAg
IFNoYXJlZC9BUEkvQVBJT2JqZWN0LmNwcAogICAgIFNoYXJlZC9BUEkvQVBJUGFnZUdyb3VwSGFu
ZGxlLmNwcAogICAgIFNoYXJlZC9BUEkvQVBJUGFnZUhhbmRsZS5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDJQcmVmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyUHJlZml4LmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDJQ
cmVmaXguaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQAogCiAjZGVmaW5lIEVOQUJM
RV9TSEFSRUFCTEVfUkVTT1VSQ0UgMQogCisjZGVmaW5lIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUg
X1dLSW1tZWRpYXRlQWN0aW9uVHlwZQorCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZv
dW5kYXRpb24uaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEuaAko
cmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvbnRleHRNZW51Q29u
dGV4dERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lmIEVOQUJMRShD
T05URVhUX01FTlVTKQogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAi
V2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCiAK
IG5hbWVzcGFjZSBJUEMgewogY2xhc3MgQXJndW1lbnREZWNvZGVyOwpAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiAgICAgQ29udGV4dE1lbnVDb250ZXh0RGF0YSgpOwogICAgIENvbnRleHRNZW51
Q29udGV4dERhdGEoY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnVDb250ZXh0Jik7CiAgICAgCi0g
ICAgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgd2ViSGl0VGVzdFJlc3VsdERhdGEoKSBj
b25zdCB7IHJldHVybiBtX3dlYkhpdFRlc3RSZXN1bHREYXRhOyB9CisgICAgY29uc3QgV2ViSGl0
VGVzdFJlc3VsdERhdGEmIHdlYkhpdFRlc3RSZXN1bHREYXRhKCkgY29uc3QgeyByZXR1cm4gbV93
ZWJIaXRUZXN0UmVzdWx0RGF0YTsgfQogICAgIGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRUZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZFRleHQ7IH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiwgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYpOwogCiBwcml2
YXRlOgotICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgbV93ZWJIaXRUZXN0UmVzdWx0RGF0YTsK
KyAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSBtX3dlYkhpdFRlc3RSZXN1bHREYXRhOwogICAgIFN0
cmluZyBtX3NlbGVjdGVkVGV4dDsKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24g
MTkwODA3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgotCi0jaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L05vZGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRyPFdlYkhpdFRl
c3RSZXN1bHQ+IFdlYkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YkhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdERhdGEpKTsKLX0KLQotV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YTo6RGF0YSgpCi17Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRhdGEoY29u
c3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKLSAgICA6IGFic29sdXRlSW1hZ2VVUkwo
aGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0
ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlUERGVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBh
YnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSkK
LSAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCku
c3RyaW5nKCkpCi0gICAgLCBsaW5rTGFiZWwoaGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKQot
ICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkpCi0gICAg
LCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpCi0g
ICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGlu
YXRlcyhoaXRUZXN0UmVzdWx0KSkKLSAgICAsIGlzU2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQuc2Ny
b2xsYmFyKCkpCi0gICAgLCBpc1NlbGVjdGVkKGhpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKQot
ICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpICYmIGhpdFRlc3RSZXN1
bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKLSAgICAsIGlzT3ZlclRleHRJbnNpZGVGb3Jt
Q29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xF
bGVtZW50KCkpCi0gICAgLCBhbGxvd3NDb3B5KGhpdFRlc3RSZXN1bHQuYWxsb3dzQ29weSgpKQot
ICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRUZXN0UmVzdWx0LmlzRG93bmxvYWRhYmxlTWVk
aWEoKSkKLSAgICAsIGltYWdlU2l6ZSgwKQotewotfQotCi1XZWJIaXRUZXN0UmVzdWx0OjpEYXRh
OjpEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGJvb2wg
aW5jbHVkZUltYWdlKQotICAgIDogYWJzb2x1dGVJbWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29s
dXRlSW1hZ2VVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1
bHQuYWJzb2x1dGVQREZVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFic29sdXRlTGlua1VSTChoaXRU
ZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVNZWRp
YVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGxp
bmtMYWJlbChoaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpCi0gICAgLCBsaW5rVGl0bGUoaGl0
VGVzdFJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKSkKLSAgICAsIGlzQ29udGVudEVkaXRhYmxl
KGhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAsIGVsZW1lbnRCb3VuZGlu
Z0JveChlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQp
KQotICAgICwgaXNTY3JvbGxiYXIoaGl0VGVzdFJlc3VsdC5zY3JvbGxiYXIoKSkKLSAgICAsIGlz
U2VsZWN0ZWQoaGl0VGVzdFJlc3VsdC5pc1NlbGVjdGVkKCkpCi0gICAgLCBpc1RleHROb2RlKGhp
dFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKQotICAgICwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRU
ZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAsIGFs
bG93c0NvcHkoaGl0VGVzdFJlc3VsdC5hbGxvd3NDb3B5KCkpCi0gICAgLCBpc0Rvd25sb2FkYWJs
ZU1lZGlhKGhpdFRlc3RSZXN1bHQuaXNEb3dubG9hZGFibGVNZWRpYSgpKQotICAgICwgaW1hZ2VT
aXplKDApCi17Ci0gICAgaWYgKCFpbmNsdWRlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChJbWFnZSogaW1hZ2UgPSBoaXRUZXN0UmVzdWx0LmltYWdlKCkpIHsKLSAgICAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaW1hZ2UtPmRhdGEoKTsKLSAgICAgICAgaWYgKGJ1
ZmZlcikgewotICAgICAgICAgICAgaW1hZ2VTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFs
bG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAgICAgICAgIG1lbWNweShpbWFnZVNoYXJlZE1l
bW9yeS0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAg
ICAgaW1hZ2VTaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6On5EYXRhKCkKLXsKLX0KLQotdm9pZCBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZUltYWdlVVJMOwotICAgIGVuY29kZXIgPDwgYWJzb2x1
dGVQREZVUkw7Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZUxpbmtVUkw7Ci0gICAgZW5jb2RlciA8
PCBhYnNvbHV0ZU1lZGlhVVJMOwotICAgIGVuY29kZXIgPDwgbGlua0xhYmVsOwotICAgIGVuY29k
ZXIgPDwgbGlua1RpdGxlOwotICAgIGVuY29kZXIgPDwgaXNDb250ZW50RWRpdGFibGU7Ci0gICAg
ZW5jb2RlciA8PCBlbGVtZW50Qm91bmRpbmdCb3g7Ci0gICAgZW5jb2RlciA8PCBpc1Njcm9sbGJh
cjsKLSAgICBlbmNvZGVyIDw8IGlzU2VsZWN0ZWQ7Ci0gICAgZW5jb2RlciA8PCBpc1RleHROb2Rl
OwotICAgIGVuY29kZXIgPDwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKLSAg
ICBlbmNvZGVyIDw8IGFsbG93c0NvcHk7Ci0gICAgZW5jb2RlciA8PCBpc0Rvd25sb2FkYWJsZU1l
ZGlhOwotICAgIGVuY29kZXIgPDwgbG9va3VwVGV4dDsKLSAgICBlbmNvZGVyIDw8IGRpY3Rpb25h
cnlQb3B1cEluZm87Ci0KLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAg
ICBpZiAoaW1hZ2VTaGFyZWRNZW1vcnkgJiYgaW1hZ2VTaGFyZWRNZW1vcnktPmRhdGEoKSkKLSAg
ICAgICAgaW1hZ2VTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgZW5jb2RlciA8PCBpbWFnZUhhbmRs
ZTsKLSAgICBlbmNvZGVyIDw8IGltYWdlU2l6ZTsKLQotICAgIGJvb2wgaGFzTGlua1RleHRJbmRp
Y2F0b3IgPSBsaW5rVGV4dEluZGljYXRvcjsKLSAgICBlbmNvZGVyIDw8IGhhc0xpbmtUZXh0SW5k
aWNhdG9yOwotICAgIGlmIChoYXNMaW5rVGV4dEluZGljYXRvcikKLSAgICAgICAgZW5jb2RlciA8
PCBsaW5rVGV4dEluZGljYXRvci0+ZGF0YSgpOwotCi0gICAgcGxhdGZvcm1FbmNvZGUoZW5jb2Rl
cik7Ci19Ci0KLWJvb2wgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0
RGF0YSkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29s
dXRlSW1hZ2VVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0
YS5hYnNvbHV0ZVBERlVSTCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1
bHREYXRhLmFic29sdXRlTGlua1VSTCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRl
c3RSZXN1bHREYXRhLmFic29sdXRlTWVkaWFVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rTGFiZWwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rVGl0bGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5pc0NvbnRlbnRFZGl0YWJsZSkKLSAgICAgICAgfHwgIWRlY29k
ZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmVsZW1lbnRCb3VuZGluZ0JveCkKLSAgICAgICAg
fHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzU2Nyb2xsYmFyKQotICAgICAg
ICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNTZWxlY3RlZCkKLSAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzVGV4dE5vZGUpCi0gICAg
ICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc092ZXJUZXh0SW5zaWRl
Rm9ybUNvbnRyb2xFbGVtZW50KQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEuYWxsb3dzQ29weSkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmlzRG93bmxvYWRhYmxlTWVkaWEpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29k
ZShoaXRUZXN0UmVzdWx0RGF0YS5sb29rdXBUZXh0KQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNv
ZGUoaGl0VGVzdFJlc3VsdERhdGEuZGljdGlvbmFyeVBvcHVwSW5mbykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIWltYWdlSGFuZGxlLmlzTnVsbCgpKQotICAgICAgICBoaXRUZXN0UmVzdWx0RGF0
YS5pbWFnZVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGltYWdlSGFuZGxlLCBTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYm9vbCBoYXNMaW5rVGV4dEluZGljYXRvcjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhhc0xpbmtUZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGhhc0xpbmtUZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JE
YXRhIGluZGljYXRvckRhdGE7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9y
RGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaGl0VGVzdFJlc3Vs
dERhdGEubGlua1RleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUo
aW5kaWNhdG9yRGF0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsYXRmb3JtRGVjb2RlKGRlY29k
ZXIsIGhpdFRlc3RSZXN1bHREYXRhKTsKLX0KLQotI2lmICFQTEFURk9STShNQUMpCi12b2lkIFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotfQotCi1ib29sIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBs
YXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNl
bmRpZiAvLyAhUExBVEZPUk0oTUFDKQotCi1JbnRSZWN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6
OmVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoY29uc3QgSGl0VGVzdFJlc3Vs
dCYgaGl0VGVzdFJlc3VsdCkKLXsKLSAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIEZyYW1lVmlldyog
dmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIHJl
dHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgpKTsKLX0KLQotfSAvLyBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJIaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkhpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkhpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJIaXRUZXN0UmVzdWx0X2gKLSNkZWZpbmUgV2ViSGl0
VGVzdFJlc3VsdF9oCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RpY3Rpb25hcnlQb3B1cEluZm8uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotT0JKQ19DTEFTUyBEREFjdGlvbkNv
bnRleHQ7Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQXJndW1lbnREZWNvZGVyOwotY2xhc3Mg
QXJndW1lbnRFbmNvZGVyOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBIaXRUZXN0
UmVzdWx0OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRnJhbWU7Ci0KLWNs
YXNzIFdlYkhpdFRlc3RSZXN1bHQgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0
OjpUeXBlOjpIaXRUZXN0UmVzdWx0PiB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IERhdGEgewotICAg
ICAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTDsKLSAgICAgICAgU3RyaW5nIGFic29sdXRlUERG
VVJMOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVMaW5rVVJMOwotICAgICAgICBTdHJpbmcgYWJz
b2x1dGVNZWRpYVVSTDsKLSAgICAgICAgU3RyaW5nIGxpbmtMYWJlbDsKLSAgICAgICAgU3RyaW5n
IGxpbmtUaXRsZTsKLSAgICAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKLSAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdCb3g7Ci0gICAgICAgIGJvb2wgaXNTY3JvbGxi
YXI7Ci0gICAgICAgIGJvb2wgaXNTZWxlY3RlZDsKLSAgICAgICAgYm9vbCBpc1RleHROb2RlOwot
ICAgICAgICBib29sIGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7Ci0gICAgICAg
IGJvb2wgYWxsb3dzQ29weTsKLSAgICAgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhOwotCi0g
ICAgICAgIFN0cmluZyBsb29rdXBUZXh0OwotICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBp
bWFnZVNoYXJlZE1lbW9yeTsKLSAgICAgICAgdWludDY0X3QgaW1hZ2VTaXplOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RlZERh
dGFBY3Rpb25Db250ZXh0OwotI2VuZGlmCi0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0
b3I+IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7Ci0gICAgICAgIFdlYkNvcmU6OlBhZ2VPdmVy
bGF5OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7Ci0K
LSAgICAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZv
OwotCi0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBsaW5rVGV4dEluZGlj
YXRvcjsKLQotICAgICAgICBEYXRhKCk7Ci0gICAgICAgIGV4cGxpY2l0IERhdGEoY29uc3QgV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdCYpOwotICAgICAgICBEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmLCBib29sIGluY2x1ZGVJbWFnZSk7Ci0gICAgICAgIH5EYXRhKCk7Ci0KLSAgICAg
ICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwotICAgICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJik7Ci0gICAgICAgIHN0YXRpYyBib29sIHBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOwotCi0gICAgICAgIFdlYkNvcmU6
OkludFJlY3QgZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0Jik7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkhpdFRlc3RSZXN1bHQ+IGNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0K
LSAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNv
bHV0ZUltYWdlVVJMOyB9Ci0gICAgU3RyaW5nIGFic29sdXRlUERGVVJMKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmFic29sdXRlUERGVVJMOyB9Ci0gICAgU3RyaW5nIGFic29sdXRlTGlua1VSTCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUxpbmtVUkw7IH0KLSAgICBTdHJpbmcgYWJz
b2x1dGVNZWRpYVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZU1lZGlhVVJMOyB9
Ci0KLSAgICBTdHJpbmcgbGlua0xhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxpbmtMYWJl
bDsgfQotICAgIFN0cmluZyBsaW5rVGl0bGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubGlua1Rp
dGxlOyB9Ci0gICAgU3RyaW5nIGxvb2t1cFRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubG9v
a3VwVGV4dDsgfQotCi0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5pc0NvbnRlbnRFZGl0YWJsZTsgfQotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBlbGVt
ZW50Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZWxlbWVudEJvdW5kaW5nQm94
OyB9Ci0KLSAgICBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzU2Ny
b2xsYmFyOyB9Ci0KLSAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
aXNTZWxlY3RlZDsgfQotCi0gICAgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmlzVGV4dE5vZGU7IH0KLQotICAgIGJvb2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9s
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRy
b2xFbGVtZW50OyB9Ci0KLSAgICBib29sIGFsbG93c0NvcHkoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEuYWxsb3dzQ29weTsgfQotCi0gICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmlzRG93bmxvYWRhYmxlTWVkaWE7IH0KLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBXZWJIaXRUZXN0UmVzdWx0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhp
dFRlc3RSZXN1bHREYXRhKQotICAgICAgICA6IG1fZGF0YShoaXRUZXN0UmVzdWx0RGF0YSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgRGF0YSBtX2RhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIFdlYkhpdFRlc3RSZXN1bHRfaApJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHREYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkhpdFRlc3RSZXN1bHREYXRhOjpXZWJI
aXRUZXN0UmVzdWx0RGF0YSgpCit7Cit9CisKK1dlYkhpdFRlc3RSZXN1bHREYXRhOjpXZWJIaXRU
ZXN0UmVzdWx0RGF0YShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0
KQorICAgIDogYWJzb2x1dGVJbWFnZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwo
KS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQ
REZVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpLnN0cmluZygpKQorICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0
UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGxpbmtMYWJlbChoaXRU
ZXN0UmVzdWx0LnRleHRDb250ZW50KCkpCisgICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50
aXRsZURpc3BsYXlTdHJpbmcoKSkKKyAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1
bHQuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50
Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQorICAgICwgaXNT
Y3JvbGxiYXIoaGl0VGVzdFJlc3VsdC5zY3JvbGxiYXIoKSkKKyAgICAsIGlzU2VsZWN0ZWQoaGl0
VGVzdFJlc3VsdC5pc1NlbGVjdGVkKCkpCisgICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQu
aW5uZXJOb2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQor
ICAgICwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0Lmlz
T3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAsIGFsbG93c0NvcHkoaGl0
VGVzdFJlc3VsdC5hbGxvd3NDb3B5KCkpCisgICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRl
c3RSZXN1bHQuaXNEb3dubG9hZGFibGVNZWRpYSgpKQorICAgICwgaW1hZ2VTaXplKDApCit7Cit9
CisKK1dlYkhpdFRlc3RSZXN1bHREYXRhOjpXZWJIaXRUZXN0UmVzdWx0RGF0YShjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBib29sIGluY2x1ZGVJbWFnZSkKKyAg
ICA6IGFic29sdXRlSW1hZ2VVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3Ry
aW5nKCkpCisgICAgLCBhYnNvbHV0ZVBERlVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlUERGVVJM
KCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdC5hYnNvbHV0
ZUxpbmtVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlTWVkaWFVUkwoaGl0VGVzdFJlc3Vs
dC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkpCisgICAgLCBsaW5rTGFiZWwoaGl0VGVzdFJl
c3VsdC50ZXh0Q29udGVudCgpKQorICAgICwgbGlua1RpdGxlKGhpdFRlc3RSZXN1bHQudGl0bGVE
aXNwbGF5U3RyaW5nKCkpCisgICAgLCBpc0NvbnRlbnRFZGl0YWJsZShoaXRUZXN0UmVzdWx0Lmlz
Q29udGVudEVkaXRhYmxlKCkpCisgICAgLCBlbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudEJvdW5k
aW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhoaXRUZXN0UmVzdWx0KSkKKyAgICAsIGlzU2Nyb2xs
YmFyKGhpdFRlc3RSZXN1bHQuc2Nyb2xsYmFyKCkpCisgICAgLCBpc1NlbGVjdGVkKGhpdFRlc3RS
ZXN1bHQuaXNTZWxlY3RlZCgpKQorICAgICwgaXNUZXh0Tm9kZShoaXRUZXN0UmVzdWx0LmlubmVy
Tm9kZSgpICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICAs
IGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoaGl0VGVzdFJlc3VsdC5pc092ZXJU
ZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgLCBhbGxvd3NDb3B5KGhpdFRlc3RS
ZXN1bHQuYWxsb3dzQ29weSgpKQorICAgICwgaXNEb3dubG9hZGFibGVNZWRpYShoaXRUZXN0UmVz
dWx0LmlzRG93bmxvYWRhYmxlTWVkaWEoKSkKKyAgICAsIGltYWdlU2l6ZSgwKQoreworICAgIGlm
ICghaW5jbHVkZUltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoSW1hZ2UqIGltYWdl
ID0gaGl0VGVzdFJlc3VsdC5pbWFnZSgpKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciA9IGltYWdlLT5kYXRhKCk7CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
ICAgIGltYWdlU2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1
ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0
YSgpLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgICAgICAgICAgaW1hZ2VT
aXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkhpdFRlc3RS
ZXN1bHREYXRhOjp+V2ViSGl0VGVzdFJlc3VsdERhdGEoKQoreworfQorCit2b2lkIFdlYkhpdFRl
c3RSZXN1bHREYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZUltYWdlVVJMOworICAgIGVuY29kZXIgPDwgYWJz
b2x1dGVQREZVUkw7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZUxpbmtVUkw7CisgICAgZW5jb2Rl
ciA8PCBhYnNvbHV0ZU1lZGlhVVJMOworICAgIGVuY29kZXIgPDwgbGlua0xhYmVsOworICAgIGVu
Y29kZXIgPDwgbGlua1RpdGxlOworICAgIGVuY29kZXIgPDwgaXNDb250ZW50RWRpdGFibGU7Cisg
ICAgZW5jb2RlciA8PCBlbGVtZW50Qm91bmRpbmdCb3g7CisgICAgZW5jb2RlciA8PCBpc1Njcm9s
bGJhcjsKKyAgICBlbmNvZGVyIDw8IGlzU2VsZWN0ZWQ7CisgICAgZW5jb2RlciA8PCBpc1RleHRO
b2RlOworICAgIGVuY29kZXIgPDwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsK
KyAgICBlbmNvZGVyIDw8IGFsbG93c0NvcHk7CisgICAgZW5jb2RlciA8PCBpc0Rvd25sb2FkYWJs
ZU1lZGlhOworICAgIGVuY29kZXIgPDwgbG9va3VwVGV4dDsKKyAgICBlbmNvZGVyIDw8IGRpY3Rp
b25hcnlQb3B1cEluZm87CisKKyAgICBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGltYWdl
SGFuZGxlOworICAgIGlmIChpbWFnZVNoYXJlZE1lbW9yeSAmJiBpbWFnZVNoYXJlZE1lbW9yeS0+
ZGF0YSgpKQorICAgICAgICBpbWFnZVNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFu
ZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIGVu
Y29kZXIgPDwgaW1hZ2VIYW5kbGU7CisgICAgZW5jb2RlciA8PCBpbWFnZVNpemU7CisKKyAgICBi
b29sIGhhc0xpbmtUZXh0SW5kaWNhdG9yID0gbGlua1RleHRJbmRpY2F0b3I7CisgICAgZW5jb2Rl
ciA8PCBoYXNMaW5rVGV4dEluZGljYXRvcjsKKyAgICBpZiAoaGFzTGlua1RleHRJbmRpY2F0b3Ip
CisgICAgICAgIGVuY29kZXIgPDwgbGlua1RleHRJbmRpY2F0b3ItPmRhdGEoKTsKKworICAgIHBs
YXRmb3JtRW5jb2RlKGVuY29kZXIpOworfQorCitib29sIFdlYkhpdFRlc3RSZXN1bHREYXRhOjpk
ZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkhpdFRlc3RSZXN1bHREYXRh
JiBoaXRUZXN0UmVzdWx0RGF0YSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RS
ZXN1bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZSho
aXRUZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVj
b2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlua1VSTCkKKyAgICAgICAgfHwgIWRlY29k
ZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTWVkaWFVUkwpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rTGFiZWwpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rVGl0bGUpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAg
ICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmVsZW1lbnRCb3VuZGlu
Z0JveCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzU2Ny
b2xsYmFyKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNT
ZWxlY3RlZCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlz
VGV4dE5vZGUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5p
c092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KQorICAgICAgICB8fCAhZGVjb2Rlci5k
ZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29weSkKKyAgICAgICAgfHwgIWRlY29kZXIu
ZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxvYWRhYmxlTWVkaWEpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5sb29rdXBUZXh0KQorICAgICAgICB8
fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZGljdGlvbmFyeVBvcHVwSW5mbykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5k
bGUgaW1hZ2VIYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbWFnZUhhbmRsZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaW1hZ2VIYW5kbGUuaXNOdWxsKCkpCisg
ICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmltYWdlU2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFy
ZWRNZW1vcnk6Om1hcChpbWFnZUhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlByb3RlY3Rp
b246OlJlYWRPbmx5KTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEuaW1hZ2VTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNMaW5r
VGV4dEluZGljYXRvcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNh
dG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNh
dG9yKSB7CisgICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaGl0VGVzdFJlc3VsdERhdGEubGlua1RleHRJbmRp
Y2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHBsYXRmb3JtRGVjb2RlKGRlY29kZXIsIGhpdFRlc3RSZXN1bHRE
YXRhKTsKK30KKworI2lmICFQTEFURk9STShNQUMpCit2b2lkIFdlYkhpdFRlc3RSZXN1bHREYXRh
OjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
K30KKworYm9vbCBXZWJIaXRUZXN0UmVzdWx0RGF0YTo6cGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1
bWVudERlY29kZXImIGRlY29kZXIsIFdlYkhpdFRlc3RSZXN1bHREYXRhJiBoaXRUZXN0UmVzdWx0
RGF0YSkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQor
CitJbnRSZWN0IFdlYkhpdFRlc3RSZXN1bHREYXRhOjplbGVtZW50Qm91bmRpbmdCb3hJbldpbmRv
d0Nvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQp
Cit7CisgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmll
dygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICByZXR1cm4gdmlldy0+Y29udGVu
dHNUb1dpbmRvdyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7Cit9CisKK30g
Ly8gV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3VsdERh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViSGl0VGVzdFJlc3Vs
dERhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJIaXRUZXN0
UmVzdWx0RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViSGl0VGVzdFJlc3VsdERhdGFfaAorI2RlZmluZSBXZWJIaXRUZXN0UmVz
dWx0RGF0YV9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1v
cnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RpY3Rpb25hcnlQb3B1cEluZm8uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRl
eHQ7CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJn
dW1lbnRFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIaXRUZXN0UmVz
dWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkhpdFRlc3RSZXN1bHRE
YXRhIHsKKyAgICBTdHJpbmcgYWJzb2x1dGVJbWFnZVVSTDsKKyAgICBTdHJpbmcgYWJzb2x1dGVQ
REZVUkw7CisgICAgU3RyaW5nIGFic29sdXRlTGlua1VSTDsKKyAgICBTdHJpbmcgYWJzb2x1dGVN
ZWRpYVVSTDsKKyAgICBTdHJpbmcgbGlua0xhYmVsOworICAgIFN0cmluZyBsaW5rVGl0bGU7Cisg
ICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRC
b3VuZGluZ0JveDsKKyAgICBib29sIGlzU2Nyb2xsYmFyOworICAgIGJvb2wgaXNTZWxlY3RlZDsK
KyAgICBib29sIGlzVGV4dE5vZGU7CisgICAgYm9vbCBpc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRy
b2xFbGVtZW50OworICAgIGJvb2wgYWxsb3dzQ29weTsKKyAgICBib29sIGlzRG93bmxvYWRhYmxl
TWVkaWE7CisKKyAgICBTdHJpbmcgbG9va3VwVGV4dDsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFy
ZWRNZW1vcnk+IGltYWdlU2hhcmVkTWVtb3J5OworICAgIHVpbnQ2NF90IGltYWdlU2l6ZTsKKwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3Rl
ZERhdGFBY3Rpb25Db250ZXh0OworI2VuZGlmCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRldGVj
dGVkRGF0YUJvdW5kaW5nQm94OworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBk
ZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdl
T3ZlcmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7CisKKyAgICBXZWJD
b3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87CisKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gbGlua1RleHRJbmRpY2F0b3I7CisKKyAgICBXZWJI
aXRUZXN0UmVzdWx0RGF0YSgpOworICAgIGV4cGxpY2l0IFdlYkhpdFRlc3RSZXN1bHREYXRhKGNv
bnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsKKyAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YShj
b25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgYm9vbCBpbmNsdWRlSW1hZ2UpOworICAgIH5X
ZWJIaXRUZXN0UmVzdWx0RGF0YSgpOworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVu
Y29kZXImKSBjb25zdDsKKyAgICB2b2lkIHBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVy
JiwgV2ViSGl0VGVzdFJlc3VsdERhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybURlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRlc3RSZXN1bHREYXRhJik7CisKKyAgICBX
ZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoY29u
c3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBXZWJIaXRUZXN0UmVzdWx0RGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDE5MDY3NCkJ
KGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuY3BwOjE5MDY3NCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCisKKyNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJP
YmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm9k
ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViSGl0VGVzdFJl
c3VsdD4gV2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRh
dGEmIGhpdFRlc3RSZXN1bHREYXRhKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViSGl0
VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0RGF0YSkpOworfQorCitXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhOjpEYXRhKCkKK3sKK30KKworV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0YShjb25zdCBI
aXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQorICAgIDogYWJzb2x1dGVJbWFnZVVSTChoaXRU
ZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29sdXRlUERG
VVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwoKS5zdHJpbmcoKSkKKyAgICAsIGFic29s
dXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpKQorICAg
ICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKS5zdHJp
bmcoKSkKKyAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpCisgICAg
LCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKSkKKyAgICAsIGlz
Q29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAs
IGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVz
KGhpdFRlc3RSZXN1bHQpKQorICAgICwgaXNTY3JvbGxiYXIoaGl0VGVzdFJlc3VsdC5zY3JvbGxi
YXIoKSkKKyAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJlc3VsdC5pc1NlbGVjdGVkKCkpCisgICAg
LCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5p
bm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgICwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250
cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1l
bnQoKSkKKyAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJlc3VsdC5hbGxvd3NDb3B5KCkpCisgICAg
LCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1bHQuaXNEb3dubG9hZGFibGVNZWRpYSgp
KQorICAgICwgaW1hZ2VTaXplKDApCit7Cit9CisKK1dlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OkRh
dGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgYm9vbCBpbmNs
dWRlSW1hZ2UpCisgICAgOiBhYnNvbHV0ZUltYWdlVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVJ
bWFnZVVSTCgpLnN0cmluZygpKQorICAgICwgYWJzb2x1dGVQREZVUkwoaGl0VGVzdFJlc3VsdC5h
YnNvbHV0ZVBERlVSTCgpLnN0cmluZygpKQorICAgICwgYWJzb2x1dGVMaW5rVVJMKGhpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkpCisgICAgLCBhYnNvbHV0ZU1lZGlhVVJM
KGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpKQorICAgICwgbGlua0xh
YmVsKGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKSkKKyAgICAsIGxpbmtUaXRsZShoaXRUZXN0
UmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpKQorICAgICwgaXNDb250ZW50RWRpdGFibGUoaGl0
VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICwgZWxlbWVudEJvdW5kaW5nQm94
KGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoaGl0VGVzdFJlc3VsdCkpCisg
ICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0UmVzdWx0LnNjcm9sbGJhcigpKQorICAgICwgaXNTZWxl
Y3RlZChoaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSkKKyAgICAsIGlzVGV4dE5vZGUoaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5pc1RleHRO
b2RlKCkpCisgICAgLCBpc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KGhpdFRlc3RS
ZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCgpKQorICAgICwgYWxsb3dz
Q29weShoaXRUZXN0UmVzdWx0LmFsbG93c0NvcHkoKSkKKyAgICAsIGlzRG93bmxvYWRhYmxlTWVk
aWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25sb2FkYWJsZU1lZGlhKCkpCisgICAgLCBpbWFnZVNpemUo
MCkKK3sKKyAgICBpZiAoIWluY2x1ZGVJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KEltYWdlKiBpbWFnZSA9IGhpdFRlc3RSZXN1bHQuaW1hZ2UoKSkgeworICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBpbWFnZS0+ZGF0YSgpOworICAgICAgICBpZiAoYnVmZmVy
KSB7CisgICAgICAgICAgICBpbWFnZVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2Nh
dGUoYnVmZmVyLT5zaXplKCkpOworICAgICAgICAgICAgbWVtY3B5KGltYWdlU2hhcmVkTWVtb3J5
LT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICBp
bWFnZVNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YTo6fkRhdGEoKQoreworfQorCit2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGE6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IGFic29sdXRlSW1hZ2VVUkw7CisgICAgZW5jb2RlciA8PCBhYnNvbHV0ZVBE
RlVSTDsKKyAgICBlbmNvZGVyIDw8IGFic29sdXRlTGlua1VSTDsKKyAgICBlbmNvZGVyIDw8IGFi
c29sdXRlTWVkaWFVUkw7CisgICAgZW5jb2RlciA8PCBsaW5rTGFiZWw7CisgICAgZW5jb2RlciA8
PCBsaW5rVGl0bGU7CisgICAgZW5jb2RlciA8PCBpc0NvbnRlbnRFZGl0YWJsZTsKKyAgICBlbmNv
ZGVyIDw8IGVsZW1lbnRCb3VuZGluZ0JveDsKKyAgICBlbmNvZGVyIDw8IGlzU2Nyb2xsYmFyOwor
ICAgIGVuY29kZXIgPDwgaXNTZWxlY3RlZDsKKyAgICBlbmNvZGVyIDw8IGlzVGV4dE5vZGU7Cisg
ICAgZW5jb2RlciA8PCBpc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50OworICAgIGVu
Y29kZXIgPDwgYWxsb3dzQ29weTsKKyAgICBlbmNvZGVyIDw8IGlzRG93bmxvYWRhYmxlTWVkaWE7
CisgICAgZW5jb2RlciA8PCBsb29rdXBUZXh0OworICAgIGVuY29kZXIgPDwgZGljdGlvbmFyeVBv
cHVwSW5mbzsKKworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlOworICAgIGlm
IChpbWFnZVNoYXJlZE1lbW9yeSAmJiBpbWFnZVNoYXJlZE1lbW9yeS0+ZGF0YSgpKQorICAgICAg
ICBpbWFnZVNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlLCBTaGFyZWRNZW1v
cnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBlbmNvZGVyIDw8IGltYWdlSGFuZGxlOwor
ICAgIGVuY29kZXIgPDwgaW1hZ2VTaXplOworCisgICAgYm9vbCBoYXNMaW5rVGV4dEluZGljYXRv
ciA9IGxpbmtUZXh0SW5kaWNhdG9yOworICAgIGVuY29kZXIgPDwgaGFzTGlua1RleHRJbmRpY2F0
b3I7CisgICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKQorICAgICAgICBlbmNvZGVyIDw8IGxp
bmtUZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisKKyAgICBwbGF0Zm9ybUVuY29kZShlbmNvZGVyKTsK
K30KKworYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRh
KQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuYWJzb2x1dGVJ
bWFnZVVSTCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFi
c29sdXRlUERGVVJMKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERh
dGEuYWJzb2x1dGVMaW5rVVJMKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEuYWJzb2x1dGVNZWRpYVVSTCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhp
dFRlc3RSZXN1bHREYXRhLmxpbmtMYWJlbCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhp
dFRlc3RSZXN1bHREYXRhLmxpbmtUaXRsZSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhp
dFRlc3RSZXN1bHREYXRhLmlzQ29udGVudEVkaXRhYmxlKQorICAgICAgICB8fCAhZGVjb2Rlci5k
ZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZWxlbWVudEJvdW5kaW5nQm94KQorICAgICAgICB8fCAh
ZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNTY3JvbGxiYXIpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc1NlbGVjdGVkKQorICAgICAgICB8
fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNUZXh0Tm9kZSkKKyAgICAgICAg
fHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzT3ZlclRleHRJbnNpZGVGb3Jt
Q29udHJvbEVsZW1lbnQpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0
RGF0YS5hbGxvd3NDb3B5KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3Vs
dERhdGEuaXNEb3dubG9hZGFibGVNZWRpYSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhp
dFRlc3RSZXN1bHREYXRhLmxvb2t1cFRleHQpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZSho
aXRUZXN0UmVzdWx0RGF0YS5kaWN0aW9uYXJ5UG9wdXBJbmZvKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaW1hZ2VIYW5kbGU7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShpbWFnZUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghaW1hZ2VIYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmlt
YWdlU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaW1hZ2VIYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSho
aXRUZXN0UmVzdWx0RGF0YS5pbWFnZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBib29sIGhhc0xpbmtUZXh0SW5kaWNhdG9yOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFz
TGlua1RleHRJbmRpY2F0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaGFz
TGlua1RleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEg
aW5kaWNhdG9yRGF0YTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmRpY2F0b3JEYXRh
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBoaXRUZXN0UmVzdWx0RGF0
YS5saW5rVGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZShpbmRp
Y2F0b3JEYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGxhdGZvcm1EZWNvZGUoZGVjb2Rlciwg
aGl0VGVzdFJlc3VsdERhdGEpOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykKK3ZvaWQgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZvcm1FbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7Cit9CisKK2Jvb2wgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZv
cm1EZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQoreworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlm
IC8vICFQTEFURk9STShNQUMpCisKK0ludFJlY3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZWxl
bWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhjb25zdCBIaXRUZXN0UmVzdWx0JiBo
aXRUZXN0UmVzdWx0KQoreworICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
KworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgRnJhbWVWaWV3KiB2aWV3
ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgcmV0dXJu
IHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KCkpOworfQorCit9IC8vIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9B
UElIaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJL0FQSUhpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0FQSUhpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCwx
OTIgKzE4LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkhp
dFRlc3RSZXN1bHQuaCIKLQotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hpdFRlc3RS
ZXN1bHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVVJMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob2RlLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhc3NSZWZQdHI8V2Vi
SGl0VGVzdFJlc3VsdD4gV2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RS
ZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViSGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0RGF0YSkpOwotfQotCi1XZWJIaXRUZXN0
UmVzdWx0OjpEYXRhOjpEYXRhKCkKLXsKLX0KLQotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6RGF0
YShjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQotICAgIDogYWJzb2x1dGVJbWFn
ZVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKSkKLSAgICAsIGFi
c29sdXRlUERGVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVQREZVUkwoKS5zdHJpbmcoKSkKLSAg
ICAsIGFic29sdXRlTGlua1VSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmlu
ZygpKQotICAgICwgYWJzb2x1dGVNZWRpYVVSTChoaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFV
UkwoKS5zdHJpbmcoKSkKLSAgICAsIGxpbmtMYWJlbChoaXRUZXN0UmVzdWx0LnRleHRDb250ZW50
KCkpCi0gICAgLCBsaW5rVGl0bGUoaGl0VGVzdFJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKSkK
LSAgICAsIGlzQ29udGVudEVkaXRhYmxlKGhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUo
KSkKLSAgICAsIGVsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nv
b3JkaW5hdGVzKGhpdFRlc3RSZXN1bHQpKQotICAgICwgaXNTY3JvbGxiYXIoaGl0VGVzdFJlc3Vs
dC5zY3JvbGxiYXIoKSkKLSAgICAsIGlzU2VsZWN0ZWQoaGl0VGVzdFJlc3VsdC5pc1NlbGVjdGVk
KCkpCi0gICAgLCBpc1RleHROb2RlKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICwgaXNPdmVyVGV4dEluc2lk
ZUZvcm1Db250cm9sRWxlbWVudChoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKLSAgICAsIGFsbG93c0NvcHkoaGl0VGVzdFJlc3VsdC5hbGxvd3NDb3B5
KCkpCi0gICAgLCBpc0Rvd25sb2FkYWJsZU1lZGlhKGhpdFRlc3RSZXN1bHQuaXNEb3dubG9hZGFi
bGVNZWRpYSgpKQotICAgICwgaW1hZ2VTaXplKDApCi17Ci19Ci0KLVdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGE6OkRhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwg
Ym9vbCBpbmNsdWRlSW1hZ2UpCi0gICAgOiBhYnNvbHV0ZUltYWdlVVJMKGhpdFRlc3RSZXN1bHQu
YWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVQREZVUkwoaGl0VGVz
dFJlc3VsdC5hYnNvbHV0ZVBERlVSTCgpLnN0cmluZygpKQotICAgICwgYWJzb2x1dGVMaW5rVVJM
KGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkpCi0gICAgLCBhYnNvbHV0
ZU1lZGlhVVJMKGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpKQotICAg
ICwgbGlua0xhYmVsKGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKSkKLSAgICAsIGxpbmtUaXRs
ZShoaXRUZXN0UmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpKQotICAgICwgaXNDb250ZW50RWRp
dGFibGUoaGl0VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICwgZWxlbWVudEJv
dW5kaW5nQm94KGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoaGl0VGVzdFJl
c3VsdCkpCi0gICAgLCBpc1Njcm9sbGJhcihoaXRUZXN0UmVzdWx0LnNjcm9sbGJhcigpKQotICAg
ICwgaXNTZWxlY3RlZChoaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSkKLSAgICAsIGlzVGV4dE5v
ZGUoaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgp
LT5pc1RleHROb2RlKCkpCi0gICAgLCBpc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50
KGhpdFRlc3RSZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCgpKQotICAg
ICwgYWxsb3dzQ29weShoaXRUZXN0UmVzdWx0LmFsbG93c0NvcHkoKSkKLSAgICAsIGlzRG93bmxv
YWRhYmxlTWVkaWEoaGl0VGVzdFJlc3VsdC5pc0Rvd25sb2FkYWJsZU1lZGlhKCkpCi0gICAgLCBp
bWFnZVNpemUoMCkKLXsKLSAgICBpZiAoIWluY2x1ZGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKEltYWdlKiBpbWFnZSA9IGhpdFRlc3RSZXN1bHQuaW1hZ2UoKSkgewotICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBpbWFnZS0+ZGF0YSgpOwotICAgICAgICBp
ZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICBpbWFnZVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6YWxsb2NhdGUoYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgbWVtY3B5KGltYWdlU2hh
cmVkTWVtb3J5LT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAg
ICAgICAgICBpbWFnZVNpemUgPSBidWZmZXItPnNpemUoKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6fkRhdGEoKQotewotfQorbmFtZXNwYWNlIEFQSSB7
CiAKLXZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAorUGFzc1JlZlB0cjxIaXRUZXN0UmVzdWx0PiBIaXRUZXN0UmVz
dWx0OjpjcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJl
c3VsdERhdGEpCiB7Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZUltYWdlVVJMOwotICAgIGVuY29k
ZXIgPDwgYWJzb2x1dGVQREZVUkw7Ci0gICAgZW5jb2RlciA8PCBhYnNvbHV0ZUxpbmtVUkw7Ci0g
ICAgZW5jb2RlciA8PCBhYnNvbHV0ZU1lZGlhVVJMOwotICAgIGVuY29kZXIgPDwgbGlua0xhYmVs
OwotICAgIGVuY29kZXIgPDwgbGlua1RpdGxlOwotICAgIGVuY29kZXIgPDwgaXNDb250ZW50RWRp
dGFibGU7Ci0gICAgZW5jb2RlciA8PCBlbGVtZW50Qm91bmRpbmdCb3g7Ci0gICAgZW5jb2RlciA8
PCBpc1Njcm9sbGJhcjsKLSAgICBlbmNvZGVyIDw8IGlzU2VsZWN0ZWQ7Ci0gICAgZW5jb2RlciA8
PCBpc1RleHROb2RlOwotICAgIGVuY29kZXIgPDwgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9s
RWxlbWVudDsKLSAgICBlbmNvZGVyIDw8IGFsbG93c0NvcHk7Ci0gICAgZW5jb2RlciA8PCBpc0Rv
d25sb2FkYWJsZU1lZGlhOwotICAgIGVuY29kZXIgPDwgbG9va3VwVGV4dDsKLSAgICBlbmNvZGVy
IDw8IGRpY3Rpb25hcnlQb3B1cEluZm87Ci0KLSAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFn
ZUhhbmRsZTsKLSAgICBpZiAoaW1hZ2VTaGFyZWRNZW1vcnkgJiYgaW1hZ2VTaGFyZWRNZW1vcnkt
PmRhdGEoKSkKLSAgICAgICAgaW1hZ2VTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShpbWFnZUhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgZW5jb2RlciA8
PCBpbWFnZUhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IGltYWdlU2l6ZTsKLQotICAgIGJvb2wgaGFz
TGlua1RleHRJbmRpY2F0b3IgPSBsaW5rVGV4dEluZGljYXRvcjsKLSAgICBlbmNvZGVyIDw8IGhh
c0xpbmtUZXh0SW5kaWNhdG9yOwotICAgIGlmIChoYXNMaW5rVGV4dEluZGljYXRvcikKLSAgICAg
ICAgZW5jb2RlciA8PCBsaW5rVGV4dEluZGljYXRvci0+ZGF0YSgpOwotCi0gICAgcGxhdGZvcm1F
bmNvZGUoZW5jb2Rlcik7Ci19Ci0KLWJvb2wgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6ZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBo
aXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1
bHREYXRhLmFic29sdXRlSW1hZ2VVUkwpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRU
ZXN0UmVzdWx0RGF0YS5hYnNvbHV0ZVBERlVSTCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2Rl
KGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTGlua1VSTCkKLSAgICAgICAgfHwgIWRlY29kZXIu
ZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmFic29sdXRlTWVkaWFVUkwpCi0gICAgICAgIHx8ICFk
ZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rTGFiZWwpCi0gICAgICAgIHx8ICFk
ZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5saW5rVGl0bGUpCi0gICAgICAgIHx8ICFk
ZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc0NvbnRlbnRFZGl0YWJsZSkKLSAgICAg
ICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmVsZW1lbnRCb3VuZGluZ0Jv
eCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzU2Nyb2xs
YmFyKQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaXNTZWxl
Y3RlZCkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzVGV4
dE5vZGUpCi0gICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5pc092
ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KQotICAgICAgICB8fCAhZGVjb2Rlci5kZWNv
ZGUoaGl0VGVzdFJlc3VsdERhdGEuYWxsb3dzQ29weSkKLSAgICAgICAgfHwgIWRlY29kZXIuZGVj
b2RlKGhpdFRlc3RSZXN1bHREYXRhLmlzRG93bmxvYWRhYmxlTWVkaWEpCi0gICAgICAgIHx8ICFk
ZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5sb29rdXBUZXh0KQotICAgICAgICB8fCAh
ZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuZGljdGlvbmFyeVBvcHVwSW5mbykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFu
ZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VIYW5kbGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWltYWdlSGFuZGxlLmlzTnVsbCgpKQotICAgICAgICBoaXRU
ZXN0UmVzdWx0RGF0YS5pbWFnZVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGltYWdl
SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJlc3VsdERhdGEuaW1hZ2VTaXplKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXNMaW5rVGV4dEluZGljYXRvcjsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGhhc0xpbmtUZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3JEYXRhIGluZGljYXRvckRhdGE7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaW5kaWNhdG9yRGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aGl0VGVzdFJlc3VsdERhdGEubGlua1RleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsYXRmb3Jt
RGVjb2RlKGRlY29kZXIsIGhpdFRlc3RSZXN1bHREYXRhKTsKLX0KLQotI2lmICFQTEFURk9STShN
QUMpCi12b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotfQotCi1ib29sIFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGE6OnBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQotCi1JbnRSZWN0IFdlYkhpdFRlc3RS
ZXN1bHQ6OkRhdGE6OmVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0ZXMoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKLXsKLSAgICBOb2RlKiBub2RlID0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZy
YW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAg
IEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKLQotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlbmRlcmVyLT5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpdFRlc3RSZXN1
bHQoaGl0VGVzdFJlc3VsdERhdGEpKTsKIH0KIAotfSAvLyBXZWJLaXQKK30gLy8gbmFtZXNwYWNl
IEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElIaXRUZXN0UmVzdWx0
LmgJKHJldmlzaW9uIDE5MDY3NCkJKGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkhpdFRl
c3RSZXN1bHQuaDoxOTA2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSUhpdFRl
c3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJIaXRUZXN0UmVzdWx0X2gKKyNkZWZpbmUgV2ViSGl0VGVzdFJlc3VsdF9o
CisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RpY3Rpb25hcnlQb3B1cEluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CisKK25h
bWVzcGFjZSBJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQXJndW1lbnRFbmNv
ZGVyOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRnJhbWU7CisKK2NsYXNzIFdlYkhpdFRl
c3RSZXN1bHQgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpIaXRU
ZXN0UmVzdWx0PiB7CitwdWJsaWM6CisgICAgc3RydWN0IERhdGEgeworICAgICAgICBTdHJpbmcg
YWJzb2x1dGVJbWFnZVVSTDsKKyAgICAgICAgU3RyaW5nIGFic29sdXRlUERGVVJMOworICAgICAg
ICBTdHJpbmcgYWJzb2x1dGVMaW5rVVJMOworICAgICAgICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVS
TDsKKyAgICAgICAgU3RyaW5nIGxpbmtMYWJlbDsKKyAgICAgICAgU3RyaW5nIGxpbmtUaXRsZTsK
KyAgICAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVj
dCBlbGVtZW50Qm91bmRpbmdCb3g7CisgICAgICAgIGJvb2wgaXNTY3JvbGxiYXI7CisgICAgICAg
IGJvb2wgaXNTZWxlY3RlZDsKKyAgICAgICAgYm9vbCBpc1RleHROb2RlOworICAgICAgICBib29s
IGlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQ7CisgICAgICAgIGJvb2wgYWxsb3dz
Q29weTsKKyAgICAgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhOworCisgICAgICAgIFN0cmlu
ZyBsb29rdXBUZXh0OworICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBpbWFnZVNoYXJlZE1l
bW9yeTsKKyAgICAgICAgdWludDY0X3QgaW1hZ2VTaXplOworCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RlZERhdGFBY3Rpb25Db250
ZXh0OworI2VuZGlmCisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3Vu
ZGluZ0JveDsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+IGRldGVjdGVk
RGF0YVRleHRJbmRpY2F0b3I7CisgICAgICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdlT3Zl
cmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7CisKKyAgICAgICAgV2Vi
Q29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworCisgICAgICAg
IFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBsaW5rVGV4dEluZGljYXRvcjsKKworICAg
ICAgICBEYXRhKCk7CisgICAgICAgIGV4cGxpY2l0IERhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdCYpOworICAgICAgICBEYXRhKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCBi
b29sIGluY2x1ZGVJbWFnZSk7CisgICAgICAgIH5EYXRhKCk7CisKKyAgICAgICAgdm9pZCBlbmNv
ZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdm9pZCBwbGF0Zm9ybUVu
Y29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7Cisg
ICAgICAgIHN0YXRpYyBib29sIHBsYXRmb3JtRGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwg
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOworCisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZWxl
bWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlcyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0Jik7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkhpdFRlc3RSZXN1
bHQ+IGNyZWF0ZShjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7CisKKyAgICBTdHJpbmcg
YWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZUltYWdlVVJM
OyB9CisgICAgU3RyaW5nIGFic29sdXRlUERGVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFi
c29sdXRlUERGVVJMOyB9CisgICAgU3RyaW5nIGFic29sdXRlTGlua1VSTCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5hYnNvbHV0ZUxpbmtVUkw7IH0KKyAgICBTdHJpbmcgYWJzb2x1dGVNZWRpYVVS
TCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5hYnNvbHV0ZU1lZGlhVVJMOyB9CisKKyAgICBTdHJp
bmcgbGlua0xhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxpbmtMYWJlbDsgfQorICAgIFN0
cmluZyBsaW5rVGl0bGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubGlua1RpdGxlOyB9CisgICAg
U3RyaW5nIGxvb2t1cFRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubG9va3VwVGV4dDsgfQor
CisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc0Nv
bnRlbnRFZGl0YWJsZTsgfQorCisgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50Qm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZWxlbWVudEJvdW5kaW5nQm94OyB9CisKKyAgICBi
b29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzU2Nyb2xsYmFyOyB9CisK
KyAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaXNTZWxlY3RlZDsg
fQorCisgICAgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzVGV4dE5v
ZGU7IH0KKworICAgIGJvb2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50OyB9
CisKKyAgICBib29sIGFsbG93c0NvcHkoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWxsb3dzQ29w
eTsgfQorCisgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmlzRG93bmxvYWRhYmxlTWVkaWE7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJI
aXRUZXN0UmVzdWx0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHRE
YXRhKQorICAgICAgICA6IG1fZGF0YShoaXRUZXN0UmVzdWx0RGF0YSkKKyAgICB7CisgICAgfQor
CisgICAgRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYkhpdFRlc3RSZXN1bHRfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9B
UElIaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SS9BUElIaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvQVBJSGl0VGVzdFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNywxMSArMTcs
MTIgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2Vi
SGl0VGVzdFJlc3VsdF9oCi0jZGVmaW5lIFdlYkhpdFRlc3RSZXN1bHRfaAorI2lmbmRlZiBBUElI
aXRUZXN0UmVzdWx0X2gKKyNkZWZpbmUgQVBJSGl0VGVzdFJlc3VsdF9oCiAKICNpbmNsdWRlICJB
UElPYmplY3QuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJIaXRU
ZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGljdGlvbmFyeVBvcHVwSW5mby5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgpAQCAtNDIsNjYgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhp
dFRlc3RSZXN1bHQ7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIEFQSSB7CiAK
IGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBXZWJIaXRUZXN0UmVzdWx0IDogcHVibGljIEFQSTo6
T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SGl0VGVzdFJlc3VsdD4geworY2xhc3MgSGl0
VGVzdFJlc3VsdCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okhp
dFRlc3RSZXN1bHQ+IHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgRGF0YSB7Ci0gICAgICAgIFN0cmlu
ZyBhYnNvbHV0ZUltYWdlVVJMOwotICAgICAgICBTdHJpbmcgYWJzb2x1dGVQREZVUkw7Ci0gICAg
ICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkw7Ci0gICAgICAgIFN0cmluZyBhYnNvbHV0ZU1lZGlh
VVJMOwotICAgICAgICBTdHJpbmcgbGlua0xhYmVsOwotICAgICAgICBTdHJpbmcgbGlua1RpdGxl
OwotICAgICAgICBib29sIGlzQ29udGVudEVkaXRhYmxlOwotICAgICAgICBXZWJDb3JlOjpJbnRS
ZWN0IGVsZW1lbnRCb3VuZGluZ0JveDsKLSAgICAgICAgYm9vbCBpc1Njcm9sbGJhcjsKLSAgICAg
ICAgYm9vbCBpc1NlbGVjdGVkOwotICAgICAgICBib29sIGlzVGV4dE5vZGU7Ci0gICAgICAgIGJv
b2wgaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudDsKLSAgICAgICAgYm9vbCBhbGxv
d3NDb3B5OwotICAgICAgICBib29sIGlzRG93bmxvYWRhYmxlTWVkaWE7Ci0KLSAgICAgICAgU3Ry
aW5nIGxvb2t1cFRleHQ7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGltYWdlU2hhcmVk
TWVtb3J5OwotICAgICAgICB1aW50NjRfdCBpbWFnZVNpemU7Ci0KLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdGVkRGF0YUFjdGlvbkNv
bnRleHQ7Ci0jZW5kaWYKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRldGVjdGVkRGF0YUJv
dW5kaW5nQm94OwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gZGV0ZWN0
ZWREYXRhVGV4dEluZGljYXRvcjsKLSAgICAgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OlBhZ2VP
dmVybGF5SUQgZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQYWdlT3ZlcmxheTsKLQotICAgICAgICBX
ZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm87Ci0KLSAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+IGxpbmtUZXh0SW5kaWNhdG9yOwotCi0g
ICAgICAgIERhdGEoKTsKLSAgICAgICAgZXhwbGljaXQgRGF0YShjb25zdCBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0Jik7Ci0gICAgICAgIERhdGEoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYs
IGJvb2wgaW5jbHVkZUltYWdlKTsKLSAgICAgICAgfkRhdGEoKTsKLQotICAgICAgICB2b2lkIGVu
Y29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwotICAgICAgICB2b2lkIHBsYXRmb3Jt
RW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHN0YXRpYyBib29s
IGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1EZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXIm
LCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7Ci0KLSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBl
bGVtZW50Qm91bmRpbmdCb3hJbldpbmRvd0Nvb3JkaW5hdGVzKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmKTsKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViSGl0VGVzdFJl
c3VsdD4gY3JlYXRlKGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmKTsKLQotICAgIFN0cmlu
ZyBhYnNvbHV0ZUltYWdlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlSW1hZ2VV
Ukw7IH0KLSAgICBTdHJpbmcgYWJzb2x1dGVQREZVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
YWJzb2x1dGVQREZVUkw7IH0KLSAgICBTdHJpbmcgYWJzb2x1dGVMaW5rVVJMKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmFic29sdXRlTGlua1VSTDsgfQotICAgIFN0cmluZyBhYnNvbHV0ZU1lZGlh
VVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlTWVkaWFVUkw7IH0KLQotICAgIFN0
cmluZyBsaW5rTGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubGlua0xhYmVsOyB9Ci0gICAg
U3RyaW5nIGxpbmtUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5saW5rVGl0bGU7IH0KLSAg
ICBTdHJpbmcgbG9va3VwVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5sb29rdXBUZXh0OyB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SGl0VGVzdFJlc3VsdD4gY3JlYXRlKGNvbnN0IFdlYktp
dDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmKTsKKworICAgIFdURjo6U3RyaW5nIGFic29sdXRlSW1h
Z2VVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVJbWFnZVVSTDsgfQorICAgIFdU
Rjo6U3RyaW5nIGFic29sdXRlUERGVVJMKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRl
UERGVVJMOyB9CisgICAgV1RGOjpTdHJpbmcgYWJzb2x1dGVMaW5rVVJMKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmFic29sdXRlTGlua1VSTDsgfQorICAgIFdURjo6U3RyaW5nIGFic29sdXRlTWVk
aWFVUkwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYWJzb2x1dGVNZWRpYVVSTDsgfQorCisgICAg
V1RGOjpTdHJpbmcgbGlua0xhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxpbmtMYWJlbDsg
fQorICAgIFdURjo6U3RyaW5nIGxpbmtUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5saW5r
VGl0bGU7IH0KKyAgICBXVEY6OlN0cmluZyBsb29rdXBUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmxvb2t1cFRleHQ7IH0KIAogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEuaXNDb250ZW50RWRpdGFibGU7IH0KIApAQCAtMTIwLDE0ICs3NywxNCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rvd25sb2FkYWJsZU1lZGlhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmlzRG93bmxvYWRhYmxlTWVkaWE7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBX
ZWJIaXRUZXN0UmVzdWx0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1
bHREYXRhKQorICAgIGV4cGxpY2l0IEhpdFRlc3RSZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCiAgICAgICAgIDogbV9kYXRhKGhpdFRl
c3RSZXN1bHREYXRhKQogICAgIHsKICAgICB9CiAKLSAgICBEYXRhIG1fZGF0YTsKKyAgICBXZWJL
aXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIG1fZGF0YTsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAorfSAvLyBuYW1lc3BhY2UgQVBJCiAKLSNlbmRpZiAvLyBXZWJIaXRUZXN0UmVzdWx0X2gK
KyNlbmRpZiAvLyBBUElIaXRUZXN0UmVzdWx0X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9X
S0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCitXS19DTEFTU19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgTkEpCitA
aW50ZXJmYWNlIF9XS0hpdFRlc3RSZXN1bHQgOiBOU09iamVjdCA8TlNDb3B5aW5nPgorCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICphYnNvbHV0ZUltYWdlVVJM
OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VSTCAqYWJzb2x1dGVQ
REZVUkw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJMICphYnNv
bHV0ZUxpbmtVUkw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TVVJM
ICphYnNvbHV0ZU1lZGlhVVJMOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNv
cHkpIE5TU3RyaW5nICpsaW5rTGFiZWw7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHks
IGNvcHkpIE5TU3RyaW5nICpsaW5rVGl0bGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHksIGNvcHkpIE5TU3RyaW5nICpsb29rdXBUZXh0OworCitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHksIGdldHRlcj1pc0NvbnRlbnRFZGl0YWJsZSkgQk9PTCBjb250ZW50RWRpdGFibGU7
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IGVsZW1lbnRCb3VuZGlu
Z0JveDsKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3VsdC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0hpdFRlc3RSZXN1bHQubW0JKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL19XS0hpdFRlc3RS
ZXN1bHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCisK
KyNpZiBXS19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50YXRpb24gX1dLSGl0VGVzdFJlc3VsdAor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfaGl0VGVzdFJlc3VsdC0+fkhpdFRlc3RSZXN1bHQo
KTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNVUkwgKilhYnNvbHV0ZUltYWdl
VVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9oaXRUZXN0UmVzdWx0LT5h
YnNvbHV0ZUltYWdlVVJMKCldOworfQorCistIChOU1VSTCAqKWFic29sdXRlUERGVVJMCit7Cisg
ICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9oaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZVBE
RlVSTCgpXTsKK30KKworLSAoTlNVUkwgKilhYnNvbHV0ZUxpbmtVUkwKK3sKKyAgICByZXR1cm4g
W05TVVJMIFVSTFdpdGhTdHJpbmc6X2hpdFRlc3RSZXN1bHQtPmFic29sdXRlTGlua1VSTCgpXTsK
K30KKworLSAoTlNVUkwgKilhYnNvbHV0ZU1lZGlhVVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBV
UkxXaXRoU3RyaW5nOl9oaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZU1lZGlhVVJMKCldOworfQorCist
IChOU1N0cmluZyAqKWxpbmtMYWJlbAoreworICAgIHJldHVybiBfaGl0VGVzdFJlc3VsdC0+bGlu
a0xhYmVsKCk7Cit9CisKKy0gKE5TU3RyaW5nICopbGlua1RpdGxlCit7CisgICAgcmV0dXJuIF9o
aXRUZXN0UmVzdWx0LT5saW5rVGl0bGUoKTsKK30KKworLSAoTlNTdHJpbmcgKilsb29rdXBUZXh0
Cit7CisgICAgcmV0dXJuIF9oaXRUZXN0UmVzdWx0LT5sb29rdXBUZXh0KCk7Cit9CisKKy0gKEJP
T0wpaXNDb250ZW50RWRpdGFibGUKK3sKKyAgICByZXR1cm4gX2hpdFRlc3RSZXN1bHQtPmlzQ29u
dGVudEVkaXRhYmxlKCk7Cit9CisKKy0gKENHUmVjdCllbGVtZW50Qm91bmRpbmdCb3gKK3sKKyAg
ICByZXR1cm4gX2hpdFRlc3RSZXN1bHQtPmVsZW1lbnRCb3VuZGluZ0JveCgpOworfQorCistIChp
ZCljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUKK3sKKyAgICByZXR1cm4gW3NlbGYgcmV0YWlu
XTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCisK
Ky0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuICpfaGl0VGVzdFJlc3Vs
dDsKK30KKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Q29jb2EvX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLSGl0VGVzdFJlc3Vs
dEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHQuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNp
bXBvcnQgIkFQSUhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIldLT2JqZWN0LmgiCisKK25hbWVz
cGFjZSBBUEkgeworCitpbmxpbmUgX1dLSGl0VGVzdFJlc3VsdCAqd3JhcHBlcihBUEk6OkhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAgQVNTRVJUKFtoaXRUZXN0UmVzdWx0Lndy
YXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tIaXRUZXN0UmVzdWx0IGNsYXNzXV0pOworCisgICAg
cmV0dXJuIChfV0tIaXRUZXN0UmVzdWx0ICopaGl0VGVzdFJlc3VsdC53cmFwcGVyKCk7Cit9CisK
K30KKworQGludGVyZmFjZSBfV0tIaXRUZXN0UmVzdWx0ICgpIDxXS09iamVjdD4geworQHBhY2th
Z2UKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpIaXRUZXN0UmVzdWx0PiBfaGl0VGVzdFJl
c3VsdDsKK30KK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L2MvV0tJbW1lZGlhdGVBY3Rpb25UeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS0ltbWVkaWF0ZUFjdGlvblR5cGVzLmgJKHJldmlzaW9uIDE5MDgwNykK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0ltbWVkaWF0ZUFjdGlvblR5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDEwIEBAIGVudW0gewogICAgIGtXS0ltbWVkaWF0
ZUFjdGlvbk1haWx0b0xpbmssCiAgICAga1dLSW1tZWRpYXRlQWN0aW9uVGVsTGluawogfTsKLXR5
cGVkZWYgdWludDMyX3QgX1dLSW1tZWRpYXRlQWN0aW9uVHlwZTsKKworI2lmbmRlZiBfV0tJbW1l
ZGlhdGVBY3Rpb25UeXBlIAorI2RlZmluZSBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlIHVpbnQzMl90
CisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYz
LDcgQEAKICNpbXBvcnQgIldLV2luZG93RmVhdHVyZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dL
RG93bmxvYWRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgor
I2ltcG9ydCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVy
bmFsLmgiCkBAIC0xNTQsNiArMTU1LDEwIEBAIHZvaWQqIE9iamVjdDo6bmV3T2JqZWN0KHNpemVf
dCBzaXplLCBUeXAKICAgICAgICAgd3JhcHBlciA9IFtXS0ZyYW1lSW5mbyBhbGxvY107CiAgICAg
ICAgIGJyZWFrOwogCisgICAgY2FzZSBUeXBlOjpIaXRUZXN0UmVzdWx0OgorICAgICAgICB3cmFw
cGVyID0gW19XS0hpdFRlc3RSZXN1bHQgYWxsb2NdOworICAgICAgICBicmVhazsKKwogICAgIGNh
c2UgVHlwZTo6TmF2aWdhdGlvbjoKICAgICAgICAgd3JhcHBlciA9IFtXS05hdmlnYXRpb24gYWxs
b2NdOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2Vi
SGl0VGVzdFJlc3VsdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkhpdFRlc3RSZXN1bHQubW0JKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxMTEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViSGl0
VGVzdFJlc3VsdC5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJBcmd1bWVudENv
ZGVyc0NGLmgiCi0jaW1wb3J0ICJBcmd1bWVudERlY29kZXIuaCIKLSNpbXBvcnQgIkFyZ3VtZW50
RW5jb2Rlci5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0IDxX
ZWJDb3JlL0RhdGFEZXRlY3RvcnNTUEkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRv
ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRh
OjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBib29sIGhhc0FjdGlvbkNvbnRleHQgPSBkZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0Owot
ICAgIGVuY29kZXIgPDwgaGFzQWN0aW9uQ29udGV4dDsKLSAgICBpZiAoIWhhc0FjdGlvbkNvbnRl
eHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVEYXRhPiBkYXRh
ID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRdKTsKLSAgICBSZXRhaW5QdHI8
TlNLZXllZEFyY2hpdmVyPiBhcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkQXJjaGl2ZXIgYWxs
b2NdIGluaXRGb3JXcml0aW5nV2l0aE11dGFibGVEYXRhOmRhdGEuZ2V0KCldKTsKLSAgICBbYXJj
aGl2ZXIgc2V0UmVxdWlyZXNTZWN1cmVDb2Rpbmc6WUVTXTsKLSAgICBbYXJjaGl2ZXIgZW5jb2Rl
T2JqZWN0OmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQuZ2V0KCkgZm9yS2V5OkAiYWN0aW9uQ29u
dGV4dCJdOwotICAgIFthcmNoaXZlciBmaW5pc2hFbmNvZGluZ107Ci0KLSAgICBJUEM6OmVuY29k
ZShlbmNvZGVyLCByZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4oZGF0YS5nZXQoKSkpOwotCi0g
ICAgZW5jb2RlciA8PCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICBlbmNvZGVyIDw8IGRl
dGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7Ci0KLSAgICBib29sIGhhc0RldGVjdGVk
RGF0YVRleHRJbmRpY2F0b3IgPSBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOwotICAgIGVuY29k
ZXIgPDwgaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcjsKLSAgICBpZiAoaGFzRGV0ZWN0ZWRE
YXRhVGV4dEluZGljYXRvcikKLSAgICAgICAgZW5jb2RlciA8PCBkZXRlY3RlZERhdGFUZXh0SW5k
aWNhdG9yLT5kYXRhKCk7Ci19Ci0KLWJvb2wgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YTo6cGxhdGZv
cm1EZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhKQotewotICAgIGJvb2wgaGFzQWN0aW9uQ29udGV4dDsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0FjdGlvbkNvbnRleHQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhhc0FjdGlvbkNvbnRleHQpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICBpZiAoIUlQQzo6ZGVj
b2RlKGRlY29kZXIsIGRhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5Q
dHI8TlNLZXllZFVuYXJjaGl2ZXI+IHVuYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZFVuYXJj
aGl2ZXIgYWxsb2NdIGluaXRGb3JSZWFkaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEuZ2V0KCld
KTsKLSAgICBbdW5hcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNdOwotICAgIEB0
cnkgewotICAgICAgICBoaXRUZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0
ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpnZXREREFjdGlvbkNvbnRleHRDbGFz
cygpIGZvcktleTpAImFjdGlvbkNvbnRleHQiXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmV4Y2VwdGlvbikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWNvZGUgRERBY3Rp
b25Db250ZXh0OiAlQCIsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2RpbmddOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGl0VGVzdFJl
c3VsdERhdGEuZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQYWdlT3ZlcmxheSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvcjsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0RldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRv
cikgewotICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3JEYXRhOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZGljYXRvckRhdGEpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmRldGVjdGVkRGF0YVRl
eHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0
YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJIaXRUZXN0UmVzdWx0RGF0YS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHREYXRhLm1tCShyZXZpc2lvbiAxOTA2NzQpCShm
cm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdC5tbToxOTA2NzQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHREYXRhLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXZWJIaXRUZXN0UmVzdWx0LmgiCisKKyNpZiBQTEFURk9STShNQUMp
CisKKyNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbXBvcnQgIkFyZ3VtZW50RGVjb2Rl
ci5oIgorI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGF0YURldGVjdG9yc1NQSS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGE6OnBsYXRmb3JtRW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGJvb2wgaGFzQWN0aW9uQ29udGV4dCA9IGRldGVj
dGVkRGF0YUFjdGlvbkNvbnRleHQ7CisgICAgZW5jb2RlciA8PCBoYXNBY3Rpb25Db250ZXh0Owor
ICAgIGlmICghaGFzQWN0aW9uQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10g
aW5pdF0pOworICAgIFJldGFpblB0cjxOU0tleWVkQXJjaGl2ZXI+IGFyY2hpdmVyID0gYWRvcHRO
UyhbW05TS2V5ZWRBcmNoaXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6
ZGF0YS5nZXQoKV0pOworICAgIFthcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNd
OworICAgIFthcmNoaXZlciBlbmNvZGVPYmplY3Q6ZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dC5n
ZXQoKSBmb3JLZXk6QCJhY3Rpb25Db250ZXh0Il07CisgICAgW2FyY2hpdmVyIGZpbmlzaEVuY29k
aW5nXTsKKworICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRh
UmVmPihkYXRhLmdldCgpKSk7CisKKyAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94OworICAgIGVuY29kZXIgPDwgZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQYWdlT3ZlcmxheTsK
KworICAgIGJvb2wgaGFzRGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IGRldGVjdGVkRGF0YVRl
eHRJbmRpY2F0b3I7CisgICAgZW5jb2RlciA8PCBoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9y
OworICAgIGlmIChoYXNEZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yKQorICAgICAgICBlbmNvZGVy
IDw8IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3ItPmRhdGEoKTsKK30KKworYm9vbCBXZWJIaXRU
ZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCit7CisgICAg
Ym9vbCBoYXNBY3Rpb25Db250ZXh0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzQWN0aW9u
Q29udGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaGFzQWN0aW9uQ29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBk
YXRhOworICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZGF0YSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJldGFpblB0cjxOU0tleWVkVW5hcmNoaXZlcj4gdW5hcmNoaXZlciA9
IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxvY10gaW5pdEZvclJlYWRpbmdXaXRoRGF0
YTooTlNEYXRhICopZGF0YS5nZXQoKV0pOworICAgIFt1bmFyY2hpdmVyIHNldFJlcXVpcmVzU2Vj
dXJlQ29kaW5nOllFU107CisgICAgQHRyeSB7CisgICAgICAgIGhpdFRlc3RSZXN1bHREYXRhLmRl
dGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNz
OmdldEREQWN0aW9uQ29udGV4dENsYXNzKCkgZm9yS2V5OkAiYWN0aW9uQ29udGV4dCJdOworICAg
IH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGRlY29kZSBEREFjdGlvbkNvbnRleHQ6ICVAIiwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNv
ZGluZ107CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhpdFRlc3RSZXN1bHREYXRhLmRldGVj
dGVkRGF0YUJvdW5kaW5nQm94KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShoaXRUZXN0UmVzdWx0RGF0YS5kZXRlY3RlZERhdGFPcmlnaW5hdGluZ1Bh
Z2VPdmVybGF5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNEZXRlY3Rl
ZERhdGFUZXh0SW5kaWNhdG9yOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzRGV0ZWN0ZWRE
YXRhVGV4dEluZGljYXRvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChoYXNE
ZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JEYXRhIGluZGljYXRvckRhdGE7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNh
dG9yRGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaGl0VGVzdFJl
c3VsdERhdGEuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0
b3I6OmNyZWF0ZShpbmRpY2F0b3JEYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkhpdFRlc3RSZXN1bHREYXRhLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVzdFJlc3VsdERhdGEu
bW0JKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViSGl0VGVz
dFJlc3VsdERhdGEubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAj
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQg
IldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCiAKICNpZiBQTEFURk9STShNQUMpCiAKQEAgLTM3LDcg
KzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6
RGF0YTo6cGxhdGZvcm1FbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit2b2lkIFdlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybUVuY29kZShJUEM6OkFyZ3VtZW50
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBib29sIGhhc0FjdGlvbkNvbnRleHQgPSBk
ZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0OwogICAgIGVuY29kZXIgPDwgaGFzQWN0aW9uQ29udGV4
dDsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9y
bUVuYwogICAgICAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3ItPmRhdGEo
KTsKIH0KIAotYm9vbCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhOjpwbGF0Zm9ybURlY29kZShJUEM6
OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVz
dFJlc3VsdERhdGEpCitib29sIFdlYkhpdFRlc3RSZXN1bHREYXRhOjpwbGF0Zm9ybURlY29kZShJ
UEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRl
c3RSZXN1bHREYXRhKQogewogICAgIGJvb2wgaGFzQWN0aW9uQ29udGV4dDsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGhhc0FjdGlvbkNvbnRleHQpKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNyArMzMxLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSA9IDA7CiAK
ICNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBib29sIGNvbnRlbnRQ
cmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRQ
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYs
IGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQqIGltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0
UmVzdWx0KFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+LCB1aW50NjRfdCwgUmVmUHRyPEFQSTo6
T2JqZWN0PikgPSAwOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKSAmJiAhUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiQVBJRnJhbWVJbmZvLmgiCiAjaW5jbHVkZSAiQVBJR2VvbWV0cnkuaCIKICNpbmNs
dWRlICJBUElIaXN0b3J5Q2xpZW50LmgiCisjaW5jbHVkZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIkFQSUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50LmgiCiAjaW5jbHVkZSAiQVBJ
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgpAQCAtMzU2NCwxNiAr
MzU2NSwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U3RhdHVzVGV4dChjb25zdCBTCiAgICAg
bV91aUNsaWVudC0+c2V0U3RhdHVzVGV4dCh0aGlzLCB0ZXh0KTsKIH0KIAotdm9pZCBXZWJQYWdl
UHJveHk6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRh
dGEmIGhpdFRlc3RSZXN1bHREYXRhLCB1aW50MzJfdCBvcGFxdWVNb2RpZmllcnMsIGNvbnN0IFVz
ZXJEYXRhJiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxl
bWVudChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIHVpbnQz
Ml90IG9wYXF1ZU1vZGlmaWVycywgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogewotICAgIG1f
bGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpjcmVhdGUoaGl0
VGVzdFJlc3VsdERhdGEpOworICAgIG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQgPSBBUEk6
OkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShoaXRUZXN0UmVzdWx0RGF0YSk7CiAKICAgICBXZWJFdmVu
dDo6TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+
KG9wYXF1ZU1vZGlmaWVycyk7CiAKICAgICBtX3VpQ2xpZW50LT5tb3VzZURpZE1vdmVPdmVyRWxl
bWVudCh0aGlzLCBoaXRUZXN0UmVzdWx0RGF0YSwgbW9kaWZpZXJzLCBtX3Byb2Nlc3MtPnRyYW5z
Zm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhj
b25zdCBJbnRQb2ludCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEmIGhpdFRlc3RSZXN1bHREYXRhLCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCit2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKGNv
bnN0IEludFBvaW50JiBtb3VzZURvd25Qb3NpdGlvbiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERh
dGEmIGhpdFRlc3RSZXN1bHREYXRhLCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CiAgICAg
bV91aUNsaWVudC0+ZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKHRoaXMs
IG1vdXNlRG93blBvc2l0aW9uLCBoaXRUZXN0UmVzdWx0RGF0YSwgbV9wcm9jZXNzLT50cmFuc2Zv
cm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiB9CkBAIC01OTgz
LDExICs1OTg0LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbW1lZGlhdGVBY3Rpb25EaWRDb20K
ICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0ZUFjdGlvbkRp
ZENvbXBsZXRlKCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZv
cm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIHJl
c3VsdCwgYm9vbCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBjb25zdCBVc2VyRGF0YSYgdXNlckRh
dGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Qo
Y29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIHJlc3VsdCwgYm9vbCBjb250ZW50UHJldmVudHNE
ZWZhdWx0LCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CiAgICAgbV9wYWdlQ2xpZW50LmRp
ZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KHJlc3VsdCwgY29udGVudFByZXZlbnRzRGVm
YXVsdCwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVj
dCgpKS5nZXQoKSk7CiB9CiAKK3ZvaWQqIFdlYlBhZ2VQcm94eTo6aW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoUmVmUHRyPEFQSTo6SGl0VGVzdFJlc3Vs
dD4gaGl0VGVzdFJlc3VsdCwgdWludDY0X3QgdHlwZSwgUmVmUHRyPEFQSTo6T2JqZWN0PiB1c2Vy
RGF0YSkKK3sKKyAgICByZXR1cm4gbV9wYWdlQ2xpZW50LmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHQsIHR5cGUsIHVzZXJEYXRh
KTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6Omluc3RhbGxWaWV3U3RhdGVDaGFuZ2VDb21wbGV0
aW9uSGFuZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKCkpCiB7CiAgICAgaWYgKCFpc1Zh
bGlkKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTAxNSwxMyArMTAxNSwxNSBAQCBwdWJsaWM6CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIHZvaWQgcmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOwog
Ci0gICAgV2ViSGl0VGVzdFJlc3VsdCogbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQoKSBjb25z
dCB7IHJldHVybiBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0LmdldCgpOyB9CisgICAgQVBJ
OjpIaXRUZXN0UmVzdWx0KiBsYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQuZ2V0KCk7IH0KICAgICB2b2lkIHBlcmZv
cm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KTsK
IAogICAgIHZvaWQgaW1tZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCk7CiAgICAgdm9pZCBpbW1lZGlh
dGVBY3Rpb25EaWRDYW5jZWwoKTsKICAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRl
KCk7CiAKKyAgICB2b2lkKiBpbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0
VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiwgdWludDY0X3QsIFJlZlB0cjxB
UEk6Ok9iamVjdD4pOworCiAgICAgdm9pZCBpbnN0YWxsVmlld1N0YXRlQ2hhbmdlQ29tcGxldGlv
bkhhbmRsZXIodm9pZCheY29tcGxldGlvbkhhbmRsZXIpKCkpOwogI2VuZGlmCiAKQEAgLTExNTAs
OSArMTE1Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBydW5KYXZhU2NyaXB0Q29uZmlybSh1aW50
NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBT
dHJpbmcmLCBSZWZQdHI8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZp
cm06OkRlbGF5ZWRSZXBseT4pOwogICAgIHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRf
dCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2
YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5Pik7CiAgICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNv
bnN0IFN0cmluZyYpOwotICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2Vi
SGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIHVpbnQzMl90IG1vZGlmaWVy
cywgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiwgdWludDMyX3QgbW9kaWZpZXJzLCBjb25zdCBVc2Vy
RGF0YSYpOwogCi0gICAgdm9pZCBkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJl
c3MoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1vdXNlRG93blBvc2l0aW9uLCBjb25zdCBXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgY29uc3QgVXNlckRhdGEmKTsK
KyAgICB2b2lkIGRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHREYXRhJiwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGRpZFJlY29nbml6ZUxvbmdNb3Vz
ZVByZXNzKGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBkaWRDYW5jZWxUcmFja2luZ1BvdGVu
dGlhbExvbmdNb3VzZVByZXNzKGNvbnN0IFVzZXJEYXRhJik7CiAKQEAgLTE0NTEsNyArMTQ1Myw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aWV3RGlkRW50ZXJXaW5kb3coKTsKIAogI2lmIFBMQVRG
T1JNKE1BQykKLSAgICB2b2lkIGRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0
IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIGNv
bnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVz
dChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVs
dCwgY29uc3QgVXNlckRhdGEmKTsKICNlbmRpZgogCiAgICAgdm9pZCB1c2VGaXhlZExheW91dERp
ZENoYW5nZShib29sIHVzZUZpeGVkTGF5b3V0KSB7IG1fdXNlRml4ZWRMYXlvdXQgPSB1c2VGaXhl
ZExheW91dDsgfQpAQCAtMTU1NSw3ICsxNTU3LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2Vi
Q29udGV4dE1lbnVQcm94eT4gbV9hY3RpdmVDb250ZXh0TWVudTsKICAgICBDb250ZXh0TWVudUNv
bnRleHREYXRhIG1fYWN0aXZlQ29udGV4dE1lbnVDb250ZXh0RGF0YTsKICNlbmRpZgotICAgIFJl
ZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0OworICAg
IFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IG1fbGFzdE1vdXNlTW92ZUhpdFRlc3RSZXN1bHQ7
CiAKICAgICBSZWZQdHI8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eT4gbV9vcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lcjsKICAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByb3h5IG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZVByb3h5IHsKICAgICBSdW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwg
c3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBmcmFtZVNlY3VyaXR5T3JpZ2luLCBT
dHJpbmcgbWVzc2FnZSkgLT4gKCkgRGVsYXllZAogICAgIFJ1bkphdmFTY3JpcHRDb25maXJtKHVp
bnQ2NF90IGZyYW1lSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgZnJhbWVT
ZWN1cml0eU9yaWdpbiwgU3RyaW5nIG1lc3NhZ2UpIC0+IChib29sIHJlc3VsdCkgRGVsYXllZAog
ICAgIFJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgc3RydWN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSBmcmFtZVNlY3VyaXR5T3JpZ2luLCBTdHJpbmcgbWVzc2FnZSwg
U3RyaW5nIGRlZmF1bHRWYWx1ZSkgLT4gKFN0cmluZyByZXN1bHQpIERlbGF5ZWQKLSAgICBNb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgaGl0VGVz
dFJlc3VsdERhdGEsIHVpbnQzMl90IG1vZGlmaWVycywgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0
YSkKKyAgICBNb3VzZURpZE1vdmVPdmVyRWxlbWVudChzdHJ1Y3QgV2ViS2l0OjpXZWJIaXRUZXN0
UmVzdWx0RGF0YSBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3QgbW9kaWZpZXJzLCBXZWJLaXQ6
OlVzZXJEYXRhIHVzZXJEYXRhKQogCi0gICAgRGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdN
b3VzZVByZXNzKFdlYkNvcmU6OkludFBvaW50IG1vdXNlRG93blBvc2l0aW9uLCBXZWJLaXQ6Oldl
YkhpdFRlc3RSZXN1bHQ6OkRhdGEgaGl0VGVzdFJlc3VsdERhdGEsIFdlYktpdDo6VXNlckRhdGEg
dXNlckRhdGEpCisgICAgRGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKFdl
YkNvcmU6OkludFBvaW50IG1vdXNlRG93blBvc2l0aW9uLCBzdHJ1Y3QgV2ViS2l0OjpXZWJIaXRU
ZXN0UmVzdWx0RGF0YSBoaXRUZXN0UmVzdWx0RGF0YSwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0
YSkKICAgICBEaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcyhXZWJLaXQ6OlVzZXJEYXRhIHVzZXJE
YXRhKQogICAgIERpZENhbmNlbFRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViS2l0
OjpVc2VyRGF0YSB1c2VyRGF0YSkKIApAQCAtNDMxLDcgKzQzMSw3IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2VQcm94eSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBEaWRQZXJmb3Jt
SW1tZWRpYXRlQWN0aW9uSGl0VGVzdChzdHJ1Y3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhIHJlc3VsdCwgYm9vbCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBXZWJLaXQ6OlVzZXJEYXRh
IHVzZXJEYXRhKQorICAgIERpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KHN0cnVjdCBX
ZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhIHJlc3VsdCwgYm9vbCBjb250ZW50UHJldmVudHNE
ZWZhdWx0LCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogI2VuZGlmCiAgICAgSGFuZGxlTWVz
c2FnZShTdHJpbmcgbWVzc2FnZU5hbWUsIFdlYktpdDo6VXNlckRhdGEgbWVzc2FnZUJvZHkpIFdh
bnRzQ29ubmVjdGlvbgogICAgIEhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShTdHJpbmcgbWVzc2Fn
ZU5hbWUsIFdlYktpdDo6VXNlckRhdGEgbWVzc2FnZUJvZHkpIC0+IChXZWJLaXQ6OlVzZXJEYXRh
IHJldHVybkRhdGEpIFdhbnRzQ29ubmVjdGlvbgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElDb250ZXh0TWVudUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGV4dE1lbnVDbGllbnQuaAkocmV2aXNpb24gMTkwODA3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZXh0TWVudUNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQ09OVEVYVF9N
RU5VUykKIAotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJIaXRU
ZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQ29udGV4dE1lbnVDbGllbnQgewog
cHVibGljOgogICAgIHZpcnR1YWwgfkNvbnRleHRNZW51Q2xpZW50KCkgeyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYktpdDo6V2ViUGFnZVBy
b3h5JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiAv
KiBwcm9wb3NlZE1lbnUgKi8sIFZlY3RvcjxSZWZQdHI8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0
ZW0+PiYgLyogY3VzdG9tTWVudSAqLywgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhJiwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBjb25zdCBWZWN0b3I8UmVmUHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVt
Pj4mIC8qIHByb3Bvc2VkTWVudSAqLywgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRN
ZW51SXRlbT4+JiAvKiBjdXN0b21NZW51ICovLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1
bHREYXRhJiwgQVBJOjpPYmplY3QqIC8qIHVzZXJEYXRhICovKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBjdXN0b21Db250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJLaXQ6Oldl
YlBhZ2VQcm94eSYsIGNvbnN0IFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZChXZWJLaXQ6OldlYlBhZ2VQcm94
eSYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG93Q29udGV4dE1lbnUoV2ViS2l0OjpXZWJQYWdl
UHJveHkmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2Vi
S2l0OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYpIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCShyZXZpc2lvbiAxOTA4MDcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIldLUGFnZS5oIgogI2luY2x1ZGUg
IldlYkV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIldl
YkhpdFRlc3RSZXN1bHREYXRhLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgpAQCAtOTAsNyAr
OTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRQcm9tcHQoV2Vi
S2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5n
JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXVEY6OlN0cmluZyYpPiBjb21wbGV0aW9u
SGFuZGxlcikgeyBjb21wbGV0aW9uSGFuZGxlcihXVEY6OlN0cmluZygpKTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHNldFN0YXR1c1RleHQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6
OlN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChX
ZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0
YSYsIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVycywgQVBJOjpPYmplY3QqKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJiwgV2ViS2l0OjpXZWJFdmVudDo6
TW9kaWZpZXJzLCBBUEk6Ok9iamVjdCopIHsgfQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIHZpcnR1YWwgdm9pZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2Vi
S2l0OjpXZWJQYWdlUHJveHkqLCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBBUEk6OkRp
Y3Rpb25hcnkqKSB7IH0KICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAg
LTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGlubmVkU3RhdGVE
aWRDaGFuZ2UoV2ViS2l0OjpXZWJQYWdlUHJveHkmKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJl
c3VsdDo6RGF0YSYsIEFQSTo6T2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2lu
VHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0
YSYsIEFQSTo6T2JqZWN0KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY29nbml6ZUxvbmdN
b3VzZVByZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgQVBJOjpPYmplY3QqKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJL
aXQ6OldlYlBhZ2VQcm94eSosIEFQSTo6T2JqZWN0KikgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsNyBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEZyYW1lSW5mbzsKK2Ns
YXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBOYXZpZ2F0aW9uOwogY2xhc3MgTmF2aWdhdGlvbkFj
dGlvbjsKIGNsYXNzIE5hdmlnYXRpb25EYXRhOwpAQCAtODksNyArOTAsNiBAQCBjbGFzcyBXZWJG
cmFtZVByb3h5OwogY2xhc3MgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJH
ZW9sb2NhdGlvblBvc2l0aW9uOwogY2xhc3MgV2ViR3JhbW1hckRldGFpbDsKLWNsYXNzIFdlYkhp
dFRlc3RSZXN1bHQ7CiBjbGFzcyBXZWJJY29uRGF0YWJhc2U7CiBjbGFzcyBXZWJJbnNwZWN0b3JQ
cm94eTsKIGNsYXNzIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk7CkBAIC0xMzQsNyArMTM0LDcg
QEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLR2VvbG9jYXRpb25NYW5hZ2VyUgogV0tfQUREX0FQSV9N
QVBQSU5HKFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZiwgR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdFByb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLR2VvbG9jYXRpb25Qb3Np
dGlvblJlZiwgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhXS0dy
YW1tYXJEZXRhaWxSZWYsIFdlYkdyYW1tYXJEZXRhaWwpCi1XS19BRERfQVBJX01BUFBJTkcoV0tI
aXRUZXN0UmVzdWx0UmVmLCBXZWJIaXRUZXN0UmVzdWx0KQorV0tfQUREX0FQSV9NQVBQSU5HKFdL
SGl0VGVzdFJlc3VsdFJlZiwgQVBJOjpIaXRUZXN0UmVzdWx0KQogV0tfQUREX0FQSV9NQVBQSU5H
KFdLSWNvbkRhdGFiYXNlUmVmLCBXZWJJY29uRGF0YWJhc2UpCiBXS19BRERfQVBJX01BUFBJTkco
V0tJbnNwZWN0b3JSZWYsIFdlYkluc3BlY3RvclByb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdL
TWVkaWFDYWNoZU1hbmFnZXJSZWYsIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0LmNw
cAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
SGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLSGl0VGVzdFJlc3VsdC5oIgogCisjaW5jbHVk
ZSAiQVBJSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUg
IldlYkhpdFRlc3RSZXN1bHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tUeXBl
SUQgV0tIaXRUZXN0UmVzdWx0R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViSGl0
VGVzdFJlc3VsdDo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJKEFQSTo6SGl0VGVzdFJlc3Vs
dDo6QVBJVHlwZSk7CiB9CiAKIFdLVVJMUmVmIFdLSGl0VGVzdFJlc3VsdENvcHlBYnNvbHV0ZUlt
YWdlVVJMKFdLSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDE5MDgwNykKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
IkFQSUZpbmRDbGllbnQuaCIKICNpbmNsdWRlICJBUElGcmFtZUluZm8uaCIKKyNpbmNsdWRlICJB
UElIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiQVBJTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25DbGllbnQu
aCIKQEAgLTc2OCw3ICs3NjksNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVu
dChXS1BhCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mIHByb3Bvc2VkTWVudVZl
Y3RvciwgVmVjdG9yPFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiBjdXN0b21N
ZW51LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgQVBJ
OjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0Q29u
dGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgVmVjdG9y
PFJlZlB0cjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiBwcm9wb3NlZE1lbnVWZWN0b3Is
IFZlY3RvcjxSZWZQdHI8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW0+PiYgY3VzdG9tTWVudSwg
Y29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1bHREYXRhLCBBUEk6Ok9iamVj
dCogdXNlckRhdGEpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGll
bnQuZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51ICYmICFtX2NsaWVudC5nZXRDb250ZXh0
TWVudUZyb21Qcm9wb3NlZE1lbnVfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODQsNyArNzg1LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdl
Q29udGV4dE1lbnVDbGllbnQoV0tQYQogCiAgICAgICAgICAgICBXS0FycmF5UmVmIG5ld01lbnUg
PSBudWxscHRyOwogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmJhc2UudmVyc2lvbiA+PSAyKSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IHdlYkhpdFRlc3RSZXN1
bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpjcmVhdGUoaGl0VGVzdFJlc3VsdERhdGEpOworICAgICAg
ICAgICAgICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IHdlYkhpdFRlc3RSZXN1bHQgPSBB
UEk6OkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShoaXRUZXN0UmVzdWx0RGF0YSk7CiAgICAgICAgICAg
ICAgICAgbV9jbGllbnQuZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KHRvQVBJKCZwYWdl
KSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURjo6bW92ZShwcm9wb3NlZE1lbnVJdGVtcykp
LnB0cigpKSwgJm5ld01lbnUsIHRvQVBJKHdlYkhpdFRlc3RSZXN1bHQuZ2V0KCkpLCB0b0FQSSh1
c2VyRGF0YSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBtX2NsaWVudC5nZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVf
ZGVwcmVjYXRlZEZvclVzZVdpdGhWMCh0b0FQSSgmcGFnZSksIHRvQVBJKEFQSTo6QXJyYXk6OmNy
ZWF0ZShXVEY6Om1vdmUocHJvcG9zZWRNZW51SXRlbXMpKS5wdHIoKSksICZuZXdNZW51LCB0b0FQ
SSh1c2VyRGF0YSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CkBAIC0xNjM3LDcgKzE2Mzgs
NyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnCiAgICAgICAgICAg
ICBtX2NsaWVudC5zZXRTdGF0dXNUZXh0KHRvQVBJKHBhZ2UpLCB0b0FQSSh0ZXh0LmltcGwoKSks
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBkYXRhLCBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVy
cywgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIHZvaWQg
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYgZGF0YSwgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIEFQSTo6
T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFt
X2NsaWVudC5tb3VzZURpZE1vdmVPdmVyRWxlbWVudCAmJiAhbV9jbGllbnQubW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCkKICAgICAgICAgICAgICAgICByZXR1
cm47CkBAIC0xNjUwLDcgKzE2NTEsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1Bh
Z2VSZWYgcGFnCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVzdFJlc3VsdCA9IFdlYkhp
dFRlc3RSZXN1bHQ6OmNyZWF0ZShkYXRhKTsKKyAgICAgICAgICAgIFJlZlB0cjxBUEk6OkhpdFRl
c3RSZXN1bHQ+IHdlYkhpdFRlc3RSZXN1bHQgPSBBUEk6OkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShk
YXRhKTsKICAgICAgICAgICAgIG1fY2xpZW50Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHRvQVBJ
KHBhZ2UpLCB0b0FQSSh3ZWJIaXRUZXN0UmVzdWx0LmdldCgpKSwgdG9BUEkobW9kaWZpZXJzKSwg
dG9BUEkodXNlckRhdGEpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAK
QEAgLTE5MTgsMTIgKzE5MTksMTIgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdl
UmVmIHBhZwogICAgICAgICAgICAgbV9jbGllbnQucGlubmVkU3RhdGVEaWRDaGFuZ2UodG9BUEko
JnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhXZWJQ
YWdlUHJveHkqIHBhZ2UsIGNvbnN0IEludFBvaW50JiBtb3VzZURvd25Qb3NpdGlvbiwgY29uc3Qg
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgZGF0YSwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKSBvdmVy
cmlkZQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdN
b3VzZVByZXNzKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgSW50UG9pbnQmIG1vdXNlRG93blBv
c2l0aW9uLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgZGF0YSwgQVBJOjpPYmplY3QqIHVz
ZXJJbmZvKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRp
ZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcykKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiB3ZWJIaXRUZXN0
UmVzdWx0ID0gV2ViSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGRhdGEpOworICAgICAgICAgICAgUmVm
UHRyPEFQSTo6SGl0VGVzdFJlc3VsdD4gd2ViSGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVzdFJl
c3VsdDo6Y3JlYXRlKGRhdGEpOwogICAgICAgICAgICAgbV9jbGllbnQuZGlkQmVnaW5UcmFja2lu
Z1BvdGVudGlhbExvbmdNb3VzZVByZXNzKHRvQVBJKHBhZ2UpLCB0b0FQSShtb3VzZURvd25Qb3Np
dGlvbiksIHRvQVBJKHdlYkhpdFRlc3RSZXN1bHQuZ2V0KCkpLCB0b0FQSSh1c2VySW5mbyksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHJldmlzaW9u
IDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogLy8gQ2xpZW50cyB0
aGF0IHdhbnQgdG8gbWFpbnRhaW4gZGVmYXVsdCBiZWhhdmlvciBjYW4gcmV0dXJuIG5pbC4gVG8g
ZGlzYWJsZSB0aGUgaW1tZWRpYXRlIGFjdGlvbiBlbnRpcmVseSwgcmV0dXJuIE5TTnVsbC4gQW5k
IHRvCiAvLyBkbyBzb21ldGhpbmcgY3VzdG9tLCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgY29uZm9y
bXMgdG8gdGhlIE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlciBwcm90b2NvbC4K
LS0gKGlkKV9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3Vs
dDooV0tIaXRUZXN0UmVzdWx0UmVmKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0
ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTooV0tUeXBlUmVmKXVzZXJEYXRhOworLSAoaWQpX2lt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OihXS0hpdFRl
c3RSZXN1bHRSZWYpaGl0VGVzdFJlc3VsdCB3aXRoVHlwZToodWludDMyX3QpdHlwZSB1c2VyRGF0
YTooV0tUeXBlUmVmKXVzZXJEYXRhOwogCiAtICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uOwogLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0JKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDc5LDYgKzMwNzksMTEgQEAgLSAo
Q0dGbG9hdClfb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcgogICAgIHJldHVybiBbX3drVmlldyBf
b3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3Rvcl07CiB9CiAKKy0gKGlkKV9pbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDooX1dLSGl0VGVzdFJlc3VsdCAqKWhp
dFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0
YTooaWQ8TlNTZWN1cmVDb2Rpbmc+KXVzZXJEYXRhCit7CisgICAgcmV0dXJuIG5pbDsKK30KKwog
LSAodm9pZClfc2V0VG9wQ29udGVudEluc2V0OihDR0Zsb2F0KWNvbnRlbnRJbnNldAogewogICAg
IFtfd2tWaWV3IF9zZXRUb3BDb250ZW50SW5zZXQ6Y29udGVudEluc2V0XTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0
ZS5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksMTcgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLUGFnaW5hdGlvbgogICAgIF9XS1BhZ2luYXRp
b25Nb2RlQm90dG9tVG9Ub3AsCiB9IFdLX0VOVU1fQVZBSUxBQkxFKDEwXzEwLCA4XzApOwogCit0
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKSB7CisgICAg
X1dLSW1tZWRpYXRlQWN0aW9uTm9uZSwKKyAgICBfV0tJbW1lZGlhdGVBY3Rpb25MaW5rUHJldmll
dywKKyAgICBfV0tJbW1lZGlhdGVBY3Rpb25EYXRhRGV0ZWN0ZWRJdGVtLAorICAgIF9XS0ltbWVk
aWF0ZUFjdGlvbkxvb2t1cFRleHQsCisgICAgX1dLSW1tZWRpYXRlQWN0aW9uTWFpbHRvTGluaywK
KyAgICBfV0tJbW1lZGlhdGVBY3Rpb25UZWxMaW5rCit9IFdLX0FWQUlMQUJMRShXS19NQUNfVEJB
LCBOQSk7CisKIEBjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZTsKK0BjbGFzcyBfV0tIaXRU
ZXN0UmVzdWx0OwogQGNsYXNzIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogQGNsYXNzIF9XS1Nl
c3Npb25TdGF0ZTsKIEBjbGFzcyBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXI7CkBAIC0xNzIsNiAr
MTgyLDkgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLUGFnaW5hdGlvbgogCiBAcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFi
bGVkOikgQk9PTCBfd2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDsKIAorLy8gQ2xpZW50
cyB0aGF0IHdhbnQgdG8gbWFpbnRhaW4gZGVmYXVsdCBiZWhhdmlvciBjYW4gcmV0dXJuIG5pbC4g
VG8gZGlzYWJsZSB0aGUgaW1tZWRpYXRlIGFjdGlvbiBlbnRpcmVseSwgcmV0dXJuIE5TTnVsbC4g
QW5kIHRvCisvLyBkbyBzb21ldGhpbmcgY3VzdG9tLCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgY29u
Zm9ybXMgdG8gdGhlIE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlciBwcm90b2Nv
bC4KKy0gKGlkKV9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJl
c3VsdDooX1dLSGl0VGVzdFJlc3VsdCAqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVk
aWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTooaWQ8TlNTZWN1cmVDb2Rpbmc+KXVzZXJEYXRh
OwogI2VuZGlmCiAKIC0gKHZvaWQpX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJBY2Nlc3NpYmlsaXR5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJB
Y2Nlc3NpYmlsaXR5LmNwcAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvV2ViQWNjZXNzaWJpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS1ZpZXdFZmwu
aCIKLSNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUNs
aWVudC5jcHAJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZ2V0Q29udGV4
dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
V2ViQ29udGV4dE1lbnVJdGVtPj4mIHByb3Bvc2VkTWVudSwgVmVjdG9yPFJlZlB0cjxXZWJDb250
ZXh0TWVudUl0ZW0+PiYsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1
bHREYXRhLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlCisgICAgYm9vbCBnZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViUGFnZVByb3h5JiwgY29uc3QgVmVjdG9yPFJlZlB0
cjxXZWJDb250ZXh0TWVudUl0ZW0+PiYgcHJvcG9zZWRNZW51LCBWZWN0b3I8UmVmUHRyPFdlYkNv
bnRleHRNZW51SXRlbT4+JiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1
bHREYXRhLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBH
UmVmUHRyPEdWYXJpYW50PiB2YXJpYW50OwogICAgICAgICBpZiAodXNlckRhdGEpIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhp
dFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAsNyArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdEhpdFRl
c3RSZXN1bHQuaCIKIAotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJX
ZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIldlYktpdEhpdFRlc3RSZXN1bHRQcml2
YXRlLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CkBAIC0yMjEsNyArMjIxLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jbGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbUZsYWdzKSk7CiB9CiAKLVdlYktpdEhpdFRlc3RSZXN1bHQqIHdl
YmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUoY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0
VGVzdFJlc3VsdCkKK1dlYktpdEhpdFRlc3RSZXN1bHQqIHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVh
dGUoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1bHQpCiB7CiAgICAgdW5z
aWduZWQgY29udGV4dCA9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDsK
IApAQCAtMjU4LDcgKzI1OCw3IEBAIHN0YXRpYyBib29sIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmco
Y29uc3QKICAgICByZXR1cm4gKChzdHJpbmcuaXNFbXB0eSgpICYmIGNTdHJpbmcuaXNOdWxsKCkp
IHx8IChzdHJpbmcudXRmOCgpID09IGNTdHJpbmcpKTsKIH0KIAotYm9vbCB3ZWJraXRIaXRUZXN0
UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBjb25zdCBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiB3ZWJIaXRUZXN0UmVzdWx0KQorYm9vbCB3ZWJraXRIaXRU
ZXN0UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBjb25z
dCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgd2ViSGl0VGVzdFJlc3VsdCkKIHsKICAgICBXZWJLaXRI
aXRUZXN0UmVzdWx0UHJpdmF0ZSogcHJpdiA9IGhpdFRlc3RSZXN1bHQtPnByaXY7CiAgICAgcmV0
dXJuIHdlYkhpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUgPT0gd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRl
c3RSZXN1bHRQcml2YXRlLmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJXZWJLaXRIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogCi1XZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRI
aXRUZXN0UmVzdWx0Q3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYp
OwotYm9vbCB3ZWJraXRIaXRUZXN0UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0UmVzdWx0Kiwg
Y29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7CitXZWJLaXRIaXRUZXN0UmVz
dWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJl
c3VsdERhdGEmKTsKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVz
dFJlc3VsdCosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmKTsKIAogI2VuZGlm
IC8vIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAJKHJldmlzaW9uIDE5
MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihTdHJpbmc6OmZyb21VVEY4KHJlc3VsdC5kYXRhKCkpKTsKICAgICB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5
KiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgZGF0YSwgV2ViRXZlbnQ6Ok1vZGlmaWVy
cyBtb2RpZmllcnMsIEFQSTo6T2JqZWN0Kikgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViSGl0VGVzdFJlc3Vs
dERhdGEmIGRhdGEsIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzLCBBUEk6Ok9iamVjdCop
IG92ZXJyaWRlCiAgICAgewogICAgICAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2Vk
KG1fd2ViVmlldywgZGF0YSwgdG9HZGtNb2RpZmllcnMobW9kaWZpZXJzKSk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMyLDcgKzE5MzIsNyBA
QCB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3QoCiAgICAgZ19zaWduYWxf
ZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1BFUk1JU1NJT05fUkVRVUVTVF0sIDAsIHJlcXVlc3QsICZy
ZXR1cm5WYWx1ZSk7CiB9CiAKLXZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRU
ZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllcnMpCit2b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRh
cmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgV2ViSGl0VGVzdFJlc3Vs
dERhdGEmIGhpdFRlc3RSZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVycykKIHsKICAgICB3ZWJraXRX
ZWJWaWV3QmFzZVNldFRvb2x0aXBBcmVhKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCBo
aXRUZXN0UmVzdWx0LmVsZW1lbnRCb3VuZGluZ0JveCk7CiAKQEAgLTIwNzYsNyArMjA3Niw3IEBA
IHN0YXRpYyB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkKEd0a01lbnUKICAgICBnX3NpZ25hbF9l
bWl0KHdlYlZpZXcsIHNpZ25hbHNbQ09OVEVYVF9NRU5VX0RJU01JU1NFRF0sIDAsIE5VTEwpOwog
fQogCi12b2lkIHdlYmtpdFdlYlZpZXdQb3B1bGF0ZUNvbnRleHRNZW51KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgcHJvcG9zZWRN
ZW51LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgR1Zh
cmlhbnQqIHVzZXJEYXRhKQordm9pZCB3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0
YT4mIHByb3Bvc2VkTWVudSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1
bHREYXRhLCBHVmFyaWFudCogdXNlckRhdGEpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyk7CiAgICAgV2ViQ29udGV4
dE1lbnVQcm94eUd0ayogY29udGV4dE1lbnVQcm94eSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0QWN0
aXZlQ29udGV4dE1lbnVQcm94eSh3ZWJWaWV3QmFzZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgJKHJl
dmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIkluc3RhbGxNaXNzaW5nTWVkaWFQbHVnaW5zUGVybWlzc2lvblJlcXVlc3QuaCIKICNp
bmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCiAjaW5jbHVkZSAiV2Vi
SW1hZ2UuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgpAQCAtNDYsNyArNDYsNyBAQCBib29sIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2Ny
aXB0Q29uZmlybShXCiBDU3RyaW5nIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KFdl
YktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZh
dWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3QoV2ViS2l0
V2ViVmlldyosIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdN
YWtlUG9saWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlw
ZSwgV2ViS2l0UG9saWN5RGVjaXNpb24qKTsKLXZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0
Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpE
YXRhJiwgdW5zaWduZWQgbW9kaWZpZXJzKTsKK3ZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0
Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0
YSYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiB2b2lkIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKFdl
YktpdFdlYlZpZXcqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKTsKIHZvaWQgd2Via2l0V2ViVmll
d1Jlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdDo6V2ViRnJhbWVQcm94
eSosIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViS2l0VVJJUmVxdWVzdCopOwogdm9p
ZCB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqLCBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCB3ZWJLaXRXZWJW
aWV3RGlkUmVjZWl2ZVNuYXBzaG90KFdlYgogdm9pZCB3ZWJraXRXZWJWaWV3UmVtb3ZlTG9hZGlu
Z1dlYlJlc291cmNlKFdlYktpdFdlYlZpZXcqLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIp
OwogYm9vbCB3ZWJraXRXZWJWaWV3RW50ZXJGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXcqKTsKIGJv
b2wgd2Via2l0V2ViVmlld0xlYXZlRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3Kik7Ci12b2lkIHdl
YmtpdFdlYlZpZXdQb3B1bGF0ZUNvbnRleHRNZW51KFdlYktpdFdlYlZpZXcqLCBjb25zdCBWZWN0
b3I8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgcHJvcG9zZWRNZW51LCBjb25zdCBX
ZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBHVmFyaWFudCopOwordm9pZCB3ZWJraXRX
ZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3KiwgY29uc3QgVmVjdG9yPFdl
YktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHByb3Bvc2VkTWVudSwgY29uc3QgV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIEdWYXJpYW50Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdT
dWJtaXRGb3JtUmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5Kik7CiB2
b2lkIHdlYmtpdFdlYlZpZXdJbnNlY3VyZUNvbnRlbnREZXRlY3RlZChXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBACiAjaW1wb3J0ICJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlz
dC5oIgogI2ltcG9ydCAiV2ViRXZlbnRGYWN0b3J5LmgiCi0jaW1wb3J0ICJXZWJIaXRUZXN0UmVz
dWx0LmgiCisjaW1wb3J0ICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2ltcG9ydCAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKICNpbXBvcnQgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW1wb3J0ICJX
ZWJQYWdlLmgiCkBAIC0zOTgwLDcgKzM5ODAsNyBAQCAtICh2b2lkKV9yZW1vdmVOYXZpZ2F0aW9u
R2VzdHVyZVNuYXBzaG90CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTAwMAogCi0tICh2b2lkKV9kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29u
c3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNE
ZWZhdWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0
Kil1c2VyRGF0YQorLSAodm9pZClfZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6KGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiloaXRUZXN0UmVzdWx0IGNvbnRlbnRQcmV2ZW50c0Rl
ZmF1bHQ6KEJPT0wpY29udGVudFByZXZlbnRzRGVmYXVsdCB1c2VyRGF0YTooQVBJOjpPYmplY3Qq
KXVzZXJEYXRhCiB7CiAgICAgW19kYXRhLT5faW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBkaWRQ
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDpoaXRUZXN0UmVzdWx0IGNvbnRlbnRQcmV2ZW50
c0RlZmF1bHQ6Y29udGVudFByZXZlbnRzRGVmYXVsdCB1c2VyRGF0YTp1c2VyRGF0YV07CiB9CkBA
IC00NjU1LDcgKzQ2NTUsNyBAQCAtICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxi
YWNrCiAgICAgX2RhdGEtPl9nZXN0dXJlQ29udHJvbGxlci0+c2V0RGlkTW92ZVN3aXBlU25hcHNo
b3RDYWxsYmFjayhjYWxsYmFjayk7CiB9CiAKLS0gKGlkKV9pbW1lZGlhdGVBY3Rpb25BbmltYXRp
b25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDooV0tIaXRUZXN0UmVzdWx0UmVmKWhpdFRlc3RS
ZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTooV0tU
eXBlUmVmKXVzZXJEYXRhCistIChpZClfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxl
ckZvckhpdFRlc3RSZXN1bHQ6KFdLSGl0VGVzdFJlc3VsdFJlZiloaXRUZXN0UmVzdWx0IHdpdGhU
eXBlOih1aW50MzJfdCl0eXBlIHVzZXJEYXRhOihXS1R5cGVSZWYpdXNlckRhdGEKIHsKICAgICBy
ZXR1cm4gbmlsOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW1wb3J0ICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKICNp
bXBvcnQgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW1wb3J0ICJXZWJGaW5kT3B0
aW9ucy5oIgotI2ltcG9ydCAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiV2ViSGl0VGVz
dFJlc3VsdERhdGEuaCIKICNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0xNDUsNyArMTQ1LDcgQEAgQGlu
dGVyZmFjZSBXS1ZpZXcgKCkKIC0gKHZvaWQpX3ByZXBhcmVGb3JEaWN0aW9uYXJ5TG9va3VwOwog
CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKLS0gKHZvaWQp
X2RpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0Oihjb25zdCBXZWJLaXQ6OldlYkhpdFRl
c3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDooQk9P
TCljb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRhdGE7
CistICh2b2lkKV9kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViS2l0
OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZh
dWx0OihCT09MKWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1
c2VyRGF0YTsKICNlbmRpZgogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDExMDAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsLmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw5IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWlu
RnJhbWUoU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmpl
Y3QqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBib29sIGNvbnRlbnRQcmV2ZW50
c0RlZmF1bHQsIEFQSTo6T2JqZWN0Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkKiBpbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJ
OjpIaXRUZXN0UmVzdWx0PiwgdWludDY0X3QsIFJlZlB0cjxBUEk6Ok9iamVjdD4pIG92ZXJyaWRl
OworCiAgICAgdmlydHVhbCB2b2lkIHNob3dQbGF0Zm9ybUNvbnRleHRNZW51KE5TTWVudSAqLCBX
ZWJDb3JlOjpJbnRQb2ludCkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
QmFja2dyb3VuZENvbG9yKCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBvcnQgIldlYlBvcHVwTWVudVByb3h5TWFjLmgiCiAjaW1w
b3J0ICJXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmgiCiAjaW1wb3J0ICJfV0tEb3dubG9hZEludGVy
bmFsLmgiCisjaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9X
S1RodW1ibmFpbFZpZXcuaCIKICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+CkBAIC04MTEsMTMgKzgx
MiwyMiBAQCBDR1JlY3QgUGFnZUNsaWVudEltcGw6OmJvdW5kc09mTGF5ZXJJbkxhCiAgICAgcmV0
dXJuIFt3aW5kb3dDb250ZW50TGF5ZXIgY29udmVydFJlY3Q6bGF5ZXIuYm91bmRzIGZyb21MYXll
cjpsYXllcl07CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIHJlc3VsdCwgYm9vbCBj
b250ZW50UHJldmVudHNEZWZhdWx0LCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYgcmVzdWx0LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIEFQSTo6
T2JqZWN0KiB1c2VyRGF0YSkKIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMAogICAgIFttX3drVmlldyBfZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRl
c3Q6cmVzdWx0IGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQ6Y29udGVudFByZXZlbnRzRGVmYXVsdCB1
c2VyRGF0YTp1c2VyRGF0YV07CiAjZW5kaWYKIH0KIAordm9pZCogUGFnZUNsaWVudEltcGw6Omlt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KFJlZlB0cjxB
UEk6OkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQsIHVpbnQ2NF90IHR5cGUsIFJlZlB0cjxB
UEk6Ok9iamVjdD4gdXNlckRhdGEpCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBpZiAobV93
ZWJWaWV3KQorICAgICAgICByZXR1cm4gW21fd2ViVmlldyBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0
aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6d3JhcHBlcigqaGl0VGVzdFJlc3VsdCkgd2l0
aFR5cGU6KF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTooaWQpKHVzZXJEYXRh
LmdldCgpKV07CisjZW5kaWYKKyAgICByZXR1cm4gW21fd2tWaWV3IF9pbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDp0b0FQSShoaXRUZXN0UmVzdWx0Lmdl
dCgpKSB3aXRoVHlwZTp0eXBlIHVzZXJEYXRhOnRvQVBJKHVzZXJEYXRhLmdldCgpKV07Cit9CisK
IHZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dQbGF0Zm9ybUNvbnRleHRNZW51KE5TTWVudSAqbWVu
dSwgSW50UG9pbnQgbG9jYXRpb24pCiB7CiAgICAgW21lbnUgcG9wVXBNZW51UG9zaXRpb25pbmdJ
dGVtOm5pbCBhdExvY2F0aW9uOmxvY2F0aW9uIGluVmlldzptX3drVmlld107CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyLmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAKICNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAKICNpbXBvcnQgIldLSW1tZWRpYXRlQWN0aW9uVHlwZXMu
aCIKLSNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIldlYkhpdFRlc3RSZXN1
bHREYXRhLmgiCiAjaW1wb3J0IDxXZWJDb3JlL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtNTQsMTAgKzU0LDEw
IEBAIEBpbnRlcmZhY2UgV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIDoKICAgICBXS1ZpZXcg
Kl93a1ZpZXc7CiAKICAgICBXZWJLaXQ6OkltbWVkaWF0ZUFjdGlvblN0YXRlIF9zdGF0ZTsKLSAg
ICBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgX2hpdFRlc3RSZXN1bHREYXRhOworICAg
IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEgX2hpdFRlc3RSZXN1bHREYXRhOwogICAgIEJP
T0wgX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQ7CiAgICAgUmVmUHRyPEFQSTo6T2JqZWN0PiBfdXNl
ckRhdGE7Ci0gICAgX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSBfdHlwZTsKKyAgICB1aW50MzJfdCBf
dHlwZTsKICAgICBSZXRhaW5QdHI8TlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplcj4g
X2ltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXI7CiAKICAgICBCT09MIF9oYXNBY3RpdmF0ZWRBY3Rp
b25Db250ZXh0OwpAQCAtNjksNyArNjksNyBAQCBAaW50ZXJmYWNlIFdLSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlciA6CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBhZ2U6KFdlYktpdDo6V2Vi
UGFnZVByb3h5JilwYWdlIHZpZXc6KFdLVmlldyAqKXdrVmlldyByZWNvZ25pemVyOihOU0ltbWVk
aWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyICopaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcjsK
IC0gKHZvaWQpd2lsbERlc3Ryb3lWaWV3OihXS1ZpZXcgKil2aWV3OwotLSAodm9pZClkaWRQZXJm
b3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhJiloaXRUZXN0UmVzdWx0IGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQ6KEJPT0wpY29udGVu
dFByZXZlbnRzRGVmYXVsdCB1c2VyRGF0YTooQVBJOjpPYmplY3QqKXVzZXJEYXRhOworLSAodm9p
ZClkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdDooY29uc3QgV2ViS2l0OjpXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYpaGl0VGVzdFJlc3VsdCBjb250ZW50UHJldmVudHNEZWZhdWx0OihCT09M
KWNvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1c2VyRGF0YTsK
IC0gKHZvaWQpZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93czsKIC0gKEJPT0wpaGFz
QWN0aXZlSW1tZWRpYXRlQWN0aW9uOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkocmV2
aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDEwMDAKIAorI2ltcG9ydCAiQVBJSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiV0tOU1VSTEV4
dHJhcy5oIgogI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNz
YWdlcy5oIgpAQCAtODMsNyArODQsNyBAQCAtICh2b2lkKXdpbGxEZXN0cm95VmlldzooV0tWaWV3
ICopdmlldwogewogICAgIF9wYWdlID0gbnVsbHB0cjsKICAgICBfd2tWaWV3ID0gbmlsOwotICAg
IF9oaXRUZXN0UmVzdWx0RGF0YSA9IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEoKTsKKyAgICBfaGl0
VGVzdFJlc3VsdERhdGEgPSBXZWJIaXRUZXN0UmVzdWx0RGF0YSgpOwogICAgIF9jb250ZW50UHJl
dmVudHNEZWZhdWx0ID0gTk87CiAgICAgCiAgICAgaWQgYW5pbWF0aW9uQ29udHJvbGxlciA9IFtf
aW1tZWRpYXRlQWN0aW9uUmVjb2duaXplciBhbmltYXRpb25Db250cm9sbGVyXTsKQEAgLTEyMyw3
ICsxMjQsNyBAQCAtICh2b2lkKV9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlCiAgICAgfQogCiAg
ICAgX3N0YXRlID0gSW1tZWRpYXRlQWN0aW9uU3RhdGU6Ok5vbmU7Ci0gICAgX2hpdFRlc3RSZXN1
bHREYXRhID0gV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSgpOworICAgIF9oaXRUZXN0UmVzdWx0RGF0
YSA9IFdlYkhpdFRlc3RSZXN1bHREYXRhKCk7CiAgICAgX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQg
PSBOTzsKICAgICBfdHlwZSA9IGtXS0ltbWVkaWF0ZUFjdGlvbk5vbmU7CiAgICAgX2N1cnJlbnRB
Y3Rpb25Db250ZXh0ID0gbmlsOwpAQCAtMTMyLDcgKzEzMyw3IEBAIC0gKHZvaWQpX2NsZWFySW1t
ZWRpYXRlQWN0aW9uU3RhdGUKICAgICBfaGFzQWN0aXZlSW1tZWRpYXRlQWN0aW9uID0gTk87CiB9
CiAKLS0gKHZvaWQpZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6KGNvbnN0IFdlYkhp
dFRlc3RSZXN1bHQ6OkRhdGEmKWhpdFRlc3RSZXN1bHQgY29udGVudFByZXZlbnRzRGVmYXVsdDoo
Qk9PTCljb250ZW50UHJldmVudHNEZWZhdWx0IHVzZXJEYXRhOihBUEk6Ok9iamVjdCopdXNlckRh
dGEKKy0gKHZvaWQpZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q6KGNvbnN0IFdlYkhp
dFRlc3RSZXN1bHREYXRhJiloaXRUZXN0UmVzdWx0IGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQ6KEJP
T0wpY29udGVudFByZXZlbnRzRGVmYXVsdCB1c2VyRGF0YTooQVBJOjpPYmplY3QqKXVzZXJEYXRh
CiB7CiAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnaXZlbiB1cCBvbiB0aGlzIGdlc3R1cmUgKGVp
dGhlciBiZWNhdXNlIGl0IHdhcyBjYW5jZWxlZCBvciB0aGUKICAgICAvLyB3aWxsQmVnaW5Bbmlt
YXRpb24gdGltZW91dCBleHBpcmVkKSwgd2Ugc2hvdWxkbid0IGJ1aWxkIGEgbmV3IGFuaW1hdGlv
bkNvbnRyb2xsZXIgZm9yIGl0LgpAQCAtMjQ5LDExICsyNTAsMTEgQEAgLSAodm9pZClpbW1lZGlh
dGVBY3Rpb25SZWNvZ25pemVyRGlkQ29tcAogICAgIF9wYWdlLT5zZXRUZXh0SW5kaWNhdG9yQW5p
bWF0aW9uUHJvZ3Jlc3MoMSk7CiB9CiAKLS0gKFBhc3NSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4p
X3dlYkhpdFRlc3RSZXN1bHQKKy0gKFBhc3NSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0Pilfd2Vi
SGl0VGVzdFJlc3VsdAogewotICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVz
dWx0OworICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQ7CiAgICAg
aWYgKF9zdGF0ZSA9PSBJbW1lZGlhdGVBY3Rpb25TdGF0ZTo6UmVhZHkpCi0gICAgICAgIGhpdFRl
c3RSZXN1bHQgPSBXZWJIaXRUZXN0UmVzdWx0OjpjcmVhdGUoX2hpdFRlc3RSZXN1bHREYXRhKTsK
KyAgICAgICAgaGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKF9oaXRU
ZXN0UmVzdWx0RGF0YSk7CiAgICAgZWxzZQogICAgICAgICBoaXRUZXN0UmVzdWx0ID0gX3BhZ2Ut
Pmxhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0KCk7CiAKQEAgLTI2OSw3ICsyNzAsNyBAQCAtIChp
ZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sCiAgICAgICAgIHJldHVybiBkdW1t
eUNvbnRyb2xsZXIuZ2V0KCk7CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+
IGhpdFRlc3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3VsdF07CisgICAgUmVmUHRyPEFQ
STo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0
XTsKIAogICAgIGlmICghaGl0VGVzdFJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTMy
Nyw5ICszMjgsOCBAQCAtICh2b2lkKV91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJl
c3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKLSAgICBpZCBjdXN0b21DbGllbnRBbmlt
YXRpb25Db250cm9sbGVyID0gW193a1ZpZXcgX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRy
b2xsZXJGb3JIaXRUZXN0UmVzdWx0OnRvQVBJKGhpdFRlc3RSZXN1bHQuZ2V0KCkpIHdpdGhUeXBl
Ol90eXBlIHVzZXJEYXRhOnRvQVBJKF91c2VyRGF0YS5nZXQoKSldOwotCisgICAgUmVmUHRyPEFQ
STo6SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0
XTsKKyAgICBpZCBjdXN0b21DbGllbnRBbmltYXRpb25Db250cm9sbGVyID0gKGlkKShfcGFnZS0+
aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoaGl0VGVz
dFJlc3VsdCwgX3R5cGUsIF91c2VyRGF0YSkpOwogICAgIGlmIChjdXN0b21DbGllbnRBbmltYXRp
b25Db250cm9sbGVyID09IFtOU051bGwgbnVsbF0pIHsKICAgICAgICAgW3NlbGYgX2NhbmNlbElt
bWVkaWF0ZUFjdGlvbl07CiAgICAgICAgIHJldHVybjsKQEAgLTM1Myw3ICszNTMsNyBAQCAtIChp
ZDxRTFByZXZpZXdJdGVtPiltZW51SXRlbTooTlNNZW51SXRlCiAgICAgaWYgKCFfd2tWaWV3KQog
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgUmVmUHRyPFdlYkhpdFRlc3RSZXN1bHQ+IGhpdFRl
c3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3VsdF07CisgICAgUmVmUHRyPEFQSTo6SGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKICAg
ICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpoaXRUZXN0UmVzdWx0LT5hYnNv
bHV0ZUxpbmtVUkwoKV07CiB9CiAKQEAgLTM3Miw3ICszNzIsNyBAQCAtIChOU1JlY3QpbWVudUl0
ZW06KE5TTWVudUl0ZW0gKiltZW51SXRlCiAgICAgaWYgKCFfd2tWaWV3KQogICAgICAgICByZXR1
cm4gTlNaZXJvUmVjdDsKIAotICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVz
dWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOworICAgIFJlZlB0cjxBUEk6OkhpdFRlc3RS
ZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBbc2VsZiBfd2ViSGl0VGVzdFJlc3VsdF07CiAgICAgcmV0
dXJuIFtfd2tWaWV3IGNvbnZlcnRSZWN0OmhpdFRlc3RSZXN1bHQtPmVsZW1lbnRCb3VuZGluZ0Jv
eCgpIHRvVmlldzpuaWxdOwogfQogCkBAIC00NDUsNyArNDQ1LDcgQEAgLSAoaWQ8TlNJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb25Db250cm9sbAogCiAgICAgW19jdXJyZW50QWN0aW9uQ29udGV4dCBz
ZXRIaWdobGlnaHRGcmFtZTpbX3drVmlldy53aW5kb3cgY29udmVydFJlY3RUb1NjcmVlbjpbX3dr
VmlldyBjb252ZXJ0UmVjdDpfaGl0VGVzdFJlc3VsdERhdGEuZWxlbWVudEJvdW5kaW5nQm94IHRv
VmlldzpuaWxdXV07CiAKLSAgICBSZWZQdHI8V2ViSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3Vs
dCA9IFtzZWxmIF93ZWJIaXRUZXN0UmVzdWx0XTsKKyAgICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVz
dWx0PiBoaXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOwogICAgIE5TQXJy
YXkgKm1lbnVJdGVtcyA9IFtbZ2V0RERBY3Rpb25zTWFuYWdlckNsYXNzKCkgc2hhcmVkTWFuYWdl
cl0gbWVudUl0ZW1zRm9yVGFyZ2V0VVJMOmhpdFRlc3RSZXN1bHQtPmFic29sdXRlTGlua1VSTCgp
IGFjdGlvbkNvbnRleHQ6X2N1cnJlbnRBY3Rpb25Db250ZXh0LmdldCgpXTsKIAogICAgIGlmICht
ZW51SXRlbXMuY291bnQgIT0gMSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzUxLDcgKzc1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY28K
ICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKIENvbnRleHRNZW51SXRlbSBXZWJQYWdlUHJv
eHk6OnBsYXRmb3JtSW5pdGlhbGl6ZVNoYXJlTWVudUl0ZW0oY29uc3QgQ29udGV4dE1lbnVDb250
ZXh0RGF0YSYgY29udGV4dE1lbnVDb250ZXh0RGF0YSkKIHsKLSAgICBjb25zdCBXZWJIaXRUZXN0
UmVzdWx0OjpEYXRhJiBoaXRUZXN0RGF0YSA9IGNvbnRleHRNZW51Q29udGV4dERhdGEud2ViSGl0
VGVzdFJlc3VsdERhdGEoKTsKKyAgICBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVz
dERhdGEgPSBjb250ZXh0TWVudUNvbnRleHREYXRhLndlYkhpdFRlc3RSZXN1bHREYXRhKCk7CiAK
ICAgICBVUkwgYWJzb2x1dGVMaW5rVVJMOwogICAgIGlmICghaGl0VGVzdERhdGEuYWJzb2x1dGVM
aW5rVVJMLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
OTg1LDcgKzk4NSw2IEBACiAJCTUxQUNCQjgyMTI3QThCQUQwMEQyMDNCOSAvKiBXZWJDb250ZXh0
TWVudVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUFDQkI4MTEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eS5oICovOyB9
OwogCQk1MUFDQkJBMDEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0JCOUUx
MjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMuaCAqLzsgfTsKIAkJNTFB
Q0JCQTExMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI5RjEyN0E4RjJD
MDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSAqLzsgfTsKLQkJNTFBRDM1NzMx
QUQyRjM5NDAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFEMzU3MjFBRDJGMzc1MDA1N0IzOEUgLyog
V2ViSGl0VGVzdFJlc3VsdC5tbSAqLzsgfTsKIAkJNTFCMTVBODQxMzg0M0EzOTAwMzIxQUQ4IC8q
IEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQjE1QTgyMTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0
aWxpdGllcy5jcHAgKi87IH07CiAJCTUxQjE1QTg1MTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9u
bWVudFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFCMTVBODMxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmgg
Ki87IH07CiAJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1RocmVhZENvcGll
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJB
MjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovOyB9OwpA
QCAtMTA2MCw4ICsxMDU5LDYgQEAKIAkJNzVBOEQyRTExODdERUMxQTAwQzM5QzlFIC8qIEFQSVNl
c3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1
QThEMkRFMTg3REU4NzQwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmggKi87IH07CiAJCTc1QThEMkUy
MTg3REVDMUUwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkREMTg3REU4NzQwMEMzOUM5RSAvKiBBUElT
ZXNzaW9uLmNwcCAqLzsgfTsKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVy
ZW5jZXNSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3
ODAxQzA5OTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3ODAxQzA5NTE0MjI5MEM0MDBG
QUY5QUYgLyogV2ViSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07Ci0JCTc4MDFDMDlBMTQyMjkwQzQw
MEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3ODAxQzA5NjE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVz
dFJlc3VsdC5oICovOyB9OwogCQk3QzEzNUFBODE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5J
bmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAg
Ki87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFB
NzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTM1QUFDMTczQjBDRkYwMDU4
NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5J
bmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsKQEAgLTExOTksNyArMTE5NiwxNSBAQAogCQk5MzkxRjJD
QjEyMUI2N0FEMDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MUYyODMxMjFCMzhGNTAw
RUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCAqLzsgfTsKIAkJOTM5QUU3NjYx
MzE2RTk5QzAwQUUwNkE2IC8qIFdlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlBRTc2NTEzMTZFOTlDMDBBRTA2
QTYgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLzsgfTsKIAkJOTM5RjQwMUMxOUZCMEJC
QzAwMkIyQjQyIC8qIFdLQWN0aW9uTWVudVR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlGNDAxQjE5RkIwQkJDMDAyQjJCNDIgLyogV0tBY3Rp
b25NZW51VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk5M0E4OEIzMDFCQzZFOTk3MDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIy
RTFCQzZFOThGMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEubW0gKi87IH07CisJCTkz
QTg4QjMzMUJDNkU5Q0QwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBODhCMzExQkM2RTlDMDAw
QUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmggKi87IH07CisJCTkzQTg4QjM2MUJDNkVB
RDUwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E4OEIzNDFCQzZFQUJBMDBBQkE1QzIgLyog
V2ViSGl0VGVzdFJlc3VsdERhdGEuY3BwICovOyB9OworCQk5M0E4OEIzOTFCQzcwRjNGMDBBQkE1
QzIgLyogX1dLSGl0VGVzdFJlc3VsdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQTg4QjM3MUJDNzBGMkUwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVz
dWx0Lm1tICovOyB9OworCQk5M0E4OEIzQjFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJl
c3VsdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0E4OEIzQTFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdEludGVybmFs
LmggKi87IH07CiAJCTkzQkRFQjAxMTcxREQ3QUYwMEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0JERUIwMDE3MUREN0FGMDBCRkVFMUIgLyogV0tQYWdlTG9hZFR5cGVzUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzRTZBNEVFMUJD
NUREMzkwMEY4QTBFNyAvKiBfV0tIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U2QTRFRDFCQzVERDM5MDBGOEEwRTcgLyogX1dL
SGl0VGVzdFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTkzRTZBNEYzMUJDNUVGRUUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U2QTRGMDFC
QzVFRkQ1MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5oICovOyB9OworCQk5M0U2QTRGNDFC
QzVFRkY3MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U2QTRFRjFCQzVFRkQ1MDBGOEEwRTcgLyog
QVBJSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07CiAJCTlGNTRGODhGMTY0ODhFODcwMDdERjgxQSAv
KiBDaGlsZFByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEgLyogQ2hpbGRQcm9jZXNzTWFjLm1t
ICovOyB9OwogCQk5RjU0Rjg5NTE2NDhBRTBGMDA3REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFn
ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
RjU0Rjg5NDE2NDhBRTBFMDA3REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gKi87
IH07CiAJCTlGQjVGMzk0MTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUZCNUYzOTIx
NjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMubW0gKi87IH07CkBAIC0zMTYz
LDcgKzMxNjgsNiBAQAogCQk1MUFDQkI5RjEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkNvbnRleHRNZW51UHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QUNDOTM0MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzc01l
c3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUNDOTM1
MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFBRDM1NzIxQUQyRjM3NTAwNTdCMzhFIC8qIFdlYkhpdFRl
c3RSZXN1bHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJIaXRUZXN0UmVzdWx0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUIxNUE4MjEzODQzQTM5MDAzMjFBRDggLyog
RW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOyBwYXRoID0gdW5peC9FbnZpcm9ubWVudFV0
aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjE1QTgzMTM4NDNB
MzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudFV0aWxpdGllcy5oOyBwYXRoID0gdW5peC9FbnZpcm9u
bWVudFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUJBMjQ0NTE4
NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzI1MSw4ICszMjU1LDYgQEAKIAkJNzVBOEQyREUxODdERTg3NDAwQzM5QzlFIC8qIEFQ
SVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVBJU2Vzc2lvbi5o
OyBwYXRoID0gVUlQcm9jZXNzL0FQSS9BUElTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0Vf
Uk9PVDsgfTsKIAkJNzYyQjc0ODExMjBCQkEwMTAwODE5MzM5IC8qIEZvbnRTbW9vdGhpbmdMZXZl
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250U21vb3RoaW5nTGV2ZWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5
IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTc4MDFDMDk1MTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkhpdFRlc3RSZXN1bHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3ODAxQzA5NjE0MjI5MEM0MDBGQUY5QUYg
LyogV2ViSGl0VGVzdFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJIaXRUZXN0UmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMEJCOUE4
MThEQ0RFODkwMDA2QzA4NiAvKiBXZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9
ICJXZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzBCQjlBOTE4RENERjVBMDAwNkMwODYgLyogTmV0d29yay1pT1MuZW50aXRsZW1lbnRz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
bWw7IHBhdGggPSAiTmV0d29yay1pT1MuZW50aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MxMzVBQTYxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tQbHVnaW5JbmZv
cm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzk4LDcgKzM0MDAs
MTUgQEAKIAkJOTM5MUYyODQxMjFCMzhGNTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzlB
RTc2NTEzMTZFOTlDMDBBRTA2QTYgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVBcmd1bWVudENvZGVycy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOUY0MDFCMTlGQjBCQkMwMDJCMkI0MiAv
KiBXS0FjdGlvbk1lbnVUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0FjdGlvbk1lbnVUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E4OEIy
RTFCQzZFOThGMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJIaXRUZXN0UmVzdWx0RGF0YS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBODhCMzExQkM2RTlDMDAwQUJBNUMyIC8qIFdl
YkhpdFRlc3RSZXN1bHREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkhpdFRlc3RSZXN1bHREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTg4
QjM0MUJDNkVBQkEwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTg4QjM3MUJDNzBGMkUwMEFCQTVDMiAvKiBf
V0tIaXRUZXN0UmVzdWx0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gX1dLSGl0VGVzdFJlc3VsdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNB
ODhCM0ExQkM3MTBEOTAwQUJBNUMyIC8qIF9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCREVCMDAxNzFERDdBRjAwQkZFRTFCIC8q
IFdLUGFnZUxvYWRUeXBlc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tQYWdlTG9hZFR5cGVzUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0U2QTRFRDFCQzVERDM5MDBGOEEwRTcgLyogX1dLSGl0VGVzdFJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tIaXRUZXN0UmVzdWx0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTkzRTZBNEVGMUJDNUVGRDUwMEY4QTBFNyAvKiBBUElIaXRUZXN0
UmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSUhpdFRl
c3RSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U2QTRGMDFCQzVF
RkQ1MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBUElIaXRUZXN0UmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTlGNTRGODhFMTY0ODhFODcwMDdERjgxQSAvKiBDaGlsZFByb2Nlc3NNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDaGlsZFByb2Nlc3NNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGNTRGODk0MTY0OEFFMEUwMDdERjgxQSAvKiBQ
bHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5RkI1RjM5MjE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLQ29udGV4dFBy
aXZhdGVNYWMubW07IHBhdGggPSBtYWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NzgsOCArNDc4OCw4IEBACiAJCQkJMUE5MEMxRUQxMjY0
RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggKi8sCiAJCQkJQkMwRTYwNzIxMkQ2QkMy
MDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwICovLAogCQkJCUJDMEU2MDcx
MTJENkJDMjAwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmggKi8sCi0JCQkJNzgw
MUMwOTUxNDIyOTBDNDAwRkFGOUFGIC8qIFdlYkhpdFRlc3RSZXN1bHQuY3BwICovLAotCQkJCTc4
MDFDMDk2MTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVzdWx0LmggKi8sCisJCQkJOTNB
ODhCMzQxQkM2RUFCQTAwQUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLmNwcCAqLywKKwkJ
CQk5M0E4OEIzMTFCQzZFOUMwMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEuaCAqLywK
IAkJCQlCQ0NGNkFCQTEyQzkxRUY5MDA4RjlDMzUgLyogV2ViSW1hZ2UuY3BwICovLAogCQkJCUJD
Q0Y2QUJCMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5oICovLAogCQkJCUMwMzM3REQyMTI3
QTJBMEUwMDhGRjRGNCAvKiBXZWJLZXlib2FyZEV2ZW50LmNwcCAqLywKQEAgLTU0MzcsNiArNTQ0
Nyw5IEBACiAJCQkJMzczRDEyMjExOEE0NzMwMTAwNjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxlLmgg
Ki8sCiAJCQkJMzczRDEyMjAxOEE0NzMwMTAwNjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxlLm1tICov
LAogCQkJCTM3M0QxMjI2MThBNDczRjYwMDY2RDlDQyAvKiBfV0tGcmFtZUhhbmRsZUludGVybmFs
LmggKi8sCisJCQkJOTNFNkE0RUQxQkM1REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQu
aCAqLywKKwkJCQk5M0E4OEIzNzFCQzcwRjJFMDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdC5t
bSAqLywKKwkJCQk5M0E4OEIzQTFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdElu
dGVybmFsLmggKi8sCiAJCQkJQTExOEE5RjExOTA4QjhFQTAwRjdDOTJCIC8qIF9XS05TRmlsZU1h
bmFnZXJFeHRyYXMuaCAqLywKIAkJCQlBMTE4QTlGMDE5MDhCOEVBMDBGN0M5MkIgLyogX1dLTlNG
aWxlTWFuYWdlckV4dHJhcy5tbSAqLywKIAkJCQkxQTlFMzI4QjE4MjE2NUE5MDBGNUQwNEMgLyog
X1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlLmggKi8sCkBAIC02NTEyLDcgKzY1MjUsNyBAQAogCQkJ
CUJDRTIzMjYyMTIyQzZDRjMwMEQ1QzM1QSAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0g
Ki8sCiAJCQkJQkMxMTFCNUIxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5oICov
LAogCQkJCUJDMTExQjVDMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gKi8s
Ci0JCQkJNTFBRDM1NzIxQUQyRjM3NTAwNTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0gKi8s
CisJCQkJOTNBODhCMkUxQkM2RTk4RjAwQUJBNUMyIC8qIFdlYkhpdFRlc3RSZXN1bHREYXRhLm1t
ICovLAogCQkJCTkwNTYyMEU1MTJCQzI0NzYwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLm1h
Yy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwpAQCAtNzAzOCw2ICs3MDUxLDggQEAKIAkJ
CQkxQUMxMzM3MDE4NTY2QzdDMDBGM0VDMDUgLyogQVBJRnJhbWVIYW5kbGUuaCAqLywKIAkJCQkx
QUMxMzM3MzE4NTdDMjFFMDBGM0VDMDUgLyogQVBJR2VvbWV0cnkuY3BwICovLAogCQkJCTBGMTc0
QUEyMTQyQTRDQjYwMDM5MjUwRiAvKiBBUElHZW9tZXRyeS5oICovLAorCQkJCTkzRTZBNEVGMUJD
NUVGRDUwMEY4QTBFNyAvKiBBUElIaXRUZXN0UmVzdWx0LmNwcCAqLywKKwkJCQk5M0U2QTRGMDFC
QzVFRkQ1MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJlc3VsdC5oICovLAogCQkJCUJDMzNERDY3MTIz
ODQ2NDYwMDM2MEYzRiAvKiBBUElOdW1iZXIuaCAqLywKIAkJCQlCNjM0MDNGODE0OTEwRDU3MDAx
MDcwQjUgLyogQVBJT2JqZWN0LmNwcCAqLywKIAkJCQlCQ0YwNEM4QzExRkY5QjdEMDBGODZBNTgg
LyogQVBJT2JqZWN0LmggKi8sCkBAIC03NzEyLDYgKzc3MjcsNyBAQAogCQkJCTFBMjMyOTAzMTYy
Qzg2NzMwMEQ4MkY3QSAvKiBNZXNzYWdlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEy
MzI4RkYxNjJDODY2QTAwRDgyRjdBIC8qIE1lc3NhZ2VFbmNvZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUM0QzgyOTE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5M0E4OEIzQjFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNFRUQxMjE2MUE1M0Q2MDBBRUI0RjUgLyog
TWVzc2FnZVJlY2VpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNFRUQwRjE2MUE1MzU0MDBB
RUI0RjUgLyogTWVzc2FnZVJlY2VpdmVyTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVBQjYy
RTFBNjlENkZCMDAxNEE5Q0IgLyogTWVzc2FnZVJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTc4MjgsNiArNzg0NCw3IEBACiAJCQkJRTFCNzg0NzExNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90
ZU5ldHdvcmtpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMxMzM4MDE4NTkwQUU0
MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
QzEzMzg2MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5M0U2QTRGMzFCQzVFRkVFMDBGOEEwRTcgLyogQVBJSGl0VGVz
dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8q
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDdB
ODE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtNzk2MSw3ICs3OTc4
LDYgQEAKIAkJCQlCQzBFNjE4MzEyRDZDQjFEMDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwRTYwNzMxMkQ2QkMyMDAw
MTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MUJFMUYyMTJENTREQkQwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk3ODAxQzA5QTE0MjI5MEM0MDBGQUY5QUYgLyogV2ViSGl0VGVzdFJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExQjI0QUIxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYklj
b25EYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4MzQ1OTMxMzQ1MzJFOTAwOTJCNjk2
IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFEMDJGNkEx
MzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LywKQEAgLTgwMDcsNiArODAyMyw3IEBACiAJCQkJQkM4NTdGODUxMkI4MkQwQjAwRURFQjJFIC8q
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFERkVB
NDEyQjMxRjg3MDA1REY3MzAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEOEYxMEY0MzdBMDAwNThDMTVBIC8qIFdlYlBhZ2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTkzQTg4QjMzMUJDNkU5Q0QwMEFCQTVDMiAvKiBXZWJIaXRUZXN0
UmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM3MkRCMjkxQTY3NTYyODAwQzY5N0M1
IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM3QjYyMDYxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM3QjYyNTIxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cERhdGEuaCBpbiBI
ZWFkZXJzICovLApAQCAtODI2MCw2ICs4Mjc3LDcgQEAKIAkJCQlCQzdCNjMzNzEyQTQ1QUJBMDBE
MTc0QTQgLyogV0tQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOUVBMzBEMUE5NkNC
NTkwMDJEMjgwNyAvKiBXS1BhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFCOEExRUMxODQwMDgwOTAwRTlBRTY5IC8qIFdLUGFnZUxvYWRlckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTNFNkE0RUUxQkM1REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRlc3RS
ZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAvKiBX
S1BhZ2VMb2FkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQkRFQjAxMTcxREQ3QUYwMEJG
RUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDcz
MDM3OTFBN0MyQjc1MDBGOEY0ODcgLyogV0tQYWdlTmF2aWdhdGlvbkNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC05MzM5LDYgKzkzNTcsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhh
c2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJ
OTNBODhCMzkxQkM3MEYzRjAwQUJBNUMyIC8qIF9XS0hpdFRlc3RSZXN1bHQubW0gaW4gU291cmNl
cyAqLywKIAkJCQkzN0E1RTAxMzE4QkJGOTM3MDAwQTA4MUUgLyogX1dLQWN0aXZhdGVkRWxlbWVu
dEluZm8ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMUE0RkU1QjE4RENFOUZBMDBCNUVBOEEgLyog
X1dLRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzNzlBODczOTE4QkJGRTBGMDA1ODhB
RjIgLyogX1dLRWxlbWVudEFjdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAtOTgwMCw4ICs5ODE5
LDYgQEAKIAkJCQlCQzBFNjE4MjEyRDZDQjFEMDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwRTYwNzQx
MkQ2QkMyMDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxQkUxRjMxMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzgwMUMwOTkxNDIyOTBDNDAwRkFGOUFGIC8qIFdl
YkhpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFBRDM1NzMxQUQyRjM5NDAw
NTdCMzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTFCMjRB
QTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxODM0NTkyMTM0NTMyRTkwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMDJGNjQxMzJFQzVCOTAwQkVBQTk2IC8qIFdlYkljb25E
YXRhYmFzZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5MTksNiArOTkz
Niw3IEBACiAJCQkJQkNBMEVGODAxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYlVuZG9TdGVwLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBQUYwOEFEMTkyNjkzNjcwMEI2MzkwQyAvKiBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjA4QjcxOTI2OUU2RDAw
QjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk5M0U2QTRGNDFCQzVFRkY3MDBGOEEwRTcgLyogQVBJSGl0VGVzdFJl
c3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFGMDhBMTE5MjY4MUQxMDBCNjM5MEMgLyog
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mz
NjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJFMUI0MjA0NjYwMEQy
NThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05OTYyLDYg
Kzk5ODAsNyBAQAogCQkJCUVEQ0E3MUI3MTI4RERBOEMwMDIwMUIyNiAvKiBXS0J1bmRsZVBhZ2VP
dmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjBDNTdBMTI0MEE1NDYwMDhDNUUyOSAv
KiBXS0J1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTRERjlFMTIw
QjYzNUYwMDgyNkMwQyAvKiBXS0J1bmRsZVNjcmlwdFdvcmxkLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTkzQTg4QjM2MUJDNkVBRDUwMEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGNTEyNEZGMDI3MDA2OEYyMEEgLyogV0tDZXJ0aWZp
Y2F0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MjgxMjRGRjA0MDAwNjhGMjBB
IC8qIFdLQ2VydGlmaWNhdGVJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMjg0RDYx
NDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAtOTk5
OSw2ICsxMDAxOCw3IEBACiAJCQkJQkNEMDEzOUMxMTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0RDY2NEIxOEEzMDMwRTAwRDgyRTIxIC8qIFdLRnJh
bWVJbmZvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQzQTY1RTYxQTdDM0FBNzAwQ0FDNjM3IC8q
IFdLRnJhbWVJbmZvUmVmLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzQTg4QjMwMUJDNkU5OTcw
MEFCQTVDMiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
QjlGNkE2MTEyM0REMEQwMEExMzdFMCAvKiBXS0ZyYW1lUG9saWN5TGlzdGVuZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTFBRUEyMzAxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJk
QWNjZXNzV2F0Y2hlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQ0E4NUM4MTMyQUJBNEUwMEU5
NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCShyZXZpc2lv
biAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKICNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJBUElIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1
bHQuaCIKIAogT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7CiBPQkpDX0NMQVNTIE5TT2JqZWN0OwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5
LmgJKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVk
ZSA8bWVtb3J5PgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiBPQkpDX0NMQVNTIENBTGF5ZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMTkwODA3
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogLy8gRklYTUU6IEV2ZW50dWFsbHkgdGhpcyBz
aG91bGQgbW92ZSB0byBXZWJDb3JlLgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAi
V2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkFQSUhpdFRlc3RSZXN1bHQuaCIKIAogT0JK
Q19DTEFTUyBOU0RpY3Rpb25hcnk7CiBPQkpDX0NMQVNTIFBERlNlbGVjdGlvbjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbi5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
I2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNs
dWRlICJBUElIaXRUZXN0UmVzdWx0LmgiCiAjZW5kaWYKIAogI2lmIFBMVUdJTl9BUkNISVRFQ1RV
UkUoWDExKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5oCShyZXZpc2lvbiAxOTA4MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgotI2lu
Y2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0
YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4K
QEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBzaG93Q29udGV4dE1l
bnVBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAKLSAgICBTdHJpbmcgbG9va3Vw
VGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGEmLCBQREZTZWxlY3Rpb24gKiosIE5TRGljdGlvbmFyeSAqKikgY29uc3Q7CisgICAg
U3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBX
ZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFBERlNlbGVjdGlvbiAqKiwgTlNEaWN0aW9uYXJ5ICoqKSBj
b25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlld1JlY3RGb3JTZWxlY3Rpb24oUERGU2Vs
ZWN0aW9uICopIGNvbnN0OwogCiAgICAgQ0dGbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4ubW0JKHJldmlzaW9uIDE5MDgwNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODk4LDcgKzE4OTgsNyBA
QCBzdGF0aWMgTlNQb2ludCBwb2ludEluTGF5b3V0U3BhY2VGb3JQb2luCiAgICAgcmV0dXJuIE5T
UG9pbnRGcm9tQ0dQb2ludChuZXdQb2ludCk7CiB9CiAKLVN0cmluZyBQREZQbHVnaW46Omxvb2t1
cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3
Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGRhdGEsIFBERlNlbGVjdGlvbiAq
KnNlbGVjdGlvblB0ciwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucykgY29uc3QKK1N0cmluZyBQREZQ
bHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxv
Y2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBQREZT
ZWxlY3Rpb24gKipzZWxlY3Rpb25QdHIsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0CiB7
CiAgICAgUERGU2VsZWN0aW9uKiYgc2VsZWN0aW9uID0gKnNlbGVjdGlvblB0cjsKIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRl
ICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbmNsdWRlICJXZWJJbWFn
ZS5oIgogI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIgpAQCAtNjAyLDcgKzYwMyw3IEBAIHZvaWQgV2ViQ2hy
b21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWwKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
VUlDbGllbnQoKS5tb3VzZURpZE1vdmVPdmVyRWxlbWVudChtX3BhZ2UsIGhpdFRlc3RSZXN1bHQs
IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVyRmxhZ3MpLCB1c2VyRGF0
YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJIaXRUZXN0UmVzdWx0
OjpEYXRhIHdlYkhpdFRlc3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOworICAgIFdlYkhpdFRl
c3RSZXN1bHREYXRhIHdlYkhpdFRlc3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOwogICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpNb3VzZURpZE1vdmVPdmVyRWxlbWVu
dCh3ZWJIaXRUZXN0UmVzdWx0RGF0YSwgbW9kaWZpZXJGbGFncywgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSku
Z2V0KCkpKSk7CiB9CiAKQEAgLTYxNCw3ICs2MTUsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6
ZGlkQmVnaW5UcmFja2luZ1BvCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCku
ZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKG1fcGFnZSwgbW91c2VEb3du
UG9zaXRpb24sIGhpdFRlc3RSZXN1bHQsIHVzZXJEYXRhKTsKICAgICAKICAgICAvLyBOb3RpZnkg
dGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIHdlYkhpdFRlc3RSZXN1
bHREYXRhKGhpdFRlc3RSZXN1bHQpOworICAgIFdlYkhpdFRlc3RSZXN1bHREYXRhIHdlYkhpdFRl
c3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOwogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MobW91
c2VEb3duUG9zaXRpb24sIHdlYkhpdFRlc3RSZXN1bHREYXRhLCBVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5n
ZXQoKSkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMTkwODA3KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgIkFQSUhp
dFRlc3RSZXN1bHQuaCIKICNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQgIkRh
dGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkVkaXRpbmdSYW5nZS5oIgpAQCAtNDQsNyArNDUsNiBA
QAogI2ltcG9ydCAiV2ViRXZlbnQuaCIKICNpbXBvcnQgIldlYkV2ZW50Q29udmVyc2lvbi5oIgog
I2ltcG9ydCAiV2ViRnJhbWUuaCIKLSNpbXBvcnQgIldlYkhpdFRlc3RSZXN1bHQuaCIKICNpbXBv
cnQgIldlYkltYWdlLmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3IuaCIKICNpbXBvcnQgIldlYlBh
Z2VPdmVybGF5LmgiCkBAIC0xMDc1LDcgKzEwNzUsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1J
bW1lZGlhdGVBY3Rpb25IaXRUCiAKICAgICBNYWluRnJhbWUmIG1haW5GcmFtZSA9IGNvcmVQYWdl
KCktPm1haW5GcmFtZSgpOwogICAgIGlmICghbWFpbkZyYW1lLnZpZXcoKSB8fCAhbWFpbkZyYW1l
LnZpZXcoKS0+cmVuZGVyVmlldygpKSB7Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoV2ViSGl0VGVzdFJlc3VsdDo6
RGF0YSgpLCBmYWxzZSwgVXNlckRhdGEoKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KFdlYkhpdFRlc3RSZXN1
bHREYXRhKCksIGZhbHNlLCBVc2VyRGF0YSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTEwODksNyArMTA4OSw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFQKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uSGl0VGVzdFBy
ZXZlbnRzRGVmYXVsdCA9IGVsZW1lbnQtPmRpc3BhdGNoTW91c2VGb3JjZVdpbGxCZWdpbigpOwog
Ci0gICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBpbW1lZGlhdGVBY3Rpb25SZXN1bHQoaGl0VGVz
dFJlc3VsdCk7CisgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEgaW1tZWRpYXRlQWN0aW9uUmVzdWx0
KGhpdFRlc3RSZXN1bHQpOwogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IGNv
cmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKIAo=
</data>
<flag name="review"
          id="287984"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>