<?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>155532</bug_id>
          
          <creation_ts>2016-03-15 22:06:50 -0700</creation_ts>
          <short_desc>Provide NSSpellChecker spellChecking methods with the current insertion point</short_desc>
          <delta_ts>2016-03-25 16:50:15 -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 Misc.</component>
          <version>WebKit Local 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>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1175275</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-15 22:06:50 -0700</bug_when>
    <thetext>Provide NSSpellChecker spellChecking methods with the current insertion point

rdar://problem/24066952</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175277</commentid>
    <comment_count>1</comment_count>
      <attachid>274172</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-15 22:17:04 -0700</bug_when>
    <thetext>Created attachment 274172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175278</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-15 22:17:54 -0700</bug_when>
    <thetext>Attachment 274172 did not pass style-queue:


ERROR: Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:1102:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 24 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>1175426</commentid>
    <comment_count>3</comment_count>
      <attachid>274203</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-16 11:52:56 -0700</bug_when>
    <thetext>Created attachment 274203
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175434</commentid>
    <comment_count>4</comment_count>
      <attachid>274206</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-16 12:06:34 -0700</bug_when>
    <thetext>Created attachment 274206
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175438</commentid>
    <comment_count>5</comment_count>
      <attachid>274208</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-16 12:19:48 -0700</bug_when>
    <thetext>Created attachment 274208
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175475</commentid>
    <comment_count>6</comment_count>
      <attachid>274216</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-16 13:29:42 -0700</bug_when>
    <thetext>Created attachment 274216
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175527</commentid>
    <comment_count>7</comment_count>
      <attachid>274216</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-16 15:17:32 -0700</bug_when>
    <thetext>Comment on attachment 274216
Patch

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

Since text checker is defined in terms of string views, not the DOM, seems the right architecture would be to convert the selection to offsets within the string at the call sites, rather than actually passing the VisibleSelection object down. Is there a straightforward way to do it that way instead?

&gt; Source/WebCore/ChangeLog:10
&gt; +        Pass the Frameâs section to a handful of spelling checking methods that call 

Frame&apos;s selection, not Frame&apos;s section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175530</commentid>
    <comment_count>8</comment_count>
      <attachid>274216</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-16 15:28:45 -0700</bug_when>
    <thetext>Comment on attachment 274216
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        Pass the Frameâs section to a handful of spelling checking methods that call 
&gt; 
&gt; Frame&apos;s selection, not Frame&apos;s section

Is there any way to test this? API test perhaps?

&gt; Source/WebKit2/UIProcess/TextChecker.h:75
&gt; +    static Vector&lt;WebCore::TextCheckingResult&gt; checkTextOfParagraph(int64_t spellDocumentTag, StringView text, uint64_t insertionPoint, uint64_t checkingTypes);

I find it a bit odd that the insertionPoint is a uint64_t. Does WebCore handle 64-bit offsets?

&gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:301
&gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPoint], NSTextCheckingInsertionPointKey, nil];

You should use literals here: @{} etc.

&gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:440
&gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPoint], NSTextCheckingInsertionPointKey, nil];

Literals.

&gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:1066
&gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPointFromCurrentSelection(currentSelection)], NSTextCheckingInsertionPointKey, nil];

literals.

&gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:1112
&gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPointFromCurrentSelection(currentSelection)], NSTextCheckingInsertionPointKey, nil];

ditto.

&gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:1300
&gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPointFromCurrentSelection(currentSelection)], NSTextCheckingInsertionPointKey, nil];

ditto. Maybe we should just wrap -checkString and -requestCheckingOfString: to avoid the repetition?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175543</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-16 16:06:31 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 274216 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=274216&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:10
&gt; &gt;&gt; +        Pass the Frameâs section to a handful of spelling checking methods that call 
&gt; &gt; 
&gt; &gt; Frame&apos;s selection, not Frame&apos;s section
&gt; 
&gt; Is there any way to test this? API test perhaps?
&gt; 

Hmmmmmm. I don&apos;t think so, but I will give this more thought.

&gt; &gt; Source/WebKit2/UIProcess/TextChecker.h:75
&gt; &gt; +    static Vector&lt;WebCore::TextCheckingResult&gt; checkTextOfParagraph(int64_t spellDocumentTag, StringView text, uint64_t insertionPoint, uint64_t checkingTypes);
&gt; 
&gt; I find it a bit odd that the insertionPoint is a uint64_t. Does WebCore
&gt; handle 64-bit offsets?
&gt; 

I think you&apos;re right, and int_32t would be more appropriate here given the underlying WebCore types.

&gt; &gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:301
&gt; &gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPoint], NSTextCheckingInsertionPointKey, nil];
&gt; 
&gt; You should use literals here: @{} etc.
&gt; 

Okay!

&gt; &gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:440
&gt; &gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPoint], NSTextCheckingInsertionPointKey, nil];
&gt; 
&gt; Literals.
&gt; 

Will fix.

&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:1066
&gt; &gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPointFromCurrentSelection(currentSelection)], NSTextCheckingInsertionPointKey, nil];
&gt; 
&gt; literals.
&gt; 

Will fix.

&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:1112
&gt; &gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPointFromCurrentSelection(currentSelection)], NSTextCheckingInsertionPointKey, nil];
&gt; 
&gt; ditto.
&gt; 

Will fix.

&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm:1300
&gt; &gt; +    options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:insertionPointFromCurrentSelection(currentSelection)], NSTextCheckingInsertionPointKey, nil];
&gt; 
&gt; ditto. Maybe we should just wrap -checkString and -requestCheckingOfString:
&gt; to avoid the repetition?

Hmm, I&apos;m not sure I follow. How would this help?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175544</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-16 16:11:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 274216 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=274216&amp;action=review
&gt; 
&gt; Since text checker is defined in terms of string views, not the DOM, seems
&gt; the right architecture would be to convert the selection to offsets within
&gt; the string at the call sites, rather than actually passing the
&gt; VisibleSelection object down. Is there a straightforward way to do it that
&gt; way instead?
&gt; 

I chose to pass a VisibleSelection around WebCore, and then convert it to the offset up in WebKit (we end up passing around the offset on its own in WK2 to get it to the UIProcess) because there has been talk of possibly adding some additional keys to this NSSpellChecker dictionary, and that would cover information that could also be extracted from the VisibleSelection. So I chose to do it this way because I thought it would pave the way for some more straightforward patches in the future.

That being said, I do not have a great understanding of any architectural decisions guiding these WebCore classes. So if you think it&apos;s a better/cleaner architecture here to stick to the offset, then I would be happy to do that. Do you think that&apos;s better even if I add some additional parameters in the future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175547</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-16 16:25:42 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/198306 I will follow-up with Darin to see if a follow-up patch is in order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175739</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-17 08:51:14 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; That being said, I do not have a great understanding of any architectural
&gt; decisions guiding these WebCore classes. So if you think it&apos;s a
&gt; better/cleaner architecture here to stick to the offset, then I would be
&gt; happy to do that. Do you think that&apos;s better even if I add some additional
&gt; parameters in the future?

This is really a layering question.

Before this change, these functions were an abstract interface to spell checking that was independent of the DOM. After the change, they are hooks for spell checking that are not independent of the DOM.

I don’t have a strong feeling about which design is better, but I don’t like place we have landed with the division of responsibilities where extracting the text to spell check is a job for the caller, but interpreting the selection position is a job for the spell checking functions. I’d prefer that the work of extracting the text to spell check and the other contextual information needed to correctly check from the DOM was either done entirely by the caller or entirely by the spell checking functions.

This is not an urgent issue but nice to resolve in the longer term. We can talk in person about this at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175776</commentid>
    <comment_count>13</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-17 10:50:23 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; That being said, I do not have a great understanding of any architectural
&gt; &gt; decisions guiding these WebCore classes. So if you think it&apos;s a
&gt; &gt; better/cleaner architecture here to stick to the offset, then I would be
&gt; &gt; happy to do that. Do you think that&apos;s better even if I add some additional
&gt; &gt; parameters in the future?
&gt; 
&gt; This is really a layering question.
&gt; 
&gt; Before this change, these functions were an abstract interface to spell
&gt; checking that was independent of the DOM. After the change, they are hooks
&gt; for spell checking that are not independent of the DOM.
&gt; 
&gt; I don’t have a strong feeling about which design is better, but I don’t like
&gt; place we have landed with the division of responsibilities where extracting
&gt; the text to spell check is a job for the caller, but interpreting the
&gt; selection position is a job for the spell checking functions. I’d prefer
&gt; that the work of extracting the text to spell check and the other contextual
&gt; information needed to correctly check from the DOM was either done entirely
&gt; by the caller or entirely by the spell checking functions.
&gt; 
&gt; This is not an urgent issue but nice to resolve in the longer term. We can
&gt; talk in person about this at some point.

Sounds good! I&apos;m happy to get this in a better place. Thanks for your input!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178176</commentid>
    <comment_count>14</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-25 16:50:15 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; That being said, I do not have a great understanding of any architectural
&gt; &gt; &gt; decisions guiding these WebCore classes. So if you think it&apos;s a
&gt; &gt; &gt; better/cleaner architecture here to stick to the offset, then I would be
&gt; &gt; &gt; happy to do that. Do you think that&apos;s better even if I add some additional
&gt; &gt; &gt; parameters in the future?
&gt; &gt; 
&gt; &gt; This is really a layering question.
&gt; &gt; 
&gt; &gt; Before this change, these functions were an abstract interface to spell
&gt; &gt; checking that was independent of the DOM. After the change, they are hooks
&gt; &gt; for spell checking that are not independent of the DOM.
&gt; &gt; 
&gt; &gt; I don’t have a strong feeling about which design is better, but I don’t like
&gt; &gt; place we have landed with the division of responsibilities where extracting
&gt; &gt; the text to spell check is a job for the caller, but interpreting the
&gt; &gt; selection position is a job for the spell checking functions. I’d prefer
&gt; &gt; that the work of extracting the text to spell check and the other contextual
&gt; &gt; information needed to correctly check from the DOM was either done entirely
&gt; &gt; by the caller or entirely by the spell checking functions.
&gt; &gt; 
&gt; &gt; This is not an urgent issue but nice to resolve in the longer term. We can
&gt; &gt; talk in person about this at some point.
&gt; 
&gt; Sounds good! I&apos;m happy to get this in a better place. Thanks for your input!

I posted a patch to address this: https://bugs.webkit.org/show_bug.cgi?id=155908</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274172</attachid>
            <date>2016-03-15 22:17:04 -0700</date>
            <delta_ts>2016-03-16 11:52:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>42934</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTAzLTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2Vy
IHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNz
IHRoZSBGcmFtZeKAmXMgc2VjdGlvbiB0byBhIGhhbmRmdWwgb2Ygc3BlbGxpbmcgY2hlY2tpbmcg
bWV0aG9kcyB0aGF0IGNhbGwgCisgICAgICAgIGludG8gV2ViS2l0L1dlYktpdDIgdG8gdWx0aW1h
dGVseSBjYWxsIGludG8gTlNTcGVsbENoZWNrZXIuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6Omhhc01pc3NwZWxsaW5nKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3Ry
aW5nU2V0U3BlbGxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAg
ICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmVucXVldWVSZXF1ZXN0KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3
b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eVRleHRDaGVja2VyQ2xpZW50
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50Ojp+VGV4dENoZWNrZXJDbGllbnQpOgorCisg
ICAgICAgIFRoZSBrZXkgbmVlZGVkIHRvIGluY2x1ZGUgdGhlIGluc2VydGlvbiBwb2ludC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmg6CisKIDIwMTYtMDMt
MTUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgb3Zl
cmZsb3c6IC13ZWJraXQtbWFycXVlZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTgxMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpoYXNNaXNzcGVsbGluZwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJh
bWUpKSB7CiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcsIHJlc3VsdHMsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlm
ICghcmVzdWx0cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpc01pc3NwZWxsZWQgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQyLDcgKzExNDIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldFNwZWxsaW5nCiAgICAgICAgIAogICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFw
aCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sx
IGFuZCBXSzIKICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAg
ICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNoZWNrZXIsIHRleHQsIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpjaGVj
a2VyLCB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMsIG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICAKICAgICAg
ICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKICAgICAgICAgTlNOdW1iZXIqIHRydWVW
YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFw
aChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJh
bmdlKCkuZ2V0KCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2lu
YWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBz
dWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxw
dHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdv
cmQsIFN0cmluZygpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2VzOwogfQogCkBAIC0yNDAyLDcgKzI0MDIsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0
Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgp
LCByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3Vs
dHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNl
Rm9yKHJlcXVlc3QucmVsZWFzZSgpLCByZXN1bHRzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyAr
MTgxLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZgogICAgIGlm
ICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0g
cmVxdWVzdDsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNz
aW5nUmVxdWVzdCk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKG1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2
b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVx
dWVzdD4gcmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgpAQCAtMzQ2LDcgKzM0NywxMCBAQCBTdHJpbmcg
VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAg
ICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFy
ID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBh
cmFncmFwaCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJy
ZW50U2VsZWN0aW9uOworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3Jh
cGhSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24p
OwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQubG9j
YXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTU3OCwxMyAr
NTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MKIAogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmc7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpt
X2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywg
cmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJl
c3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LmxvY2F0aW9uLCBy
ZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFy
YWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxl
ZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmdl
dEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7CisgICAg
ICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3Bl
bGxlZFdvcmQsIFN0cmluZygpLCBjdXJyZW50U2VsZWN0aW9uLCBndWVzc2VzKTsKICAgICAgICAg
ICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKICAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7CkBAIC02MzgsMTEgKzY0NSwxMyBAQCBib29sIFRleHRDaGVja2luZ0hlbHBl
cjo6dW5pZmllZFRleHRDaGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9
CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICNpZiBV
U0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdUeXBlcyk7CisgICAgcmVzdWx0cyA9IGNsaWVudC5j
aGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVzLCBjdXJyZW50U2VsZWN0aW9u
KTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRTZWxlY3Rpb24pOworCiAgICAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzcGVsbGluZ3M7CiAgICAgaWYgKGNoZWNraW5nVHlw
ZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCiAgICAgICAgIGZpbmRNaXNzcGVsbGluZ3Mo
Y2xpZW50LCB0ZXh0LCBtaXNwZWxsaW5ncyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3
ICsxMDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ss
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Cit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbik7CiAKIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChjb25zdCBGcmFt
ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNp
b24gMTk4MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ+IEVtcHR5CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29u
dGV4dD4oKTsKIH0KIAotdm9pZCBFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+KQordm9pZCBFbXB0eVRl
eHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRD
aGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKIHsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcs
MTEgKzQxNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZSB7IH0K
IAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlw
ZU1hc2spIG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0K
KyAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJp
bmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIG92
ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVz
dD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZTsKIH07CiAKIGNsYXNzIEVtcHR5
RWRpdG9yQ2xpZW50IDogcHVibGljIEVkaXRvckNsaWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lv
biAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVj
a2VyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogLy8gRklYTUU6IFRo
aXMgaGVhZGVyIHNob3VsZCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIHdoZW4gcG9zc2libGUuCiAK
K2V4dGVybiBOU1N0cmluZyAqTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleTsKKwogQGlu
dGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJbnRlZ2VyKXJlcXVlc3RDYW5kaWRhdGVz
Rm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlIGluU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENoZWNraW5nVHlwZXMpY2hlY2tpbmdUeXBl
cyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopb3B0aW9ucyBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQg
Kj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVyOwogLSAoQk9PTClkZWxldGVzQXV0b3Nw
YWNlQmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBsYW5ndWFnZTooTlNTdHJpbmcgKils
YW5ndWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
aGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CisK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0Q2hl
Y2tlckNsaWVudCgpIHt9CkBAIC00OSwxNCArNTEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7
CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikgPSAwOwogI2VuZGlmCiAKICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0
aGF0IHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBi
ZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBsYW5ndWFnZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3Zp
ZGUgbW9yZSBhY2N1cmF0ZSBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3Mg
aW4gbW9yZSB0ZXh0IGluICJjb250ZXh0IiB0byBhaWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxh
bmd1YWdlCiAgICAgLy8gaWRlbnRpZmljYXRpb24uIE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vy
cm91bmRpbmcgdGhlICJ3b3JkIiBmb3Igd2hpY2ggd2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBz
dWdnZXN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQ
dHI8VGV4dENoZWNraW5nUmVxdWVzdD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NS
ZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1
NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDM4IEBACisyMDE2LTAzLTE1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAg
ICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2VyIHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRo
ZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRoZSBpbnNlcnRpb25Qb2ludCB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdl
dEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVj
a2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcp
OgorCisgICAgICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxl
U2VsZWN0aW9uIHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE2LTAz
LTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93
IHVwIHRvIHIxOTU3NjkuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIu
aAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CiAgICAgc3Rh
dGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KTsKICNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQotICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CisgICAgc3RhdGljIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9p
ZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdW
aWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKICAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFt
bWFyTGVuZ3RoKTsKQEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcm
IGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3Nlcyk7CisgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
dWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKICAgICBz
dGF0aWMgdm9pZCBsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQpOwogICAgIHN0YXRpYyB2b2lkIGlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPik7CisgICAgc3Rh
dGljIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNv
bXBsZXRpb24+LCB1aW50NjRfdCBpbnNlcnRpb25Qb2ludCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0MSw5ICs0NDQxLDkgQEAgaW50NjRfdCBXZWJQ
YWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBT
dHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5z
ZXJ0aW9uUG9pbnQsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAg
IHJlc3VsdHMgPSBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3BlbGxEb2N1bWVu
dFRhZygpLCB0ZXh0LCBjaGVja2luZ1R5cGVzKTsKKyAgICByZXN1bHRzID0gVGV4dENoZWNrZXI6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dCwgaW5zZXJ0aW9u
UG9pbnQsIGNoZWNraW5nVHlwZXMpOwogfQogI2VuZGlmCiAKQEAgLTQ0NzIsOSArNDQ3Miw5IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwg
YmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIHVp
bnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBU
ZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygpLCB3b3JkLCBj
b250ZXh0LCBndWVzc2VzKTsKKyAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3Bl
bGxEb2N1bWVudFRhZygpLCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3Nlcyk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQpA
QCAtNDQ5Myw5ICs0NDkzLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlnbm9yZVdvcmQoY29uc3Qg
U3RyaQogICAgIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgd29y
ZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50
NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQor
dm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3QsIHVpbnQ2NF90IGlu
c2VydGlvblBvaW50KQogewotICAgIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhUZXh0Q2hlY2tlckNvbXBsZXRpb246OmNyZWF0ZShyZXF1ZXN0SUQsIHJlcXVlc3QsIHRoaXMp
KTsKKyAgICBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNrZXJD
b21wbGV0aW9uOjpjcmVhdGUocmVxdWVzdElELCByZXF1ZXN0LCB0aGlzKSwgaW5zZXJ0aW9uUG9p
bnQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2
NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw5ICsxMDU1LDkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisgICAgdm9pZCBjaGVja1Rl
eHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYgcmVzdWx0cyk7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRzKGJvb2wpOwogCkBAIC0xMzMwLDcgKzEzMzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCk7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7CisgICAgdm9p
ZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpOwog
CiAgICAgdm9pZCB0YWtlRm9jdXModWludDMyX3QgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRv
b2xUaXAoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTI3NywxNyArMjc3LDE3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAg
ICAjIFNwZWxsaW5nIGFuZCBncmFtbWFyIG1lc3NhZ2VzCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykgIAotICAgIENoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZyB0ZXh0LCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4g
cmVzdWx0cykKKyAgICBDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgdWludDY0X3Qg
Y2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8V2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKQogI2VuZGlmCiAgICAgQ2hlY2tTcGVsbGlu
Z09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKQogICAgIENoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
ZyB0ZXh0KSAtPiAoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+IHJlc3VsdHMsIGludDMy
X3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpCiAgICAgU3Bl
bGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykKICAgICBVcGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZyBtaXNzcGVsbGVkV29yZCkKICAgICBVcGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIHN0cnVj
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWwpCi0gICAgR2V0R3Vlc3Nlc0Zv
cldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcykKKyAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykKICAg
ICBMZWFybldvcmQoU3RyaW5nIHdvcmQpOwogICAgIElnbm9yZVdvcmQoU3RyaW5nIHdvcmQpOwot
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCkKKyAgICBSZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRh
IHJlcXVlc3QsIHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogCiAgICAgIyBEcmFnIGFuZCBkcm9w
IG1lc3NhZ2VzCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQkocmV2aXNpb24gMTk4MTM5KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGgKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2
NF90LCBTdHJpbmdWaWV3LCB1aW50NjRfdCkKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRl
eHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90LCBTdHJpbmdWaWV3LCB1aW50
NjRfdCwgdWludDY0X3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4oKTsKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQordm9pZCBUZXh0Q2hlY2tlcjo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
dWludDY0X3QsIFZlY3RvcjxTdHJpbmc+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpA
QCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCwg
Y28KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCit2b2lk
IFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVj
a2VyQ29tcGxldGlvbj4sIHVpbnQ2NF90KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0J
KHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENo
ZWNrZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBQTEFURk9S
TShNQUMpCiAKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
TlNTcGVsbENoZWNrZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KQEAgLTI5MCwxNSArMjkxLDE5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1
bWVudFdpdGgKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBl
cykKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0
X3QgaW5zZXJ0aW9uUG9pbnQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpCiB7CiAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKIAogICAgIFJldGFpblB0cjxOU1N0cmluZz4g
dGV4dFN0cmluZyA9IHRleHQuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5T
RGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgb3B0aW9ucyA9IFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1iZXIgbnVtYmVyV2l0aFVu
c2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludF0sIE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9p
bnRLZXksIG5pbF07CisjZW5kaWYKICAgICBOU0FycmF5ICppbmNvbWluZ1Jlc3VsdHMgPSBbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6dGV4dFN0cmluZy5n
ZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYW5nZTpOU01ha2VSYW5nZSgwLCB0ZXh0Lmxlbmd0aCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlczpjaGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdU
eXBlT3J0aG9ncmFwaHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6bmlsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zOm9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRh
ZyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3J0aG9ncmFwaHk6TlVMTAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRDb3VudDpO
VUxMXTsKQEAgLTQyNSwxMyArNDMwLDE3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3IKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBk
YXRlU3BlbGxpbmdQYW5lbFdpdGhHcmFtbWFyU3RyaW5nOmJhZEdyYW1tYXJQaHJhc2UgZGV0YWls
OmdyYW1tYXJEZXRhaWxEaWN0LmdldCgpXTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFRl
eHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7CiAgICAgTlNTdHJpbmcqIGxhbmd1
YWdlID0gbmlsOwogICAgIE5TT3J0aG9ncmFwaHkqIG9ydGhvZ3JhcGh5ID0gbmlsOwogICAgIE5T
U3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl07CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25z
ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBu
dW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50XSwgTlNUZXh0Q2hlY2tpbmdJ
bnNlcnRpb25Qb2ludEtleSwgbmlsXTsKKyNlbmRpZgogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgp
KSB7Ci0gICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgY29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFw
aHkgb3B0aW9uczowIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRhZyBvcnRo
b2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOworICAgICAgICBbY2hlY2tlciBjaGVj
a1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5
cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOnNwZWxsRG9jdW1lbnRUYWcgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5
IHdvcmRDb3VudDowXTsKICAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBsYW5ndWFnZUZvcldv
cmRSYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0cmluZzpjb250ZXh0
IG9ydGhvZ3JhcGh5Om9ydGhvZ3JhcGh5XTsKICAgICB9CiAgICAgTlNBcnJheSogc3RyaW5nc0Fy
cmF5ID0gW2NoZWNrZXIgZ3Vlc3Nlc0ZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCB3b3JkLmxl
bmd0aCgpKSBpblN0cmluZzp3b3JkIGxhbmd1YWdlOmxhbmd1YWdlIGluU3BlbGxEb2N1bWVudFdp
dGhUYWc6c3BlbGxEb2N1bWVudFRhZ107CkBAIC00NTAsNyArNDU5LDcgQEAgdm9pZCBUZXh0Q2hl
Y2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZQogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVk
U3BlbGxDaGVja2VyXSBpZ25vcmVXb3JkOndvcmQgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVs
bERvY3VtZW50VGFnXTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZT
dHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+KQordm9pZCBUZXh0Q2hlY2tl
cjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRp
b24+LCB1aW50NjRfdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU3BlbGxDaGVja2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRp
ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVW5kb1N0ZXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNh
dG9yLmg+CisjaW5jbHVkZSA8V2ViY29yZS9WaXNpYmxlVW5pdHMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAg
LTQ3NCwxMiArNDc2LDE5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0
cmkKICAgICAqYmFkR3JhbW1hckxlbmd0aCA9IHJlc3VsdExlbmd0aDsKIH0KIAorc3RhdGljIHVp
bnQ2NF90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0
aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQ
b3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQp
OworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKK30KKwogI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgV2ViQ29yZTo6VGV4
dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJp
bmdWaWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAKLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1ZpZXcudG9TdHJpbmdX
aXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKKyAgICBtX3BhZ2UtPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1Zp
ZXcudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzLCBpbnNlcnRpb25Qb2lu
dEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKIAogICAgIHJl
dHVybiByZXN1bHRzOwogfQpAQCAtNTA3LDE5ICs1MTYsMTkgQEAgYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNwZWxsaW5nVUlJc1Nob3dpbgogICAgIHJldHVybiBpc1Nob3dpbmc7CiB9CiAKLXZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYkVk
aXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBT
dHJpbmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24s
IFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgY29udGV4dCksIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkOjpSZXBseShndWVzc2VzKSk7Cisg
ICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9y
V29yZCh3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1
cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0Zvcldv
cmQ6OlJlcGx5KGd1ZXNzZXMpKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBwcnBS
ZXF1ZXN0KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdU
Rjo6UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBwcnBSZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFJlZlB0cjxU
ZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gcHJwUmVxdWVzdDsKIAogICAgIHVpbnQ2NF90
IHJlcXVlc3RJRCA9IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCk7CiAgICAgbV9wYWdl
LT5hZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJRCwgcmVxdWVzdCk7CiAKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
cmVxdWVzdElELCByZXF1ZXN0LT5kYXRhKCkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJpbmcocmVxdWVzdElELCByZXF1ZXN0
LT5kYXRhKCksIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVj
dGlvbikpKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0
YXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDE2ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBt
aXNzcGVsbGVkV29yZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhT
dHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKICNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1
bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpIG92ZXJyaWRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNv
cmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOwogI2VuZGlmCiAgICAg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29u
c3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1
ZXNzZXMpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlk
ZTsKICAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVxdWVzdD4pIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsKIAogI2lm
IFBMQVRGT1JNKEdUSykKICAgICBib29sIHNob3VsZFNob3dVbmljb2RlTWVudSgpIG92ZXJyaWRl
OwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MjU3KQorKysgU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTYtMDMt
MTUgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgTlNT
cGVsbENoZWNrZXIgc3BlbGxDaGVja2luZyBtZXRob2RzIHdpdGggdGhlIGN1cnJlbnQgaW5zZXJ0
aW9uIHBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU1MzIKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJv
YmxlbS8yNDA2Njk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxlU2VsZWN0
aW9uIHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6Omdl
dEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToK
KyAgICAgICAgKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJFZGl0b3JD
bGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKwogMjAxNi0wMy0xNSAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbaW9zLXNpbSBkZWJ1Z10gQVBJIHRl
c3QgV2ViS2l0MS5BdWRpb1Nlc3Npb25DYXRlZ29yeUlPUyB0aW1pbmcgb3V0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
cmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxNiArMTU4LDE2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSBvdmVycmlkZTsKICAgICBT
dHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3
LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6
VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzKSBvdmVycmlkZTsKKyAgICBW
ZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChT
dHJpbmdWaWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBj
b25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlk
ZTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29s
IHNwZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsKIAogI2lm
IFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEy
MDAKICAgICB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mKTsKQEAgLTI4MCw3ICsyODAsNyBAQCBpbmxpbmUgYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikKK2lubGluZSB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxTdHJpbmc+JikKIHsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04ODEsNyArODgxLDcg
QEAgaW50IFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZENoYW5nZUNvdQogICAgIHJldHVybiAw
OwogfQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBj
aGVja2luZ1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50
OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCiB7CiAgICAgQVNT
RVJUKGNoZWNraW5nVHlwZXMgJiBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyk7CiAKQEAgLTEw
NTAsOSArMTA1MCwyMCBAQCBzdGF0aWMgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShO
CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdl
YkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRl
eHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpCitzdGF0aWMgaW50IGluc2VydGlvblBv
aW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbikKIHsKLSAgICByZXR1cm4gY29yZShbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxs
Q2hlY2tlcl0gY2hlY2tTdHJpbmc6c3RyaW5nLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmco
KS5nZXQoKSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKCkpIHR5cGVzOihjaGVj
a2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9wdGlvbnM6bmlsIGlu
U3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBo
eTpOVUxMIHdvcmRDb3VudDpOVUxMXSwgY2hlY2tpbmdUeXBlcyk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVj
dGlvblN0YXJ0KTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Cit9CisKK1ZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
U3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit7CisgICAgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25zID0gW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJ
bnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlv
bildLCBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5LCBuaWxdOworI2VuZGlmCisgICAg
cmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGNoZWNrU3Ry
aW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCkgcmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczooY2hlY2tpbmdUeXBlcyB8IE5TVGV4
dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5KSBvcHRpb25zOm9wdGlvbnMgaW5TcGVsbERvY3VtZW50
V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5Ok5VTEwgd29yZENv
dW50Ok5VTExdLCBjaGVja2luZ1R5cGVzKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQ
aHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCkBAIC0xMDg4LDEzICsx
MDk5LDE3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW4KICAgICBy
ZXR1cm4gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVs
XSBpc1Zpc2libGVdOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0Zvcldv
cmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKSB7Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQo
Y29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzKSB7CiAgICAgZ3Vlc3Nlcy5jbGVhcigpOwogICAgIE5TU3RyaW5nKiBsYW5ndWFnZSA9IG5p
bDsKICAgICBOU09ydGhvZ3JhcGh5KiBvcnRob2dyYXBoeSA9IG5pbDsKICAgICBOU1NwZWxsQ2hl
Y2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOworICAg
IE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgb3B0aW9ucyA9IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1iZXIgbnVtYmVyV2l0
aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJl
bnRTZWxlY3Rpb24pXSwgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSwgbmlsXTsKKyNl
bmRpZgogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIFtjaGVja2VyIGNoZWNr
U3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgdHlw
ZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0aW9uczowIGluU3BlbGxEb2N1bWVu
dFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTomb3J0aG9ncmFw
aHkgd29yZENvdW50OjBdOworICAgICAgICBbY2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0IHJh
bmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNraW5n
VHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5IHdvcmRDb3Vu
dDowXTsKICAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBsYW5ndWFnZUZvcldvcmRSYW5nZTpO
U01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0cmluZzpjb250ZXh0IG9ydGhvZ3Jh
cGh5Om9ydGhvZ3JhcGh5XTsKICAgICB9CiAgICAgTlNBcnJheSogc3RyaW5nc0FycmF5ID0gW2No
ZWNrZXIgZ3Vlc3Nlc0ZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCB3b3JkLmxlbmd0aCgpKSBp
blN0cmluZzp3b3JkIGxhbmd1YWdlOmxhbmd1YWdlIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3Bl
bGxDaGVja2VyRG9jdW1lbnRUYWcoKV07CkBAIC0xMjY4LDcgKzEyODMsNyBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKGluCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4
dENoZWNraW5nUmVxdWVzdD4gcmVxdWVzdCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+
IHJlcXVlc3QsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAj
aWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQoIW1fdGV4dENoZWNraW5nUmVxdWVzdCk7CkBA
IC0xMjc3LDcgKzEyOTIsMTEgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2lu
Z09mUwogICAgIGludCBzZXF1ZW5jZSA9IG1fdGV4dENoZWNraW5nUmVxdWVzdC0+ZGF0YSgpLnNl
cXVlbmNlKCk7CiAgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFrZVJhbmdlKDAsIG1fdGV4dENoZWNr
aW5nUmVxdWVzdC0+ZGF0YSgpLnRleHQoKS5sZW5ndGgoKSk7CiAgICAgTlNSdW5Mb29wKiBjdXJy
ZW50TG9vcCA9IFtOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdOwotICAgIFtbTlNTcGVsbENoZWNr
ZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZzptX3RleHRDaGVj
a2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkgcmFuZ2U6cmFuZ2UgdHlwZXM6TlNUZXh0Q2hlY2tp
bmdBbGxTeXN0ZW1UeXBlcyBvcHRpb25zOjAgaW5TcGVsbERvY3VtZW50V2l0aFRhZzowCisgICAg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25zID0gW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRo
VW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVu
dFNlbGVjdGlvbildLCBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5LCBuaWxdOworI2Vu
ZGlmCisgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nOm1fdGV4dENoZWNraW5nUmVxdWVzdC0+ZGF0YSgpLnRleHQoKSByYW5nZTpy
YW5nZSB0eXBlczpOU1RleHRDaGVja2luZ0FsbFN5c3RlbVR5cGVzIG9wdGlvbnM6b3B0aW9ucyBp
blNwZWxsRG9jdW1lbnRXaXRoVGFnOjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXI6XihOU0ludGVnZXIsIE5TQXJyYXkqIHJlc3VsdHMs
IE5TT3J0aG9ncmFwaHkqLCBOU0ludGVnZXIpIHsKICAgICAgICAgICAgIFtjdXJyZW50TG9vcCBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHBlcmZvcm0pIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRhcmdldDpbW1tXZWJFZGl0b3JTcGVsbENoZWNrUmVzcG9uZGVyIGFsbG9j
XSBpbml0V2l0aENsaWVudDp0aGlzIHNlcXVlbmNlOnNlcXVlbmNlIHJlc3VsdHM6cmVzdWx0c10g
YXV0b3JlbGVhc2VdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274203</attachid>
            <date>2016-03-16 11:52:56 -0700</date>
            <delta_ts>2016-03-16 12:06:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>43007</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTAzLTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2Vy
IHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNz
IHRoZSBGcmFtZeKAmXMgc2VjdGlvbiB0byBhIGhhbmRmdWwgb2Ygc3BlbGxpbmcgY2hlY2tpbmcg
bWV0aG9kcyB0aGF0IGNhbGwgCisgICAgICAgIGludG8gV2ViS2l0L1dlYktpdDIgdG8gdWx0aW1h
dGVseSBjYWxsIGludG8gTlNTcGVsbENoZWNrZXIuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6Omhhc01pc3NwZWxsaW5nKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3Ry
aW5nU2V0U3BlbGxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAg
ICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmVucXVldWVSZXF1ZXN0KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3
b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eVRleHRDaGVja2VyQ2xpZW50
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50Ojp+VGV4dENoZWNrZXJDbGllbnQpOgorCisg
ICAgICAgIFRoZSBrZXkgbmVlZGVkIHRvIGluY2x1ZGUgdGhlIGluc2VydGlvbiBwb2ludC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmg6CisKIDIwMTYtMDMt
MTUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgb3Zl
cmZsb3c6IC13ZWJraXQtbWFycXVlZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTgxMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpoYXNNaXNzcGVsbGluZwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJh
bWUpKSB7CiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcsIHJlc3VsdHMsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlm
ICghcmVzdWx0cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpc01pc3NwZWxsZWQgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQyLDcgKzExNDIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldFNwZWxsaW5nCiAgICAgICAgIAogICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFw
aCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sx
IGFuZCBXSzIKICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAg
ICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNoZWNrZXIsIHRleHQsIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpjaGVj
a2VyLCB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMsIG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICAKICAgICAg
ICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKICAgICAgICAgTlNOdW1iZXIqIHRydWVW
YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFw
aChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJh
bmdlKCkuZ2V0KCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2lu
YWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBz
dWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxw
dHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdv
cmQsIFN0cmluZygpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2VzOwogfQogCkBAIC0yNDAyLDcgKzI0MDIsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0
Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgp
LCByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3Vs
dHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNl
Rm9yKHJlcXVlc3QucmVsZWFzZSgpLCByZXN1bHRzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyAr
MTgxLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZgogICAgIGlm
ICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0g
cmVxdWVzdDsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNz
aW5nUmVxdWVzdCk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKG1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2
b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVx
dWVzdD4gcmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgpAQCAtMzQ2LDcgKzM0NywxMCBAQCBTdHJpbmcg
VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAg
ICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFy
ID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBh
cmFncmFwaCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJy
ZW50U2VsZWN0aW9uOworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3Jh
cGhSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24p
OwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQubG9j
YXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTU3OCwxMyAr
NTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MKIAogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmc7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpt
X2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywg
cmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJl
c3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LmxvY2F0aW9uLCBy
ZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFy
YWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxl
ZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmdl
dEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7CisgICAg
ICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3Bl
bGxlZFdvcmQsIFN0cmluZygpLCBjdXJyZW50U2VsZWN0aW9uLCBndWVzc2VzKTsKICAgICAgICAg
ICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKICAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7CkBAIC02MzgsMTEgKzY0NSwxMyBAQCBib29sIFRleHRDaGVja2luZ0hlbHBl
cjo6dW5pZmllZFRleHRDaGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9
CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICNpZiBV
U0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdUeXBlcyk7CisgICAgcmVzdWx0cyA9IGNsaWVudC5j
aGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVzLCBjdXJyZW50U2VsZWN0aW9u
KTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRTZWxlY3Rpb24pOworCiAgICAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzcGVsbGluZ3M7CiAgICAgaWYgKGNoZWNraW5nVHlw
ZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCiAgICAgICAgIGZpbmRNaXNzcGVsbGluZ3Mo
Y2xpZW50LCB0ZXh0LCBtaXNwZWxsaW5ncyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3
ICsxMDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ss
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Cit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbik7CiAKIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChjb25zdCBGcmFt
ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNp
b24gMTk4MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ+IEVtcHR5CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29u
dGV4dD4oKTsKIH0KIAotdm9pZCBFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+KQordm9pZCBFbXB0eVRl
eHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRD
aGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKIHsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcs
MTEgKzQxNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZSB7IH0K
IAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlw
ZU1hc2spIG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0K
KyAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJp
bmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIG92
ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVz
dD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZTsKIH07CiAKIGNsYXNzIEVtcHR5
RWRpdG9yQ2xpZW50IDogcHVibGljIEVkaXRvckNsaWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lv
biAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVj
a2VyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogLy8gRklYTUU6IFRo
aXMgaGVhZGVyIHNob3VsZCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIHdoZW4gcG9zc2libGUuCiAK
K2V4dGVybiBOU1N0cmluZyAqTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleTsKKwogQGlu
dGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJbnRlZ2VyKXJlcXVlc3RDYW5kaWRhdGVz
Rm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlIGluU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENoZWNraW5nVHlwZXMpY2hlY2tpbmdUeXBl
cyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopb3B0aW9ucyBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQg
Kj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVyOwogLSAoQk9PTClkZWxldGVzQXV0b3Nw
YWNlQmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBsYW5ndWFnZTooTlNTdHJpbmcgKils
YW5ndWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
aGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CisK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0Q2hl
Y2tlckNsaWVudCgpIHt9CkBAIC00OSwxNCArNTEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7
CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikgPSAwOwogI2VuZGlmCiAKICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0
aGF0IHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBi
ZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBsYW5ndWFnZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3Zp
ZGUgbW9yZSBhY2N1cmF0ZSBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3Mg
aW4gbW9yZSB0ZXh0IGluICJjb250ZXh0IiB0byBhaWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxh
bmd1YWdlCiAgICAgLy8gaWRlbnRpZmljYXRpb24uIE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vy
cm91bmRpbmcgdGhlICJ3b3JkIiBmb3Igd2hpY2ggd2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBz
dWdnZXN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQ
dHI8VGV4dENoZWNraW5nUmVxdWVzdD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NS
ZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1
NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDM4IEBACisyMDE2LTAzLTE1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAg
ICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2VyIHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRo
ZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRoZSBpbnNlcnRpb25Qb2ludCB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdl
dEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVj
a2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcp
OgorCisgICAgICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxl
U2VsZWN0aW9uIHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE2LTAz
LTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93
IHVwIHRvIHIxOTU3NjkuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIu
aAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CiAgICAgc3Rh
dGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KTsKICNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQotICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CisgICAgc3RhdGljIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9p
ZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdW
aWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKICAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFt
bWFyTGVuZ3RoKTsKQEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcm
IGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3Nlcyk7CisgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
dWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKICAgICBz
dGF0aWMgdm9pZCBsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQpOwogICAgIHN0YXRpYyB2b2lkIGlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPik7CisgICAgc3Rh
dGljIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNv
bXBsZXRpb24+LCB1aW50NjRfdCBpbnNlcnRpb25Qb2ludCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0MSw5ICs0NDQxLDkgQEAgaW50NjRfdCBXZWJQ
YWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBT
dHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5z
ZXJ0aW9uUG9pbnQsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAg
IHJlc3VsdHMgPSBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3BlbGxEb2N1bWVu
dFRhZygpLCB0ZXh0LCBjaGVja2luZ1R5cGVzKTsKKyAgICByZXN1bHRzID0gVGV4dENoZWNrZXI6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dCwgaW5zZXJ0aW9u
UG9pbnQsIGNoZWNraW5nVHlwZXMpOwogfQogI2VuZGlmCiAKQEAgLTQ0NzIsOSArNDQ3Miw5IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwg
YmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIHVp
bnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBU
ZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygpLCB3b3JkLCBj
b250ZXh0LCBndWVzc2VzKTsKKyAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3Bl
bGxEb2N1bWVudFRhZygpLCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3Nlcyk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQpA
QCAtNDQ5Myw5ICs0NDkzLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlnbm9yZVdvcmQoY29uc3Qg
U3RyaQogICAgIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgd29y
ZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50
NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQor
dm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3QsIHVpbnQ2NF90IGlu
c2VydGlvblBvaW50KQogewotICAgIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhUZXh0Q2hlY2tlckNvbXBsZXRpb246OmNyZWF0ZShyZXF1ZXN0SUQsIHJlcXVlc3QsIHRoaXMp
KTsKKyAgICBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNrZXJD
b21wbGV0aW9uOjpjcmVhdGUocmVxdWVzdElELCByZXF1ZXN0LCB0aGlzKSwgaW5zZXJ0aW9uUG9p
bnQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2
NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw5ICsxMDU1LDkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisgICAgdm9pZCBjaGVja1Rl
eHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYgcmVzdWx0cyk7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRzKGJvb2wpOwogCkBAIC0xMzMwLDcgKzEzMzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCk7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7CisgICAgdm9p
ZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpOwog
CiAgICAgdm9pZCB0YWtlRm9jdXModWludDMyX3QgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRv
b2xUaXAoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTI3NywxNyArMjc3LDE3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAg
ICAjIFNwZWxsaW5nIGFuZCBncmFtbWFyIG1lc3NhZ2VzCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykgIAotICAgIENoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZyB0ZXh0LCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4g
cmVzdWx0cykKKyAgICBDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgdWludDY0X3Qg
Y2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8V2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKQogI2VuZGlmCiAgICAgQ2hlY2tTcGVsbGlu
Z09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKQogICAgIENoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
ZyB0ZXh0KSAtPiAoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+IHJlc3VsdHMsIGludDMy
X3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpCiAgICAgU3Bl
bGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykKICAgICBVcGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZyBtaXNzcGVsbGVkV29yZCkKICAgICBVcGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIHN0cnVj
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWwpCi0gICAgR2V0R3Vlc3Nlc0Zv
cldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcykKKyAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykKICAg
ICBMZWFybldvcmQoU3RyaW5nIHdvcmQpOwogICAgIElnbm9yZVdvcmQoU3RyaW5nIHdvcmQpOwot
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCkKKyAgICBSZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRh
IHJlcXVlc3QsIHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogCiAgICAgIyBEcmFnIGFuZCBkcm9w
IG1lc3NhZ2VzCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQkocmV2aXNpb24gMTk4MTM5KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGgKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2
NF90LCBTdHJpbmdWaWV3LCB1aW50NjRfdCkKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRl
eHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90LCBTdHJpbmdWaWV3LCB1aW50
NjRfdCwgdWludDY0X3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4oKTsKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQordm9pZCBUZXh0Q2hlY2tlcjo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
dWludDY0X3QsIFZlY3RvcjxTdHJpbmc+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpA
QCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCwg
Y28KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCit2b2lk
IFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVj
a2VyQ29tcGxldGlvbj4sIHVpbnQ2NF90KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0J
KHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENo
ZWNrZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBQTEFURk9S
TShNQUMpCiAKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
TlNTcGVsbENoZWNrZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KQEAgLTI5MCwxNSArMjkxLDE5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1
bWVudFdpdGgKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBl
cykKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0
X3QgaW5zZXJ0aW9uUG9pbnQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpCiB7CiAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKIAogICAgIFJldGFpblB0cjxOU1N0cmluZz4g
dGV4dFN0cmluZyA9IHRleHQuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5T
RGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgb3B0aW9ucyA9IFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1iZXIgbnVtYmVyV2l0aFVu
c2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludF0sIE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9p
bnRLZXksIG5pbF07CisjZW5kaWYKICAgICBOU0FycmF5ICppbmNvbWluZ1Jlc3VsdHMgPSBbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6dGV4dFN0cmluZy5n
ZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYW5nZTpOU01ha2VSYW5nZSgwLCB0ZXh0Lmxlbmd0aCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlczpjaGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdU
eXBlT3J0aG9ncmFwaHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6bmlsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zOm9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRh
ZyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3J0aG9ncmFwaHk6TlVMTAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRDb3VudDpO
VUxMXTsKQEAgLTQyNSwxMyArNDMwLDE3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3IKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBk
YXRlU3BlbGxpbmdQYW5lbFdpdGhHcmFtbWFyU3RyaW5nOmJhZEdyYW1tYXJQaHJhc2UgZGV0YWls
OmdyYW1tYXJEZXRhaWxEaWN0LmdldCgpXTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFRl
eHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7CiAgICAgTlNTdHJpbmcqIGxhbmd1
YWdlID0gbmlsOwogICAgIE5TT3J0aG9ncmFwaHkqIG9ydGhvZ3JhcGh5ID0gbmlsOwogICAgIE5T
U3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl07CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25z
ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBu
dW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50XSwgTlNUZXh0Q2hlY2tpbmdJ
bnNlcnRpb25Qb2ludEtleSwgbmlsXTsKKyNlbmRpZgogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgp
KSB7Ci0gICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgY29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFw
aHkgb3B0aW9uczowIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRhZyBvcnRo
b2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOworICAgICAgICBbY2hlY2tlciBjaGVj
a1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5
cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOnNwZWxsRG9jdW1lbnRUYWcgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5
IHdvcmRDb3VudDowXTsKICAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBsYW5ndWFnZUZvcldv
cmRSYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0cmluZzpjb250ZXh0
IG9ydGhvZ3JhcGh5Om9ydGhvZ3JhcGh5XTsKICAgICB9CiAgICAgTlNBcnJheSogc3RyaW5nc0Fy
cmF5ID0gW2NoZWNrZXIgZ3Vlc3Nlc0ZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCB3b3JkLmxl
bmd0aCgpKSBpblN0cmluZzp3b3JkIGxhbmd1YWdlOmxhbmd1YWdlIGluU3BlbGxEb2N1bWVudFdp
dGhUYWc6c3BlbGxEb2N1bWVudFRhZ107CkBAIC00NTAsNyArNDU5LDcgQEAgdm9pZCBUZXh0Q2hl
Y2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZQogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVk
U3BlbGxDaGVja2VyXSBpZ25vcmVXb3JkOndvcmQgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVs
bERvY3VtZW50VGFnXTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZT
dHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+KQordm9pZCBUZXh0Q2hlY2tl
cjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRp
b24+LCB1aW50NjRfdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU3BlbGxDaGVja2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRp
ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVW5kb1N0ZXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNh
dG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAg
LTQ3NCwxMiArNDc2LDE5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0
cmkKICAgICAqYmFkR3JhbW1hckxlbmd0aCA9IHJlc3VsdExlbmd0aDsKIH0KIAorc3RhdGljIHVp
bnQ2NF90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0
aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQ
b3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQp
OworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKK30KKwogI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgV2ViQ29yZTo6VGV4
dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJp
bmdWaWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAKLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1ZpZXcudG9TdHJpbmdX
aXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKKyAgICBtX3BhZ2UtPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1Zp
ZXcudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzLCBpbnNlcnRpb25Qb2lu
dEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKIAogICAgIHJl
dHVybiByZXN1bHRzOwogfQpAQCAtNTA3LDE5ICs1MTYsMTkgQEAgYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNwZWxsaW5nVUlJc1Nob3dpbgogICAgIHJldHVybiBpc1Nob3dpbmc7CiB9CiAKLXZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYkVk
aXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBT
dHJpbmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24s
IFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgY29udGV4dCksIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkOjpSZXBseShndWVzc2VzKSk7Cisg
ICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9y
V29yZCh3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1
cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0Zvcldv
cmQ6OlJlcGx5KGd1ZXNzZXMpKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBwcnBS
ZXF1ZXN0KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdU
Rjo6UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBwcnBSZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFJlZlB0cjxU
ZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gcHJwUmVxdWVzdDsKIAogICAgIHVpbnQ2NF90
IHJlcXVlc3RJRCA9IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCk7CiAgICAgbV9wYWdl
LT5hZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJRCwgcmVxdWVzdCk7CiAKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
cmVxdWVzdElELCByZXF1ZXN0LT5kYXRhKCkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJpbmcocmVxdWVzdElELCByZXF1ZXN0
LT5kYXRhKCksIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVj
dGlvbikpKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0
YXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDE2ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBt
aXNzcGVsbGVkV29yZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhT
dHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKICNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1
bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpIG92ZXJyaWRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNv
cmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOwogI2VuZGlmCiAgICAg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29u
c3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1
ZXNzZXMpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlk
ZTsKICAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVxdWVzdD4pIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsKIAogI2lm
IFBMQVRGT1JNKEdUSykKICAgICBib29sIHNob3VsZFNob3dVbmljb2RlTWVudSgpIG92ZXJyaWRl
OwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MjU3KQorKysgU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTYtMDMt
MTUgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgTlNT
cGVsbENoZWNrZXIgc3BlbGxDaGVja2luZyBtZXRob2RzIHdpdGggdGhlIGN1cnJlbnQgaW5zZXJ0
aW9uIHBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU1MzIKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJv
YmxlbS8yNDA2Njk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxlU2VsZWN0
aW9uIHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6Omdl
dEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToK
KyAgICAgICAgKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJFZGl0b3JD
bGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKwogMjAxNi0wMy0xNSAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbaW9zLXNpbSBkZWJ1Z10gQVBJIHRl
c3QgV2ViS2l0MS5BdWRpb1Nlc3Npb25DYXRlZ29yeUlPUyB0aW1pbmcgb3V0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
cmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxNiArMTU4LDE2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSBvdmVycmlkZTsKICAgICBT
dHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3
LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6
VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzKSBvdmVycmlkZTsKKyAgICBW
ZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChT
dHJpbmdWaWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBj
b25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlk
ZTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29s
IHNwZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsKIAogI2lm
IFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEy
MDAKICAgICB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mKTsKQEAgLTI4MCw3ICsyODAsNyBAQCBpbmxpbmUgYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikKK2lubGluZSB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxTdHJpbmc+JikKIHsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04ODEsNyArODgxLDcg
QEAgaW50IFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZENoYW5nZUNvdQogICAgIHJldHVybiAw
OwogfQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBj
aGVja2luZ1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50
OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCiB7CiAgICAgQVNT
RVJUKGNoZWNraW5nVHlwZXMgJiBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyk7CiAKQEAgLTEw
NTAsOSArMTA1MCwyMiBAQCBzdGF0aWMgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShO
CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdl
YkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRl
eHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorc3RhdGljIGludCBpbnNl
cnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdIGNoZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRD
b3B5aW5nKCkuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBl
czooY2hlY2tpbmdUeXBlcyB8IE5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5KSBvcHRpb25z
Om5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0
aG9ncmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF0sIGNoZWNraW5nVHlwZXMpOworICAgIFZpc2li
bGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFw
aChzZWxlY3Rpb25TdGFydCk7CisgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworfQorI2Vu
ZGlmCisKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNo
ZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit7
CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25zID0g
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1i
ZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
Y3VycmVudFNlbGVjdGlvbildLCBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5LCBuaWxd
OworI2VuZGlmCisgICAgcmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIGNoZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCku
Z2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczooY2hlY2tp
bmdUeXBlcyB8IE5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5KSBvcHRpb25zOm9wdGlvbnMg
aW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3Jh
cGh5Ok5VTEwgd29yZENvdW50Ok5VTExdLCBjaGVja2luZ1R5cGVzKTsKIH0KIAogdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwp
CkBAIC0xMDg4LDEzICsxMTAxLDE4IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbGluZ1VJ
SXNTaG93aW4KICAgICByZXR1cm4gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
XSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSB7Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0
R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQs
IGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzKQorewogICAgIGd1ZXNzZXMuY2xlYXIoKTsKICAgICBOU1N0cmlu
ZyogbGFuZ3VhZ2UgPSBuaWw7CiAgICAgTlNPcnRob2dyYXBoeSogb3J0aG9ncmFwaHkgPSBuaWw7
CiAgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CisjaWYgUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAg
IG9wdGlvbnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05T
TnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVu
dFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKV0sIE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9p
bnRLZXksIG5pbF07CisjZW5kaWYKICAgICBpZiAoY29udGV4dC5sZW5ndGgoKSkgewotICAgICAg
ICBbY2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRl
eHQubGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6
MCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9n
cmFwaHk6Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKKyAgICAgICAgW2NoZWNrZXIgY2hlY2tT
dHJpbmc6Y29udGV4dCByYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSB0eXBl
czpOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSBvcHRpb25zOm9wdGlvbnMgaW5TcGVsbERv
Y3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5OiZvcnRo
b2dyYXBoeSB3b3JkQ291bnQ6MF07CiAgICAgICAgIGxhbmd1YWdlID0gW2NoZWNrZXIgbGFuZ3Vh
Z2VGb3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgaW5TdHJpbmc6
Y29udGV4dCBvcnRob2dyYXBoeTpvcnRob2dyYXBoeV07CiAgICAgfQogICAgIE5TQXJyYXkqIHN0
cmluZ3NBcnJheSA9IFtjaGVja2VyIGd1ZXNzZXNGb3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
d29yZC5sZW5ndGgoKSkgaW5TdHJpbmc6d29yZCBsYW5ndWFnZTpsYW5ndWFnZSBpblNwZWxsRG9j
dW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCldOwpAQCAtMTI2OCw3ICsxMjg2
LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZENoZWNrU3VjY2VlZChpbgogfQogI2VuZGlm
CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVm
UHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QpCit2b2lkIFdlYkVkaXRv
ckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50
U2VsZWN0aW9uKQogewogI2lmICFQTEFURk9STShJT1MpCiAgICAgQVNTRVJUKCFtX3RleHRDaGVj
a2luZ1JlcXVlc3QpOwpAQCAtMTI3Nyw3ICsxMjk1LDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpyZXF1ZXN0Q2hlY2tpbmdPZlMKICAgICBpbnQgc2VxdWVuY2UgPSBtX3RleHRDaGVja2luZ1Jl
cXVlc3QtPmRhdGEoKS5zZXF1ZW5jZSgpOwogICAgIE5TUmFuZ2UgcmFuZ2UgPSBOU01ha2VSYW5n
ZSgwLCBtX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkubGVuZ3RoKCkpOwogICAg
IE5TUnVuTG9vcCogY3VycmVudExvb3AgPSBbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXTsKLSAg
ICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gcmVxdWVzdENoZWNraW5nT2ZT
dHJpbmc6bV90ZXh0Q2hlY2tpbmdSZXF1ZXN0LT5kYXRhKCkudGV4dCgpIHJhbmdlOnJhbmdlIHR5
cGVzOk5TVGV4dENoZWNraW5nQWxsU3lzdGVtVHlwZXMgb3B0aW9uczowIGluU3BlbGxEb2N1bWVu
dFdpdGhUYWc6MAorICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAg
b3B0aW9ucyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNO
dW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50
U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSwgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2lu
dEtleSwgbmlsXTsKKyNlbmRpZgorICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVj
a2VyXSByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZzptX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEo
KS50ZXh0KCkgcmFuZ2U6cmFuZ2UgdHlwZXM6TlNUZXh0Q2hlY2tpbmdBbGxTeXN0ZW1UeXBlcyBv
cHRpb25zOm9wdGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzowCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNJbnRlZ2VyLCBO
U0FycmF5KiByZXN1bHRzLCBOU09ydGhvZ3JhcGh5KiwgTlNJbnRlZ2VyKSB7CiAgICAgICAgICAg
ICBbY3VycmVudExvb3AgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihwZXJmb3JtKSAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6W1tbV2ViRWRpdG9yU3BlbGxDaGVj
a1Jlc3BvbmRlciBhbGxvY10gaW5pdFdpdGhDbGllbnQ6dGhpcyBzZXF1ZW5jZTpzZXF1ZW5jZSBy
ZXN1bHRzOnJlc3VsdHNdIGF1dG9yZWxlYXNlXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274206</attachid>
            <date>2016-03-16 12:06:34 -0700</date>
            <delta_ts>2016-03-16 12:19:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>45113</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTAzLTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2Vy
IHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNz
IHRoZSBGcmFtZeKAmXMgc2VjdGlvbiB0byBhIGhhbmRmdWwgb2Ygc3BlbGxpbmcgY2hlY2tpbmcg
bWV0aG9kcyB0aGF0IGNhbGwgCisgICAgICAgIGludG8gV2ViS2l0L1dlYktpdDIgdG8gdWx0aW1h
dGVseSBjYWxsIGludG8gTlNTcGVsbENoZWNrZXIuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6Omhhc01pc3NwZWxsaW5nKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3Ry
aW5nU2V0U3BlbGxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAg
ICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmVucXVldWVSZXF1ZXN0KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3
b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eVRleHRDaGVja2VyQ2xpZW50
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50Ojp+VGV4dENoZWNrZXJDbGllbnQpOgorCisg
ICAgICAgIFRoZSBrZXkgbmVlZGVkIHRvIGluY2x1ZGUgdGhlIGluc2VydGlvbiBwb2ludC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmg6CisKIDIwMTYtMDMt
MTUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgb3Zl
cmZsb3c6IC13ZWJraXQtbWFycXVlZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTgxMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpoYXNNaXNzcGVsbGluZwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJh
bWUpKSB7CiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcsIHJlc3VsdHMsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlm
ICghcmVzdWx0cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpc01pc3NwZWxsZWQgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQyLDcgKzExNDIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldFNwZWxsaW5nCiAgICAgICAgIAogICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFw
aCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sx
IGFuZCBXSzIKICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAg
ICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNoZWNrZXIsIHRleHQsIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpjaGVj
a2VyLCB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMsIG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICAKICAgICAg
ICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKICAgICAgICAgTlNOdW1iZXIqIHRydWVW
YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFw
aChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJh
bmdlKCkuZ2V0KCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2lu
YWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBz
dWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxw
dHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdv
cmQsIFN0cmluZygpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2VzOwogfQogCkBAIC0yNDAyLDcgKzI0MDIsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0
Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgp
LCByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3Vs
dHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNl
Rm9yKHJlcXVlc3QucmVsZWFzZSgpLCByZXN1bHRzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyAr
MTgxLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZgogICAgIGlm
ICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0g
cmVxdWVzdDsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNz
aW5nUmVxdWVzdCk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKG1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2
b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVx
dWVzdD4gcmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgpAQCAtMzQ2LDcgKzM0NywxMCBAQCBTdHJpbmcg
VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAg
ICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFy
ID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBh
cmFncmFwaCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJy
ZW50U2VsZWN0aW9uOworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3Jh
cGhSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24p
OwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQubG9j
YXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTU3OCwxMyAr
NTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MKIAogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmc7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpt
X2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywg
cmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJl
c3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LmxvY2F0aW9uLCBy
ZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFy
YWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxl
ZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmdl
dEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7CisgICAg
ICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3Bl
bGxlZFdvcmQsIFN0cmluZygpLCBjdXJyZW50U2VsZWN0aW9uLCBndWVzc2VzKTsKICAgICAgICAg
ICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKICAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7CkBAIC02MzgsMTEgKzY0NSwxMyBAQCBib29sIFRleHRDaGVja2luZ0hlbHBl
cjo6dW5pZmllZFRleHRDaGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9
CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICNpZiBV
U0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdUeXBlcyk7CisgICAgcmVzdWx0cyA9IGNsaWVudC5j
aGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVzLCBjdXJyZW50U2VsZWN0aW9u
KTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRTZWxlY3Rpb24pOworCiAgICAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzcGVsbGluZ3M7CiAgICAgaWYgKGNoZWNraW5nVHlw
ZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCiAgICAgICAgIGZpbmRNaXNzcGVsbGluZ3Mo
Y2xpZW50LCB0ZXh0LCBtaXNwZWxsaW5ncyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3
ICsxMDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ss
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Cit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbik7CiAKIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChjb25zdCBGcmFt
ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNp
b24gMTk4MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ+IEVtcHR5CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29u
dGV4dD4oKTsKIH0KIAotdm9pZCBFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+KQordm9pZCBFbXB0eVRl
eHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRD
aGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKIHsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcs
MTEgKzQxNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZSB7IH0K
IAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlw
ZU1hc2spIG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0K
KyAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJp
bmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIG92
ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVz
dD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZTsKIH07CiAKIGNsYXNzIEVtcHR5
RWRpdG9yQ2xpZW50IDogcHVibGljIEVkaXRvckNsaWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lv
biAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVj
a2VyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogLy8gRklYTUU6IFRo
aXMgaGVhZGVyIHNob3VsZCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIHdoZW4gcG9zc2libGUuCiAK
K2V4dGVybiBOU1N0cmluZyAqTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleTsKKwogQGlu
dGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJbnRlZ2VyKXJlcXVlc3RDYW5kaWRhdGVz
Rm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlIGluU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENoZWNraW5nVHlwZXMpY2hlY2tpbmdUeXBl
cyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopb3B0aW9ucyBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQg
Kj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVyOwogLSAoQk9PTClkZWxldGVzQXV0b3Nw
YWNlQmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBsYW5ndWFnZTooTlNTdHJpbmcgKils
YW5ndWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
aGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CisK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0Q2hl
Y2tlckNsaWVudCgpIHt9CkBAIC00OSwxNCArNTEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7
CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikgPSAwOwogI2VuZGlmCiAKICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0
aGF0IHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBi
ZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBsYW5ndWFnZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3Zp
ZGUgbW9yZSBhY2N1cmF0ZSBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3Mg
aW4gbW9yZSB0ZXh0IGluICJjb250ZXh0IiB0byBhaWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxh
bmd1YWdlCiAgICAgLy8gaWRlbnRpZmljYXRpb24uIE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vy
cm91bmRpbmcgdGhlICJ3b3JkIiBmb3Igd2hpY2ggd2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBz
dWdnZXN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQ
dHI8VGV4dENoZWNraW5nUmVxdWVzdD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NS
ZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1
NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDM4IEBACisyMDE2LTAzLTE1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAg
ICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2VyIHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRo
ZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRoZSBpbnNlcnRpb25Qb2ludCB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdl
dEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVj
a2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcp
OgorCisgICAgICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxl
U2VsZWN0aW9uIHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE2LTAz
LTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93
IHVwIHRvIHIxOTU3NjkuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIu
aAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CiAgICAgc3Rh
dGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KTsKICNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQotICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CisgICAgc3RhdGljIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9p
ZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdW
aWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKICAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFt
bWFyTGVuZ3RoKTsKQEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcm
IGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3Nlcyk7CisgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
dWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKICAgICBz
dGF0aWMgdm9pZCBsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQpOwogICAgIHN0YXRpYyB2b2lkIGlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPik7CisgICAgc3Rh
dGljIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNv
bXBsZXRpb24+LCB1aW50NjRfdCBpbnNlcnRpb25Qb2ludCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0MSw5ICs0NDQxLDkgQEAgaW50NjRfdCBXZWJQ
YWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBT
dHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5z
ZXJ0aW9uUG9pbnQsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAg
IHJlc3VsdHMgPSBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3BlbGxEb2N1bWVu
dFRhZygpLCB0ZXh0LCBjaGVja2luZ1R5cGVzKTsKKyAgICByZXN1bHRzID0gVGV4dENoZWNrZXI6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dCwgaW5zZXJ0aW9u
UG9pbnQsIGNoZWNraW5nVHlwZXMpOwogfQogI2VuZGlmCiAKQEAgLTQ0NzIsOSArNDQ3Miw5IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwg
YmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIHVp
bnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBU
ZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygpLCB3b3JkLCBj
b250ZXh0LCBndWVzc2VzKTsKKyAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3Bl
bGxEb2N1bWVudFRhZygpLCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3Nlcyk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQpA
QCAtNDQ5Myw5ICs0NDkzLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlnbm9yZVdvcmQoY29uc3Qg
U3RyaQogICAgIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgd29y
ZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50
NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQor
dm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3QsIHVpbnQ2NF90IGlu
c2VydGlvblBvaW50KQogewotICAgIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhUZXh0Q2hlY2tlckNvbXBsZXRpb246OmNyZWF0ZShyZXF1ZXN0SUQsIHJlcXVlc3QsIHRoaXMp
KTsKKyAgICBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNrZXJD
b21wbGV0aW9uOjpjcmVhdGUocmVxdWVzdElELCByZXF1ZXN0LCB0aGlzKSwgaW5zZXJ0aW9uUG9p
bnQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2
NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw5ICsxMDU1LDkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisgICAgdm9pZCBjaGVja1Rl
eHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYgcmVzdWx0cyk7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRzKGJvb2wpOwogCkBAIC0xMzMwLDcgKzEzMzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCk7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7CisgICAgdm9p
ZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpOwog
CiAgICAgdm9pZCB0YWtlRm9jdXModWludDMyX3QgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRv
b2xUaXAoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTI3NywxNyArMjc3LDE3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAg
ICAjIFNwZWxsaW5nIGFuZCBncmFtbWFyIG1lc3NhZ2VzCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykgIAotICAgIENoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZyB0ZXh0LCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4g
cmVzdWx0cykKKyAgICBDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgdWludDY0X3Qg
Y2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8V2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKQogI2VuZGlmCiAgICAgQ2hlY2tTcGVsbGlu
Z09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKQogICAgIENoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
ZyB0ZXh0KSAtPiAoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+IHJlc3VsdHMsIGludDMy
X3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpCiAgICAgU3Bl
bGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykKICAgICBVcGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZyBtaXNzcGVsbGVkV29yZCkKICAgICBVcGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIHN0cnVj
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWwpCi0gICAgR2V0R3Vlc3Nlc0Zv
cldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcykKKyAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykKICAg
ICBMZWFybldvcmQoU3RyaW5nIHdvcmQpOwogICAgIElnbm9yZVdvcmQoU3RyaW5nIHdvcmQpOwot
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCkKKyAgICBSZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRh
IHJlcXVlc3QsIHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogCiAgICAgIyBEcmFnIGFuZCBkcm9w
IG1lc3NhZ2VzCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCShyZXZpc2lvbiAxOTgxMzkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3IKIHsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0Zvcldv
cmQoaW50NjRfdCAvKiBzcGVsbERvY3VtZW50VGFnICovLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgLyogY29udGV4dCAqLywgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lk
IFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IC8qIHNwZWxsRG9jdW1lbnRU
YWcgKi8sIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiAvKiBjb250ZXh0ICovLCB1
aW50NjRfdCAvKiBpbnNlcnRpb25Qb2ludCAqLywgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7
CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAgICAgZ3Vlc3NlcyA9IGVuY2hhbnRUZXh0Q2hlY2tl
cigpLmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQpOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgVGV4
dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCAvKiAKICNlbmRpZgogfQogCi12b2lkIFRleHRD
aGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29t
cGxldGlvbj4gY29tcGxldGlvbikKK3ZvaWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09m
U3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPiBjb21wbGV0aW9uLCB1aW50
NjRfdCBpbnNlcnRpb25Qb2ludCkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICBpZiAo
IWNvbXBsZXRpb24pCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVz
dENoZWNraW5nT2ZTdHJpbgogICAgIEFTU0VSVChyZXF1ZXN0LnNlcXVlbmNlKCkgIT0gdW5yZXF1
ZXN0ZWRUZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7CiAgICAgQVNTRVJUKHJlcXVlc3QubWFzaygpICE9
IFRleHRDaGVja2luZ1R5cGVOb25lKTsKIAotICAgIGNvbXBsZXRpb24tPmRpZEZpbmlzaENoZWNr
aW5nVGV4dChjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0aW9uLT5zcGVsbERvY3VtZW50VGFn
KCksIHJlcXVlc3QudGV4dCgpLCByZXF1ZXN0Lm1hc2soKSkpOworICAgIGNvbXBsZXRpb24tPmRp
ZEZpbmlzaENoZWNraW5nVGV4dChjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0aW9uLT5zcGVs
bERvY3VtZW50VGFnKCksIHJlcXVlc3QudGV4dCgpLCBpbnNlcnRpb25Qb2ludCwgcmVxdWVzdC5t
YXNrKCkpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOwogI2VuZGlmCkBA
IC0yMzksOCArMjM5LDkgQEAgc3RhdGljIHVuc2lnbmVkIG5leHRXb3JkT2Zmc2V0KFN0cmluZ1Zp
ZQogI2VuZGlmCiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVz
KQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFy
YWdyYXBoKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRf
dCBpbnNlcnRpb25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcykKIHsKKyAgICBVTlVTRURf
UEFSQU0oaW5zZXJ0aW9uUG9pbnQpOwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogICAgIGlmICgh
KGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpKQogICAgICAgICByZXR1
cm4gVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQkocmV2aXNpb24gMTk4MTM5KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1
bWVudFdpdGgKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90
LCBTdHJpbmdWaWV3LCB1aW50NjRfdCkKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRD
aGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90LCBTdHJpbmdWaWV3LCB1aW50NjRf
dCwgdWludDY0X3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4oKTsKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFRleHRDaGVj
a2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQordm9pZCBUZXh0Q2hlY2tlcjo6Z2V0
R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdWlu
dDY0X3QsIFZlY3RvcjxTdHJpbmc+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCwgY28K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hl
Y2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCit2b2lkIFRl
eHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2Vy
Q29tcGxldGlvbj4sIHVpbnQ2NF90KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0JKHJl
dmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNr
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBQTEFURk9STShN
QUMpCiAKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUvTlNT
cGVsbENoZWNrZXJTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4K
QEAgLTI5MCwxNSArMjkxLDE5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVu
dFdpdGgKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNw
ZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcykK
K1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFn
cmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3Qg
aW5zZXJ0aW9uUG9pbnQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpCiB7CiAgICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKIAogICAgIFJldGFpblB0cjxOU1N0cmluZz4gdGV4
dFN0cmluZyA9IHRleHQuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgb3B0aW9ucyA9IFtOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2ln
bmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludF0sIE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRL
ZXksIG5pbF07CisjZW5kaWYKICAgICBOU0FycmF5ICppbmNvbWluZ1Jlc3VsdHMgPSBbW05TU3Bl
bGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6dGV4dFN0cmluZy5nZXQo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZTpOU01ha2VSYW5nZSgwLCB0ZXh0Lmxlbmd0aCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlczpjaGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBl
T3J0aG9ncmFwaHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6bmlsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cHRpb25zOm9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRhZyAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3J0aG9ncmFwaHk6TlVMTAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRDb3VudDpOVUxM
XTsKQEAgLTQyNSwxMyArNDMwLDE3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3IKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBkYXRl
U3BlbGxpbmdQYW5lbFdpdGhHcmFtbWFyU3RyaW5nOmJhZEdyYW1tYXJQaHJhc2UgZGV0YWlsOmdy
YW1tYXJEZXRhaWxEaWN0LmdldCgpXTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nl
c0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFRleHRD
aGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCB1aW50NjRfdCBpbnNlcnRpb25Q
b2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7CiAgICAgTlNTdHJpbmcqIGxhbmd1YWdl
ID0gbmlsOwogICAgIE5TT3J0aG9ncmFwaHkqIG9ydGhvZ3JhcGh5ID0gbmlsOwogICAgIE5TU3Bl
bGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07
CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25zID0g
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1i
ZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50XSwgTlNUZXh0Q2hlY2tpbmdJbnNl
cnRpb25Qb2ludEtleSwgbmlsXTsKKyNlbmRpZgogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgpKSB7
Ci0gICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgY29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkg
b3B0aW9uczowIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRhZyBvcnRob2dy
YXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOworICAgICAgICBbY2hlY2tlciBjaGVja1N0
cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5cGVz
Ok5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9j
dW1lbnRXaXRoVGFnOnNwZWxsRG9jdW1lbnRUYWcgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5IHdv
cmRDb3VudDowXTsKICAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBsYW5ndWFnZUZvcldvcmRS
YW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0cmluZzpjb250ZXh0IG9y
dGhvZ3JhcGh5Om9ydGhvZ3JhcGh5XTsKICAgICB9CiAgICAgTlNBcnJheSogc3RyaW5nc0FycmF5
ID0gW2NoZWNrZXIgZ3Vlc3Nlc0ZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCB3b3JkLmxlbmd0
aCgpKSBpblN0cmluZzp3b3JkIGxhbmd1YWdlOmxhbmd1YWdlIGluU3BlbGxEb2N1bWVudFdpdGhU
YWc6c3BlbGxEb2N1bWVudFRhZ107CkBAIC00NTAsNyArNDU5LDcgQEAgdm9pZCBUZXh0Q2hlY2tl
cjo6aWdub3JlV29yZChpbnQ2NF90IHNwZQogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXSBpZ25vcmVXb3JkOndvcmQgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbERv
Y3VtZW50VGFnXTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+KQordm9pZCBUZXh0Q2hlY2tlcjo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+
LCB1aW50NjRfdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw4ICs0OCwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU3BlbGxDaGVja2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVByb3BlcnRpZXMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VW5kb1N0ZXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9y
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTQ3
NCwxMiArNDc2LDE5IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmkK
ICAgICAqYmFkR3JhbW1hckxlbmd0aCA9IHJlc3VsdExlbmd0aDsKIH0KIAorc3RhdGljIHVpbnQ2
NF90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9u
U3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwor
ICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhT
dGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKK30KKwogI2lmIFVTRShVTklGSUVEX1RFWFRf
Q0hFQ0tJTkcpCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgV2ViQ29yZTo6VGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdW
aWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAKLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1ZpZXcudG9TdHJpbmdXaXRo
b3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hl
Y2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKKyAgICBtX3BhZ2UtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1ZpZXcu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzLCBpbnNlcnRpb25Qb2ludEZy
b21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKIAogICAgIHJldHVy
biByZXN1bHRzOwogfQpAQCAtNTA3LDE5ICs1MTYsMTkgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNwZWxsaW5nVUlJc1Nob3dpbgogICAgIHJldHVybiBpc1Nob3dpbmc7CiB9CiAKLXZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0
IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgY29udGV4dCksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkOjpSZXBseShndWVzc2VzKSk7CisgICAg
bV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29y
ZCh3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJl
bnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQ6
OlJlcGx5KGd1ZXNzZXMpKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBwcnBSZXF1
ZXN0KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6
UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiBwcnBSZXF1ZXN0LCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFJlZlB0cjxUZXh0
Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gcHJwUmVxdWVzdDsKIAogICAgIHVpbnQ2NF90IHJl
cXVlc3RJRCA9IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCk7CiAgICAgbV9wYWdlLT5h
ZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJRCwgcmVxdWVzdCk7CiAKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJpbmcocmVx
dWVzdElELCByZXF1ZXN0LT5kYXRhKCkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJpbmcocmVxdWVzdElELCByZXF1ZXN0LT5k
YXRhKCksIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlv
bikpKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM5LDE2ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZ2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNz
cGVsbGVkV29yZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJM
b2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKICNpZiBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+
IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGVNYXNrIGNoZWNraW5nVHlwZXMpIG92ZXJyaWRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6
OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2li
bGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOwogI2VuZGlmCiAgICAgdm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3Qg
V2ViQ29yZTo6R3JhbW1hckRldGFpbCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgYm9vbCBzcGVsbGluZ1VJ
SXNTaG93aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBT
dHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNz
ZXMpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3
b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rp
b24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsK
ICAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
ZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1
ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5n
UmVxdWVzdD4pIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsKIAogI2lmIFBM
QVRGT1JNKEdUSykKICAgICBib29sIHNob3VsZFNob3dVbmljb2RlTWVudSgpIG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MjU3KQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTYtMDMtMTUg
IEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgTlNTcGVs
bENoZWNrZXIgc3BlbGxDaGVja2luZyBtZXRob2RzIHdpdGggdGhlIGN1cnJlbnQgaW5zZXJ0aW9u
IHBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTU1MzIKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxl
bS8yNDA2Njk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxlU2VsZWN0aW9u
IHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmdldEd1
ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAg
ICAgICAgKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
RWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKwogMjAxNi0wMy0xNSAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbaW9zLXNpbSBkZWJ1Z10gQVBJIHRlc3Qg
V2ViS2l0MS5BdWRpb1Nlc3Npb25DYXRlZ29yeUlPUyB0aW1pbmcgb3V0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2
aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxNiArMTU4LDE2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSBvdmVycmlkZTsKICAgICBTdHJp
bmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBW
ZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6VGV4
dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzKSBvdmVycmlkZTsKKyAgICBWZWN0
b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJp
bmdWaWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25z
dCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsK
ICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcm
LCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29sIHNw
ZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBT
dHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsKIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAK
ICAgICB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24mKTsKQEAgLTI4MCw3ICsyODAsNyBAQCBpbmxpbmUgYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OnNwZWxsaW5nVUlJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikKK2lubGluZSB2b2lkIFdlYkVkaXRvckNsaWVudDo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgV2Vi
Q29yZTo6VmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxTdHJpbmc+JikKIHsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbQkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04ODEsNyArODgxLDcgQEAg
aW50IFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZENoYW5nZUNvdQogICAgIHJldHVybiAwOwog
fQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4
dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVj
a2luZ1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlwZU1h
c2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCiB7CiAgICAgQVNTRVJU
KGNoZWNraW5nVHlwZXMgJiBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyk7CiAKQEAgLTEwNTAs
OSArMTA1MCwyMiBAQCBzdGF0aWMgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOCiAg
ICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVk
aXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRD
aGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorc3RhdGljIGludCBpbnNlcnRp
b25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRT
cGVsbENoZWNrZXJdIGNoZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5
aW5nKCkuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczoo
Y2hlY2tpbmdUeXBlcyB8IE5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5KSBvcHRpb25zOm5p
bCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9n
cmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF0sIGNoZWNraW5nVHlwZXMpOworICAgIFZpc2libGVQ
b3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChz
ZWxlY3Rpb25TdGFydCk7CisgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworfQorI2VuZGlm
CisKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNr
aW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit7Cisg
ICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25zID0gW05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3Vy
cmVudFNlbGVjdGlvbildLCBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5LCBuaWxdOwor
I2VuZGlmCisgICAgcmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNr
ZXJdIGNoZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0
KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczooY2hlY2tpbmdU
eXBlcyB8IE5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5KSBvcHRpb25zOm9wdGlvbnMgaW5T
cGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5
Ok5VTEwgd29yZENvdW50Ok5VTExdLCBjaGVja2luZ1R5cGVzKTsKIH0KIAogdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcm
IGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCkBA
IC0xMDg4LDEzICsxMTAxLDE4IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbGluZ1VJSXNT
aG93aW4KICAgICByZXR1cm4gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBz
cGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0
R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQs
IFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSB7Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNv
bnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzKQorewogICAgIGd1ZXNzZXMuY2xlYXIoKTsKICAgICBOU1N0cmluZyog
bGFuZ3VhZ2UgPSBuaWw7CiAgICAgTlNPcnRob2dyYXBoeSogb3J0aG9ncmFwaHkgPSBuaWw7CiAg
ICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CisjaWYgUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAgIG9w
dGlvbnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVt
YmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNl
bGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKV0sIE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRL
ZXksIG5pbF07CisjZW5kaWYKICAgICBpZiAoY29udGV4dC5sZW5ndGgoKSkgewotICAgICAgICBb
Y2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQu
bGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6MCBp
blNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFw
aHk6Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKKyAgICAgICAgW2NoZWNrZXIgY2hlY2tTdHJp
bmc6Y29udGV4dCByYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSB0eXBlczpO
U1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSBvcHRpb25zOm9wdGlvbnMgaW5TcGVsbERvY3Vt
ZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5OiZvcnRob2dy
YXBoeSB3b3JkQ291bnQ6MF07CiAgICAgICAgIGxhbmd1YWdlID0gW2NoZWNrZXIgbGFuZ3VhZ2VG
b3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgaW5TdHJpbmc6Y29u
dGV4dCBvcnRob2dyYXBoeTpvcnRob2dyYXBoeV07CiAgICAgfQogICAgIE5TQXJyYXkqIHN0cmlu
Z3NBcnJheSA9IFtjaGVja2VyIGd1ZXNzZXNGb3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgd29y
ZC5sZW5ndGgoKSkgaW5TdHJpbmc6d29yZCBsYW5ndWFnZTpsYW5ndWFnZSBpblNwZWxsRG9jdW1l
bnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCldOwpAQCAtMTI2OCw3ICsxMjg2LDcg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZENoZWNrU3VjY2VlZChpbgogfQogI2VuZGlmCiAK
LXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRy
PFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QpCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2Vs
ZWN0aW9uKQogewogI2lmICFQTEFURk9STShJT1MpCiAgICAgQVNTRVJUKCFtX3RleHRDaGVja2lu
Z1JlcXVlc3QpOwpAQCAtMTI3Nyw3ICsxMjk1LDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpy
ZXF1ZXN0Q2hlY2tpbmdPZlMKICAgICBpbnQgc2VxdWVuY2UgPSBtX3RleHRDaGVja2luZ1JlcXVl
c3QtPmRhdGEoKS5zZXF1ZW5jZSgpOwogICAgIE5TUmFuZ2UgcmFuZ2UgPSBOU01ha2VSYW5nZSgw
LCBtX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkubGVuZ3RoKCkpOwogICAgIE5T
UnVuTG9vcCogY3VycmVudExvb3AgPSBbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXTsKLSAgICBb
W05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gcmVxdWVzdENoZWNraW5nT2ZTdHJp
bmc6bV90ZXh0Q2hlY2tpbmdSZXF1ZXN0LT5kYXRhKCkudGV4dCgpIHJhbmdlOnJhbmdlIHR5cGVz
Ok5TVGV4dENoZWNraW5nQWxsU3lzdGVtVHlwZXMgb3B0aW9uczowIGluU3BlbGxEb2N1bWVudFdp
dGhUYWc6MAorICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgb3B0
aW9ucyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1i
ZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2Vs
ZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSwgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtl
eSwgbmlsXTsKKyNlbmRpZgorICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
XSByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZzptX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS50
ZXh0KCkgcmFuZ2U6cmFuZ2UgdHlwZXM6TlNUZXh0Q2hlY2tpbmdBbGxTeXN0ZW1UeXBlcyBvcHRp
b25zOm9wdGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzowCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNJbnRlZ2VyLCBOU0Fy
cmF5KiByZXN1bHRzLCBOU09ydGhvZ3JhcGh5KiwgTlNJbnRlZ2VyKSB7CiAgICAgICAgICAgICBb
Y3VycmVudExvb3AgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihwZXJmb3JtKSAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6W1tbV2ViRWRpdG9yU3BlbGxDaGVja1Jl
c3BvbmRlciBhbGxvY10gaW5pdFdpdGhDbGllbnQ6dGhpcyBzZXF1ZW5jZTpzZXF1ZW5jZSByZXN1
bHRzOnJlc3VsdHNdIGF1dG9yZWxlYXNlXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274208</attachid>
            <date>2016-03-16 12:19:48 -0700</date>
            <delta_ts>2016-03-16 13:29:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>47344</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTAzLTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2Vy
IHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNz
IHRoZSBGcmFtZeKAmXMgc2VjdGlvbiB0byBhIGhhbmRmdWwgb2Ygc3BlbGxpbmcgY2hlY2tpbmcg
bWV0aG9kcyB0aGF0IGNhbGwgCisgICAgICAgIGludG8gV2ViS2l0L1dlYktpdDIgdG8gdWx0aW1h
dGVseSBjYWxsIGludG8gTlNTcGVsbENoZWNrZXIuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6Omhhc01pc3NwZWxsaW5nKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3Ry
aW5nU2V0U3BlbGxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAg
ICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmVucXVldWVSZXF1ZXN0KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3
b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eVRleHRDaGVja2VyQ2xpZW50
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50Ojp+VGV4dENoZWNrZXJDbGllbnQpOgorCisg
ICAgICAgIFRoZSBrZXkgbmVlZGVkIHRvIGluY2x1ZGUgdGhlIGluc2VydGlvbiBwb2ludC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmg6CisKIDIwMTYtMDMt
MTUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgb3Zl
cmZsb3c6IC13ZWJraXQtbWFycXVlZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTgxMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpoYXNNaXNzcGVsbGluZwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJh
bWUpKSB7CiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcsIHJlc3VsdHMsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlm
ICghcmVzdWx0cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpc01pc3NwZWxsZWQgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQyLDcgKzExNDIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldFNwZWxsaW5nCiAgICAgICAgIAogICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFw
aCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sx
IGFuZCBXSzIKICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAg
ICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNoZWNrZXIsIHRleHQsIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpjaGVj
a2VyLCB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMsIG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICAKICAgICAg
ICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKICAgICAgICAgTlNOdW1iZXIqIHRydWVW
YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFw
aChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJh
bmdlKCkuZ2V0KCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2lu
YWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBz
dWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxw
dHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdv
cmQsIFN0cmluZygpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2VzOwogfQogCkBAIC0yNDAyLDcgKzI0MDIsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0
Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgp
LCByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3Vs
dHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNl
Rm9yKHJlcXVlc3QucmVsZWFzZSgpLCByZXN1bHRzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyAr
MTgxLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZgogICAgIGlm
ICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0g
cmVxdWVzdDsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNz
aW5nUmVxdWVzdCk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKG1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2
b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVx
dWVzdD4gcmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgpAQCAtMzQ2LDcgKzM0NywxMCBAQCBTdHJpbmcg
VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAg
ICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFy
ID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBh
cmFncmFwaCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJy
ZW50U2VsZWN0aW9uOworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3Jh
cGhSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24p
OwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQubG9j
YXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTU3OCwxMyAr
NTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MKIAogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmc7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpt
X2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywg
cmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJl
c3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LmxvY2F0aW9uLCBy
ZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFy
YWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxl
ZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmdl
dEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7CisgICAg
ICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3Bl
bGxlZFdvcmQsIFN0cmluZygpLCBjdXJyZW50U2VsZWN0aW9uLCBndWVzc2VzKTsKICAgICAgICAg
ICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKICAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7CkBAIC02MzgsMTEgKzY0NSwxMyBAQCBib29sIFRleHRDaGVja2luZ0hlbHBl
cjo6dW5pZmllZFRleHRDaGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9
CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICNpZiBV
U0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdUeXBlcyk7CisgICAgcmVzdWx0cyA9IGNsaWVudC5j
aGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVzLCBjdXJyZW50U2VsZWN0aW9u
KTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRTZWxlY3Rpb24pOworCiAgICAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzcGVsbGluZ3M7CiAgICAgaWYgKGNoZWNraW5nVHlw
ZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCiAgICAgICAgIGZpbmRNaXNzcGVsbGluZ3Mo
Y2xpZW50LCB0ZXh0LCBtaXNwZWxsaW5ncyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3
ICsxMDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ss
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Cit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbik7CiAKIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChjb25zdCBGcmFt
ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNp
b24gMTk4MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ+IEVtcHR5CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29u
dGV4dD4oKTsKIH0KIAotdm9pZCBFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+KQordm9pZCBFbXB0eVRl
eHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRD
aGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKIHsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcs
MTEgKzQxNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZSB7IH0K
IAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlw
ZU1hc2spIG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0K
KyAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJp
bmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIG92
ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVz
dD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZTsKIH07CiAKIGNsYXNzIEVtcHR5
RWRpdG9yQ2xpZW50IDogcHVibGljIEVkaXRvckNsaWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lv
biAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVj
a2VyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogLy8gRklYTUU6IFRo
aXMgaGVhZGVyIHNob3VsZCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIHdoZW4gcG9zc2libGUuCiAK
K2V4dGVybiBOU1N0cmluZyAqTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleTsKKwogQGlu
dGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJbnRlZ2VyKXJlcXVlc3RDYW5kaWRhdGVz
Rm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlIGluU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENoZWNraW5nVHlwZXMpY2hlY2tpbmdUeXBl
cyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopb3B0aW9ucyBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQg
Kj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVyOwogLSAoQk9PTClkZWxldGVzQXV0b3Nw
YWNlQmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBsYW5ndWFnZTooTlNTdHJpbmcgKils
YW5ndWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
aGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CisK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0Q2hl
Y2tlckNsaWVudCgpIHt9CkBAIC00OSwxNCArNTEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7
CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikgPSAwOwogI2VuZGlmCiAKICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0
aGF0IHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBi
ZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBsYW5ndWFnZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3Zp
ZGUgbW9yZSBhY2N1cmF0ZSBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3Mg
aW4gbW9yZSB0ZXh0IGluICJjb250ZXh0IiB0byBhaWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxh
bmd1YWdlCiAgICAgLy8gaWRlbnRpZmljYXRpb24uIE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vy
cm91bmRpbmcgdGhlICJ3b3JkIiBmb3Igd2hpY2ggd2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBz
dWdnZXN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQ
dHI8VGV4dENoZWNraW5nUmVxdWVzdD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NS
ZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1
NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDM4IEBACisyMDE2LTAzLTE1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAg
ICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2VyIHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRo
ZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRoZSBpbnNlcnRpb25Qb2ludCB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdl
dEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVj
a2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcp
OgorCisgICAgICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxl
U2VsZWN0aW9uIHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE2LTAz
LTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93
IHVwIHRvIHIxOTU3NjkuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIu
aAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CiAgICAgc3Rh
dGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KTsKICNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQotICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CisgICAgc3RhdGljIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9p
ZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdW
aWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKICAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFt
bWFyTGVuZ3RoKTsKQEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcm
IGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3Nlcyk7CisgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
dWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKICAgICBz
dGF0aWMgdm9pZCBsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQpOwogICAgIHN0YXRpYyB2b2lkIGlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPik7CisgICAgc3Rh
dGljIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNv
bXBsZXRpb24+LCB1aW50NjRfdCBpbnNlcnRpb25Qb2ludCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0MSw5ICs0NDQxLDkgQEAgaW50NjRfdCBXZWJQ
YWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBT
dHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5z
ZXJ0aW9uUG9pbnQsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAg
IHJlc3VsdHMgPSBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3BlbGxEb2N1bWVu
dFRhZygpLCB0ZXh0LCBjaGVja2luZ1R5cGVzKTsKKyAgICByZXN1bHRzID0gVGV4dENoZWNrZXI6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dCwgaW5zZXJ0aW9u
UG9pbnQsIGNoZWNraW5nVHlwZXMpOwogfQogI2VuZGlmCiAKQEAgLTQ0NzIsOSArNDQ3Miw5IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwg
YmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIHVp
bnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBU
ZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygpLCB3b3JkLCBj
b250ZXh0LCBndWVzc2VzKTsKKyAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3Bl
bGxEb2N1bWVudFRhZygpLCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3Nlcyk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQpA
QCAtNDQ5Myw5ICs0NDkzLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlnbm9yZVdvcmQoY29uc3Qg
U3RyaQogICAgIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgd29y
ZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50
NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQor
dm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3QsIHVpbnQ2NF90IGlu
c2VydGlvblBvaW50KQogewotICAgIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhUZXh0Q2hlY2tlckNvbXBsZXRpb246OmNyZWF0ZShyZXF1ZXN0SUQsIHJlcXVlc3QsIHRoaXMp
KTsKKyAgICBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNrZXJD
b21wbGV0aW9uOjpjcmVhdGUocmVxdWVzdElELCByZXF1ZXN0LCB0aGlzKSwgaW5zZXJ0aW9uUG9p
bnQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2
NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw5ICsxMDU1LDkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisgICAgdm9pZCBjaGVja1Rl
eHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYgcmVzdWx0cyk7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRzKGJvb2wpOwogCkBAIC0xMzMwLDcgKzEzMzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCk7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7CisgICAgdm9p
ZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpOwog
CiAgICAgdm9pZCB0YWtlRm9jdXModWludDMyX3QgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRv
b2xUaXAoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTI3NywxNyArMjc3LDE3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAg
ICAjIFNwZWxsaW5nIGFuZCBncmFtbWFyIG1lc3NhZ2VzCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykgIAotICAgIENoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZyB0ZXh0LCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4g
cmVzdWx0cykKKyAgICBDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgdWludDY0X3Qg
Y2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8V2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKQogI2VuZGlmCiAgICAgQ2hlY2tTcGVsbGlu
Z09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKQogICAgIENoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
ZyB0ZXh0KSAtPiAoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+IHJlc3VsdHMsIGludDMy
X3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpCiAgICAgU3Bl
bGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykKICAgICBVcGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZyBtaXNzcGVsbGVkV29yZCkKICAgICBVcGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIHN0cnVj
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWwpCi0gICAgR2V0R3Vlc3Nlc0Zv
cldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcykKKyAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykKICAg
ICBMZWFybldvcmQoU3RyaW5nIHdvcmQpOwogICAgIElnbm9yZVdvcmQoU3RyaW5nIHdvcmQpOwot
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCkKKyAgICBSZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRh
IHJlcXVlc3QsIHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogCiAgICAgIyBEcmFnIGFuZCBkcm9w
IG1lc3NhZ2VzCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCShyZXZpc2lvbiAxOTgxMzkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDggKzE0OCwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbmV4dFdvcmRP
ZmZzZXQoU3RyaW5nVmllCiAjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAKICNpZiBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3Ry
aW5nVmlldyB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxE
b2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBpbnNlcnRpb25Qb2ludCwgdWlu
dDY0X3QgY2hlY2tpbmdUeXBlcykKIHsKKyAgICBVTlVTRURfUEFSQU0oaW5zZXJ0aW9uUG9pbnQp
OworCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1
bHQ7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcpIHsKQEAgLTIzMCw4ICsyMzIsOSBAQCB2b2lkIFRleHRDaGVj
a2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50
VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgLCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3NlcykKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmICwgdWludDY0
X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogeworICAgIFVOVVNF
RF9QQVJBTShpbnNlcnRpb25Qb2ludCk7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAgICAgV2Vi
VGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERv
Y3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKICNlbHNlCkBAIC0yNjEsNyArMjY0LDcgQEAgdm9p
ZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZQogI2VuZGlmCiB9CiAKLXZvaWQg
VGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNr
ZXJDb21wbGV0aW9uPiBjb21wbGV0aW9uKQordm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IGNvbXBsZXRpb24s
IHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogICAg
IGlmICghY29tcGxldGlvbikKQEAgLTI3MSw5ICsyNzQsMTAgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbgogICAgIEFTU0VSVChyZXF1ZXN0LnNlcXVlbmNlKCkgIT0g
dW5yZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7CiAgICAgQVNTRVJUKHJlcXVlc3QubWFz
aygpICE9IFRleHRDaGVja2luZ1R5cGVOb25lKTsKIAotICAgIGNvbXBsZXRpb24tPmRpZEZpbmlz
aENoZWNraW5nVGV4dChjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0aW9uLT5zcGVsbERvY3Vt
ZW50VGFnKCksIHJlcXVlc3QudGV4dCgpLCByZXF1ZXN0Lm1hc2soKSkpOworICAgIGNvbXBsZXRp
b24tPmRpZEZpbmlzaENoZWNraW5nVGV4dChjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0aW9u
LT5zcGVsbERvY3VtZW50VGFnKCksIHJlcXVlc3QudGV4dCgpLCBpbnNlcnRpb25Qb2ludCwgcmVx
dWVzdC5tYXNrKCkpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworICAg
IFVOVVNFRF9QQVJBTShpbnNlcnRpb25Qb2ludCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHJldmlzaW9u
IDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcgogewogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVz
c2VzRm9yV29yZChpbnQ2NF90IC8qIHNwZWxsRG9jdW1lbnRUYWcgKi8sIGNvbnN0IFN0cmluZyYg
d29yZCwgY29uc3QgU3RyaW5nJiAvKiBjb250ZXh0ICovLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nl
cykKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3QgLyogc3BlbGxE
b2N1bWVudFRhZyAqLywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIC8qIGNvbnRl
eHQgKi8sIHVpbnQ2NF90IC8qIGluc2VydGlvblBvaW50ICovLCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3NlcykKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICBndWVzc2VzID0gZW5jaGFudFRl
eHRDaGVja2VyKCkuZ2V0R3Vlc3Nlc0ZvcldvcmQod29yZCk7CkBAIC0xOTQsNyArMTk0LDcgQEAg
dm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IC8qIAogI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENo
ZWNrZXJDb21wbGV0aW9uPiBjb21wbGV0aW9uKQordm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IGNvbXBsZXRp
b24sIHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQog
ICAgIGlmICghY29tcGxldGlvbikKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIFRleHRDaGVja2Vy
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluCiAgICAgQVNTRVJUKHJlcXVlc3Quc2VxdWVuY2UoKSAh
PSB1bnJlcXVlc3RlZFRleHRDaGVja2luZ1NlcXVlbmNlKTsKICAgICBBU1NFUlQocmVxdWVzdC5t
YXNrKCkgIT0gVGV4dENoZWNraW5nVHlwZU5vbmUpOwogCi0gICAgY29tcGxldGlvbi0+ZGlkRmlu
aXNoQ2hlY2tpbmdUZXh0KGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbXBsZXRpb24tPnNwZWxsRG9j
dW1lbnRUYWcoKSwgcmVxdWVzdC50ZXh0KCksIHJlcXVlc3QubWFzaygpKSk7CisgICAgY29tcGxl
dGlvbi0+ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbXBsZXRp
b24tPnNwZWxsRG9jdW1lbnRUYWcoKSwgcmVxdWVzdC50ZXh0KCksIGluc2VydGlvblBvaW50LCBy
ZXF1ZXN0Lm1hc2soKSkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbik7CiAj
ZW5kaWYKQEAgLTIzOSw4ICsyMzksOSBAQCBzdGF0aWMgdW5zaWduZWQgbmV4dFdvcmRPZmZzZXQo
U3RyaW5nVmllCiAjZW5kaWYKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi1WZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIHVpbnQ2NF90IGNoZWNr
aW5nVHlwZXMpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQogeworICAg
IFVOVVNFRF9QQVJBTShpbnNlcnRpb25Qb2ludCk7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAg
ICAgaWYgKCEoY2hlY2tpbmdUeXBlcyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykpCiAgICAg
ICAgIHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCShyZXZpc2lvbiAxOTgx
MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VT
cGVsbERvY3VtZW50V2l0aAogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIAotVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGludDY0X3QsIFN0cmluZ1ZpZXcsIHVpbnQ2NF90KQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3QsIFN0cmluZ1ZpZXcs
IHVpbnQ2NF90LCB1aW50NjRfdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQg
VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3IKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRDaGVj
a2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCB1aW50NjRfdCwgVmVjdG9yPFN0cmluZz4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2
NF90LCBjbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPikK
K3ZvaWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4
dENoZWNrZXJDb21wbGV0aW9uPiwgdWludDY0X3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1h
Yy5tbQkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9U
ZXh0Q2hlY2tlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFBM
QVRGT1JNKE1BQykKIAogI2ltcG9ydCAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2ltcG9ydCA8V2Vi
Q29yZS9OU1NwZWxsQ2hlY2tlclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5n
Vmlldy5oPgpAQCAtMjkwLDE1ICsyOTEsMTkgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVs
bERvY3VtZW50V2l0aAogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIAotVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBjaGVja2lu
Z1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4
dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1
aW50NjRfdCBpbnNlcnRpb25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcykKIHsKICAgICBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogCiAgICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiB0ZXh0U3RyaW5nID0gdGV4dC5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7Cisg
ICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25zID0gW05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50XSwgTlNUZXh0Q2hlY2tpbmdJbnNlcnRp
b25Qb2ludEtleSwgbmlsXTsKKyNlbmRpZgogICAgIE5TQXJyYXkgKmluY29taW5nUmVzdWx0cyA9
IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja1N0cmluZzp0ZXh0U3Ry
aW5nLmdldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOk5TTWFrZVJhbmdlKDAsIHRleHQubGVu
Z3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzOmNoZWNraW5nVHlwZXMgfCBOU1RleHRDaGVj
a2luZ1R5cGVPcnRob2dyYXBoeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczpuaWwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnM6b3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbERvY3Vt
ZW50VGFnIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcnRob2dyYXBoeTpOVUxMCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZENv
dW50Ok5VTExdOwpAQCAtNDI1LDEzICs0MzAsMTcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhHcgogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
XSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZSBk
ZXRhaWw6Z3JhbW1hckRldGFpbERpY3QuZ2V0KCldOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpn
ZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYg
d29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3Zv
aWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRh
ZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIHVpbnQ2NF90IGlu
c2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKICAgICBOU1N0cmluZyog
bGFuZ3VhZ2UgPSBuaWw7CiAgICAgTlNPcnRob2dyYXBoeSogb3J0aG9ncmFwaHkgPSBuaWw7CiAg
ICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CisjaWYgUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAgIG9w
dGlvbnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVt
YmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRdLCBOU1RleHRDaGVj
a2luZ0luc2VydGlvblBvaW50S2V5LCBuaWxdOworI2VuZGlmCiAgICAgaWYgKGNvbnRleHQubGVu
Z3RoKCkpIHsKLSAgICAgICAgW2NoZWNrZXIgY2hlY2tTdHJpbmc6Y29udGV4dCByYW5nZTpOU01h
a2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSB0eXBlczpOU1RleHRDaGVja2luZ1R5cGVPcnRo
b2dyYXBoeSBvcHRpb25zOjAgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbERvY3VtZW50VGFn
IG9ydGhvZ3JhcGh5OiZvcnRob2dyYXBoeSB3b3JkQ291bnQ6MF07CisgICAgICAgIFtjaGVja2Vy
IGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgo
KSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0aW9uczpvcHRpb25zIGlu
U3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRhZyBvcnRob2dyYXBoeTomb3J0aG9n
cmFwaHkgd29yZENvdW50OjBdOwogICAgICAgICBsYW5ndWFnZSA9IFtjaGVja2VyIGxhbmd1YWdl
Rm9yV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIGluU3RyaW5nOmNv
bnRleHQgb3J0aG9ncmFwaHk6b3J0aG9ncmFwaHldOwogICAgIH0KICAgICBOU0FycmF5KiBzdHJp
bmdzQXJyYXkgPSBbY2hlY2tlciBndWVzc2VzRm9yV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIHdv
cmQubGVuZ3RoKCkpIGluU3RyaW5nOndvcmQgbGFuZ3VhZ2U6bGFuZ3VhZ2UgaW5TcGVsbERvY3Vt
ZW50V2l0aFRhZzpzcGVsbERvY3VtZW50VGFnXTsKQEAgLTQ1MCw3ICs0NTksNyBAQCB2b2lkIFRl
eHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlCiAgICAgW1tOU1NwZWxsQ2hlY2tlciBz
aGFyZWRTcGVsbENoZWNrZXJdIGlnbm9yZVdvcmQ6d29yZCBpblNwZWxsRG9jdW1lbnRXaXRoVGFn
OnNwZWxsRG9jdW1lbnRUYWddOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCit2b2lkIFRleHRD
aGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29t
cGxldGlvbj4sIHVpbnQ2NF90KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TcGVsbENoZWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlUHJv
cGVydGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9VbmRvU3RlcC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclR5cGluZ0dlc3R1cmVJ
bmRpY2F0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4K
IApAQCAtNDc0LDEyICs0NzYsMTkgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1h
ck9mU3RyaQogICAgICpiYWRHcmFtbWFyTGVuZ3RoID0gcmVzdWx0TGVuZ3RoOwogfQogCitzdGF0
aWMgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQoreworICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25T
dGFydCk7CisgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBh
cmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworfQorCiAjaWYgVVNFKFVOSUZJ
RURfVEVYVF9DSEVDS0lORykKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNs
aWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3
IHN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKIAotICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3RyaW5nVmlldy50b1N0
cmluZ1dpdGhvdXRDb3B5aW5nKCksIGNoZWNraW5nVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDaGVja1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOworICAgIG1fcGFnZS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3Ry
aW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGNoZWNraW5nVHlwZXMsIGluc2VydGlv
blBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpDaGVja1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOwogCiAg
ICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC01MDcsMTkgKzUxNiwxOSBAQCBib29sIFdlYkVkaXRv
ckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuIGlzU2hvd2luZzsKIH0KIAot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVj
dGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbV9wYWdlLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBjb250ZXh0KSwg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQ6OlJlcGx5KGd1ZXNzZXMp
KTsKKyAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNz
ZXNGb3JXb3JkKHdvcmQsIGNvbnRleHQsIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2Vz
Rm9yV29yZDo6UmVwbHkoZ3Vlc3NlcykpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+
IHBycFJlcXVlc3QpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHBycFJlcXVlc3QsIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgUmVm
UHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QgPSBwcnBSZXF1ZXN0OwogCiAgICAgdWlu
dDY0X3QgcmVxdWVzdElEID0gZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKTsKICAgICBt
X3BhZ2UtPmFkZFRleHRDaGVja2luZ1JlcXVlc3QocmVxdWVzdElELCByZXF1ZXN0KTsKIAotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhyZXF1ZXN0SUQsIHJlcXVlc3QtPmRhdGEoKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhyZXF1ZXN0SUQsIHJl
cXVlc3QtPmRhdGEoKSwgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50
U2VsZWN0aW9uKSkpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFNldElucHV0TWV0
aG9kU3RhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiAxOTgxMzkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTYgKzEzOSwxNiBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJp
bmcmIG1pc3NwZWxsZWRXb3JkKSBvdmVycmlkZTsKICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRlOwogI2lmIFVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgV2ViQ29yZTo6VGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFdlYkNv
cmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywg
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgb3ZlcnJpZGU7CiAjZW5kaWYK
ICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcm
LCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29sIHNw
ZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBT
dHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92
ZXJyaWRlOwogICAgIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOwog
CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgb3Zl
cnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTgyNTcpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAx
Ni0wMy0xNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlk
ZSBOU1NwZWxsQ2hlY2tlciBzcGVsbENoZWNraW5nIG1ldGhvZHMgd2l0aCB0aGUgY3VycmVudCBp
bnNlcnRpb24gcG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NTUzMgorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI0MDY2OTUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRXh0cmFjdCB0aGUgaW5zZXJ0aW9uIHBvaW50IGZyb20gdGhlIFZpc2libGVT
ZWxlY3Rpb24gdGhhdCBXZWJDb3JlIGhhcyAKKyAgICAgICAgcGFzc2VkLiAKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYkVk
aXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorCiAyMDE2LTAzLTE1ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtpb3Mtc2ltIGRlYnVnXSBB
UEkgdGVzdCBXZWJLaXQxLkF1ZGlvU2Vzc2lvbkNhdGVnb3J5SU9TIHRpbWluZyBvdXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDE2ICsxNTgsMTYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQq
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIG92ZXJyaWRlOwog
ICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
Z1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcs
IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpIG92ZXJyaWRlOwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlw
ZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92
ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZTsKICAgICB2
b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIG92ZXJyaWRlOwogICAg
IGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcykgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6
OlRleHRDaGVja2luZ1JlcXVlc3Q+KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOwog
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTIwMAogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgV2Vi
Q29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpOwpAQCAtMjgwLDcgKzI4MCw3IEBAIGlubGluZSBib29s
IFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlu
bGluZSB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQoraW5saW5lIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4MSw3ICs4
ODEsNyBAQCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpwYXN0ZWJvYXJkQ2hhbmdlQ291CiAgICAgcmV0
dXJuIDA7CiB9CiAKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVN
YXNrIGNoZWNraW5nVHlwZXMpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JD
bGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKIHsKICAg
ICBBU1NFUlQoY2hlY2tpbmdUeXBlcyAmIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKTsKIApA
QCAtMTA1MCw5ICsxMDUwLDIyIEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBj
b3JlKE4KICAgICByZXR1cm4gcmVzdWx0czsKIH0KIAotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmlu
ZywgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykKKyNpZiBQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCitzdGF0aWMgaW50
IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgY3VycmVudFNlbGVjdGlvbikKIHsKLSAgICByZXR1cm4gY29yZShbW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6c3RyaW5nLmNyZWF0ZU5TU3RyaW5nV2l0
aG91dENvcHlpbmcoKS5nZXQoKSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKCkp
IHR5cGVzOihjaGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9w
dGlvbnM6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KSBvcnRob2dyYXBoeTpOVUxMIHdvcmRDb3VudDpOVUxMXSwgY2hlY2tpbmdUeXBlcyk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Cit9
CisjZW5kaWYKKworVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlwZU1h
c2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlv
bikKK3sKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CisjaWYgUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAgIG9wdGlv
bnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVtYmVy
IG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihjdXJyZW50U2VsZWN0aW9uKV0sIE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXks
IG5pbF07CisjZW5kaWYKKyAgICByZXR1cm4gY29yZShbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNw
ZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6c3RyaW5nLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlp
bmcoKS5nZXQoKSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKCkpIHR5cGVzOihj
aGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9wdGlvbnM6b3B0
aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0
aG9ncmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF0sIGNoZWNraW5nVHlwZXMpOwogfQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRl
dGFpbCkKQEAgLTEwODgsMTMgKzExMDEsMTggQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxs
aW5nVUlJc1Nob3dpbgogICAgIHJldHVybiBbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIHNwZWxsaW5nUGFuZWxdIGlzVmlzaWJsZV07CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
Y29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIHsKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit7CiAgICAgZ3Vlc3Nlcy5jbGVhcigpOwogICAgIE5T
U3RyaW5nKiBsYW5ndWFnZSA9IG5pbDsKICAgICBOU09ydGhvZ3JhcGh5KiBvcnRob2dyYXBoeSA9
IG5pbDsKICAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAw
CisgICAgb3B0aW9ucyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21D
dXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSwgTlNUZXh0Q2hlY2tpbmdJbnNlcnRp
b25Qb2ludEtleSwgbmlsXTsKKyNlbmRpZgogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgpKSB7Ci0g
ICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
Y29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0
aW9uczowIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBv
cnRob2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOworICAgICAgICBbY2hlY2tlciBj
aGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkp
IHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNw
ZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6
Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKICAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBs
YW5ndWFnZUZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0
cmluZzpjb250ZXh0IG9ydGhvZ3JhcGh5Om9ydGhvZ3JhcGh5XTsKICAgICB9CiAgICAgTlNBcnJh
eSogc3RyaW5nc0FycmF5ID0gW2NoZWNrZXIgZ3Vlc3Nlc0ZvcldvcmRSYW5nZTpOU01ha2VSYW5n
ZSgwLCB3b3JkLmxlbmd0aCgpKSBpblN0cmluZzp3b3JkIGxhbmd1YWdlOmxhbmd1YWdlIGluU3Bl
bGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKV07CkBAIC0xMjY4LDcg
KzEyODYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKGluCiB9CiAj
ZW5kaWYKIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4gcmVxdWVzdCkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6
OlRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQoIW1fdGV4
dENoZWNraW5nUmVxdWVzdCk7CkBAIC0xMjc3LDcgKzEyOTUsMTEgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnJlcXVlc3RDaGVja2luZ09mUwogICAgIGludCBzZXF1ZW5jZSA9IG1fdGV4dENoZWNr
aW5nUmVxdWVzdC0+ZGF0YSgpLnNlcXVlbmNlKCk7CiAgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFr
ZVJhbmdlKDAsIG1fdGV4dENoZWNraW5nUmVxdWVzdC0+ZGF0YSgpLnRleHQoKS5sZW5ndGgoKSk7
CiAgICAgTlNSdW5Mb29wKiBjdXJyZW50TG9vcCA9IFtOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3Bd
OwotICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZzptX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkgcmFuZ2U6cmFu
Z2UgdHlwZXM6TlNUZXh0Q2hlY2tpbmdBbGxTeXN0ZW1UeXBlcyBvcHRpb25zOjAgaW5TcGVsbERv
Y3VtZW50V2l0aFRhZzowCisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAK
KyAgICBvcHRpb25zID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlz
OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1
cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildLCBOU1RleHRDaGVja2luZ0luc2VydGlv
blBvaW50S2V5LCBuaWxdOworI2VuZGlmCisgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVs
bENoZWNrZXJdIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nOm1fdGV4dENoZWNraW5nUmVxdWVzdC0+
ZGF0YSgpLnRleHQoKSByYW5nZTpyYW5nZSB0eXBlczpOU1RleHRDaGVja2luZ0FsbFN5c3RlbVR5
cGVzIG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOjAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXI6XihOU0ludGVn
ZXIsIE5TQXJyYXkqIHJlc3VsdHMsIE5TT3J0aG9ncmFwaHkqLCBOU0ludGVnZXIpIHsKICAgICAg
ICAgICAgIFtjdXJyZW50TG9vcCBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHBlcmZvcm0pIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDpbW1tXZWJFZGl0b3JTcGVs
bENoZWNrUmVzcG9uZGVyIGFsbG9jXSBpbml0V2l0aENsaWVudDp0aGlzIHNlcXVlbmNlOnNlcXVl
bmNlIHJlc3VsdHM6cmVzdWx0c10gYXV0b3JlbGVhc2VdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274216</attachid>
            <date>2016-03-16 13:29:42 -0700</date>
            <delta_ts>2016-03-16 15:28:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-5.txt</filename>
            <type>text/plain</type>
            <size>49136</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTAzLTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2Vy
IHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNz
IHRoZSBGcmFtZeKAmXMgc2VjdGlvbiB0byBhIGhhbmRmdWwgb2Ygc3BlbGxpbmcgY2hlY2tpbmcg
bWV0aG9kcyB0aGF0IGNhbGwgCisgICAgICAgIGludG8gV2ViS2l0L1dlYktpdDIgdG8gdWx0aW1h
dGVseSBjYWxsIGludG8gTlNTcGVsbENoZWNrZXIuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6Omhhc01pc3NwZWxsaW5nKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3Ry
aW5nU2V0U3BlbGxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAg
ICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmVucXVldWVSZXF1ZXN0KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3
b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eVRleHRDaGVja2VyQ2xpZW50
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2VyQ2xpZW50Ojp+VGV4dENoZWNrZXJDbGllbnQpOgorCisg
ICAgICAgIFRoZSBrZXkgbmVlZGVkIHRvIGluY2x1ZGUgdGhlIGluc2VydGlvbiBwb2ludC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmg6CisKIDIwMTYtMDMt
MTUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgb3Zl
cmZsb3c6IC13ZWJraXQtbWFycXVlZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTgxMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpoYXNNaXNzcGVsbGluZwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJh
bWUpKSB7CiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcsIHJlc3VsdHMsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlm
ICghcmVzdWx0cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBpc01pc3NwZWxsZWQgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQyLDcgKzExNDIsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldFNwZWxsaW5nCiAgICAgICAgIAogICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFw
aCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sx
IGFuZCBXSzIKICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAg
ICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNoZWNrZXIsIHRleHQsIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpjaGVj
a2VyLCB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMsIG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICAKICAgICAg
ICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKICAgICAgICAgTlNOdW1iZXIqIHRydWVW
YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFw
aChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJh
bmdlKCkuZ2V0KCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2lu
YWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBz
dWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxw
dHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdv
cmQsIFN0cmluZygpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2VzOwogfQogCkBAIC0yNDAyLDcgKzI0MDIsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgfQogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0
Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgp
LCByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3Vs
dHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNl
Rm9yKHJlcXVlc3QucmVsZWFzZSgpLCByZXN1bHRzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyAr
MTgxLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZgogICAgIGlm
ICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0g
cmVxdWVzdDsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNz
aW5nUmVxdWVzdCk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKG1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2
b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVx
dWVzdD4gcmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgpAQCAtMzQ2LDcgKzM0NywxMCBAQCBTdHJpbmcg
VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAg
ICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFy
ID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBh
cmFncmFwaCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJy
ZW50U2VsZWN0aW9uOworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3Jh
cGhSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24p
OwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQubG9j
YXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTU3OCwxMyAr
NTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MKIAogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmc7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpt
X2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywg
cmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJl
c3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LmxvY2F0aW9uLCBy
ZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFy
YWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxl
ZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmdl
dEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7CisgICAg
ICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3Bl
bGxlZFdvcmQsIFN0cmluZygpLCBjdXJyZW50U2VsZWN0aW9uLCBndWVzc2VzKTsKICAgICAgICAg
ICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKICAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7CkBAIC02MzgsMTEgKzY0NSwxMyBAQCBib29sIFRleHRDaGVja2luZ0hlbHBl
cjo6dW5pZmllZFRleHRDaGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9
CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICNpZiBV
U0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdUeXBlcyk7CisgICAgcmVzdWx0cyA9IGNsaWVudC5j
aGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVzLCBjdXJyZW50U2VsZWN0aW9u
KTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRTZWxlY3Rpb24pOworCiAgICAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzcGVsbGluZ3M7CiAgICAgaWYgKGNoZWNraW5nVHlw
ZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCiAgICAgICAgIGZpbmRNaXNzcGVsbGluZ3Mo
Y2xpZW50LCB0ZXh0LCBtaXNwZWxsaW5ncyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3
ICsxMDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ss
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Cit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KFRleHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbik7CiAKIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChjb25zdCBGcmFt
ZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkocmV2aXNp
b24gMTk4MTM5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ+IEVtcHR5CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29u
dGV4dD4oKTsKIH0KIAotdm9pZCBFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+KQordm9pZCBFbXB0eVRl
eHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRD
aGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKIHsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMTk4MTM5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcs
MTEgKzQxNywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZSB7IH0K
IAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlw
ZU1hc2spIG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0K
KyAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJp
bmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIG92
ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVz
dD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZTsKIH07CiAKIGNsYXNzIEVtcHR5
RWRpdG9yQ2xpZW50IDogcHVibGljIEVkaXRvckNsaWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVja2VyU1BJLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9OU1NwZWxsQ2hlY2tlclNQSS5oCShyZXZpc2lv
biAxOTgxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL05TU3BlbGxDaGVj
a2VyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogLy8gRklYTUU6IFRo
aXMgaGVhZGVyIHNob3VsZCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIHdoZW4gcG9zc2libGUuCiAK
K2V4dGVybiBOU1N0cmluZyAqTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleTsKKwogQGlu
dGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoKQogLSAoTlNJbnRlZ2VyKXJlcXVlc3RDYW5kaWRhdGVz
Rm9yU2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlIGluU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZ1RvQ2hlY2sgdHlwZXM6KE5TVGV4dENoZWNraW5nVHlwZXMpY2hlY2tpbmdUeXBl
cyBvcHRpb25zOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopb3B0aW9ucyBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOihOU0ludGVnZXIpdGFnIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQg
Kj4gKmNhbmRpZGF0ZXMpKWNvbXBsZXRpb25IYW5kbGVyOwogLSAoQk9PTClkZWxldGVzQXV0b3Nw
YWNlQmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBsYW5ndWFnZTooTlNTdHJpbmcgKils
YW5ndWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
aGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CisK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0Q2hl
Y2tlckNsaWVudCgpIHt9CkBAIC00OSwxNCArNTEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7
CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikgPSAwOwogI2VuZGlmCiAKICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0
aGF0IHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBi
ZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBsYW5ndWFnZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3Zp
ZGUgbW9yZSBhY2N1cmF0ZSBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3Mg
aW4gbW9yZSB0ZXh0IGluICJjb250ZXh0IiB0byBhaWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxh
bmd1YWdlCiAgICAgLy8gaWRlbnRpZmljYXRpb24uIE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vy
cm91bmRpbmcgdGhlICJ3b3JkIiBmb3Igd2hpY2ggd2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBz
dWdnZXN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQ
dHI8VGV4dENoZWNraW5nUmVxdWVzdD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NS
ZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODI1
NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDM4IEBACisyMDE2LTAzLTE1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAg
ICAgICBQcm92aWRlIE5TU3BlbGxDaGVja2VyIHNwZWxsQ2hlY2tpbmcgbWV0aG9kcyB3aXRoIHRo
ZSBjdXJyZW50IGluc2VydGlvbiBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTMyCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjQwNjY5NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRoZSBpbnNlcnRpb25Qb2ludCB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdl
dEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVj
a2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQp
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcp
OgorCisgICAgICAgIEV4dHJhY3QgdGhlIGluc2VydGlvbiBwb2ludCBmcm9tIHRoZSBWaXNpYmxl
U2VsZWN0aW9uIHRoYXQgV2ViQ29yZSBoYXMgCisgICAgICAgIHBhc3NlZC4gCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE2LTAz
LTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93
IHVwIHRvIHIxOTU3NjkuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIu
aAkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CiAgICAgc3Rh
dGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KTsKICNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQotICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CisgICAgc3RhdGljIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBpbnNlcnRp
b25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9p
ZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdW
aWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKICAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFt
bWFyTGVuZ3RoKTsKQEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcm
IGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3Nlcyk7CisgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
dWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKICAgICBz
dGF0aWMgdm9pZCBsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQpOwogICAgIHN0YXRpYyB2b2lkIGlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPik7CisgICAgc3Rh
dGljIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNv
bXBsZXRpb24+LCB1aW50NjRfdCBpbnNlcnRpb25Qb2ludCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0MSw5ICs0NDQxLDkgQEAgaW50NjRfdCBXZWJQ
YWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBT
dHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5z
ZXJ0aW9uUG9pbnQsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAg
IHJlc3VsdHMgPSBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3BlbGxEb2N1bWVu
dFRhZygpLCB0ZXh0LCBjaGVja2luZ1R5cGVzKTsKKyAgICByZXN1bHRzID0gVGV4dENoZWNrZXI6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dCwgaW5zZXJ0aW9u
UG9pbnQsIGNoZWNraW5nVHlwZXMpOwogfQogI2VuZGlmCiAKQEAgLTQ0NzIsOSArNDQ3Miw5IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwg
YmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIHVp
bnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBU
ZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygpLCB3b3JkLCBj
b250ZXh0LCBndWVzc2VzKTsKKyAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3Bl
bGxEb2N1bWVudFRhZygpLCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3Nlcyk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQpA
QCAtNDQ5Myw5ICs0NDkzLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlnbm9yZVdvcmQoY29uc3Qg
U3RyaQogICAgIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgd29y
ZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50
NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQor
dm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3QsIHVpbnQ2NF90IGlu
c2VydGlvblBvaW50KQogewotICAgIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhUZXh0Q2hlY2tlckNvbXBsZXRpb246OmNyZWF0ZShyZXF1ZXN0SUQsIHJlcXVlc3QsIHRoaXMp
KTsKKyAgICBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNrZXJD
b21wbGV0aW9uOjpjcmVhdGUocmVxdWVzdElELCByZXF1ZXN0LCB0aGlzKSwgaW5zZXJ0aW9uUG9p
bnQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2
NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw5ICsxMDU1LDkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisgICAgdm9pZCBjaGVja1Rl
eHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50LCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYgcmVzdWx0cyk7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRzKGJvb2wpOwogCkBAIC0xMzMwLDcgKzEzMzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgdm9pZCBpZ25vcmVXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCk7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7CisgICAgdm9p
ZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpOwog
CiAgICAgdm9pZCB0YWtlRm9jdXModWludDMyX3QgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRv
b2xUaXAoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5ODEzOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTI3NywxNyArMjc3LDE3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAg
ICAjIFNwZWxsaW5nIGFuZCBncmFtbWFyIG1lc3NhZ2VzCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykgIAotICAgIENoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZyB0ZXh0LCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4g
cmVzdWx0cykKKyAgICBDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgdWludDY0X3Qg
Y2hlY2tpbmdUeXBlcywgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8V2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKQogI2VuZGlmCiAgICAgQ2hlY2tTcGVsbGlu
Z09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKQogICAgIENoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
ZyB0ZXh0KSAtPiAoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+IHJlc3VsdHMsIGludDMy
X3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpCiAgICAgU3Bl
bGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykKICAgICBVcGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZyBtaXNzcGVsbGVkV29yZCkKICAgICBVcGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIHN0cnVj
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWwpCi0gICAgR2V0R3Vlc3Nlc0Zv
cldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcykKKyAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykKICAg
ICBMZWFybldvcmQoU3RyaW5nIHdvcmQpOwogICAgIElnbm9yZVdvcmQoU3RyaW5nIHdvcmQpOwot
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCkKKyAgICBSZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRh
IHJlcXVlc3QsIHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogCiAgICAgIyBEcmFnIGFuZCBkcm9w
IG1lc3NhZ2VzCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCShyZXZpc2lvbiAxOTgxMzkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDggKzE0OCwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbmV4dFdvcmRP
ZmZzZXQoU3RyaW5nVmllCiAjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAKICNpZiBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3Ry
aW5nVmlldyB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxE
b2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBpbnNlcnRpb25Qb2ludCwgdWlu
dDY0X3QgY2hlY2tpbmdUeXBlcykKIHsKKyAgICBVTlVTRURfUEFSQU0oaW5zZXJ0aW9uUG9pbnQp
OworCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1
bHQ7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcpIHsKQEAgLTIzMCw4ICsyMzIsOSBAQCB2b2lkIFRleHRDaGVj
a2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50
VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgLCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3NlcykKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmICwgdWludDY0
X3QgaW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogeworICAgIFVOVVNF
RF9QQVJBTShpbnNlcnRpb25Qb2ludCk7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAgICAgV2Vi
VGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERv
Y3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKICNlbHNlCkBAIC0yNjEsNyArMjY0LDcgQEAgdm9p
ZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZQogI2VuZGlmCiB9CiAKLXZvaWQg
VGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNr
ZXJDb21wbGV0aW9uPiBjb21wbGV0aW9uKQordm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IGNvbXBsZXRpb24s
IHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogICAg
IGlmICghY29tcGxldGlvbikKQEAgLTI3MSw5ICsyNzQsMTAgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbgogICAgIEFTU0VSVChyZXF1ZXN0LnNlcXVlbmNlKCkgIT0g
dW5yZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7CiAgICAgQVNTRVJUKHJlcXVlc3QubWFz
aygpICE9IFRleHRDaGVja2luZ1R5cGVOb25lKTsKIAotICAgIGNvbXBsZXRpb24tPmRpZEZpbmlz
aENoZWNraW5nVGV4dChjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0aW9uLT5zcGVsbERvY3Vt
ZW50VGFnKCksIHJlcXVlc3QudGV4dCgpLCByZXF1ZXN0Lm1hc2soKSkpOworICAgIGNvbXBsZXRp
b24tPmRpZEZpbmlzaENoZWNraW5nVGV4dChjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0aW9u
LT5zcGVsbERvY3VtZW50VGFnKCksIHJlcXVlc3QudGV4dCgpLCBpbnNlcnRpb25Qb2ludCwgcmVx
dWVzdC5tYXNrKCkpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworICAg
IFVOVVNFRF9QQVJBTShpbnNlcnRpb25Qb2ludCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHJldmlzaW9u
IDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcgogewogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVz
c2VzRm9yV29yZChpbnQ2NF90IC8qIHNwZWxsRG9jdW1lbnRUYWcgKi8sIGNvbnN0IFN0cmluZyYg
d29yZCwgY29uc3QgU3RyaW5nJiAvKiBjb250ZXh0ICovLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nl
cykKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3QgLyogc3BlbGxE
b2N1bWVudFRhZyAqLywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIC8qIGNvbnRl
eHQgKi8sIHVpbnQ2NF90IC8qIGluc2VydGlvblBvaW50ICovLCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3NlcykKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICBndWVzc2VzID0gZW5jaGFudFRl
eHRDaGVja2VyKCkuZ2V0R3Vlc3Nlc0ZvcldvcmQod29yZCk7CkBAIC0xOTQsNyArMTk0LDcgQEAg
dm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IC8qIAogI2VuZGlmCiB9CiAKLXZv
aWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENo
ZWNrZXJDb21wbGV0aW9uPiBjb21wbGV0aW9uKQordm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IGNvbXBsZXRp
b24sIHVpbnQ2NF90IGluc2VydGlvblBvaW50KQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQog
ICAgIGlmICghY29tcGxldGlvbikKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIFRleHRDaGVja2Vy
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluCiAgICAgQVNTRVJUKHJlcXVlc3Quc2VxdWVuY2UoKSAh
PSB1bnJlcXVlc3RlZFRleHRDaGVja2luZ1NlcXVlbmNlKTsKICAgICBBU1NFUlQocmVxdWVzdC5t
YXNrKCkgIT0gVGV4dENoZWNraW5nVHlwZU5vbmUpOwogCi0gICAgY29tcGxldGlvbi0+ZGlkRmlu
aXNoQ2hlY2tpbmdUZXh0KGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbXBsZXRpb24tPnNwZWxsRG9j
dW1lbnRUYWcoKSwgcmVxdWVzdC50ZXh0KCksIHJlcXVlc3QubWFzaygpKSk7CisgICAgY29tcGxl
dGlvbi0+ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbXBsZXRp
b24tPnNwZWxsRG9jdW1lbnRUYWcoKSwgcmVxdWVzdC50ZXh0KCksIGluc2VydGlvblBvaW50LCBy
ZXF1ZXN0Lm1hc2soKSkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbik7CiAj
ZW5kaWYKQEAgLTIzOSw4ICsyMzksOSBAQCBzdGF0aWMgdW5zaWduZWQgbmV4dFdvcmRPZmZzZXQo
U3RyaW5nVmllCiAjZW5kaWYKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi1WZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIHVpbnQ2NF90IGNoZWNr
aW5nVHlwZXMpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQs
IHVpbnQ2NF90IGluc2VydGlvblBvaW50LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQogeworICAg
IFVOVVNFRF9QQVJBTShpbnNlcnRpb25Qb2ludCk7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAg
ICAgaWYgKCEoY2hlY2tpbmdUeXBlcyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykpCiAgICAg
ICAgIHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCShyZXZpc2lvbiAxOTgx
MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VT
cGVsbERvY3VtZW50V2l0aAogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIAotVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGludDY0X3QsIFN0cmluZ1ZpZXcsIHVpbnQ2NF90KQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3QsIFN0cmluZ1ZpZXcs
IHVpbnQ2NF90LCB1aW50NjRfdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQg
VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3IKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit2b2lkIFRleHRDaGVj
a2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCB1aW50NjRfdCwgVmVjdG9yPFN0cmluZz4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2
NF90LCBjbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPikK
K3ZvaWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4
dENoZWNrZXJDb21wbGV0aW9uPiwgdWludDY0X3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1h
Yy5tbQkocmV2aXNpb24gMTk4MTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9U
ZXh0Q2hlY2tlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFBM
QVRGT1JNKE1BQykKIAogI2ltcG9ydCAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2ltcG9ydCA8V2Vi
Q29yZS9OU1NwZWxsQ2hlY2tlclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5n
Vmlldy5oPgpAQCAtMjkwLDE1ICsyOTEsMTkgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVs
bERvY3VtZW50V2l0aAogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIAotVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1aW50NjRfdCBjaGVja2lu
Z1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4
dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCB1
aW50NjRfdCBpbnNlcnRpb25Qb2ludCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcykKIHsKICAgICBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogCiAgICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiB0ZXh0U3RyaW5nID0gdGV4dC5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7Cisg
ICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICBvcHRpb25zID0gW05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50XSwgTlNUZXh0Q2hlY2tpbmdJbnNlcnRp
b25Qb2ludEtleSwgbmlsXTsKKyNlbmRpZgogICAgIE5TQXJyYXkgKmluY29taW5nUmVzdWx0cyA9
IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja1N0cmluZzp0ZXh0U3Ry
aW5nLmdldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOk5TTWFrZVJhbmdlKDAsIHRleHQubGVu
Z3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzOmNoZWNraW5nVHlwZXMgfCBOU1RleHRDaGVj
a2luZ1R5cGVPcnRob2dyYXBoeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczpuaWwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnM6b3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbERvY3Vt
ZW50VGFnIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcnRob2dyYXBoeTpOVUxMCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZENv
dW50Ok5VTExdOwpAQCAtNDI1LDEzICs0MzAsMTcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhHcgogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
XSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZSBk
ZXRhaWw6Z3JhbW1hckRldGFpbERpY3QuZ2V0KCldOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpn
ZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYg
d29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3Zv
aWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRh
ZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIHVpbnQ2NF90IGlu
c2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKICAgICBOU1N0cmluZyog
bGFuZ3VhZ2UgPSBuaWw7CiAgICAgTlNPcnRob2dyYXBoeSogb3J0aG9ncmFwaHkgPSBuaWw7CiAg
ICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CisjaWYgUExBVEZPUk0o
TUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAgIG9w
dGlvbnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVt
YmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRdLCBOU1RleHRDaGVj
a2luZ0luc2VydGlvblBvaW50S2V5LCBuaWxdOworI2VuZGlmCiAgICAgaWYgKGNvbnRleHQubGVu
Z3RoKCkpIHsKLSAgICAgICAgW2NoZWNrZXIgY2hlY2tTdHJpbmc6Y29udGV4dCByYW5nZTpOU01h
a2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSB0eXBlczpOU1RleHRDaGVja2luZ1R5cGVPcnRo
b2dyYXBoeSBvcHRpb25zOjAgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbERvY3VtZW50VGFn
IG9ydGhvZ3JhcGh5OiZvcnRob2dyYXBoeSB3b3JkQ291bnQ6MF07CisgICAgICAgIFtjaGVja2Vy
IGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgo
KSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0aW9uczpvcHRpb25zIGlu
U3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxEb2N1bWVudFRhZyBvcnRob2dyYXBoeTomb3J0aG9n
cmFwaHkgd29yZENvdW50OjBdOwogICAgICAgICBsYW5ndWFnZSA9IFtjaGVja2VyIGxhbmd1YWdl
Rm9yV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIGluU3RyaW5nOmNv
bnRleHQgb3J0aG9ncmFwaHk6b3J0aG9ncmFwaHldOwogICAgIH0KICAgICBOU0FycmF5KiBzdHJp
bmdzQXJyYXkgPSBbY2hlY2tlciBndWVzc2VzRm9yV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIHdv
cmQubGVuZ3RoKCkpIGluU3RyaW5nOndvcmQgbGFuZ3VhZ2U6bGFuZ3VhZ2UgaW5TcGVsbERvY3Vt
ZW50V2l0aFRhZzpzcGVsbERvY3VtZW50VGFnXTsKQEAgLTQ1MCw3ICs0NTksNyBAQCB2b2lkIFRl
eHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlCiAgICAgW1tOU1NwZWxsQ2hlY2tlciBz
aGFyZWRTcGVsbENoZWNrZXJdIGlnbm9yZVdvcmQ6d29yZCBpblNwZWxsRG9jdW1lbnRXaXRoVGFn
OnNwZWxsRG9jdW1lbnRUYWddOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCit2b2lkIFRleHRD
aGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29t
cGxldGlvbj4sIHVpbnQ2NF90KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TcGVsbENoZWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlUHJv
cGVydGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9VbmRvU3RlcC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclR5cGluZ0dlc3R1cmVJ
bmRpY2F0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4K
IApAQCAtNDc0LDEyICs0NzYsMTkgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1h
ck9mU3RyaQogICAgICpiYWRHcmFtbWFyTGVuZ3RoID0gcmVzdWx0TGVuZ3RoOwogfQogCitzdGF0
aWMgdWludDY0X3QgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQoreworICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25T
dGFydCk7CisgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBh
cmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworfQorCiAjaWYgVVNFKFVOSUZJ
RURfVEVYVF9DSEVDS0lORykKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNs
aWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzKQorVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3
IHN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKIAotICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3RyaW5nVmlldy50b1N0
cmluZ1dpdGhvdXRDb3B5aW5nKCksIGNoZWNraW5nVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDaGVja1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOworICAgIG1fcGFnZS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3Ry
aW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGNoZWNraW5nVHlwZXMsIGluc2VydGlv
blBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpDaGVja1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOwogCiAg
ICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC01MDcsMTkgKzUxNiwxOSBAQCBib29sIFdlYkVkaXRv
ckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuIGlzU2hvd2luZzsKIH0KIAot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVj
dGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbV9wYWdlLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBjb250ZXh0KSwg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQ6OlJlcGx5KGd1ZXNzZXMp
KTsKKyAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNz
ZXNGb3JXb3JkKHdvcmQsIGNvbnRleHQsIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2Vz
Rm9yV29yZDo6UmVwbHkoZ3Vlc3NlcykpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+
IHBycFJlcXVlc3QpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHBycFJlcXVlc3QsIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgUmVm
UHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QgPSBwcnBSZXF1ZXN0OwogCiAgICAgdWlu
dDY0X3QgcmVxdWVzdElEID0gZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKTsKICAgICBt
X3BhZ2UtPmFkZFRleHRDaGVja2luZ1JlcXVlc3QocmVxdWVzdElELCByZXF1ZXN0KTsKIAotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhyZXF1ZXN0SUQsIHJlcXVlc3QtPmRhdGEoKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhyZXF1ZXN0SUQsIHJl
cXVlc3QtPmRhdGEoKSwgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50
U2VsZWN0aW9uKSkpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFNldElucHV0TWV0
aG9kU3RhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiAxOTgxMzkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTYgKzEzOSwxNiBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJp
bmcmIG1pc3NwZWxsZWRXb3JkKSBvdmVycmlkZTsKICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRlOwogI2lmIFVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgV2ViQ29yZTo6VGV4dENo
ZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFdlYkNv
cmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywg
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgb3ZlcnJpZGU7CiAjZW5kaWYK
ICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcm
LCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29sIHNw
ZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBT
dHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92
ZXJyaWRlOwogICAgIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0Pikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOwog
CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgb3Zl
cnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTgyNTcpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAx
Ni0wMy0xNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlk
ZSBOU1NwZWxsQ2hlY2tlciBzcGVsbENoZWNraW5nIG1ldGhvZHMgd2l0aCB0aGUgY3VycmVudCBp
bnNlcnRpb24gcG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NTUzMgorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI0MDY2OTUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRXh0cmFjdCB0aGUgaW5zZXJ0aW9uIHBvaW50IGZyb20gdGhlIFZpc2libGVT
ZWxlY3Rpb24gdGhhdCBXZWJDb3JlIGhhcyAKKyAgICAgICAgcGFzc2VkLiAKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdlYkVk
aXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorCiAyMDE2LTAzLTE1ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtpb3Mtc2ltIGRlYnVnXSBB
UEkgdGVzdCBXZWJLaXQxLkF1ZGlvU2Vzc2lvbkNhdGVnb3J5SU9TIHRpbWluZyBvdXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDE2ICsxNTgsMTYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQq
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIG92ZXJyaWRlOwog
ICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmlu
Z1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcs
IFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpIG92ZXJyaWRlOwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlw
ZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92
ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZTsKICAgICB2
b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIG92ZXJyaWRlOwogICAg
IGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcykgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6
OlRleHRDaGVja2luZ1JlcXVlc3Q+KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOwog
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTIwMAogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgV2Vi
Q29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpOwpAQCAtMjgwLDcgKzI4MCw3IEBAIGlubGluZSBib29s
IFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlu
bGluZSB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQoraW5saW5lIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAxOTgxMzkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4MSw3ICs4
ODEsNyBAQCBpbnQgV2ViRWRpdG9yQ2xpZW50OjpwYXN0ZWJvYXJkQ2hhbmdlQ291CiAgICAgcmV0
dXJuIDA7CiB9CiAKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVN
YXNrIGNoZWNraW5nVHlwZXMpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JD
bGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKIHsKICAg
ICBBU1NFUlQoY2hlY2tpbmdUeXBlcyAmIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKTsKIApA
QCAtMTA1MCw5ICsxMDUwLDIyIEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBj
b3JlKE4KICAgICByZXR1cm4gcmVzdWx0czsKIH0KIAotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmlu
ZywgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykKKyNpZiBQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCitzdGF0aWMgaW50
IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgY3VycmVudFNlbGVjdGlvbikKIHsKLSAgICByZXR1cm4gY29yZShbW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6c3RyaW5nLmNyZWF0ZU5TU3RyaW5nV2l0
aG91dENvcHlpbmcoKS5nZXQoKSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKCkp
IHR5cGVzOihjaGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9w
dGlvbnM6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KSBvcnRob2dyYXBoeTpOVUxMIHdvcmRDb3VudDpOVUxMXSwgY2hlY2tpbmdUeXBlcyk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Cit9
CisjZW5kaWYKKworVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlwZU1h
c2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlv
bikKK3sKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CisjaWYgUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAorICAgIG9wdGlv
bnMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVtYmVy
IG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihjdXJyZW50U2VsZWN0aW9uKV0sIE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXks
IG5pbF07CisjZW5kaWYKKyAgICByZXR1cm4gY29yZShbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNw
ZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6c3RyaW5nLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlp
bmcoKS5nZXQoKSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKCkpIHR5cGVzOihj
aGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9wdGlvbnM6b3B0
aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0
aG9ncmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF0sIGNoZWNraW5nVHlwZXMpOwogfQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRl
dGFpbCkKQEAgLTEwODgsMTMgKzExMDEsMTggQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxs
aW5nVUlJc1Nob3dpbgogICAgIHJldHVybiBbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIHNwZWxsaW5nUGFuZWxdIGlzVmlzaWJsZV07CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
Y29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIHsKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit7CiAgICAgZ3Vlc3Nlcy5jbGVhcigpOwogICAgIE5T
U3RyaW5nKiBsYW5ndWFnZSA9IG5pbDsKICAgICBOU09ydGhvZ3JhcGh5KiBvcnRob2dyYXBoeSA9
IG5pbDsKICAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAw
CisgICAgb3B0aW9ucyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21D
dXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSwgTlNUZXh0Q2hlY2tpbmdJbnNlcnRp
b25Qb2ludEtleSwgbmlsXTsKKyNlbmRpZgogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgpKSB7Ci0g
ICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
Y29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0
aW9uczowIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBv
cnRob2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOworICAgICAgICBbY2hlY2tlciBj
aGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkp
IHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNw
ZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6
Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKICAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBs
YW5ndWFnZUZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0
cmluZzpjb250ZXh0IG9ydGhvZ3JhcGh5Om9ydGhvZ3JhcGh5XTsKICAgICB9CiAgICAgTlNBcnJh
eSogc3RyaW5nc0FycmF5ID0gW2NoZWNrZXIgZ3Vlc3Nlc0ZvcldvcmRSYW5nZTpOU01ha2VSYW5n
ZSgwLCB3b3JkLmxlbmd0aCgpKSBpblN0cmluZzp3b3JkIGxhbmd1YWdlOmxhbmd1YWdlIGluU3Bl
bGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKV07CkBAIC0xMjY4LDcg
KzEyODYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKGluCiB9CiAj
ZW5kaWYKIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4gcmVxdWVzdCkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6
OlRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQoIW1fdGV4
dENoZWNraW5nUmVxdWVzdCk7CkBAIC0xMjc3LDcgKzEyOTUsMTEgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnJlcXVlc3RDaGVja2luZ09mUwogICAgIGludCBzZXF1ZW5jZSA9IG1fdGV4dENoZWNr
aW5nUmVxdWVzdC0+ZGF0YSgpLnNlcXVlbmNlKCk7CiAgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFr
ZVJhbmdlKDAsIG1fdGV4dENoZWNraW5nUmVxdWVzdC0+ZGF0YSgpLnRleHQoKS5sZW5ndGgoKSk7
CiAgICAgTlNSdW5Mb29wKiBjdXJyZW50TG9vcCA9IFtOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3Bd
OwotICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZzptX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkgcmFuZ2U6cmFu
Z2UgdHlwZXM6TlNUZXh0Q2hlY2tpbmdBbGxTeXN0ZW1UeXBlcyBvcHRpb25zOjAgaW5TcGVsbERv
Y3VtZW50V2l0aFRhZzowCisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOworI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAK
KyAgICBvcHRpb25zID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlz
OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1
cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildLCBOU1RleHRDaGVja2luZ0luc2VydGlv
blBvaW50S2V5LCBuaWxdOworI2VuZGlmCisgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVs
bENoZWNrZXJdIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nOm1fdGV4dENoZWNraW5nUmVxdWVzdC0+
ZGF0YSgpLnRleHQoKSByYW5nZTpyYW5nZSB0eXBlczpOU1RleHRDaGVja2luZ0FsbFN5c3RlbVR5
cGVzIG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOjAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXI6XihOU0ludGVn
ZXIsIE5TQXJyYXkqIHJlc3VsdHMsIE5TT3J0aG9ncmFwaHkqLCBOU0ludGVnZXIpIHsKICAgICAg
ICAgICAgIFtjdXJyZW50TG9vcCBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHBlcmZvcm0pIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDpbW1tXZWJFZGl0b3JTcGVs
bENoZWNrUmVzcG9uZGVyIGFsbG9jXSBpbml0V2l0aENsaWVudDp0aGlzIHNlcXVlbmNlOnNlcXVl
bmNlIHJlc3VsdHM6cmVzdWx0c10gYXV0b3JlbGVhc2VdCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9u
IDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Niw3ICs4NDYsNyBAQCBib29sIFdlYkVkaXRv
ckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuICEhc2hvd2luZzsKIH0KIAot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKQogewogICAgIGd1ZXNzZXMuY2xlYXIoKTsKIApJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlz
aW9uIDE5ODEzOSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTEgKzExMCwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFdURjo6U3Ry
aW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIG92ZXJy
aWRlOwogICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZvaWQg
Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmIHdvcmQsIGNvbnN0IFdURjo6U3Ry
aW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRl
OworICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmIHdvcmQsIGNv
bnN0IFdURjo6U3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uLCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXF1ZXN0Pikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZSB7IH0KIAogICAgIFdlYkNvcmU6OlRl
eHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0K
IAo=
</data>
<flag name="review"
          id="298711"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>