<?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>98605</bug_id>
          
          <creation_ts>2012-10-06 15:53:30 -0700</creation_ts>
          <short_desc>Typed arrays should not be 20x slower in the baseline JIT than in the DFG JIT</short_desc>
          <delta_ts>2012-10-10 21:41:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>97288</dependson>
    
    <dependson>98855</dependson>
    
    <dependson>98856</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>736299</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-06 15:53:30 -0700</bug_when>
    <thetext>It&apos;s OK for the baseline JIT to be 2-4x slower than the DFG.  But anything more than that makes me unhappy.

Note that this depends on the baselineJIT get_by_val/put_by_val patching machinery from https://bugs.webkit.org/show_bug.cgi?id=97288</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737356</commentid>
    <comment_count>1</comment_count>
      <attachid>167673</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-08 19:24:35 -0700</bug_when>
    <thetext>Created attachment 167673
work in progress, not rebased

This patch doesn&apos;t quite work yet (but it&apos;s already a &gt;30% speed-up on some programs).  It also includes all changes from an earlier version of https://bugs.webkit.org/show_bug.cgi?id=97288.  I&apos;ll have to somehow rebase once that other thing lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738356</commentid>
    <comment_count>2</comment_count>
      <attachid>167879</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-09 17:25:59 -0700</bug_when>
    <thetext>Created attachment 167879
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738367</commentid>
    <comment_count>3</comment_count>
      <attachid>167879</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-09 17:43:30 -0700</bug_when>
    <thetext>Comment on attachment 167879
the patch

r is me, too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738370</commentid>
    <comment_count>4</comment_count>
      <attachid>167879</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-09 17:43:54 -0700</bug_when>
    <thetext>Comment on attachment 167879
the patch

Attachment 167879 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14215948</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738372</commentid>
    <comment_count>5</comment_count>
      <attachid>167879</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-09 17:50:10 -0700</bug_when>
    <thetext>Comment on attachment 167879
the patch

Attachment 167879 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14221905</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738376</commentid>
    <comment_count>6</comment_count>
      <attachid>167885</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-09 17:53:53 -0700</bug_when>
    <thetext>Created attachment 167885
patch for landing

this should fix the other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738426</commentid>
    <comment_count>7</comment_count>
      <attachid>167885</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-09 18:52:17 -0700</bug_when>
    <thetext>Comment on attachment 167885
patch for landing

Attachment 167885 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14250131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738437</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-09 19:15:08 -0700</bug_when>
    <thetext>Landed with Windows fixes in http://trac.webkit.org/changeset/130839</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738556</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-09 22:18:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Landed with Windows fixes in http://trac.webkit.org/changeset/130839

New bug reports to fix the ARM traditional and MIPS assembler:
- https://bugs.webkit.org/show_bug.cgi?id=98855
- https://bugs.webkit.org/show_bug.cgi?id=98856</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739283</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-10 14:03:00 -0700</bug_when>
    <thetext>This broke the Qt Linux build &lt;http://build.webkit.org/builders/Qt%20Linux%20MIPS32R2%20LE%20Release/builds/1301/steps/compile-webkit/logs/stdio&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739597</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-10 21:41:37 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; This broke the Qt Linux build &lt;http://build.webkit.org/builders/Qt%20Linux%20MIPS32R2%20LE%20Release/builds/1301/steps/compile-webkit/logs/stdio&gt;

It is only the MIPS Linux build: https://bugs.webkit.org/show_bug.cgi?id=98856 ^^^^^^</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167673</attachid>
            <date>2012-10-08 19:24:35 -0700</date>
            <delta_ts>2012-10-09 17:25:59 -0700</delta_ts>
            <desc>work in progress, not rebased</desc>
            <filename>baselinetyped_1.patch</filename>
            <type>text/plain</type>
            <size>344755</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NyBA
QAorMjAxMi0xMC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcga2luZCBvZiBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgY2FsbGVkIENvbnRpZ3VvdXMsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgIAorICAgICAgICAtIE5vIGhlYWRlciBiaXRzIGJleW9uZCBJ
bmRleGVkSGVhZGVyLiBUaGlzIHJlc3VsdHMgaW4gYSAxNiBieXRlIHJlZHVjdGlvbgorICAgICAg
ICAgIGluIG1lbW9yeSB1c2FnZSBwZXIgYXJyYXkgdmVyc3VzIGFuIEFycmF5U3RvcmFnZSBhcnJh
eS4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHRoYXQgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBm
b3IgYW4gZW1wdHkgYXJyYXkgaXMgbm93IGp1c3QgMyAqIDggb24gYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LiBPZiB0aGF0LCBvbmx5IDggYnl0ZXMgYXJlIGFycmF5LXNwZWNpZmlj
OyB0aGUgcmVzdCBpcworICAgICAgICAgIG91ciBzdGFuZGFyZCBvYmplY3QgaGVhZGVyIG92ZXJo
ZWFkLgorICAgICAgICAKKyAgICAgICAgLSBObyBuZWVkIGZvciBob2xlIGNoZWNrcyBvbiBzdG9y
ZS4gVGhpcyByZXN1bHRzIGluIGEgfjQlIHNwZWVkLXVwIG9uCisgICAgICAgICAgS3Jha2VuIGFu
ZCBhIH4xJSBzcGVlZC11cCBvbiBWOHY3LgorICAgICAgICAKKyAgICAgICAgLSBwdWJsaWNMZW5n
dGggPD0gdmVjdG9yTGVuZ3RoLiBUaGlzIG1lYW5zIHRoYXQgZG9pbmcgbmV3IEFycmF5KGJsYWgp
CisgICAgICAgICAgaW1tZWRpYXRlbHkgYWxsb2NhdGVzIHJvb20gZm9yIGJsYWggZWxlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIE5vIHNwYXJzZSBtYXAgb3IgaW5kZXggYmlhcy4KKyAgICAg
ICAgCisgICAgICAgIElmIHlvdSBldmVyIGRvIHRoaW5ncyB0byBhbiBhcnJheSB0aGF0IHdvdWxk
IHJlcXVpcmUgcHVibGljTGVuZ3RoID4KKyAgICAgICAgdmVjdG9yTGVuZ3RoLCBhIHNwYXJzZSBt
YXAsIG9yIGluZGV4IGJpYXMsIHRoZW4gd2Ugc3dpdGNoIHRvIEFycmF5U3RvcmFnZQorICAgICAg
ICBtb2RlLiBUaGlzIGhhcHBlbnMgc2VlbXMgdG8gbmV2ZXIgaGFwcGVuIGluIGFueSBiZW5jaG1h
cmsgd2UgdHJhY2ssIGFuZAorICAgICAgICBpcyB1bmxpa2VseSB0byBoYXBwZW4gdmVyeSBmcmVx
dWVudGx5IG9uIGFueSB3ZWJzaXRlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dDo6YXBwZW5kKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNo
YWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZSk6CisgICAgICAg
IChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFsSW5mbyk6CisgICAg
ICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9m
QnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZCeVZhbEluZm9z
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6bW9kZVRvU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6REZHOjptb2RlSXNKU0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRz
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHlt
b3JwaGljKToKKyAgICAgICAgKEpTQzo6REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91
cyk6CisgICAgICAgIChKU0M6OkRGRzo6cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1
Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICog
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJhdGlvbik6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQ
dXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFs
KToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3Vv
dXNHZXRCeVZhbCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoU2FtcGxpbmdTY29wZSk6CisgICAg
ICAgIChKU0M6OlNhbXBsaW5nU2NvcGU6OlNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpT
YW1wbGluZ1Njb3BlOjp+U2FtcGxpbmdTY29wZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6
OkJ5VmFsQ29tcGlsYXRpb25JbmZvOjpCeVZhbENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChC
eVZhbENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSklUKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZSk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjphcnJheVByb2ZpbGVTYXcpOgorICAgICAgICAoSlNDOjpKSVQ6OmNob29z
ZUFycmF5TW9kZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9uZXdfYXJyYXkpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFy
cmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2V0QnlWYWwpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJf
RlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpwdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50
aW9ucy5oOgorICAgICAgICAoSlNDOjppc0RlbnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChK
U0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQpOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jVW5TaGlmdCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAg
KEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
Y29udGlndW91cyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUNvbnRpZ3VvdXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToK
KyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjppbmRleGluZ1R5cGVUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9J
bmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc0NvbnRpZ3Vv
dXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
ZXRMZW5ndGgpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENv
dW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnRWZWN0b3IpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNv
cHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5n
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudEZv
clNwbGljZSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hp
ZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNoaWZ0KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9yU3BsaWNlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVD
b250aWd1b3VzU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
Z2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlU2xv
dyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c3dp
dGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFBy
b3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dp
dGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3Vu
dEVsZW1lbnRzSW5Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNl
VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNM
ZW5ndGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
blNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpz
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlhbGl6ZUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1NwYXJzZU1hcCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5kZXhp
bmdEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlbGV2YW50TGVuZ3RoKToKKyAgICAg
ICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlw
dGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dEluZGV4aW5nKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVy
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6bmV3SW5kZXhpbmdUeXBlKToKKwogMjAxMi0xMC0wNSAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIHdh
eSB0byBnYXRoZXIgYW5kIGxvZyBIZWFwIG1lbW9yeSB1c2UgYW5kIHBhdXNlIHRpbWVzCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJG
MUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdElu
ZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMzMTVG
NkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYwRkM0
NUExNEJEMTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQg
LyogTExJbnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNF
MDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1
RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYxNjAxNUQxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTY1LDYgKzE2Niw3IEBACiAJCTBGN0IyOTRCMTRDM0NEMkYw
MDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMjk0QzE0QzNDRDQzMDA3QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYwMjAw
MDQ3MkE5IC8qIERGR0J5dGVDb2RlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29t
bW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMw
OTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDBDMTU3RUUwOUYwMDRB
NEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcCAqLzsgfTsKIAkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpT
U3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUxNTdG
MzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9OwpAQCAt
MjMzLDYgKzIzNSw4IEBACiAJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVk
VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovOyB9OwogCQkw
RkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9w
dGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDgg
LyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRUIzRUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBl
ZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZF
QjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdB
RCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRjQyNzMxMTU4RUJENTQwMDRDQjlG
RiAvKiBEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY0MjczMjE1
OEVCRDU4MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzMwMTU4RUJENDQwMDRDQjlGRiAv
KiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5
RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyAq
LzsgfTsKQEAgLTg0OCw2ICs4NTIsNyBAQAogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyog
UHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1
dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRD
MzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50
Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2Fs
bExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTNFMDRDMTYxNjRB
MUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5kZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzgsNiArOTQzLDcg
QEAKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5n
Q291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzND
RDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0Qg
LyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDksNiArMTAxNSw4IEBACiAJCTBGRDgyRTg0MTQxRjNGREEw
MDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTcGVjdWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5RGVzY3JpcHRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3
QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERpc2Fzc2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0MjczMDE1OEVC
RDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3Nl
bWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZGNDI3MzQxNThFQkQ5NDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdWRpczg2X2RlY29kZS5jOyBwYXRoID0gZGlzYXNzZW1i
bGVyL3VkaXM4Ni91ZGlzODZfZGVjb2RlLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMTA4LDcgKzIxMTYsNiBAQAogCQkJCUY2OTJBODVDMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5j
dGlvblByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NUQwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1
bmN0aW9uUHJvdG90eXBlLmggKi8sCiAJCQkJQzJENThDMzMxNTkxMkZFRTAwMjFBODQ0IC8qIEdD
QWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCi0JCQkJQzJENThDMzMxNTkxMkZFRTAwMjFBODQ0IC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJRERGN0FCRDIxMUY2MEVEMjAwMTA4RTM2
IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovLAogCQkJCUJDMDJFOUI4MEUxODQ1NDUwMDBGOTI5
NyAvKiBHZXR0ZXJTZXR0ZXIuY3BwICovLAogCQkJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAv
KiBHZXR0ZXJTZXR0ZXIuaCAqLywKQEAgLTIxMTYsNiArMjEyMyw3IEBACiAJCQkJOTMzQTM0OUEw
MzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQkwRkI3RjM4RDE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBG
MTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJMEYxM0UwNEMx
NjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVE
OEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMw
MEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKIAkJCQlFMTc4NjMzRjBEOUJF
QzAwMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5oICovLApAQCAtMjI3MCwxMCArMjI3
OCwxMiBAQAogCQkJCTE0QTQyRTNFMEY0RjYwRUUwMDU5OTA5OSAvKiBUaW1lb3V0Q2hlY2tlci5o
ICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIwMDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJ
NUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLywKKwkJCQkwRkVCM0VDQjE2
MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLywKIAkJCQk4NjY3MzlE
MTEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggKi8sCiAJCQkJMTRCRkNF
NjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLAogCQkJCTE0MjBCRTdBMTBBQTZE
REIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTEx
OTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAv
KiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1lOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0NTUsNiArMjQ2NSw3IEBACiAJCQkJODZF
MTE2QjAwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oICovLAogCQkJCTBGRjQyNzU2
MTU5MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCAqLywKIAkJCQk4NkQzQjNDMTEwMTU5
RDdGMDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovLAorCQkJCTBGRUIzRUNFMTYyMzdGNjcwMEFC
NjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJODZDMzZFRTkwRUUxMjg5RDAwQjNE
RjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi8sCiAJCQkJODZDNTY4REQxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCAqLywKIAkJCQk4NkQzQjJDMjEwMTU2QkRFMDAyODY1
RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCAqLywKQEAgLTI0ODAsNiArMjQ5MSw3IEBACiAJCQkJ
MEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEY2
Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovLAogCQkJCTBGMjFDMjdF
MTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8sCisJCQkJMEY4MDIz
RTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3
MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQw
MDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywKIAkJCQkwRjkzMzI5MzE0Q0E3REMxMDA4NUYz
QzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwICovLApAQCAtMjk1OSw4ICsyOTcxLDEwIEBACiAJCQkJ
MEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZh
bEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBK
U1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyog
U3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUIzRUNEMTYyMzdGNEQwMEFC
NjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTY1LDcg
KzM1NzksOSBAQAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90Vmlz
aXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyog
SlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcg
LyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYxM0MxRkIw
MENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVCM0VD
RjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2NCw3ICs1NjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChq
dW1wKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBhcHBlbmQoSnVtcExpc3Qm
IG90aGVyKQorICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBKdW1wTGlzdCYgb3RoZXIpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fanVtcHMuYXBwZW5kKG90aGVyLm1fanVtcHMuYmVnaW4oKSwg
b3RoZXIubV9qdW1wcy5zaXplKCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NvbnN0IGRvdWJsZSBNYWNyb0Fzc2VtYmxlcjo6dHdvVG9UaGUzMiA9IChkb3VibGUpMHgxMDAw
MDAwMDB1bGw7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VN
QkxFUikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBA
CiAjaWZuZGVmIE1hY3JvQXNzZW1ibGVyX2gKICNkZWZpbmUgTWFjcm9Bc3NlbWJsZXJfaAogCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCiAjaWYg
Q1BVKEFSTV9USFVNQjIpCkBAIC05Myw2ICs5NSw4IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmludmVydDsKICAgICAKKyAgICBz
dGF0aWMgY29uc3QgZG91YmxlIHR3b1RvVGhlMzI7IC8vIFRoaXMgaXMgc3VwZXIgdXNlZnVsIGZv
ciBzb21lIGRvdWJsZSBjb2RlLgorCiAgICAgc3RhdGljIERvdWJsZUNvbmRpdGlvbiBpbnZlcnQo
RG91YmxlQ29uZGl0aW9uIGNvbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGNvbmQpIHsKQEAg
LTIzMCw2ICsyMzQsMTEgQEAgcHVibGljOgogICAgIH0KIAogI2lmICFDUFUoQVJNX1RIVU1CMikK
KyAgICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbVB0ciByaWdodCA9IFRydXN0ZWRJbW1QdHIo
MCkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hQdHIoY29uZCwg
bGVmdCwgcmlnaHQpKTsKKyAgICB9CisgICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQs
IERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVl
ID0gVHJ1c3RlZEltbVB0cigwKSkKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1w
KGJyYW5jaFB0cldpdGhQYXRjaChjb25kLCBsZWZ0LCBkYXRhTGFiZWwsIGluaXRpYWxSaWdodFZh
bHVlKSk7CkBAIC0yMzksNiArMjQ4LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVy
biBQYXRjaGFibGVKdW1wKGp1bXAoKSk7CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRj
aGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBU
cnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1
cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQog
I2VuZGlmCiAKICAgICB2b2lkIGp1bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNiArNzU0LDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgc3RvcmUxNihzcmMsIHNldHVwQXJtQWRkcmVzcyhhZGRyZXNzKSk7CiAgICAg
fQogCisgICAgLy8gUG9zc2libHkgY2xvYmJlcnMgc3JjLCBidXQgbm90IG9uIHRoaXMgYXJjaGl0
ZWN0dXJlLgorICAgIHZvaWQgbW92ZURvdWJsZVRvSW50cyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QxLCBSZWdpc3RlcklEIGRlc3QyKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIudm1vdihkZXN0MSwgZGVzdDIsIHNyYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZUlu
dHNUb0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3RlcklE
IGRlc3QsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHNjcmF0Y2gpOworICAgICAgICBtX2Fzc2VtYmxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOwor
ICAgIH0KKwogI2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAgICAgc3RhdGljIGJv
b2wgc2hvdWxkQmxpbmRGb3JTcGVjaWZpY0FyY2godWludDMyX3QgdmFsdWUpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODYuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDIy
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKC0xMjggPD0gaW1tLm1fdmFsdWUgJiYgaW1tLm1f
dmFsdWUgPCAxMjgpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX2k4bShpbW0ubV92YWx1ZSwg
YWRkcmVzcyk7CiAgICAgfQorICAgIAorICAgIC8vIFBvc3NpYmx5IGNsb2JiZXJzIHNyYy4KKyAg
ICB2b2lkIG1vdmVEb3VibGVUb0ludHMoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
MSwgUmVnaXN0ZXJJRCBkZXN0MikKKyAgICB7CisgICAgICAgIG1vdmVQYWNrZWRUb0ludDMyKHNy
YywgZGVzdDEpOworICAgICAgICByc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgc3JjKTsK
KyAgICAgICAgbW92ZVBhY2tlZFRvSW50MzIoc3JjLCBkZXN0Mik7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJl
Z2lzdGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgeworICAgICAgICBtb3Zl
SW50MzJUb1BhY2tlZChzcmMxLCBkZXN0KTsKKyAgICAgICAgbW92ZUludDMyVG9QYWNrZWQoc3Jj
Miwgc2NyYXRjaCk7CisgICAgICAgIGxzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzY3Jh
dGNoKTsKKyAgICAgICAgb3JQYWNrZWQoc2NyYXRjaCwgZGVzdCk7CisgICAgfQogCiAgICAgSnVt
cCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWJz
b2x1dGVBZGRyZXNzIGRlc3QpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeVZh
bEluZm9faAorI2RlZmluZSBCeVZhbEluZm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAi
Q29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSklU
U3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2VudW0gSklUQXJyYXlNb2RlIHsKKyAgICBKSVRDb250aWd1b3VzLAorICAgIEpJVEFycmF5
U3RvcmFnZSwKKyAgICBKSVRJbnQ4QXJyYXksCisgICAgSklUSW50MTZBcnJheSwKKyAgICBKSVRJ
bnQzMkFycmF5LAorICAgIEpJVFVpbnQ4QXJyYXksCisgICAgSklUVWludDhDbGFtcGVkQXJyYXks
CisgICAgSklUVWludDE2QXJyYXksCisgICAgSklUVWludDMyQXJyYXksCisgICAgSklURmxvYXQz
MkFycmF5LAorICAgIEpJVEZsb2F0NjRBcnJheQorfTsKKworaW5saW5lIGJvb2wgaXNPcHRpbWl6
YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICByZXR1cm4gY2xhc3NJbmZvLT50
eXBlZEFycmF5U3RvcmFnZVR5cGUgIT0gVHlwZWRBcnJheU5vbmU7Cit9CisKK2lubGluZSBib29s
IGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0
dXJuIGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkK
KyAgICAgICAgfHwgaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpKTsKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJ
bmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGlu
ZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBKSVRDb250aWd1
b3VzOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFz
c0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgc3dpdGNoIChjbGFzc0lu
Zm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZWRBcnJheUludDg6Cisg
ICAgICAgIHJldHVybiBKSVRJbnQ4QXJyYXk7CisgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Cisg
ICAgICAgIHJldHVybiBKSVRJbnQxNkFycmF5OworICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgor
ICAgICAgICByZXR1cm4gSklUSW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoK
KyAgICAgICAgcmV0dXJuIEpJVFVpbnQ4QXJyYXk7CisgICAgY2FzZSBUeXBlZEFycmF5VWludDhD
bGFtcGVkOgorICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7CisgICAgY2FzZSBU
eXBlZEFycmF5VWludDE2OgorICAgICAgICByZXR1cm4gSklUVWludDE2QXJyYXk7CisgICAgY2Fz
ZSBUeXBlZEFycmF5VWludDMyOgorICAgICAgICByZXR1cm4gSklUVWludDMyQXJyYXk7CisgICAg
Y2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIEpJVEZsb2F0MzJBcnJheTsK
KyAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgorICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFy
cmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBKSVRD
b250aWd1b3VzOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVG
b3JTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzT3B0aW1pemFi
bGVJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVy
biBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7
CisgICAgCisgICAgQVNTRVJUKGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8oc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSkpOworICAgIHJldHVybiBqaXRBcnJheU1vZGVGb3JDbGFzc0lu
Zm8oc3RydWN0dXJlLT5jbGFzc0luZm8oKSk7Cit9CisKK3N0cnVjdCBCeVZhbEluZm8geworICAg
IEJ5VmFsSW5mbygpIHsgfQorICAgIAorICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
LCBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lLCBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKQorICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBi
YWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKKyAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQor
ICAgICAgICAsIGJhZFR5cGVKdW1wVG9Eb25lKGJhZFR5cGVKdW1wVG9Eb25lKQorICAgICAgICAs
IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAgICAg
ICAsIHNsb3dQYXRoQ291bnQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXg7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcDsKKyAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlOyAvLyBUaGUgYXJyYXkgbW9kZSB0aGF0IHdhcyBiYWtlZCBpbnRv
IHRoZSBpbmxpbmUgSklUIGNvZGUuCisgICAgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZTsKKyAg
ICBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoOworICAgIHVuc2lnbmVkIHNsb3dQYXRo
Q291bnQ7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKK307CisKK2lu
bGluZSB1bnNpZ25lZCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykK
K3sKKyAgICByZXR1cm4gaW5mby0+Ynl0ZWNvZGVJbmRleDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gQnlWYWxJbmZvX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAK
ICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNs
dWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAj
aW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKQEAgLTIwOSw2ICsy
MTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgICAgIAorICAgICAgICBCeVZh
bEluZm8mIGdldEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKihiaW5hcnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZCwgZ2V0
QnlWYWxJbmZvQnl0ZWNvZGVJbmRleD4obV9ieVZhbEluZm9zLmJlZ2luKCksIG1fYnlWYWxJbmZv
cy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgfQogCiAgICAgICAgIENhbGxMaW5r
SW5mbyYgZ2V0Q2FsbExpbmtJbmZvKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAg
ICAgICAgewpAQCAtNjEwLDYgKzYxNiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX3N0cnVjdHVy
ZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CiAgICAgICAgIHNpemVfdCBudW1iZXJPZlN0cnVjdHVy
ZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKTsg
fQogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1YkluZm8oaW50IGluZGV4
KSB7IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJbmZvc1tpbmRleF07IH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2V0TnVtYmVyT2ZCeVZhbEluZm9zKHNpemVfdCBzaXplKSB7IG1fYnlWYWxJbmZv
cy5ncm93KHNpemUpOyB9CisgICAgICAgIHNpemVfdCBudW1iZXJPZkJ5VmFsSW5mb3MoKSBjb25z
dCB7IHJldHVybiBtX2J5VmFsSW5mb3Muc2l6ZSgpOyB9CisgICAgICAgIEJ5VmFsSW5mbyYgYnlW
YWxJbmZvKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ieVZhbEluZm9zW2luZGV4XTsgfQogCiAg
ICAgICAgIHZvaWQgYWRkR2xvYmFsUmVzb2x2ZUluZm8odW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUlu
c3RydWN0aW9uKQogICAgICAgICB7CkBAIC0xMjg5LDYgKzEyOTksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHVi
SW5mbz4gbV9zdHJ1Y3R1cmVTdHViSW5mb3M7CisgICAgICAgIFZlY3RvcjxCeVZhbEluZm8+IG1f
YnlWYWxJbmZvczsKICAgICAgICAgVmVjdG9yPEdsb2JhbFJlc29sdmVJbmZvPiBtX2dsb2JhbFJl
c29sdmVJbmZvczsKICAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9z
OwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbExpbmtJbmZvPiBtX21ldGhvZENhbGxMaW5rSW5m
b3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9v
bC5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2FtcGxpbmdUb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
IDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU3BlY3RydW0uaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NTksMTIgKzg1OSwxNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgog
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2Ug
UE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7
CkBAIC05MDgsNiArOTEzLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtOTE1LDYgKzkyMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczog
ewogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIEVkZ2UgY2hpbGQxID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFy
cmF5TW9kZSgpKSkgewpAQCAtOTI0LDExICs5MzMsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgor
ICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKICAgICAgICAgY2FzZSBJTl9C
T1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RP
X0hPTEVfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01P
REVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CisgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTEzNjcsNyArMTM4Myw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzogLy8gVGhlc2Ugb25s
eSBnZXQgYSBDaGVja0FycmF5IGZvciBHZXRBcnJheUxlbmd0aAogICAgICAgICAgICAgLy8gVGhp
cyBkb2Vzbid0IGZpbHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJpZ2h0IG5vdy4gV2UgbWF5IHdh
bnQgdG8gYWRkCiAgICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcgb2YgYXJyYXkgbW9kZSBzcGVj
dWxhdGlvbnMsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4KICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKQEAgLTE0MTAsOSArMTQyOCwxMCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgIGNh
c2UgQXJyYXlpZnk6IHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAg
ICAgIGNhc2UgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAx
MzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDE0IEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChB
cnJheVByb2ZpbGUqIHAKICAgICAgICAgcmV0dXJuIEFycmF5OjpVbnByb2ZpbGVkOwogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQotICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9u
J3Qga25vdyB3aGV0aGVyIHRvIGdvIHRvIHNsb3cgcHV0IG1vZGUsIG9yIG5vdC4gVGhpcyBpcyBh
IGRlY2VudCBndWVzcy4KKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0
byBzbG93IHB1dCBtb2RlIG9yIG5vdC4gV2UncmUgZ3Vlc3NpbmcgdGhhdCB3ZSBkb24ndCBuZWVk
IHNsb3cgcHV0LgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VT
YWZlID8gQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRv
SG9sZSgpID8gQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6Q29udGlndW91cyk7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJv
ZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMp
OgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgogICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVN0b3Jh
Z2VUb0hvbGUgOiBBcnJheTo6QXJyYXlTdG9yYWdlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKQEAgLTU2LDYgKzYyLDIwIEBAIEFycmF5
OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHAKICAgICBjYXNlIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgICAgIHJldHVybiBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9y
YWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAg
IGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRl
eGVkQWNjZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3Vv
dXM7CisgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOworICAgIGNhc2UgYXNBcnJheU1v
ZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICBpZiAoYWN0aW9u
ID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2Vz
KCkpCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2U7CisgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOwogICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Up
OgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5r
VG9BcnJheVN0b3JhZ2U7CkBAIC0xNDQsNiArMTY0LDIyIEBAIGJvb2wgbW9kZUFscmVhZHlDaGVj
a2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAgIAorICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSGFzQ29udGln
dW91cyk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Cisg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IEhhc0NvbnRpZ3VvdXMpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisKICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xl
OgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgpAQCAtMTcwLDcgKzIw
Niw4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICAgICAg
ICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhp
bmdUeXBlKCkgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpCiAg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAotICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoK
KyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKQEAgLTIyNSw2ICsyNjIsMjQgQEAgY29u
c3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZv
cmNlRXhpdCI7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmlu
ZyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJDb250aWd1
b3VzIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4g
IkNvbnRpZ3VvdXNUb1RhaWwiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5k
czoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGln
dW91cyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICAg
ICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3Vz
IjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6Cisg
ICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIjsKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAg
ICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CiAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7
CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOgpAQCAtMjQ5LDEwICszMDQsMjAg
QEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1
cm4gIlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKICAgICAgICAgcmV0
dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNl
IEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJCbGFua1RvQ29udGln
dW91cyI7CiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKICAgICAgICAgcmV0
dXJuICJCbGFua1RvQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpCbGFua1RvU2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFn
ZSI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAg
ICAgICAgcmV0dXJuICJCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQ29udGln
dW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c09yQXJy
YXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBy
ZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCwxNSBAQCBlbnVtIE1vZGUgewogICAgIFN0cmluZywKICAgICAKICAgICAv
LyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBp
cyBub24gc2lkZS1lZmZlY3RpbmcuCisgICAgQ29udGlndW91cywKKyAgICBDb250aWd1b3VzVG9U
YWlsLAorICAgIENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBBcnJheVdpdGhDb250aWd1b3Vz
LAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwsCisgICAgQXJyYXlXaXRoQ29udGlndW91
c091dE9mQm91bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cywKKyAgICBQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMsCiAgICAgQXJyYXlTdG9yYWdlLAogICAgIEFycmF5U3RvcmFnZVRv
SG9sZSwKICAgICBTbG93UHV0QXJyYXlTdG9yYWdlLApAQCAtNjgsOCArNzcsMTYgQEAgZW51bSBN
b2RlIHsKICAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAg
IAogICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ugd2hlcmUgdGhl
IGNoZWNrIGlzIHNpZGUtZWZmZWN0aW5nLgorICAgIEJsYW5rVG9Db250aWd1b3VzLAogICAgIEJs
YW5rVG9BcnJheVN0b3JhZ2UsCiAgICAgQmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCisgICAg
QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICAKKyAgICAvLyBNb2RlcyB0aGF0
IGluZGljYXRlIHBvbHltb3JwaGljIGFycmF5IHN0b3JhZ2UuIFRoZXNlIGRvbid0IGJlbmVmaXQg
ZnJvbQorICAgIC8vIGFueSBjaGVja2luZyBvciBzdG9yYWdlIENTRS4KKyAgICBDb250aWd1b3Vz
T3JBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAor
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAogICAgIAogICAg
IEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCkBAIC04OSw2ICsxMDYsMzIgQEAgZW51bSBNb2Rl
IHsKIC8vIGhhdmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIgaW4gdGhlbS4KIAogLy8gRmlyc3Q6
IGhlbHBlcnMgZm9yIG5vbi1zaWRlLWVmZmVjdGluZyBjaGVja3MuCisjZGVmaW5lIE5PTl9BUlJB
WV9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6
Q29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAg
ICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFp
bDogICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91
c1RvVGFpbDogICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQUxMX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VP
VVNfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czog
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXMKKyNkZWZpbmUgQ09OVElHVU9VU19UT19UQUlMX01PREVTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91
c1RvVGFpbDogICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXNUb1RhaWwKKyNkZWZpbmUgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01P
REVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcwogI2RlZmluZSBOT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgQXJyYXk6OkFycmF5
U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTA2
LDMzICsxNDksNDggQEAgZW51bSBNb2RlIHsKICNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9S
QUdFX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBUlJBWV9XSVRI
X0FSUkFZX1NUT1JBR0VfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQogI2RlZmluZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVf
TU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgQXJyYXk6OkFycmF5U3RvcmFnZVRv
SG9sZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlCi0jZGVmaW5lIElOX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBUlJBWV9TVE9S
QUdFX1RPX0hPTEVfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQogI2RlZmluZSBT
TE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZQogI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAg
ICAgICBcCi0gICAgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAg
ICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzCiAKIC8vIE5leHQ6IGhlbHBlcnMgZm9yIHNpZGUt
ZWZmZWN0aW5nIGNoZWNrcy4KLSNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9S
QUdFX01PREVTIFwKLSAgICBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQ29udGlndW91cworI2RlZmluZSBFRkZFQ1RG
VUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICBcCisgICAgQXJyYXk6
OkJsYW5rVG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBj
YXNlIEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZQotI2RlZmluZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCiAgICAgRUZGRUNURlVMX05PTl9B
UlJBWV9BUlJBWV9TVE9SQUdFX01PREVTCi0jZGVmaW5lIFNMT1dfUFVUX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTICBcCisjZGVmaW5lIFNMT1dfUFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9S
QUdFX01PREVTICAgICAgICAgICAgIFwKICAgICBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UKKyNkZWZpbmUgUE9MWU1PUlBISUNfRUZGRUNURlVMX01PREVTICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisj
ZGVmaW5lIEFMTF9FRkZFQ1RGVUxfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAg
ICAgICAgICAgICBcCisgICAgY2FzZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVMKKworLy8g
RmluYWxseTogaGVscGVycyBmb3IgcG9seW1vcnBoaWMgYXJyYXkgYWNjZXNzZXMuCisjZGVmaW5l
IFBPTFlNT1JQSElDX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTogICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJh
eVN0b3JhZ2UKKyNkZWZpbmUgQUxMX1BPTFlNT1JQSElDX01PREVTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIFBPTFlNT1JQSElDX0VGRkVDVEZVTF9NT0RFUzogICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUwogCiBBcnJheTo6
TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiwgQXJyYXk6OkFjdGlvbiwgYm9vbCBtYWtl
U2FmZSk7CiAKQEAgLTE0NSw4ICsyMDMsMTAgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFy
cmF5OjpNb2RlKTsKIGlubGluZSBib29sIG1vZGVVc2VzQnV0dGVyZmx5KEFycmF5OjpNb2RlIGFy
cmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfTU9ERVM6CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNl
IEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU2LDcgKzIxNiw5
IEBAIGlubGluZSBib29sIG1vZGVVc2VzQnV0dGVyZmx5KEFycmF5OjpNb2QKIGlubGluZSBib29s
IG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJy
YXlNb2RlKSB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBk
ZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjYsNiArMjI4LDkgQEAgaW5saW5l
IGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcgogaW5saW5lIGJvb2wgaXNJbkJvdW5k
c0FjY2VzcyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKKyAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQ09OVElH
VU9VU19UT19UQUlMX01PREVTOgorICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVT
OgogICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0xODQsMTggKzI0OSw1NSBAQCBpbmxpbmUgYm9vbCBp
c1Nsb3dQdXRBY2Nlc3MoQXJyYXk6Ok1vZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBtYXlT
dG9yZVRvVGFpbChBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElH
VU9VU19NT0RFUzoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KwogaW5saW5lIGJvb2wgbWF5U3RvcmVUb0hvbGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewog
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CiAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVf
TU9ERVM6CiAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAg
Y2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBtb2RlSXNQb2x5bW9ycGhpYyhBcnJheTo6TW9kZSBt
b2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01P
REVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGln
dW91cyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChhcnJheU1v
ZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgYm9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKEFycmF5OjpNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1v
cnBoaWMoYXJyYXlNb2RlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGNh
bkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7CkBAIC0yMDQsNiArMzA2LDcgQEAgaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJh
eTo6TW9kZSBhcgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICBjYXNlIEFMTF9QT0xZTU9S
UEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMjQ5LDcgKzM1MiwxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9y
dHNMZW5ndGgoQXJyYXk6Ok1vCiAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5P
Tl9BUlJBWV9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjU5LDcgKzM2Niw4IEBAIGlubGlu
ZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW8KIGlubGluZSBib29sIGJlbmVmaXRz
RnJvbVN0cnVjdHVyZUNoZWNrKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2Rl
KSB7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAg
Y2FzZSBBcnJheTo6VW5kZWNpZGVkOgogICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAg
Y2FzZSBBcnJheTo6Rm9yY2VFeGl0OgpAQCAtMjczLDcgKzM4MSw3IEBAIGlubGluZSBib29sIGJl
bmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKEEKIGlubGluZSBib29sIGlzRWZmZWN0ZnVsKEFycmF5
OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jb25zdCBkb3VibGUgQXNzZW1ibHlI
ZWxwZXJzOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsKLQogRXhlY3V0YWJs
ZUJhc2UqIEFzc2VtYmx5SGVscGVyczo6ZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luKQogewogICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MywzMyArMjQzLDE0IEBAIHB1YmxpYzoKICAg
ICB9CiAjZW5kaWYKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpICYmIENQVShYODYpCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICB2b2lkIGJveERvdWJsZShGUFJSZWcgZnByLCBHUFJSZWcgdGFn
R1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKICAgICB7Ci0gICAgICAgIG1vdmVQYWNrZWRUb0ludDMy
KGZwciwgcGF5bG9hZEdQUik7Ci0gICAgICAgIHJzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIp
LCBmcHIpOwotICAgICAgICBtb3ZlUGFja2VkVG9JbnQzMihmcHIsIHRhZ0dQUik7CisgICAgICAg
IG1vdmVEb3VibGVUb0ludHMoZnByLCBwYXlsb2FkR1BSLCB0YWdHUFIpOwogICAgIH0KICAgICB2
b2lkIHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcg
ZnByLCBGUFJSZWcgc2NyYXRjaEZQUikKICAgICB7Ci0gICAgICAgIGppdEFzc2VydElzSlNEb3Vi
bGUodGFnR1BSKTsKLSAgICAgICAgbW92ZUludDMyVG9QYWNrZWQocGF5bG9hZEdQUiwgZnByKTsK
LSAgICAgICAgbW92ZUludDMyVG9QYWNrZWQodGFnR1BSLCBzY3JhdGNoRlBSKTsKLSAgICAgICAg
bHNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigzMiksIHNjcmF0Y2hGUFIpOwotICAgICAgICBvclBh
Y2tlZChzY3JhdGNoRlBSLCBmcHIpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkgJiYgQ1BVKEFSTSkKLSAgICB2b2lkIGJveERvdWJsZShGUFJSZWcgZnByLCBHUFJSZWcg
dGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnZt
b3YocGF5bG9hZEdQUiwgdGFnR1BSLCBmcHIpOwotICAgIH0KLSAgICB2b2lkIHVuYm94RG91Ymxl
KEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJSZWcgc2Ny
YXRjaEZQUikKLSAgICB7Ci0gICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGFnR1BSKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2hGUFIpOwotICAgICAgICBtX2Fzc2VtYmxlci52bW92
KGZwciwgcGF5bG9hZEdQUiwgdGFnR1BSKTsKKyAgICAgICAgbW92ZUludHNUb0RvdWJsZShwYXls
b2FkR1BSLCB0YWdHUFIsIGZwciwgc2NyYXRjaEZQUik7CiAgICAgfQogI2VuZGlmCiAgICAgCkBA
IC0zNjQsOCArMzQ1LDYgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogICAgIAotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsKLQogcHJvdGVjdGVkOgogICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NzQsNiArMTU3NCw4IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgogICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5k
ZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKQEAgLTE1
OTcsNiArMTU5OSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28K
ICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFy
cmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTks
OSArMzU5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBmb3IgYSBzdHJ1Y3R1cmUg
Y2hhbmdlIG9yIGEgcHV0IHRvIHByb3BlcnR5IHN0b3JhZ2UgdG8gYWZmZWN0CiAgICAgICAgICAg
ICAgICAgLy8gdGhlIEdldEJ5VmFsLgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgICAgICAgICAgLy8gQSBwdXNoIGNhbm5vdCBhZmZl
Y3QgcHJldmlvdXNseSBleGlzdGluZyBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCi0gICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOwpAQCAtMTIyMiw5ICsxMjE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRC
eVZhbDogewogICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApOwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOwotICAgICAgICAgICAgaWYgKGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0
aW9uKG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgJiYgbV9n
cmFwaFtjaGlsZDJdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYm
ICFtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgIGlmIChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CiAgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5p
bmRleCgpLCBjaGlsZDIuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9
PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5
TW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hl
Y2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgp
LmluZGV4KCksIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxl
bmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAg
ICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKQEAgLTEzNywxNyArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5j
aGlsZDEoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQx
KCksIG5vZGUuY2hpbGQyKCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAxKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwg
Myk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKICAgICAgICAgICAgIApAQCAtMzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNo
ZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5v
ZGVJbmRleCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NF
U3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNr
QXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJ
bmRleCBhcnJheSwgTm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6
TW9kZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAg
ICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKIAogICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJy
YXlNb2RlKSkgewotICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCAh
PSBOb05vZGUpOworICAgICAgICAgICAgbV9ncmFwaC5yZWYoaW5kZXgpOworICAgICAgICAgICAg
Tm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFy
cmF5LCBpbmRleCk7CiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNl
IGl0J3MgdXNlZCBhcyBhIGJ1dHRlcmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAv
LyBBbmQgdHdpY2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2Rl
SW5kZXggYXJyYXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRH
ZW5lcmF0ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdl
IGJhc2UsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVy
YXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAg
ICAgewogICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2lu
dCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2Rl
UHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGVQdHItPmFycmF5TW9kZSgpID09IEFycmF5OjpGb3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNo
IChub2RlUHRyLT5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
IHsKICAgICAgICAgICAgIE5vZGUgZm9yY2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29k
ZU9yaWdpbik7CiAgICAgICAgICAgICBmb3JjZUV4aXQucmVmKCk7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggZm9yY2VFeGl0SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleElu
QmxvY2ssIGZvcmNlRXhpdEluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKCFtb2RlSXNTcGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUo
KSkpCisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4
IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBiYXNlLmluZGV4KCkpOwotICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisg
ICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElD
X01PREVTOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIG1fZ3Jh
cGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdl
KHN0b3JhZ2UpOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBOb2RlSW5kZXggc3Rv
cmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmln
aW4sIGJhc2UuaW5kZXgoKSwgaW5kZXguaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgICAgICBp
ZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBz
dG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTMwMzE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NzksOCArNDc5LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNl
IE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9S
QUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEzMDMxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1Niw5ICs1NTYsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBl
eGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0g
ICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4UXVpY2tseShpbmRleCkpOwotICAgICAg
ICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgYXJyYXktPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0
cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTU3Myw5ICs1NzEsNyBAQCB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXgg
Pj0gMCkgewotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBv
dXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNl
dEluZGV4UXVpY2tseShpbmRleCkpOwotICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0
QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LCBmYWxzZSk7CisgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApAQCAtNjAxLDYgKzU5NywxNiBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4
ZWMpKTsKIH0KICAgICAgICAgCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5
KQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAg
ICAKKyAgICBhcnJheS0+YnV0dGVyZmx5KCktPnNldFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVy
Zmx5KCktPnB1YmxpY0xlbmd0aCgpICsgMSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhcnJheS0+cG9wKGV4ZWMpKTsKK30KKyAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMwOSw2ICsxMzE1LDE0IEBAIGNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ocmVzdWx0KTsKIH0KIAorY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVD
b250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9iamVjdC0+ZW5zdXJlQ29udGlndW91cyhnbG9iYWxE
YXRhKSk7Cit9CisKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9y
YWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzE3LDYgKzEzMzEsMTYg
QEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheQogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxE
YXRhKSk7CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91
c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJf
dCBpbmRleCkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Yyk7CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2Jq
ZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEp
KTsKK30KKwogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90
IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNyBAQCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
UFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNp
emVfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJh
dGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBT
KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBp
bnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3Bl
cmF0aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50
MzJfdCk7CkBAIC0xMTAsNiArMTEwLDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpW
X0RGR09wZXJhdAogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJh
dGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJB
VElPTiAoKlBfREZHT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3Qp
OwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVj
U3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9O
ICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVk
ZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBz
aXplX3QpOwogCkBAIC0xNDgsNiArMTQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5bwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSop
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7
CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRF
Uk5BTDsKQEAgLTE5Miw3ICsxOTQsOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFs
bG9jYXRlUHJvCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0
b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVS
TkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9H
cm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUp
IFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGln
dW91cyhFeGVjU3RhdGUqLCBKU09iamVjdCopOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK2NoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9v
a3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlz
CiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25l
IG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1
Niw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIHN0dWJKaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwor
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhh
c0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkp
OwogICAgICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNDUsNiArMjA0NSwxMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91
c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKQorewor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRUYWdSZWcpOworICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHJlc3VsdFRhZ1JlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7
CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQ
UlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3Vs
dFRhZ1JlZywgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBy
ZXN1bHRUYWdSZWcpOworICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgcmVzdWx0VGFnUmVnLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
OworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xv
d0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVn
LCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdS
ZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
ID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIAorICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgewor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
KworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2Fz
ZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9w
ZXJ0eVJlZyk7CisgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsK
KworICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisgICAgfQorCisgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpKTsKKyAgICAKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUp
KQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJu
IHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJl
ZyB2YWx1ZVBheWxvYWRSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5h
cnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YmV5b25kQXJyYXlCb3VuZHMpOworCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBh
IGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5
U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxl
IGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAg
ICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBp
cyBubyBuZWVkIGZvciBleGl0CisgICAgICAgIC8vIHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFy
cmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3
ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAorICAg
ICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBp
dCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQorICAgICAgICAgICAgLy8gYWxyZWFk
eSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5n
IHRoZSBhcnJheTsgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2Vz
Tm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBw
cm9wZXJ0eVJlZyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBsZW5ndGhEb2VzTm90
TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0KKyAgICAgICAgbm90SG9sZVZhbHVl
LmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRo
ZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICBtX2ppdC5zdG9yZTMyKHZh
bHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5v
ZGUub3AoKTsKQEAgLTI1NjUsNiArMjY3Miw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIo
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzog
eworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRo
aXMpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnLmdw
cigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19D
T05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19N
T0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFBheWxvYWQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0
VGFnLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dl
dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRUYWdS
ZWcsIHJlc3VsdFBheWxvYWRSZWcpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIGJhc2VSZWcs
IHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjU4Nyw2ICsyNzQzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7
CkBAIC0yNjI0LDYgKzI3ODEsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2Uo
dGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0
VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxv
YWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0VGFn
UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRUYWdSZWcs
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRUYWdSZWcpOworICAgICAg
ICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByZXN1bHRUYWdSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFz
Q29udGlndW91cykpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNv
bnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywg
cmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0VGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhh
c0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGls
ZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdl
UmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVD
YXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJv
dWdoKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVz
dWx0UGF5bG9hZFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI3MTQsNiArMjky
MSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAo
YXJyYXlNb2RlKSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworCisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVUYWdSZWcgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxv
YWRSZWcgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZVJlZywgdmFsdWVUYWdSZWcsIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0g
UHV0QnlWYWxBbGlhcykgeworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0
aGUgYXJyYXkuCisgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAg
ICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVRhZ1JlZywg
dmFsdWVQYXlsb2FkUmVnKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAg
IHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICBz
dG9yYWdlLnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5l
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1Jl
ZywgdmFsdWVQYXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hp
bGQzKTsKQEAgLTI3NDMsNjAgKzI5OTksNzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhub2RlLmFycmF5
TW9kZSgpKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5
TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2Ug
aWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAgICAgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgICAgICAgICAgICAg
IGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMg
Y29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFi
b3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkg
aGFwcGVucyBpZiB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBh
IGJhZCB0aW1lLgotICAgICAgICAgICAgICAgICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0
aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHBy
b3BlcnR5UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMg
PQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
VGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAg
ICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAg
ICAgICAgIHN0b3JhZ2UudXNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0
byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIAotICAgICAgICAgICAg
aWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQ
dXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2Vz
LmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFn
UmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxM
X1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1
dEJ5VmFsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFn
UmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVn
ID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAg
ICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhh
c0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3Jh
Z2VSZWcpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3Vv
dXNQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVU
YWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAg
IGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHN0b3JhZ2VSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9y
YWdlKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRC
eVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcs
IHZhbHVlUGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZh
bGxUaHJvdWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOworCisgICAgICAgICAg
ICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2
YWx1ZS51c2UoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IHRoZSBkZWNpc2lvbiBvZiB3aGV0
aGVyIG9yIG5vdCB3ZSdyZSBpbiBzdHJpY3QgbW9kZSBzaG91bGQgYmUgbWFkZQorICAgICAgICAg
ICAgLy8gYmFzZWQgb24gdGhlIGlubGluZSBjYWxsIGZyYW1lLCBub3QgdGhlIG1hY2hpbmUgY29k
ZSBibG9jay4KKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1
bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTE5LDI1
ICszMTk0LDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAog
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAg
ICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIC8v
IFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2Zm
ZmZmZmUpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9q
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VH
UFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
LCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpLAorICAgICAgICAgICAgICAgICAgICB2
YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNlR1BSKSk7CisgICAgICAgIAorICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAg
ICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3Rl
ZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxl
bmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VH
UFIpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIpLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNl
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUiksIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIp
KTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKQEAgLTI5NDgsNDYgKzMyNTMsODggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVUYWco
dGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZVBheWxvYWQodGhpcyk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2
YWx1ZVRhZy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlUGF5
bG9hZC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAg
ICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVUYWdHUFIpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LAorICAgICAgICAgICAgICAgIHZhbHVlUGF5bG9hZEdQUik7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
R1BSLCB2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZVRhZ0dQ
Uik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAg
dW5kZWZpbmVkQ2FzZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVUYWdHUFIsCisgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5w
YXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
UiksIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2
YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVu
Z3RoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdl
TGVuZ3RoLmdwcigpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNl
dFVuZGVmaW5lZENhc2VzOwotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7Cisg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CisgICAg
ICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1
ZVRhZ0dQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIpOworICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgdmFsdWVUYWdHUFIpOworICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHZhbHVlUGF5bG9hZEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMy
KHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogCi0gICAgICAgIHNldFVuZGVmaW5lZENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpKTsKKyAgICAgICAgICAgIHNl
dFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVt
cHR5VmFsdWVUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZyksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSk7CiAKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwog
ICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93
UGF0aE1vdmUoCi0gICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRh
ZygpKSwgdmFsdWVUYWdHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnBheWxvYWQoKSksIHZhbHVlUGF5bG9hZEdQUikpOworICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhN
b3ZlKAorICAgICAgICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKKyAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgp
LnRhZygpKSwgdmFsdWVUYWdHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIp
KTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25B
cnJheVBvcCwKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQ
YXlsb2FkR1BSKSwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsCisgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBiYXNlR1BSKSk7CiAKLSAgICAg
ICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwOSwxMCArMjEwOSwxMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dl
dEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgCisg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHRSZWcpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
cmVzdWx0UmVnKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlW
YWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywg
R1BSUmVnIHJlc3VsdFJlZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJl
c3VsdFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZyk7CisgICAgCisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9m
Qm91bmRzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgIHJldHVybiBzbG93Q2Fz
ZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJl
ZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7
CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGlmICghbWF5
U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhh
cnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJlZyk7CisgICAgICAgIG1f
aml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgaW5Cb3VuZHMu
bGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIpKTsKKyAgICAKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1v
ZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0
dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJS
ZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJl
ZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2Rl
KCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRB
cnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFy
cmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBp
ZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBpZiAoIW1heVN0b3JlVG9I
b2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNl
IGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgLy8g
d2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVl
ZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZh
bHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRo
aXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKKyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBi
cmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBl
bnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JP
ZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3Jp
dGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1w
UmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygm
bV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7Cisg
ICAgfQorICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNl
czsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewogICAg
IE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCisgICAgCiAgICAgc3dpdGNoIChvcCkgewogICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRl
eCk7CkBAIC0yNTk1LDYgKzI2OTYsNTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ug
SU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOwor
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19U
T19UQUlMX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RF
UzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFz
ZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUlu
dCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywg
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAg
LTI2MTUsNiArMjc2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NU
T1JBR0VfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01P
REVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjYyNywyMSArMjc3NCw2NSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29t
cGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9y
YWdlUmVnLCByZXN1bHRSZWcpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01P
REVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKTsKLQorICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQob3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xl
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVz
dWx0UmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhu
b2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1Nl
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHN0b3JhZ2VSZWcsIHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAg
IGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3Jh
Z2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3Jh
Z2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0
UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNT
ZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKQEAgLTI3MzUsOCArMjkyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6IHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjc1Niw1OSArMjk0Nyw3NiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhl
IHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1
ZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vz
cyhhcnJheU1vZGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAg
ICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBp
c0hvbGVWYWx1ZTsKLSAgICAgICAgICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkg
ewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0
YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUgYmFzZWxpbmUgSklUCi0gICAgICAgICAgICAgICAgLy8g
d2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVl
ZCBmb3IgZXhpdAotICAgICAgICAgICAgICAgIC8vIHByb2ZpbGluZy4KLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRp
bWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2Ug
dGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFk
eSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBt
X2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdy
ZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBk
YXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
b3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9yYXJ5UmVnaXN0
ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUpOworCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGln
dW91c1B1dEJ5VmFsKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZyk7CisKKyAgICAgICAgICAg
IGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZh
bHVlLnVzZSgpOworICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAg
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJv
dW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBjaGlsZDMpOworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmll
ckVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hp
bGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hp
bGQ0KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKwor
ICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAg
ICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICAgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBub3RIb2xlVmFsdWUubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdp
c3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJh
eVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJv
cGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpOworCiAgICAgICAg
ICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAg
ICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7Ci0KLSAgICAgICAgICAg
IC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLQotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNj
ZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJy
YXlCb3VuZHMpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2Rl
KSkKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLApAQCAt
MjgyMCw2ICszMDI4LDYzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9w
KCkgPT0gUHV0QnlWYWwpOworICAgICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcg
dmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFy
eS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25l
Q2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcG9yYXJ5UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgdGVtcG9yYXJ5UmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhp
Y0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwobm9k
ZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlS
ZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVz
QXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZh
bGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0g
bV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wb3JhcnlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwobm9kZSwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgp
KTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAg
ICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiB0aGUgZGVjaXNpb24gb2Ygd2hldGhlciBvciBub3Qgd2UncmUg
aW4gc3RyaWN0IG1vZGUgc2hvdWxkIGJlIG1hZGUKKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRo
ZSBpbmxpbmUgY2FsbCBmcmFtZSwgbm90IHRoZSBtYWNoaW5lIGNvZGUgYmxvY2suCisgICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwo
CisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxC
ZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQz
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMjk3MywyNiAr
MzIzOCw1NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5n
dGgoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFy
cmF5UHVzaCwgTm9SZXN1bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxl
bmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUg
bGVuZ3Rocy4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3Jh
Z2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOworICAgICAgICAgICAgLy8g
UmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4
N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAg
ICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBt
X2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwot
ICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3Jh
Z2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQub3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAg
ICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1
c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAotICAgICAgICAgICAgICAgIHZhbHVlR1BS
LCBiYXNlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOwogICAgICAgICAKLSAgICAgICAganNW
YWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzAwMiw0MSArMzI5NSw3NyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2
YWx1ZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFn
ZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwg
c3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0
LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB1bmRlZmluZWRDYXNlID0KKyAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsK
KyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciksCisgICAgICAgICAgICAgICAgdmFsdWVHUFIpOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAg
ICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVH
UFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJh
dGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVu
Z3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7Ci0gICAgICAgIHNldFVuZGVmaW5lZENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VM
ZW5ndGhHUFIpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHVuZGVmaW5lZENhc2Ug
PQorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIp
KTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOwotCi0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAg
ICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSkpOwotICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
KyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKLSAgICAgICAgICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1
ZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlz
LAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwg
YmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOwogCi0gICAgICAgIGpzVmFs
dWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTMyMTAsOCArMzUzOSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHQuZ3ByKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgc2l6ZUdQUik7Ci0gICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzZWxl
Y3RTY3JhdGNoR1BSKHNpemVHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdM
ZW5ndGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXpl
R1BSLCBUcnVzdGVkSW1tMzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwgc3Ry
dWN0dXJlR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKKyAgICAgICAgYmlnTGVuZ3RoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9y
YWdlKCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHN0
cnVjdHVyZUdQUiwgc2l6ZUdQUik7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2ICszMTUsNDEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAg
ICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9X
SVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9h
ZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSksIHRlbXBHUFIpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGlu
dG8gYSBzaW5nbGUgYnJhbmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAg
ICAgICAgLy8gdGhhdCBkb2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVs
IGNvbWZvcnRhYmxlIHdpdGggdGhlIHByZXNlbnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBm
b3IgdGhpcyBjb2RlIHBhdGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1w
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBOT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTM1Miw2ICszODcsMjkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzog
eworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1
dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNv
IHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUg
cHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAg
ICAgIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSA/IEhh
c0NvbnRpZ3VvdXMgOiAwKQorICAgICAgICAgICAgICAgICAgICB8IChwb2x5bW9ycGhpY0luY2x1
ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpID8gSGFzQXJyYXlTdG9yYWdlIDogMCkp
KSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBl
Y3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CkBAIC0z
OTAsNzIgKzQ0OCwxMDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9k
ZQogICAgIEFTU0VSVCghbW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
IAorICAgIEluZGV4aW5nVHlwZSBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzazsKICAgICAKICAgICBz
d2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlf
QVJSQVlfU1RPUkFHRV9NT0RFUzogewotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRo
aXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHN0
cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgor
ICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0NvbnRpZ3VvdXM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CisgICAgICAgIGRl
c2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgZGVz
aXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91
c09yQXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0Nv
bnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBHUFJU
ZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwor
ICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CisgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOwogICAgICAgICAKLSAgICAgICAgLy8gV2UgY2FuIHNraXAgYWxs
IHRoYXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KLSAgICAg
ICAgSW5kZXhpbmdUeXBlIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0KLSAgICAgICAgICAgIGlz
U2xvd1B1dEFjY2Vzcyhub2RlLmFycmF5TW9kZSgpKSA/IChIYXNBcnJheVN0b3JhZ2UgfCBIYXNT
bG93UHV0QXJyYXlTdG9yYWdlKSA6IEhhc0FycmF5U3RvcmFnZTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sp
KTsKKyAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsK
KyAgICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2
ZSBhcnJheSBzdG9yYWdlLgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9q
aXQuYnJhbmNoVGVzdDgoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2ly
ZWRJbmRleGluZ1R5cGVNYXNrKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHRlbXBHUFIpOwogICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAot
ICAgICAgICAvLyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQg
aW5kZXhlZCBhY2Nlc3Nlcy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUg
d29uJ3Qgd29yay4KKyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8gSWYg
d2UncmUgYWxsZWdlZGx5IGNyZWF0aW5nIGNvbnRpZ3VvdXMgc3RvcmFnZSBhbmQgdGhlIGluZGV4
IGlzIGJvZ3VzLCB0aGVuCisgICAgLy8ganVzdCBkb24ndC4KKyAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKSA9PSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXMpIHsKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0g
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CisgICAgICAgICAgICBt
X2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKSk7
CisgICAgfQorICAgIAorICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90
IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAorICAgIC8vIHRoZW4gdGhp
cyBtb2RlIHdvbid0IHdvcmsuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSkp
OwogICAgICAgICAKLSAgICAgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkg
c3RvcmFnZS4KLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAg
Ly8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzLCB0ZW1wR1BSLCBiYXNlUmVnKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcpOwotICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOwotCi0gICAgICAgIC8vIEFsYXMsIHdl
IG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9l
cyBub3Qgc2F2ZQotICAgICAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1
bCBmb3IgaXQgdG8gZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZwotICAgICAgICAvLyBh
Ym91dCBhIGxvYWQuCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0dXJlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2Ug
aGF2ZSB0aGUga2luZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KLSAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ss
IHdoaWNoIHdpbGwgcmVzdWx0IGluIHRoZSAKLSAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9u
IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgot
ICAgICAgICAvLyBUaGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXIt
dmlzaWJsZS4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29u
dGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
c3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisKKyAgICAvLyBBbGFzLCB3ZSBuZWVkIHRv
IHJlbG9hZCB0aGUgc3RydWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNh
dmUKKyAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8g
ZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZworICAgIC8vIGFib3V0IGEgbG9hZC4KKyAg
ICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisg
ICAgLy8gRmluYWxseSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3Jh
Z2UgdGhhdCB3ZSB3YW50ZWQgdG8gZ2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFj
a3dhcmRzIHNwZWN1bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgCisgICAg
Ly8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlmaWNhdGlv
biBiZWluZyByZWV4ZWN1dGVkLgorICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNh
dGlvbiBpcyBub3QgdXNlci12aXNpYmxlLgorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihk
ZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpKTsKKyAgICAgICAgCisgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKQEAg
LTIxNDAsNyArMjIzMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
SW4KICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLCByZXN1bHRSZWcp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8
fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKQEAgLTIyNTAsNyArMjM0Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQuc3RvcmUz
Mih2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91cikpOwogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsK
ICAgICB9CiAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3Vu
ZHMubGluaygmbV9qaXQpOwpAQCAtMzIwNSwxMiArMzI5OCwyMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAog
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJB
WV9TVE9SQUdFX01PREVTOiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6
IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVn
ID0gcmVzdWx0LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKKyAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApKSk7CiAgICAgICAgICAgICAKQEAgLTMzOTksNiArMzUwMywxNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BS
MiwgbV9jb21waWxlSW5kZXgpOwogfQogCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIEFycmF5OjpNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFy
cmF5TW9kZSkpCisgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIEdQUlRl
bXBvcmFyeSByZWFsVGVtcG9yYXJ5KHRoaXMpOworICAgIHRlbXBvcmFyeS5hZG9wdChyZWFsVGVt
cG9yYXJ5KTsKKyAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR1BS
VGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRv
cjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMTE2Niw2ICsxMTY3LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgeworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUp
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBvbGQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMjE4LDExICsxMjI0
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7Cisg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNDY4
LDYgKzE0NzksMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9F
T1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgaW50MzJfdCBhcmcyKQor
ICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRy
dXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsK
QEAgLTE1MzEsMTEgKzE1NDcsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcy
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0
WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0yMTQ5
LDYgKzIxNzAsNTIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KE5vZGUmKTsKICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywg
R1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZh
bChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQ
UlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRUYWdSZWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVn
IHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFRhZ1JlZywgR1BS
UmVnIHJlc3VsdFBheWxvYWRSZWcpOworI2VuZGlmCisgICAgCisgICAgYm9vbCBwdXRCeVZhbFdp
bGxOZWVkRXh0cmFSZWdpc3RlcihBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICAvLyBGb3IgQXJyYXlTdG9yYWdlLCB3ZSBu
ZWVkIGFuIGV4dHJhIHJlZyBmb3Igc3RvcmVzIHRvIGhvbGVzIGV4Y2VwdCBpZgorICAgICAgICAv
LyB3ZSdyZSBpbiBTbG93UHV0IG1vZGUuCisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19I
T0xFX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBGb3IgQ29udGln
dW91cywgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIGFueSBhY2Nlc3MgdGhhdCBtYXkgc3RvcmUK
KyAgICAgICAgLy8gdG8gdGhlIHRhaWwuCisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlM
X01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBBbGwgcG9seW1vcnBoaWMgbW9k
ZXMgbmVlZCBhbiBleHRyYSByZWcuCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVT
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHUFJS
ZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmLCBBcnJheTo6TW9k
ZSk7CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5
JiB0ZW1wb3JhcnksIE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gdGVtcG9yYXJ5
UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUuYXJyYXlNb2RlKCkpOworICAgIH0K
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxl
Q29udGlndW91c1B1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5
UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZh
bChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworI2Vsc2UKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiwgR1BS
UmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyB2YWx1ZVRhZ1JlZywgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJh
c2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1
ZVRhZ1JlZywgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyk7CisjZW5kaWYKKyAgICAKICAgICB2b2lk
IGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9u
U3RyaW5nKE5vZGUmKTsKIApAQCAtMjE3MCwxNCArMjIzNyw2IEBAIHB1YmxpYzoKICNlbmRpZgog
ICAgIHZvaWQgY29tcGlsZUFyaXRoTW9kKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVTb2Z0TW9k
dWxvKE5vZGUmKTsKLSAgICBlbnVtIFR5cGVkQXJyYXlTaWduZWRuZXNzIHsKLSAgICAgICAgU2ln
bmVkVHlwZWRBcnJheSwKLSAgICAgICAgVW5zaWduZWRUeXBlZEFycmF5Ci0gICAgfTsKLSAgICBl
bnVtIFR5cGVkQXJyYXlSb3VuZGluZyB7Ci0gICAgICAgIFRydW5jYXRlUm91bmRpbmcsCi0gICAg
ICAgIENsYW1wUm91bmRpbmcKLSAgICB9OwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJS
ZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwyNSBAQCBzdGF0aWMgaW5s
aW5lIEpTT2JqZWN0KiBjaGVja2VkUmV0dXJuKEpTCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
fQogCitjbGFzcyBTYW1wbGluZ1Njb3BlIHsKK3B1YmxpYzoKKyAgICBTYW1wbGluZ1Njb3BlKElu
dGVycHJldGVyKiBpbnRlcnByZXRlcikKKyAgICAgICAgOiBtX2ludGVycHJldGVyKGludGVycHJl
dGVyKQorICAgIHsKKyAgICAgICAgaW50ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmcoKTsKKyAgICB9
CisgICAgflNhbXBsaW5nU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnByZXRlci0+c3Rv
cFNhbXBsaW5nKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbnRlcnByZXRlciogbV9pbnRlcnBy
ZXRlcjsKK307CisKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWN1dGFi
bGUqIHByb2dyYW0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaikKIHsK
KyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CisgICAgCiAgICAgSlNTY29w
ZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2Jq
ZWN0KHRoaXNPYmosIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEo
KS0+ZXhjZXB0aW9uKTsKQEAgLTExMzcsNiArMTE1NCw4IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50
ZXJwcmV0ZXI6OnByZXBhcmVGb3IKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxs
RnJhbWVDbG9zdXJlJiBjbG9zdXJlKSAKIHsKKyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2Nv
cGUodGhpcyk7CisgICAgCiAgICAgQVNTRVJUKCFjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICBpZiAoY2xvc3VyZS5vbGRDYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwpAQCAtMTE3Miw2ICsxMTkxLDggQEAgdm9pZCBJbnRlcnByZXRlcjo6ZW5kUmVwZWF0Q2FsbChD
YWxsRnJhbQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBl
dmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNj
b3BlLCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpCiB7CisgICAgU2FtcGxpbmdTY29wZSBzYW1w
bGluZ1Njb3BlKHRoaXMpOworICAgIAogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlz
VmFsdWUsIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhj
ZXB0aW9uKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9y
QnVzeSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMDMx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAwLDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9
IDA7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVzb2x2
ZUluZm9JbmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC03
MzgsNiArNzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4K
ICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAg
ICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29k
ZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJs
b2NrLT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNp
emUoKTsgKytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2Rl
TG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5m
b1tpXS5iYWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRvbmVU
YXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRhcmdl
dCk7CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsKKyAg
ICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisg
ICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAg
ICAgICAgICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9b
aV0uYXJyYXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJhZFR5
cGVKdW1wLCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihyZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVCbG9j
ay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlv
bkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
Pm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlu
a0J1ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxh
dGlvbkluZm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAK
KyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0KQorICAgICAgICAgICAgOiBi
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGJhZFR5cGVKdW1wKGJh
ZFR5cGVKdW1wKQorICAgICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAg
ICAgLCBkb25lVGFyZ2V0KGRvbmVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0OworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIHJldHVybkFkZHJlc3M7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhP
dGhlcjsKQEAgLTM0OCw2ICszNjcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBq
aXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAg
ICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBk
aXJlY3QpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
R2V0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGppdChnbG9i
YWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Cisg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMp
CiAgICAgICAgIHsKQEAgLTM5Nyw2ICs0MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5B
ZGRyZXNzUHRyLCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJldHVybkFkZHJl
c3NQdHIsIGJvb2wgZGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwor
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFs
RGF0YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7
CkBAIC00NTIsNyArNDg4LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJl
Z2lzdGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRl
eGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQ
cm9maWxlKik7Ci0KKyAgICAgICAgCisgICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VBcnJheU1v
ZGUoQXJyYXlQcm9maWxlKik7CisgICAgICAgIAorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiBy
ZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZXhpbmcgdHlwZS4KKyAg
ICAgICAgLy8gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5kZWQuIEJhc2Ug
aXMgY2VsbCBjaGVja2VkLgorICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxl
ZC4gUmV0dXJucyB0aGUgc2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCisgICAgICAgIC8vIGNhc2Ug
Y29udGFpbnMgcmVzdWx0IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KKyAg
ICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVt
cExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRT
aXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5
cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdU
MiBjb250YWlucyBpbmRlY2luZyB0eXBlLgorICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUg
aXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAorICAgICAgICAv
LyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVh
ZHkgcHJvZmlsZWQuCisgICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCisgICAgICAg
IEp1bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwg
VHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyk7CisgICAgICAgIEp1bXBM
aXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRT
aXplKTsKKyAgICAgICAgCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5h
bCwgS25vd25Ob3RGaW5hbCB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTg3MCw2ICs5
MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2Fs
bHM7CiAgICAgICAgIFZlY3RvcjxMYWJlbD4gbV9sYWJlbHM7CiAgICAgICAgIFZlY3RvcjxQcm9w
ZXJ0eVN0dWJDb21waWxhdGlvbkluZm8+IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm87
CisgICAgICAgIFZlY3RvcjxCeVZhbENvbXBpbGF0aW9uSW5mbz4gbV9ieVZhbENvbXBpbGF0aW9u
SW5mbzsKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8+IG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxs
Q29tcGlsYXRpb25JbmZvPiBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZl
Y3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CkBAIC04NzksNiArOTM2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAg
ICAgdW5zaWduZWQgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2dsb2Jh
bFJlc29sdmVJbmZvSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fY2FsbExpbmtJbmZvSW5kZXg7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5o
CShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDIzICs0NDcsMjIgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
bGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwg
UmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVy
SUQgc3RvcmFnZVB0ciwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewotICAgIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIDRVKTsKLSAgICBzaXplX3QgaW5pdGlhbFN0b3Jh
Z2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IoaW5pdGlhbExlbmd0aCkpOworICAgIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1h
eChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0g
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgaW5pdGlhbExlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOworCisgICAgbG9hZFB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOwogCiAgICAgLy8gV2Ug
YWxsb2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBj
b2xsZWN0aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5IGluaXRpYWxp
emF0aW9uLgogICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3VsdCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0
aGUgY2VsbCBmb3IgdGhlIGFycmF5LgotICAgIGxvYWRQdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5hZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNoKTsKICAgICBlbWl0QWxs
b2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJyYXksIE1hcmtlZEJsb2NrOjpOb25lPihzY3JhdGNoLCBj
ZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsKIAotICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5
IGluZm8gaW4gdGhlIEFycmF5U3RvcmFnZS4KLSAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFk
ZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAg
IHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3Jh
Z2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMyKEltbTMyKGluaXRp
YWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9y
YWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OmluZGV4Qmlhc09mZnNldCgpKSk7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6
OnNwYXJzZU1hcE9mZnNldCgpKSk7CisgICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5m
byBpbiB0aGUgaW5kZXhpbmcgaGVhZGVyLgorICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRk
cmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
KyAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhl
IG5ld2x5IGFsbG9jYXRlZCBBcnJheVN0b3JhZ2UuCiAgICAgc3RvcmVQdHIoc3RvcmFnZVJlc3Vs
dCwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKQEAg
LTQ3MiwxMiArNDcxLDEyIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1
bnMKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2
YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwotICAg
ICAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkp
KTsKKyAgICAgICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKICNlbHNlCiAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBB
ZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKKyAgICAgICAgc3RvcmUzMihzdG9yYWdl
UHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICogaSkpOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVl
c1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKHVpbnQzMl90KSksIHN0
b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKKyAgICAgICAgc3RvcmUzMihzdG9y
YWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTU2MSwx
MCArNTYwLDI1IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUYKIAog
aW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKIHsKLSAgICBpZiAoIWNhbkJlT3B0aW1pemVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpICAgIAog
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTWF5U3Rv
cmVUb0hvbGUoKSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBib29sIGFycmF5UHJvZmls
ZVNhdyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KQorewor
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICByZXR1cm4gISEocHJvZmlsZS0+b2JzZXJ2
ZWRBcnJheU1vZGVzKCkgJiAoYXNBcnJheU1vZGVzKE5vbkFycmF5IHwgY2FwYWJpbGl0eSkgfCBh
c0FycmF5TW9kZXMoQXJyYXlDbGFzcyB8IGNhcGFiaWxpdHkpKSk7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJy
YXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKK3sKKyAgICBpZiAoYXJyYXlQcm9maWxlU2F3
KHByb2ZpbGUsIEhhc0FycmF5U3RvcmFnZSkpCisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3Jh
Z2U7CisgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjYxLDcgKzE2NjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
ZnVuY19leHAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0
dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0
aCkpKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJh
ZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKSB7CiAg
ICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXkpOwogICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMTY4MCw4ICsxNjgxLDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfYXJyYXkoSW5zdHJ1Y3QKICAgICAvLyBJZiB0
aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6ZSwgd2Ugd2lsbCBhbHJlYWR5IG1ha2UgdGhl
IHByb3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAgICAgLy8gZW1pdF9vcF9uZXdfYXJyYXkuCiAg
ICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYg
KENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUs
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpCisgICAgaWYgKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpCisgICAgICAgIHx8IENvcGllZFNwYWNl
Ojppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihsZW5ndGgpKSkpCiAgICAgICAgIHJldHVybjsKKyAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIFdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLgogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRTcGFjZSBmb3Igc3RvcmFnZS4KICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gTWFya2VkU3BhY2UgZm9y
IGNlbGwuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA0LDI3ICsyMDQsNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVj
dGlvbgogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0
eSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQ
cm9maWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0
ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShy
ZWdUMSwgcmVnVDMsIHByb2ZpbGUpOworCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJy
YXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGln
dW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAK
LSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRhZwotICAgIGxvYWQzMihCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LCByZWdUMCk7IC8vIHBheWxvYWQKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgIGFkZFNsb3dD
YXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCisgICAgTGFi
ZWwgZG9uZSA9IGxhYmVsKCk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSnVtcCByZXN1
bHRPSyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVt
cHR5VmFsdWVUYWcpKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgcmVzdWx0T0subGluayh0aGlz
KTsKKyNlbmRpZgorCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVf
TEVOR1RIKG9wX2dldF9ieV92YWwpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgCisgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29k
ZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3Vz
KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7CisgICAgCisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAv
LyB0YWcKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXls
b2FkCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2Fz
ZXM7CiB9CiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZSkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKyAgICAKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRhZworICAg
IGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKyAgICAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgdW5zaWduZWQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAgLTI0OCwxMCArMjk5LDE2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwor
ICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsK
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChwcm9wZXJ0eSk7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIENhbGwgY2FsbCA9IHN0
dWJDYWxsLmNhbGwoZHN0KTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNh
bGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIAogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoKTsKIH0KQEAgLTI2MCwyMCArMzE3LDgyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwg
cmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhy
ZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisgICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRD
b250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
KyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9u
SW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CiAKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QzKTsKKyAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisgICAgCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRMb2FkKHZh
bHVlLCByZWdUMSwgcmVnVDApOworICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSkpOworICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgIAorICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAgZW1p
dEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDEpOworICAgIHN0b3JlMzIocmVnVDEs
IEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAKICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDEsIHJl
Z1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcyk7CiAgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIo
WmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qz
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFk
ZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKICAg
ICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKICAgICAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsK
QEAgLTI4Myw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0
aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOworICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9s
ZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIApA
QCAtMjkyLDYgKzQxMSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0
aW9uCiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAgICAgCiAgICAgZW5k
LmxpbmsodGhpcyk7CisgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJl
Z1QxLCByZWdUMywgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0zMDMsMTMgKzQyNiwx
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBpbiB2ZWN0b3IgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG91dCBvZiBi
b3VuZHMKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgSklU
U3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlzLCBjdGlfb3BfcHV0X2J5X3ZhbCk7CiAgICAg
c3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsKICAgICBzdHViUHV0QnlWYWxDYWxs
LmFkZEFyZ3VtZW50KHByb3BlcnR5KTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50
KHZhbHVlKTsKLSAgICBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICBDYWxsIGNhbGwgPSBz
dHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFk
ZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTExMSwxNyArMTEyLDY3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVBy
b2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJl
Z1QyLCByZWdUMywgcHJvZmlsZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBKdW1wIHJlc3VsdE9LID0gYnJhbmNoVGVzdFB0cihO
b25aZXJvLCByZWdUMCk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhp
cyk7CisjZW5kaWYKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9k
ZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nh
c2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2UpKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKKworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dD
YXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTE0NiwxMCArMTk3LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCisgICAgTGFiZWwg
c2xvd1BhdGggPSBsYWJlbCgpOworICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdU
Mik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHVi
Q2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOworCisg
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1Bh
dGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQpAQCAtMjI2
LDcgKzI4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsK
ICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0
eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVn
VDEpOwpAQCAtMjM0LDEwICsyOTEsNzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJ
bnN0cnVjdGlvbgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5
cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2Rl
ID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQs
IGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJl
Z1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3Vz
UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hU
ZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
CisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
b3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVn
VDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgSnVtcCBlbXB0eSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCkBAIC0yNDcsOCArMzY5
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIEp1bXAg
ZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVl
c0luVmVjdG9yT2Zmc2V0KCkpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CkBAIC0yNTcsOCAr
Mzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGp1
bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7Ci0K
LSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTI3MCwxMyArMzkyLDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3Bl
cnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7
IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3Qg
YXJyYXkgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBjaGVjawor
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcworICAgIAorICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRCeVZhbENhbGwo
dGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1l
bnQocmVnVDApOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJl
Z1QyKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0g
ICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5VmFs
Q2FsbC5jYWxsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwor
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pbmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjU2LDcgKzc4
NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDIsIHJlZ1QxLCBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSXNBcnJheSkpOwotICAgIEp1bXAgZmFp
bHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMpKTsK
IAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9y
YWdlCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMyk7CkBAIC0xMjc0LDYgKzE0MDIsMzcxIEBAIGJvb2wgSklUOjppc0RpcmVjdFB1
dEJ5SWQoU3RydWN0dXJlU3R1YkkKICAgICB9CiB9CiAKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
KyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1
b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJh
eVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFs
RGF0YS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVRJbnQxNkFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9n
bG9iYWxEYXRhLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRJbnQzMkFycmF5OgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV9nbG9iYWxEYXRhLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFy
cmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgIGNhc2Ug
SklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2Jh
bERhdGEtPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV9nbG9iYWxEYXRhLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6CisgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAg
CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIu
bGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNz
LnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAK
KyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAg
ICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZv
ciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywg
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8t
PmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsK
K30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAg
CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToK
KyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUSW50OEFycmF5
OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IDEsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEpJVEludDE2QXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91
bmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25l
ZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVFVpbnQ4QXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2ln
bmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SklUVWludDE2QXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgorICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV9nbG9iYWxEYXRhLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRU
eXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBK
SVRGbG9hdDMyQXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCA0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRGbG9h
dDY0QXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLCA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywg
bV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxv
Y2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChi
eVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAor
ICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1
cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUo
KSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5j
dGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKSk7Cit9CisKK0pJVDo6SnVtcExpc3Qg
SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVf
dCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK3sKKyAgICAv
LyBUaGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhlIGNsYXNz
SW5mby4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0CisgICAgLy8gY2xvYmJlcmluZyB0aGUgcmVn
aXN0ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3BlcnR5Lgor
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBS
ZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCByZXN1bHRQYXlsb2Fk
ID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisjZWxzZQorICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsK
KyAgICBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHJl
c3VsdFRhZyA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2VuZGlm
CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJ
bmZvKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7Cisg
ICAgCisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgICAgaWYg
KHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgIGxvYWQ4U2lnbmVk
KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBU
aW1lc09uZSksIHJlc3VsdFBheWxvYWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6Cisg
ICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgICAgICBs
b2FkMTZTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBh
eWxvYWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGJhc2Us
IHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIDQ6CisgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVz
Rm91ciksIHJlc3VsdFBheWxvYWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmU7CisgICAgaWYgKGVsZW1l
bnRTaXplID09IDQgJiYgc2lnbmVkbmVzcyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICAg
ICAgSnVtcCBjYW5CZUludCA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UGF5
bG9hZCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgCisgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKHJlc3VsdFBheWxvYWQsIGZwUmVnVDApOworICAgICAgICBhZGREb3VibGUoQWJzb2x1
dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgZnBSZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgbW92ZURvdWJsZVRvUHRyKGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOworICAgICAgICBz
dWJQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKKyNlbHNlCisgICAg
ICAgIG1vdmVEb3VibGVUb0ludHMoZnBSZWdUMCwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgY2FuQmVJ
bnQubGluayh0aGlzKTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG9yUHRyKHRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0UGF5bG9hZCk7CisjZWxzZQorICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnKTsKKyNlbmRpZgorICAgIGlm
IChkb25lLmlzU2V0KCkpCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICByZXR1cm4gc2xv
d0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3sKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQg
cHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQgPSByZWdUMDsK
KyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBi
YXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIFJlZ2lz
dGVySUQgcmVzdWx0UGF5bG9hZCA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcmVzdWx0VGFnID0g
cmVnVDE7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisjZW5kaWYKKyAgICAKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICAKKyAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgY2FzZSA0OgorICAgICAgICBsb2FkRmxvYXQoQmFz
ZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1QwKTsKKyAgICAgICAgY29u
dmVydEZsb2F0VG9Eb3VibGUoZnBSZWdUMCwgZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgODogeworICAgICAgICBsb2FkRG91YmxlKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwg
VGltZXNFaWdodCksIGZwUmVnVDApOworICAgICAgICBKdW1wIG5vdE5hTiA9IGJyYW5jaERvdWJs
ZShEb3VibGVFcXVhbCwgZnBSZWdUMCwgZnBSZWdUMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgTmFOID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICAgICAgbG9hZERvdWJsZSgmTmFOLCBmcFJlZ1QwKTsKKyAgICAgICAgbm90TmFOLmxpbmsodGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgp
OworICAgIH0KKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1vdmVEb3VibGVUb1B0cihm
cFJlZ1QwLCByZXN1bHRQYXlsb2FkKTsKKyAgICBzdWJQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZXN1bHRQYXlsb2FkKTsKKyNlbHNlCisgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworI2VuZGlmCisgICAgcmV0dXJuIHNsb3dDYXNlczsg
ICAgCit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3Vu
ZGluZykKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1Qw
OworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIGVhcmx5
U2NyYXRjaCA9IHJlZ1QzOworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0
Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7CisjZW5kaWYK
KyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOworICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwg
YmFzZSk7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJ
Zk5vdEltbWVkaWF0ZUludGVnZXIoZWFybHlTY3JhdGNoKSk7CisjZWxzZQorICAgIGVtaXRMb2Fk
KHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKE5vdEVxdWFsLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSkpOworI2VuZGlmCisgICAgCisgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRp
bmcpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAg
ICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gs
IFRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgeG9y
MzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOworICAgICAgICBKdW1wIGNsYW1wZWQgPSBq
dW1wKCk7CisgICAgICAgIHRvb0JpZy5saW5rKHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigweGZmKSwgZWFybHlTY3JhdGNoKTsKKyAgICAgICAgY2xhbXBlZC5saW5rKHRoaXMpOwor
ICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgMjoKKyAgICAgICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChiYXNlLCBw
cm9wZXJ0eSwgVGltZXNUd28pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAg
ICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0Zv
dXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJl
Z1QxOworICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7CisjZWxzZQorICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsK
KyAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgbGF0
ZVNjcmF0Y2ggPSByZWdUMTsKKyNlbmRpZgorICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIGVhcmx5U2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVz
Y3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVz
Y3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CisgICAg
SnVtcCBkb3VibGVDYXNlID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoZWFybHlTY3Jh
dGNoKTsKKyAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwor
ICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihlYXJseVNjcmF0
Y2gpKTsKKyAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwor
ICAgIG1vdmVQdHJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOworICAgIHJlYWR5Lmxp
bmsodGhpcyk7CisjZWxzZQorICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlT
Y3JhdGNoKTsKKyAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgbGF0ZVNj
cmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAo
KTsKKyAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcp
KSk7CisgICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJl
Z1QwKTsKKyAgICByZWFkeS5saW5rKHRoaXMpOworI2VuZGlmCisgICAgCisgICAgc3dpdGNoIChl
bGVtZW50U2l6ZSkgeworICAgIGNhc2UgNDoKKyAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQo
ZnBSZWdUMCwgZnBSZWdUMCk7CisgICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4
KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4
OgorICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHks
IFRpbWVzRWlnaHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JB
U0goKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBA
CiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgpAQCAtMjQxNCw2ICsyNDE1LDMwIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKK3N0
YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKK3sKKyAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQu
aXNTdHJpbmcoKSkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFz
Q2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHkoY2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3JpcHQp
LT52YWx1ZShjYWxsRnJhbWUpKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7CisgICAgICAgIHVpbnQzMl90IGkgPSBz
dWJzY3JpcHQuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAm
JiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgeworICAgICAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZykpOworICAgICAgICAg
ICAgcmV0dXJuIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsKKyAg
ICB9CisKKyAgICBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpCisgICAgICAgIHJldHVybiBiYXNlVmFs
dWUuZ2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwo
KSktPnByaXZhdGVOYW1lKCkpOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUs
IHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKKyAgICBy
ZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKK30KKwogREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWwpCiB7CiAgICAgU1RVQl9J
TklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMjQyMywzNSArMjQ0OCw1NiBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0
ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKICAgICAKLSAgICBpZiAoTElLRUxZKGJh
c2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKLSAgICAgICAgaWYg
KEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHko
Y2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkgewotICAg
ICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJz
Y3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXpp
bmcgdGhpcyBhdCBhbGwuCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNl
VmFsdWUpOworICAgICAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7CisKKyAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZH
Q29kZSgpOworICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBCeVZhbElu
Zm8mIGJ5VmFsSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhieXRl
Y29kZU9mZnNldCAtIDEpOworICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7
CisgICAgICAgIAorICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0
cnVjdHVyZSgpKSkgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAg
ICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUo
b2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFs
SW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgm
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbElu
Zm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICAgICAgZGlk
T3B0aW1pemUgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3Jp
cHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBhc1N0
cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewotICAgICAgICAgICAgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FE
RFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZykpOwotICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJh
bWUsIGkpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICAKKyAgICAgICAgaWYgKCFk
aWRPcHRpbWl6ZSkgeworICAgICAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0
aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAg
ICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRv
IHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0CisgICAgICAgICAgICAvLyB0aGF0IGludGVy
Y2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLiBG
b3IgY2FzZXMKKyAgICAgICAgICAgIC8vIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0
aW5nIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZgorICAgICAgICAg
ICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBt
YXkgYmUgcG9seW1vcnBoaWMuCisgICAgICAgICAgICBpZiAoKytieVZhbEluZm8uc2xvd1BhdGhD
b3VudCA+PSAxMAorICAgICAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybygpKSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1p
emUuCisgICAgICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCkpOworICAgICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2Fs
bGVyVG9GdW5jdGlvbihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X3ZhbF9nZW5lcmljKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9Cisg
ICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9n
ZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAg
IGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2Vs
bCgpKS0+cHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShj
YWxsRnJhbWUpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1l
LCBwcm9wZXJ0eSk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIAorICAgIEpT
VmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
U1RVQl9SRVRVUk5fQUREUkVTUyk7CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KICAgICAKQEAgLTI1MDIsMjMgKzI1NDgs
MTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2J5X3ZhbCkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0KLSAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBz
dGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOwotCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigp
OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogICAgICAgICAgICAgaWYgKG9iamVj
dC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5k
ZXhRdWlja2x5KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb2JqZWN0
LT5zZXRJbmRleFF1aWNrbHkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGksIHZhbHVlKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtMjUyOCwxMSArMjU2NSw3
MyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAgIGJh
c2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFz
Q2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSwgdmFsdWUsIHNsb3QpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2Fs
bEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgICAgIGlmICghc3RhY2tGcmFtZS5nbG9i
YWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmlu
ZyB0aHJldyBhbiBleGNlcHRpb24uCisgICAgICAgIGlmICghY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhy
ZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgYmFzZVZhbHVl
LnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9
Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwpCit7CisgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJh
bWUuYXJnc1syXS5qc1ZhbHVlKCk7CisKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYg
c3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRp
bWl6aW5nIGF0IGFsbC4KKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CisgICAgICAgIGJvb2wgZGlkT3B0aW1pemUgPSBmYWxzZTsKKworICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdD
b2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgICAgIEJ5VmFsSW5m
byYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVj
b2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3Ry
dWN0dXJlKCkpKSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAg
ICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShv
YmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJ
bmZvLmFycmF5TW9kZSkgeworICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5m
bywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBkaWRP
cHRpbWl6ZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWRpZE9wdGltaXplKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3Jl
IHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQorICAgICAg
ICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3ZSBmYWlsZWQg
dG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QKKyAgICAgICAgICAgIC8vIHRoYXQgaW50
ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMu
IEZvciBjYXNlcworICAgICAgICAgICAgLy8gd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNl
cHRpbmcgb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mCisgICAgICAg
ICAgICAvLyBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFs
IG1heSBiZSBwb2x5bW9ycGhpYy4KKyAgICAgICAgICAgIGlmICgrK2J5VmFsSW5mby5zbG93UGF0
aENvdW50ID49IDEwCisgICAgICAgICAgICAgICAgfHwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRp
bWl6ZS4KKyAgICAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSk7CisgICAgICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtD
YWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9w
dXRfYnlfdmFsX2dlbmVyaWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7
CisKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOworfQorCitERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFj
a0ZyYW1lLmNhbGxGcmFtZTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJn
c1sxXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5q
c1ZhbHVlKCk7CisgICAgCisgICAgcHV0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcwLDYgKzM3MCw3IEBAIGV4dGVybiAiQyIgewogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVC
IGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3Ry
aW5nX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2Rl
ZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CisgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9i
eV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIg
Y3RpX29wX2luKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29k
ZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pbnN0YW5jZW9mKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwpAQCAtNDQ2LDYgKzQ0Nyw3IEBAIGV4dGVybiAiQyIgewogICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYyhTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlf
aW5kZXgoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfcHV0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0
X2dldHRlcl9zZXR0ZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2dsb2JhbF92YXJfY2hlY2soU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZf
YWN0aXZhdGlvbihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTE3
MSw3ICsxMTcxLDcgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAgbG9hZHAgSlND
ZWxsOjptX3N0cnVjdHVyZVt0M10sIHQyCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MSwgdDApCiAg
ICAgYnRpeiB0MiwgSXNBcnJheSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93Ci0gICAgYnRpeiB0Miwg
SGFzQXJyYXlTdG9yYWdlLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKKyAgICBidGl6IHQyLCAoSGFz
Q29udGlndW91cyB8IEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpLCAu
b3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2FkaSA0W1BDXSwgdDEKICAgICBsb2FkcCAzMltQ
Q10sIHQyCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKQEAgLTEzMDYs
MTAgKzEzMDYsMjEgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZGkgMTJbUENdLCB0
MwogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQzLCBJbnQzMlRhZywgdDEsIC5v
cEdldEJ5VmFsU2xvdykKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0Mwor
ICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cworICAg
IAorICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZGkgVGFnT2Zmc2V0
W3QzLCB0MSwgOF0sIHQyCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldFt0MywgdDEsIDhdLCB0MQor
ICAgIGptcCAub3BHZXRCeVZhbERvbmUKKworLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzOgorICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UsIC5vcEdl
dEJ5VmFsU2xvdwogICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93Ci0gICAgbG9hZGkg
NFtQQ10sIHQwCiAgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0
MywgdDEsIDhdLCB0MgogICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBQYXlsb2Fk
T2Zmc2V0W3QzLCB0MSwgOF0sIHQxCisKKy5vcEdldEJ5VmFsRG9uZToKKyAgICBsb2FkaSA0W1BD
XSwgdDAKICAgICBiaWVxIHQyLCBFbXB0eVZhbHVlVGFnLCAub3BHZXRCeVZhbFNsb3cKICAgICBz
dG9yZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQwLCA4XQogICAgIHN0b3JlaSB0MSwgUGF5bG9hZE9m
ZnNldFtjZnIsIHQwLCA4XQpAQCAtMTM4MywyOSArMTM5NCw1MiBAQCBfbGxpbnRfb3BfcHV0X2J5
X3ZhbDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAgICBsb2FkcCAx
NltQQ10sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFz
QXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaSA4W1BDXSwgdDAKLSAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgSW50MzJUYWcsIHQyLCAub3BQdXRCeVZh
bFNsb3cpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDAsIEludDMyVGFnLCB0
MywgLm9wUHV0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0s
IHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBiaWVxIEFycmF5U3Rv
cmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDAsIHQyLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9w
UHV0QnlWYWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaSAxMltQQ10s
IHQzCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcodDMsIHQxLCB0MykKLSAgICB3cml0
ZUJhcnJpZXIodDEsIHQzKQotICAgIHN0b3JlaSB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciAr
IFRhZ09mZnNldFt0MCwgdDIsIDhdCi0gICAgc3RvcmVpIHQzLCBBcnJheVN0b3JhZ2U6Om1fdmVj
dG9yICsgUGF5bG9hZE9mZnNldFt0MCwgdDIsIDhdCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91
cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRl
eGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5
VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3Vs
dDoKKyAgICBsb2FkaSAxMltQQ10sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWco
dDIsIHQxLCB0MikKKyAgICB3cml0ZUJhcnJpZXIodDEsIHQyKQorICAgIHN0b3JlaSB0MSwgVGFn
T2Zmc2V0W3QwLCB0MywgOF0KKyAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbdDAsIHQzLCA4
XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzOgor
ICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
dmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgaWYgVkFMVUVfUFJPRklMRVIK
KyAgICAgICAgbG9hZHAgMTZbUENdLCB0MQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxl
OjptX21heVN0b3JlVG9Ib2xlW3QxXQorICAgIGVuZAorICAgIGFkZGkgMSwgdDMsIHQyCisgICAg
c3RvcmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVi
bGljTGVuZ3RoW3QwXQorICAgIGptcCAub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdAor
Cisub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdl
LCAub3BQdXRCeVZhbFNsb3cKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAg
IGJpZXEgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDMsIDhdLCBFbXB0
eVZhbHVlVGFnLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5Cisub3BQdXRCeVZhbEFycmF5
U3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlMlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisg
ICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0Mywg
OF0KKyAgICBzdG9yZWkgdDIsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0
W3QwLCB0MywgOF0KICAgICBkaXNwYXRjaCg1KQogCi0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0
QnlWYWxBcnJheVN0b3JhZ2VFbXB0eToKICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBz
dG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QzXQorICAgICAgICBsb2Fk
cCAxNltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVU
b0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRkaSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVz
SW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAg
IGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1Ymxp
Y0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKICAgICBhZGRp
IDEsIHQyLCB0MQogICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJl
c3VsdAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1
dEJ5VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFs
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE4LDcgKzEwMTgsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBsb2FkcCBK
U0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQxLCB0MCkK
ICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBidGl6IHQy
LCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXogdDIsIChI
YXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSks
IC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAg
bG9hZHAgNjRbUEIsIFBDLCA4XSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlb
dDNdLCB0MApAQCAtMTE0NywxNCArMTE0NywyNSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAg
ICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQxKQog
ICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFn
ZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0
MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4aTJwIHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0
OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0
QnlWYWxOb3RDb250aWd1b3VzCisKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwor
ICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCisgICAgbG9hZHAgW3QzLCB0MSwgOF0sIHQyCisg
ICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisu
b3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwg
SGFzU2xvd1B1dEFycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1z
aXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNd
LCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRw
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6IHQyLCAub3BH
ZXRCeVZhbFNsb3cKKworLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcCB0MiwgW2NmciwgdDAs
IDhdCiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4XSwgdDAKICAgICB2YWx1ZVByb2ZpbGUodDIsIHQw
KQpAQCAtMTIyNiwyOSArMTIzNyw1MSBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBsb2Fk
cCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0
MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQwKQotICAgIGJ0aXogdDIsIEhhc0FycmF5U3Rv
cmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9hZGlzIDE2W1BCLCBQQywgOF0sIHQwCi0gICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MiwgLm9wUHV0QnlWYWxTbG93KQotICAg
IHN4aTJwIHQyLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDMsIC5v
cFB1dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0MywgdDMKICAgICBsb2FkcCBKU09iamVjdDo6bV9i
dXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAg
YnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0sIC5vcFB1dEJ5VmFsRW1wdHkK
LS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0g
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MywgdDEpCisgICAgYnRpeiB0MiwgSGFzQ29udGln
dW91cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisgICAgCisgICAgYmlhZXEgdDMsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAu
b3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kcworLm9wUHV0QnlWYWxDb250aWd1b3VzU3Rv
cmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZSh0MiwgdDEpCisgICAgd3JpdGVCYXJyaWVyKHQxKQorICAgIHN0b3JlcCB0MSwg
W3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQorCisub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRP
ZkJvdW5kczoKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVF
X1BST0ZJTEVSCisgICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQyCisgICAgICAgIHN0b3Jl
YiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDJdCisgICAgZW5kCisgICAgYWRk
aSAxLCB0MywgdDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGln
dW91c1N0b3JlUmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQy
LCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9m
IEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9w
UHV0QnlWYWxTbG93CisgICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0s
IC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3Rv
cmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZSh0MiwgdDEpCiAgICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0b3JlcCB0MSwg
QXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdCisgICAgc3RvcmVwIHQxLCBBcnJheVN0
b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0KICAgICBkaXNwYXRjaCg1KQogCi0ub3BQdXRCeVZh
bEVtcHR5OgorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eToKICAgICBpZiBWQUxVRV9QUk9G
SUxFUgotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3Qz
XQorICAgICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MQorICAgICAgICBzdG9yZWIgMSwgQXJy
YXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QxXQogICAgIGVuZAogICAgIGFkZGkgMSwgQXJy
YXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1
dEJ5VmFsU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEsIHQyLCB0MQorICAgIGJpYiB0MywgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5v
cFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKKyAgICBhZGRpIDEsIHQzLCB0MQogICAg
IHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1
YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGptcCAu
b3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw5IEBAIGVuZAogCiAj
IENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCiBjb25zdCBJc0FycmF5
ID0gMQorY29uc3QgSGFzQ29udGlndW91cyA9IDIKIGNvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgK
LWNvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorY29uc3QgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSA9
IDE2CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252
ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGkKIAogaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZv
clZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKIHsKLSAgICByZXR1
cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0
eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworICAgIHJldHVybiBsZW5ndGggLyBtaW5EZW5zaXR5
TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CiB9CiAKIGlubGluZSBJbmRleGluZ0hlYWRlciBpbmRl
eGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDggQEAg
c3RhdGljIHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbQogLy8gY3VycmVudENvdW50
KSB3aWxsIGJlIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgYXMgYXBwcm9wcmlhdGU7IGlu
IHRoZQogLy8gY2FzZSBvZiBzaGlmdCB0aGlzIG11c3QgYmUgcmVtb3ZpbmcgdmFsdWVzLCBpbiB0
aGUgY2FzZSBvZiB1bnNoaWZ0IHRoaXMKIC8vIG11c3QgYmUgaW50cm9kdWNpbmcgbmV3IHZhbHVl
cy4KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQg
cmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlPEpTQXJyYXk6OlNoaWZ0Q291
bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgordm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5z
aWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQoY3VycmVu
dENvdW50ID4gcmVzdWx0Q291bnQpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gY3VycmVudENvdW50
IC0gcmVzdWx0Q291bnQ7CkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNo
aWZ0KEV4ZWNTdGF0ZSogZXhlYwogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJh
eS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFzQXJyYXkodGhpc09iaiktPnNoaWZ0Q291bnQoZXhl
YywgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3Ro
ICYmIGFzQXJyYXkodGhpc09iaiktPnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhl
YWRlciwgY291bnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjMxLDcgKzIz
Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAg
fQogICAgIH0KIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50
LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJh
eTo6U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHVuc2hpZnQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJy
ZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
QVNTRVJUKHJlc3VsdENvdW50ID4gY3VycmVudENvdW50KTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IHJlc3VsdENvdW50IC0gY3VycmVudENvdW50OwpAQCAtMjQ3LDEwICsyNDksMTAgQEAgc3RhdGlj
IGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBleAogCiAgICAgaWYgKGlzSlNBcnJheSh0
aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7Ci0g
ICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT51bnNoaWZ0Q291
bnQoZXhlYywgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0g
bGVuZ3RoICYmIGFycmF5LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRl
ciwgY291bnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIAogICAgIGZvciAo
dW5zaWduZWQgayA9IGxlbmd0aCAtIGN1cnJlbnRDb3VudDsgayA+IGhlYWRlcjsgLS1rKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGZyb20gPSBrICsgY3VycmVudENvdW50IC0gMTsKICAgICAgICAgdW5z
aWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQgLSAxOwpAQCAtNTI2LDcgKzUyOCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgYXJyYXktPnB1c2go
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogICAgIH0KLQorICAgIAogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJ
bnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC01NDQsNiArNTQ2
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KKyAgICAKICAgICBKU1ZhbHVlIG5ld0xlbmd0aChz
dGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZXhlYy0+
YXJndW1lbnRDb3VudCgpKSk7CiAgICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgbmV3TGVuZ3RoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG5ld0xlbmd0aCk7CkBAIC02MDAsNyArNjAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCAwKTsKLSAg
ICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMSwgMCwgbGVuZ3RoKTsKKyAgICAgICAgc2hp
ZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBs
ZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBwdXRQcm9wZXJ0
eShleGVjLCB0aGlzT2JqLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihs
ZW5ndGggLSAxKSk7CkBAIC03MzAsNyArNzMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpKTsK
IApAQCAtNzYyLDExICs3NjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogCiAgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChhZGRpdGlvbmFsQXJncyA8IGRl
bGV0ZUNvdW50KSB7Ci0gICAgICAgIHNoaWZ0KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVD
b3VudCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7CisgICAgICAgIHNoaWZ0PEpTQXJyYXk6OlNo
aWZ0Q291bnRGb3JTcGxpY2U+KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRk
aXRpb25hbEFyZ3MsIGxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fSBlbHNlIGlmIChhZGRpdGlvbmFsQXJncyA+IGRlbGV0ZUNvdW50KSB7Ci0gICAgICAgIHVuc2hp
ZnQoZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVu
Z3RoKTsKKyAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihleGVj
LCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgpOwog
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KQEAgLTc5MSw3ICs3OTQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBu
ckFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJncykgewotICAgICAg
ICB1bnNoaWZ0KGV4ZWMsIHRoaXNPYmosIDAsIDAsIG5yQXJncywgbGVuZ3RoKTsKKyAgICAgICAg
dW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDAs
IG5yQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24g
MTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihi
YXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOwogICAgIH0KICAgICAK
KyAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5vdCBqdXN0IGJlY2F1c2UgaXQncyBoYW5keSwg
YnV0IHRvIHJlbWluZCB5b3UgdGhhdAorICAgIC8vIHRoZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJm
bGllcyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICBzdGF0aWMgQnV0dGVy
Zmx5KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCdXR0ZXJmbHkqPihwdHIpOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBwb2lu
dGVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7IH0KKyAgICAKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFk
ZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5k
ZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9
CkBAIC03MCw5ICs3OSwyMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGlu
ZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7
IH0KICAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KICAgICBDb25zdFByb3BlcnR5U3RvcmFn
ZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9w
ZXJ0eVN0b3JhZ2UoKTsgfQorICAgIAorICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0
dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgpOyB9CisgICAgdWludDMyX3QgdmVj
dG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0K
KyAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRl
cigpLT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgo
dWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVl
KTsgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXls
b2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0
b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3Jh
Z2U+KCk7IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVy
biBpbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+ID4oKTsgfQorICAgIAorICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21Db250aWd1b3VzKFdyaXRlQmFycmllcjxVbmtub3duPiog
Y29udGlndW91cykKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRl
cmZseSo+KGNvbnRpZ3VvdXMpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KICAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0
eVN0b3JhZ2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpy
ZXNpemVBcnJheQogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJ
bmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhh
c0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKG51
bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7
CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdy
aXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCkBAIC0xNjMsNyAr
MTYzLDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXpl
X3QgbnVtYmVyT2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50
IGluIHVuc2hpZnQoKSwgYWJvdmUuCiAgICAgbWVtbW92ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAg
KzQyLDE3IEBAIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXQKIAogaW5s
aW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAg
ICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCghaGFzSW5kZXhl
ZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
ZGV4aW5nVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgY2hhciogaW5kZXhpbmdU
eXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgY2hh
ciByZXN1bHRbMTI4XTsKKyAgICBjb25zdCBjaGFyKiBiYXNpY05hbWU7CisgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgYmFzaWNOYW1lID0gIk5vbkFycmF5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25B
cnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQ29u
dGlndW91cyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgor
ICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgYmFzaWNOYW1lID0g
IkFycmF5Q2xhc3MiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3Vv
dXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFt
ZSA9ICJBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYmFzaWNOYW1lID0gIlVua25vd24hIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIHNucHJpbnRmKAorICAgICAgICByZXN1bHQsIHNpemVvZihyZXN1bHQpLCAiJXMlcyIs
IGJhc2ljTmFtZSwKKyAgICAgICAgKGluZGV4aW5nVHlwZSAmIE1heUhhdmVJbmRleGVkQWNjZXNz
b3JzKSA/ICJ8TWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMiIDogIiIpOworICAgIAorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDE5ICszMiwyMSBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAv
LyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBIYXNDb250aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIAogLy8g
QWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRo
ZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRp
cmVjdGx5Lgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAg
ICAgPSAzMjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdl
IGluIHRoZSBwYXN0Lgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFj
Y2Vzc29ycyAgPSA2NDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRB
Y2Nlc3NvcnMgID0gMzI7CiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9
IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAg
ICAgICAgPSBIYXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2UgICAgICAgID0gSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1
dEFycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAg
ICAgICAgICAgICAgICAgICA9IElzQXJyYXk7IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJy
YXkiIGJ1dCB0aGlzIHdvdWxkIGxlYWQgdG8gZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9u
Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAg
ICAgID0gSXNBcnJheSB8IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9y
YWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlICAgID0gSXNBcnJheSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU0
LDEwIEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25B
cnJheTogICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmlu
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGln
dW91czogICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmlu
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRo
U2xvd1B1dEFycmF5U3RvcmFnZQpAQCAtNzYsNiArODIsMTEgQEAgc3RhdGljIGlubGluZSBib29s
IGhhc0luZGV4aW5nSGVhZGVyKEluZAogICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0
eXBlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGln
dW91cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSkKIHsKICAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0Fy
cmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKQEAgLTg2LDYgKzk3LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNob3VsZFVzZVNsb3dQdXQoSW5kZQogICAgIHJldHVybiAhIShp
bmRleGluZ1R5cGUgJiBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciog
aW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9z
c2libGUgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAg
ICAgICAgICA9IDMxOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOCBAQCBib29sIEpT
QXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVu
Z3RoLCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93
RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3Ro
IGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIg
dGhlIGZvbGxvd2luZyAnaWYnLgpAQCAtNDAyLDEyICs0MDEsNzEgQEAgYm9vbCBKU0FycmF5Ojpz
ZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpT
QXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgaWYgKCFuZXdMZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5
U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9u
LAorICAgICAgICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+
Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3Vv
dXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBpZiAobmV3
TGVuZ3RoID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlz
IGNhc2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBkbyBmYXN0IHB1c2guCisgICAgICAgICAgICB8fCAo
bmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKKyAgICAgICAgICAgICAgICAmJiAh
aXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIGNvdW50RWxlbWVudHNJbkNvbnRpZ3Vv
dXMobV9idXR0ZXJmbHkpKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRp
b24sCisgICAgICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAgICBlbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3TGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3RoOykKKyAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChuZXdMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNz
OgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAgY2FzZSBBcnJh
eVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChs
ZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOworICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3Ro
XS5jbGVhcigpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5n
dGgpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAtNDMxLDI2ICs0ODksMjggQEAgSlNWYWx1ZSBK
U0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgLy8gTGV0IGVsZW1lbnQg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBP
IHdpdGggYXJndW1lbnQgaW5keC4KLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMs
IGluZGV4KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICAgICAg
aWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsK
LSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0gICAgICAgIC8v
IENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxl
bmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgICAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRy
dWUpOwotICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlMZW5n
dGgoKTsKKyAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtb
R2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBpbmR4LgorICAgIEpTVmFs
dWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAvLyBDYWxsIHRoZSBbW0Rl
bGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUu
CisgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Cisg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgLy8gQ2FsbCB0aGUg
W1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5k
eCwgYW5kIHRydWUuCisgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAvLyBS
ZXR1cm4gZWxlbWVudC4KKyAgICByZXR1cm4gZWxlbWVudDsKIH0KIAogLy8gUHVzaCAmIHB1dElu
ZGV4IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCB3aXRoIHR3byBzbWFsbCBkaWZmZXJlbmNlcy4KQEAg
LTQ2NCw2ICs1MjQsMjYgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29u
dGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsK
KyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3Ro
LCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAi
SW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3Vz
V2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgbGVuZ3RoLCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTog
ewogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgaWYgKGF0
dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSkpIHsKQEAgLTUwNSwxMiArNTg1LDggQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYQogICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCitib29sIEpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKGNvdW50
ID4gMCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
c3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAg
CkBAIC01NjUsMTAgKzY0MSw2MSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRl
KiBleGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdp
dGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCBjb3VudCkKK3sKKyAgICBBU1NFUlQoY291bnQgPiAwKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOworICAgICAgICAK
KyAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRo
ZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbworICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mg
bm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCAr
IGNvdW50KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAgICAgICAgICAgcmV0dXJuIHNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgLy8gU3Rvcmlu
ZyB0byBhIGhvbGUgaXMgZmluZSBzaW5jZSB3ZSdyZSBzdGlsbCBoYXZpbmcgYSBnb29kIHRpbWUu
IEJ1dCByZWFkaW5nCisgICAgICAgICAgICAvLyBmcm9tIGEgaG9sZSBpcyB0b3RhbGx5IG5vdCBm
aW5lLCBzaW5jZSB3ZSBtaWdodCBoYXZlIHRvIHJlYWQgZnJvbSB0aGUgcHJvdG8KKyAgICAgICAg
ICAgIC8vIGNoYWluLgorICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpICsgY291bnRdLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkg
eworICAgICAgICAgICAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0aCBpcyB0byBlbnN1
cmUgdGhhdCB3ZSBkb24ndCBtYWtlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gbWlzdGFr
ZSBpbiB0aGUgZnV0dXJlOiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSgpIGNhbid0IGRvIGFu
eXRoaW5nCisgICAgICAgICAgICAgICAgLy8gYWJvdXQgaG9sZXMgKGF0IGxlYXN0IGZvciBub3cp
LCBidXQgaXQgY2FuIGRldGVjdCB0aGVtIHF1aWNrbHkuIFNvCisgICAgICAgICAgICAgICAgLy8g
d2UgY29udmVydCB0byBhcnJheSBzdG9yYWdlIGFuZCB0aGVuIGFsbG93IHRoZSBhcnJheSBzdG9y
YWdlIHBhdGggdG8KKyAgICAgICAgICAgICAgICAvLyBmaWd1cmUgaXQgb3V0LgorICAgICAgICAg
ICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3Vu
dCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5j
ZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3VuZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCisgICAg
ICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0
aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgorICAgICAgICAgICAgLy8gYmFycmllci4KKyAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBv
bGRMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
Y2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
b2xkTGVuZ3RoIC0gY291bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFnZSgpKTsK
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB1bnNoaWZ0IGNhbiBi
ZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4gICAgCi1ib29sIEpTQXJyYXk6OnVuc2hpZnRD
b3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50
KQorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSog
c3RvcmFnZSkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3Jh
Z2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5s
ZW5ndGgoKTsKIAogICAgIEFTU0VSVChzdGFydEluZGV4IDw9IGxlbmd0aCk7CkBAIC02MTAsNiAr
NzM3LDQ3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291
bnQpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIEFycmF5Q2xhc3M6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhbmRsZSB0aGlzLiBCdXQgaXQg
c2hvdWxkbid0IGV2ZXIgY29tZSB1cCwgc28gd2Ugd29uJ3QuCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVu
c2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0
aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbyBzbworICAgICAgICAvLyBvbmx5IGlmIGl0
J3Mgbm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5ndGggLSBzdGFydEluZGV4
ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENv
dW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGgg
KyBjb3VudCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7
IGktLSA+IHN0YXJ0SW5kZXg7KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVj
LCBzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aSArIGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBOT1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBh
cnQgb2YgdGhlIGFycmF5IHRoYXQgd2Ugc2hpZnRlZCBvdXQKKyAgICAgICAgLy8gb2YuIFRoaXMg
aXMgZmluZSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gc3RvcmUgb3ZlciB0aGF0
IGFyZWEsIGFuZAorICAgICAgICAvLyBpbiBjb250aWd1b3VzIG1vZGUgc3RvcmluZyBpbnRvIGEg
aG9sZSBpcyBndWFyYW50ZWVkIHRvIGJlaGF2ZSBleGFjdGx5IHRoZSBzYW1lCisgICAgICAgIC8v
IGFzIHN0b3Jpbmcgb3ZlciBhbiBleGlzdGluZyBlbGVtZW50LgorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
c3RhcnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
c3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZv
aWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEp
LT5hc051bWJlcigpOwpAQCAtNjI0LDYgKzc5Miw0NSBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0
cmluZ1BhaXJGb3JRU29ydChjCiAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUodmEtPnNlY29u
ZCwgdmItPnNlY29uZCk7CiB9CiAKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+
Cit2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2Fs
bERhdGEpCit7CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhDb250aWd1b3Vz
IHx8IGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIAorICAgIHVu
c2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICB1bnNpZ25lZCBuZXdSZWxl
dmFudExlbmd0aDsKKyAgICBjb21wYWN0Rm9yU29ydGluZzxpbmRleGluZ1R5cGU+KAorICAgICAg
ICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQsCisgICAgICAgIG5ld1JlbGV2YW50TGVuZ3Ro
KTsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGRhdGEgPSBpbmRleGluZ0RhdGE8
aW5kZXhpbmdUeXBlPigpOworICAgIAorICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRo
QXJyYXlTdG9yYWdlICYmIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3UmVsZXZhbnRMZW5ndGg7ICsraSkgeworICAgICAgICBp
ZiAoIWRhdGFbaV0uaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVy
cyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQorICAgICAgICByZXR1cm4gc29ydChleGVjLCBj
b21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgCisgICAgLy8gRm9yIG51
bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVy
Z2Vzb3J0LiBXZQorICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxp
dHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAgLy8gc2lkZS1lZmZlY3QgZnJv
bSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICBxc29y
dChkYXRhLCBuZXdSZWxldmFudExlbmd0aCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiks
IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAgIHJldHVybjsKK30KKwogdm9pZCBKU0FycmF5
Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBD
YWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VS
VCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CkBAIC02MzIsMTE3ICs4MzksMTI5IEBAIHZvaWQg
SlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKICAgICBjYXNlIEFycmF5Q2xhc3M6
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29t
cGFjdEZvclNvcnRpbmcoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICAgICAgc29ydE51bWVyaWNWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oZXhlYywgY29tcGFy
ZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghc3RvcmFnZS0+
bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51
bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAg
ICAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEpOwotICAgICAgICAKLSAgICAgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hp
Y2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAgICAgICAv
LyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdz
IG5vIHVzZXIgdmlzaWJsZQotICAgICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRo
ZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgICAgICBxc29ydChzdG9yYWdl
LT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVO
dW1iZXJzRm9yUVNvcnQpOwotICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgc29ydE51bWVyaWNWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVj
LCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIHJldHVybjsK
LSAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogfQogCi12b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUq
IGV4ZWMsIFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVu
Z3RoKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7Ci0gICAgCi0gICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xh
c3M6CisgICAgaWYgKCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8v
IENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZl
LCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAg
Ly8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNl
IHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKKyAg
ICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBz
b21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAg
IC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFr
aW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgogICAgICAgICAKLSAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZygpOwotICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIEFTU0VSVCgh
c3RvcmFnZS0+bV9zcGFyc2VNYXApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAg
ICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVu
c2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0Lgot
ICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcg
aXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBv
cmFyeQotICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBj
cmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0
IHJldHVybgotICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMs
IGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KLSAgICAg
ICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpOwotICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KKyAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMocmVsZXZhbnRMZW5n
dGgpOworICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAg
SGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIEhlYXA6
OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKICAgICAgICAgCi0gICAg
ICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAg
ICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIHZhbHVl
c1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAg
ICAgIH0KKyAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKSB7CisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBiZWdpbltpXS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgIGlzU29y
dGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5p
c1ByaW1pdGl2ZSgpOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1
ZXMgZXZlbiBhZnRlcgotICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2Vw
dGlvbi4KKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxs
IHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAvLyBhIHRvU3Ry
aW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgCi0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAg
ICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5l
KGV4ZWMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykK
KyAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lu
bGluZShleGVjKTsKICAgICAgICAgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ewotICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVl
cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBG
SVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWln
aHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAg
ICAgICAvLyB0aGFuIE8oTiBsb2cgTikuCisgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkg
c3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNv
cnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAvLyB0aGFuIE8oTiBsb2cgTikuCiAg
ICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQotICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzKQotICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZh
bHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWly
Rm9yUVNvcnQpOwotI2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1
bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KLSAgICAgICAgLy8gRUNN
QVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3Rp
Y2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBpZiAoaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzKQogICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUo
KSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7
CisgICAgZWxzZQorICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OworI2Vsc2UKKyAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlr
ZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMg
bm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJm
b3JtIGEgc3RhYmxlIHNvcnQuCisgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OwogI2VuZGlmCisgICAgCisgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQg
dGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCisgICAgLy8gaW5jcmVh
c2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1
ZXMuCisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZ2xvYmFsRGF0YSwgcmVsZXZh
bnRMZW5ndGgpOworICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSB0
b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3Rv
ciBzdG9yYWdlLAotICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUg
b3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICAgICAgaWYgKHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7Ci0gICAgICAgICAg
ICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBpZiAo
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpIHsKKyAgICAg
ICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVsZXZhbnRM
ZW5ndGgpOworICAgICAgICAgICAgYmVnaW4gPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkg
PCByZWxldmFudExlbmd0aCkKKyAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgo
cmVsZXZhbnRMZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
bGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJlZ2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBT
b3J0VmVjdG9yKCZ2YWx1ZXMpOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xh
c3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOwor
ICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3Ro
OworICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAg
ICAgICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOwog
ICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZh
bHVlcyk7CisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4o
CisgICAgICAgICAgICBleGVjLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3Ro
OworICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KAorICAg
ICAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLCBuZXdSZWxldmFudExlbmd0aCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAgICAgICAgIAor
ICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oCisgICAg
ICAgICAgICBleGVjLCBzdG9yYWdlLT5tX3ZlY3RvciwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MjgsMTA4ICsxMDQ3
LDExNiBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiAgICAgc3Rh
dGljIGhhbmRsZSBudWxsKCkgeyByZXR1cm4gMHg3RkZGRkZGRjsgfQogfTsKIAotdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxU
eXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCit0ZW1wbGF0ZTxJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0VmVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBD
YWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgp
KTsKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSk7CiAgICAgCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAg
ICBjYXNlIEFycmF5Q2xhc3M6Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBl
eGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4K
KyAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21w
YXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgogICAgICAgICAKLSAgICAgICAgLy8gVGhlIG1h
eGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFy
bHkgdXAgdG8gbm8gZ29vZAotICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQu
Ci0gICAgICAgIEFTU0VSVChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKLSAgICAgICAgaWYg
KGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAvLyBU
aGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMg
Y2xlYXJseSB1cCB0byBubyBnb29kCisgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2Vk
LgorICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKKyAgICBpZiAobV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKSwgYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKCFh
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwotICAgICAgICB1bnNpZ25lZCBub2RlQ291bnQg
PSB1c2VkVmVjdG9yTGVuZ3RoOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSByZWxl
dmFudExlbmd0aDxpbmRleGluZ1R5cGU+KCk7CisgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNl
ZFZlY3Rvckxlbmd0aDsKICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZUNvdW50KQotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0
ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOwotICAgICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOwotICAgICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKLSAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7CisgICAgQVZMVHJlZTxBVkxUcmVlQWJz
dHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBm
b3IgMl4zMSBpdGVtcworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7CisgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247Cisg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKKyAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKICAgICAgICAgCi0gICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpT
RnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgaWYgKGNhbGxUeXBlID09IENh
bGxUeXBlSlMpCisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0
UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0
aW9uKSwgMikpOwogICAgICAgICAKLSAgICAgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmICghdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1h
cCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAgICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRl
ciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1h
cCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVz
IHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCiAgICAgICAgIAotICAgICAgICB1
bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0g
MDsKKyAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1VbmRlZmlu
ZWQgPSAwOwogICAgICAgICAKLSAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdu
b3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0
aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCi0gICAgICAgIGZvciAoOyBudW1EZWZp
bmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgICAgICBpZiAo
bnVtRGVmaW5lZCA+IGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZp
bmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgIHRyZWUuaW5z
ZXJ0KG51bURlZmluZWQpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChp
ID4gYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVm
aW5lZCgpKQotICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
c1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Ci0gICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0
KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7Ci0gICAgICAg
ICAgICAgICAgfQorICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3Np
bmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3Ro
ZXIgb25lcyBpbnRvIHRoZSB0cmVlLgorICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgIGlmIChudW1EZWZpbmVkID4gbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEpTVmFs
dWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZF0uZ2V0KCk7Cisg
ICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Cisg
ICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIGlm
IChpID4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7
CisgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAg
ICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7
CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAg
ICAgKytudW1EZWZpbmVkOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQogICAgICAg
ICAKLSAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBu
dW1VbmRlZmluZWQ7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIWFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCk7CisgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmlu
ZWQgKyBudW1VbmRlZmluZWQ7CiAgICAgICAgIAotICAgICAgICAvLyBUaGUgYXJyYXkgc2l6ZSBt
YXkgaGF2ZSBjaGFuZ2VkLiAgRmlndXJlIG91dCB0aGUgbmV3IGJvdW5kcy4KLSAgICAgICAgdW5z
aWduZWQgbmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCA9IG1pbihhcnJheVN0b3JhZ2UoKS0+bGVuZ3Ro
KCksIGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgLy8gVGhlIGFycmF5IHNp
emUgbWF5IGhhdmUgY2hhbmdlZC4gIEZpZ3VyZSBvdXQgdGhlIG5ldyBib3VuZHMuCisgICAgdW5z
aWduZWQgbmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlw
ZT4oKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNo
b2xkID0gbWluKG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCBudW1EZWZpbmVkKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRW
ZWN0b3JMZW5ndGgsIG5ld1VzZWRWZWN0b3JMZW5ndGgpOwotICAgICAgICB1bnNpZ25lZCBjbGVh
ckVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIHVzZWRWZWN0
b3JMZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50
byBtX3N0b3JhZ2UuCi0gICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNv
bXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKLSAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0
KHRyZWUpOwotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c1RvRXh0cmFj
dFRocmVzaG9sZDsgKytpKSB7Ci0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJd
LnZhbHVlKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7IGkgPCB1bmRlZmluZWRFbGVtZW50c1Ro
cmVzaG9sZDsgKytpKQotICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNl
dFVuZGVmaW5lZCgpOwotCi0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4g
dGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdW5k
ZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7IGkgPCBjbGVhckVsZW1lbnRzVGhyZXNob2xkOyArK2kp
Ci0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICB1
bnNpZ25lZCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZCA9IG1pbihtaW4obmV3ZXN0VXNlZFZl
Y3Rvckxlbmd0aCwgbnVtRGVmaW5lZCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzLnNpemUoKSkpOworICAgIHVuc2lnbmVkIHVuZGVmaW5lZEVsZW1lbnRz
VGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG5ld1VzZWRWZWN0b3JMZW5n
dGgpOworICAgIHVuc2lnbmVkIGNsZWFyRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNl
ZFZlY3Rvckxlbmd0aCwgdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgICAgIAorICAgIC8vIENvcHkg
dGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgIEFWTFRyZWU8QVZMVHJlZUFic3Ry
YWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKKyAgICBpdGVyLnN0YXJ0
X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c1RvRXh0
cmFjdFRocmVzaG9sZDsgKytpKSB7CisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+
KClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0
ZXJdLnZhbHVlKTsKKyAgICAgICAgKytpdGVyOworICAgIH0KKyAgICAvLyBQdXQgdW5kZWZpbmVk
IHZhbHVlcyBiYWNrIGluLgorICAgIGZvciAodW5zaWduZWQgaSA9IGVsZW1lbnRzVG9FeHRyYWN0
VGhyZXNob2xkOyBpIDwgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAg
aW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5zZXRVbmRlZmluZWQoKTsKKworICAgIC8v
IEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgaSA8IGNs
ZWFyRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5n
VHlwZT4oKVtpXS5jbGVhcigpOworICAgIAorICAgIGlmIChoYXNBcnJheVN0b3JhZ2UoaW5kZXhp
bmdUeXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENh
bGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkp
OworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBhcnJh
eVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNo
b2xkOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgc29ydFZlY3RvcjxB
cnJheVdpdGhDb250aWd1b3VzPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSk7CisgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICBzb3J0VmVjdG9yPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oZXhlYywgY29tcGFy
ZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAgICAgICByZXR1cm47Ci0gICAgfQog
ICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTkzOCwxMTMgKzExNjUsMTIxIEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmEKIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIHVuc2ln
bmVkIHZlY3RvckVuZDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICAK
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJy
YXlDbGFzczoKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENv
bnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOworICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICAgICAgdW5zaWduZWQgdmVj
dG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7
Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsg
KytpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07
Ci0gICAgICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9y
ICg7IGkgPCBzdG9yYWdlLT5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQo
Z2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENS
QVNIKCk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICBpZiAo
IXYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7Cisg
ICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJncy5h
cHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMo
RXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQog
eworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9y
OworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICAKICAgICBBU1NFUlQobGVuZ3RoID09IHRo
aXMtPmxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBj
YXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFn
ZS0+bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsr
aSkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwot
ICAgICAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+
c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICB2
ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWluKGxlbmd0
aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAg
aWYgKCF2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1l
bnQoaSwgdi5nZXQoKSk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAot
dW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoKQordGVtcGxhdGU8SW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcodW5zaWdu
ZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCkKIHsKICAgICBBU1NF
UlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0g
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCks
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB1bnNpZ25lZCBteVJlbGV2YW50TGVuZ3Ro
ID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdUeXBlPigpOworICAgIAorICAgIG51bURlZmluZWQg
PSAwOworICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CiAgICAgICAgIAotICAgICAgICB1
bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0g
MDsKKyAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IG15UmVsZXZhbnRMZW5ndGg7ICsrbnVtRGVmaW5l
ZCkgeworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251
bURlZmluZWRdLmdldCgpOworICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICg7IG51bURlZmlu
ZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgICAgIEpTVmFs
dWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAg
aWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAg
ICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZp
bmVkOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwotICAgICAg
ICAgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBteVJlbGV2YW50
TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5n
VHlwZT4oKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2Lmlz
VW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1E
ZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVt
VW5kZWZpbmVkOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1h
cCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwg
bmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0
b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5jbGVhcigpOwotICAgICAgICAKLSAgICAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9CiAgICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19CisgICAg
bmV3UmVsZXZhbnRMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgIAorICAg
IGlmIChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgQVNTRVJUKCFhcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG51
bURlZmluZWQ7IGkgPCBuZXdSZWxldmFudExlbmd0aDsgKytpKQorICAgICAgICBpbmRleGluZ0Rh
dGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldFVuZGVmaW5lZCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld1JlbGV2YW50TGVuZ3RoOyBpIDwgbXlSZWxldmFudExlbmd0aDsgKytpKQorICAgICAg
ICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLmNsZWFyKCk7CiAKKyAgICBpZiAoaGFz
QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpCisgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbmV3UmVsZXZhbnRMZW5ndGg7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw4ICs3MSw1NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBwdXNoKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgICAgICBKU1ZhbHVlIHBvcChFeGVj
U3RhdGUqKTsKIAotICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpOwotICAgICAgICBib29sIHVuc2hpZnRDb3VudChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAg
IGVudW0gU2hpZnRDb3VudE1vZGUgeworICAgICAgICAgICAgLy8gVGhpcyBmb3JtIG9mIHNoaWZ0
IGhpbnRzIHRoYXQgd2UncmUgZG9pbmcgcXVldWVpbmcuIFdpdGggdGhpcyBhc3N1bXB0aW9uIGlu
IGhhbmQsCisgICAgICAgICAgICAvLyB3ZSBjb252ZXJ0IHRvIEFycmF5U3RvcmFnZSwgd2hpY2gg
aGFzIHF1ZXVlIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICBTaGlmdENvdW50Rm9yU2hpZnQs
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBvZiBzaGlmdCBoaW50cyB0
aGF0IHdlJ3JlIGp1c3QgZG9pbmcgY2FyZSBhbmQgZmVlZGluZyBvbiBhbiBhcnJheSB0aGF0Cisg
ICAgICAgICAgICAvLyBpcyBwcm9iYWJseSB0eXBpY2FsbHkgdXNlZCBmb3Igb3JkaW5hcnkgYWNj
ZXNzZXMuIFdpdGggdGhpcyBhc3N1bXB0aW9uIGluIGhhbmQsCisgICAgICAgICAgICAvLyB3ZSB0
cnkgdG8gcHJlc2VydmUgd2hhdGV2ZXIgaW5kZXhpbmcgdHlwZSBpdCBoYXMgYWxyZWFkeS4KKyAg
ICAgICAgICAgIFNoaWZ0Q291bnRGb3JTcGxpY2UKKyAgICAgICAgfTsKKworICAgICAgICBib29s
IHNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgs
IHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHNoaWZ0Q291bnRG
b3JTcGxpY2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBj
b3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQW55SW5k
ZXhpbmdUeXBlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICB0
ZW1wbGF0ZTxTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KKyAgICAgICAgYm9vbCBzaGlm
dENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2hpZnRDb3VudE1vZGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNoaWZ0OgorICAgICAgICAgICAgICAgIHJldHVy
biBzaGlmdENvdW50Rm9yU2hpZnQoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAg
ICAgY2FzZSBTaGlmdENvdW50Rm9yU3BsaWNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlm
dENvdW50Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShl
eGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERh
dGEoKSkpOworICAgICAgICB9CisgICAgICAgIGJvb2wgdW5zaGlmdENvdW50Rm9yU3BsaWNlKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBl
KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTxT
aGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzaGlmdENvdW50TW9kZSkgeworICAgICAgICAg
ICAgY2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hp
ZnRDb3VudEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGNh
c2UgU2hpZnRDb3VudEZvclNwbGljZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENv
dW50Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJn
dW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwg
Q2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKQEAgLTk4LDE0ICsxNDQsNDAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxl
bmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaGlm
dENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4
LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJvb2wgc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2UodW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwog
Ci0gICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJs
ZSk7Ci0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpOworICAgICAg
ICBib29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKTsK
ICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCBib29sLCB1
bnNpZ25lZCk7CisKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4K
KyAgICAgICAgdm9pZCBzb3J0TnVtZXJpY1ZlY3RvcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbXBh
cmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSk7
CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgor
ICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiwgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICAKKyAg
ICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBz
b3J0VmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSwg
Y29uc3QgQ2FsbERhdGEmKTsKKworICAgICAgICBib29sIHNldExlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uLCBB
cnJheVN0b3JhZ2UqKTsKKyAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUq
LCBib29sIHdyaXRhYmxlKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JT
b3J0aW5nKCk7CisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cisg
ICAgICAgIHZvaWQgY29tcGFjdEZvclNvcnRpbmcodW5zaWduZWQmIG51bURlZmluZWQsIHVuc2ln
bmVkJiBuZXdSZWxldmFudExlbmd0aCk7CiAgICAgfTsKIAorICAgIGlubGluZSBCdXR0ZXJmbHkq
IGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIEluZGV4aW5nSGVhZGVyIGhlYWRlcjsK
KyAgICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aChzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVD
VE9SX0xFTikpOworICAgICAgICBoZWFkZXIuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAg
ICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBn
bG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBoZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwog
ICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7CiAgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCkBAIC0xMjEsNyArMTkzLDE1IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVh
dGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgYnV0dGVyZmx5
ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5n
dGgpOworICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxMZW5ndGggPCBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKKyAgICAgICAg
ICAgICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3Jl
YXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0K
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Fy
cmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0
dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAg
ICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMzMsMTUgKzIxMywyNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAg
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSks
ICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7Ci0gICAgICAgICpidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5n
dGgsIHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsK
LSAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKLSAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9p
ZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgICAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFs
TGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID0gMDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNWYWx1
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9y
LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTQ5LDE5ICs1MCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzCiAgICAgfTsKIAot
ICAgIGVudW0gVHlwZWRBcnJheVR5cGUgewotICAgICAgICBUeXBlZEFycmF5Tm9uZSwKLSAgICAg
ICAgVHlwZWRBcnJheUludDgsCi0gICAgICAgIFR5cGVkQXJyYXlJbnQxNiwKLSAgICAgICAgVHlw
ZWRBcnJheUludDMyLAotICAgICAgICBUeXBlZEFycmF5VWludDgsCi0gICAgICAgIFR5cGVkQXJy
YXlVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgICAgIFR5cGVk
QXJyYXlVaW50MzIsCi0gICAgICAgIFR5cGVkQXJyYXlGbG9hdDMyLAotICAgICAgICBUeXBlZEFy
cmF5RmxvYXQ2NAotICAgIH07Ci0KICAgICBjbGFzcyBKU0NlbGwgewogICAgICAgICBmcmllbmQg
Y2xhc3MgSlNWYWx1ZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAj
aW5jbHVkZSAiVGVybWluYXRvci5oIgogI2luY2x1ZGUgIlRpbWVvdXRDaGVja2VyLmgiCisjaW5j
bHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAj
aW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KQEAgLTEwOCwyNCArMTA5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRocmVh
ZFN0YWNrVHlwZVNtYWxsCiAgICAgfTsKIAotICAgIHN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciB7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgIDogbV9jbGFz
c0luZm8oMCkKLSAgICAgICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICAgICAs
IG1fbGVuZ3RoT2Zmc2V0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90IHN0b3JhZ2VP
ZmZzZXQsIHNpemVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgICAgICA6IG1fY2xhc3NJbmZvKGNs
YXNzSW5mbykKLSAgICAgICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0g
ICAgICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0gICAgICAgIHNp
emVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLSAg
ICB9OwotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7
CiAKQEAgLTQyOSw2ICs0MTIsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOwogICAgICAgICByZWdpc3RlclR5
cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbgorICAgICAgICAKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5Tm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZWRBcnJheUludDg6CisgICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9y
KCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJy
YXlVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAg
Y2FzZSBUeXBlZEFycmF5VWludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJy
YXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAg
ICAgICAgICAgICAgIHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0
NjRBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogCiAgICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsOCBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9jYWxsYmFj
a09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNr
T2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fYXJyYXlQ
cm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Ci0gICAgbV9hcnJh
eVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgp
LCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aENvbnRpZ3Vv
dXMpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2Up
KTsKICAgICBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSk7
CiAgICAgbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAKQEAgLTQxMCw2ICs0MTEs
NyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoSlNHbG9iCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgYWxsIEpTQXJyYXkgYWxsb2NhdGlvbnMgdGhhdCBsb2FkIHRoZSBhcHByb3By
aWF0ZSBzdHJ1Y3R1cmUgZnJvbQogICAgIC8vIHRoaXMgb2JqZWN0IG5vdyBsb2FkIGEgc3RydWN0
dXJlIHRoYXQgdXNlcyBTbG93UHV0LgogICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGdsb2JhbERh
dGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsKKyAgICBtX2FycmF5
U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0
cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFs
bCBvYmplY3RzIHRoYXQgaGF2ZSBpbmRleGVkIHN0b3JhZ2Ugc3dpdGNoIHRvIHRoZSBzbG93IGtp
bmQgb2YKICAgICAvLyBpbmRleGVkIHN0b3JhZ2UuCkBAIC00ODUsNiArNDg3LDcgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX25hbWVTY29wZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fYXJndW1lbnRzU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9hcnJheVN0cnVjdHVyZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmFtZVNjb3BlU3RydWN0
dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FyZ3VtZW50c1N0cnVjdHVy
ZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZTsgLy8g
VGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdl
IGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyAvLyBUaGlzIGdldHMgc2V0IHRv
IG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUg
YSBiYWQgdGltZS4KICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVj
dHVyZUZvclNsb3dQdXQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYm9vbGVh
bk9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWxs
YmFja0NvbnN0cnVjdG9yU3RydWN0dXJlOwpAQCAtMjY3LDcgKzI2OCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBTdHJ1Y3R1cmUqIG5hbWVTY29wZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZVNjb3BlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYXJn
dW1lbnRzU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVj
dHVyZVdpdGhBcnJheVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2FycmF5U3RydWN0dXJlV2l0
aEFycmF5U3RvcmFnZS5nZXQoKTsgfQogICAgICAgICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVj
dHVyZSgpIHsgcmV0dXJuICZtX2FycmF5U3RydWN0dXJlOyB9CisgICAgICAgIHZvaWQqIGFkZHJl
c3NPZkFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIHsgcmV0dXJuICZtX2FycmF5U3Ry
dWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGJvb2xlYW5PYmpl
Y3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQpAQCAtNDc5LDcgKzQ4Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0FycmF5Ojpj
cmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCks
IGluaXRpYWxMZW5ndGgpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgaW5pdGlhbExlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYID8gZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSA6IGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CiAgICAgfQogCiAgICAgaW5saW5l
IEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoID0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDI0ICsxMzEsNDAgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAgICAgKm5l
d0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5
IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgCisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGN1cnJlbnRTb3VyY2U7CisgICAgICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgICAg
ICAKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAg
ICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbmV3QnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCkpOwotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdl
dCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50
ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsr
KS0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Cisg
ICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKTsKICAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXApCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgm
dmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CkBAIC0xNTgsNiArMTc0LDkgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAKICAgICAgICAg
Ly8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5j
b250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAg
ICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQpAQCAt
MjM0LDYgKzI1MywyMCBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAg
IGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpAQCAtMzUxLDYgKzM4NCwxNiBAQCB2
b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUg
Pj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJs
aWNMZW5ndGgocHJvcGVydHlOYW1lICsgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTQ0Myw2ICs0ODYsMTEgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogdm9pZCBKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsK
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9y
cmlibHkgaW5lZmZpY2llbnQsIGFzIGl0IHdpbGwgcGVyZm9ybSB0d28gY29udmVyc2lvbnMuIFdl
IGNvdWxkIG9wdGltaXplCisgICAgICAgIC8vIHRoaXMgY2FzZSBpZiB3ZSBldmVyIGNhcmVkLgor
ICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFk
eUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjUsNiArNTEzLDI0IEBAIHZvaWQgSlNPYmplY3Q6
Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWMKICAgICBnbG9iYWxPYmplY3QoKS0+aGF2ZUFCYWRU
aW1lKGdsb2JhbERhdGEpOwogfQogCitXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTT2JqZWN0Ojpj
cmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKKyAgICBJ
bmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICBB
U1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBlKSk7Cisg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgQVNT
RVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxz
ZSwgMCwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCk7Cisg
ICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERh
dGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5
LT5jb250aWd1b3VzKCk7Cit9CisKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpOwpAQCAtNDgwLDcgKzU0Niw3IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7
CiAgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5k
ZXhCaWFzID0gMDsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+
c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwog
ICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ5MCwxNiArNTU2LDk2IEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKICAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7CiB9CiAKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiwgdW5zaWduZWQgbmVl
ZGVkTGVuZ3RoKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIAorICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXpl
ID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xv
YmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KG5lZWRlZExlbmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAgICAgICAgbmV3QnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBwcm9wZXJ0eVNpemUg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0
b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNl
dFZlY3Rvckxlbmd0aChuZWVkZWRMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPnNldExlbmd0aChw
dWJsaWNMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAg
bmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IHB1YmxpY0xlbmd0aDsgaS0tOykg
eworICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OworICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbmV3U3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3
U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFs
RGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiBuZXdTdG9yYWdl
OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRy
YW5zaXRpb24pCit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKK30K
KworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5
U3RvcmFnZVRyYW5zaXRpb24oKSk7Cit9CisKK1dyaXRlQmFycmllcjxVbmtub3duPiogSlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpIHx8IHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMo
Z2xvYmFsRGF0YSwgMCk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgQVNTRVJUKCFpbmRl
eGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVk
c1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0JMQU5LX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJz
ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBjcmVh
dGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogICAgICAgICAKICAgICBkZWZhdWx0
OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0OjplbnN1cmVJbmRl
eGVkU3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0
SW5kZXhpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhKS0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGlu
Z1Nob3VsZEJlU3BhcnNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKS0+YnV0dGVy
Zmx5KCk7CisgICAgICAgIHJldHVybiBCdXR0ZXJmbHk6OmZyb21Db250aWd1b3VzKGNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IH0KQEAgLTUwNyw2ICs2NTMsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJy
YXlTdG9yYQogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
IHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIGJlIG1hZGUgd2F5IG1vcmUgZWZmaWNpZW50LCBpZiB3ZSBjYXJlZC4KKyAgICAgICAgcmV0
dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhp
c3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSkpOworICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
KTsKICAgICAgICAgCkBAIC01MjYsNiArNjc2LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmVuc3VyZUFycmF5U3RvcmEKIHZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
LCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwpAQCAtNTY5LDggKzcyNCw3IEBAIHZvaWQg
SlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2JhbERhdGEKICAgICBpZiAoc2hvdWxkVXNlU2xv
d1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgbmV3U3RydWN0dXJlLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAg
IHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgIHN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKIH0KIAogYm9vbCBKU09iamVjdDo6c2V0UHJv
dG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKQEAgLTcwNCw2ICs4NTgsMTQgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEpTQwogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCiAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CiAgICAgICAgIApAQCAtODc3LDYgKzEwMzksMTcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+bV9idXR0ZXJm
bHk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICAKQEAgLTEyNjYsNiArMTQzOSwzNSBAQCBib29sIEpTT2JqZWN0Ojph
dHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluCiAgICAgcmV0dXJuIGFzT2JqZWN0KHByb3RvdHlwZVZh
bHVlKS0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShleGVj
LCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoIWlu
ZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgCisgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJl
LCB0aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3Ig
Z3JlYXRlciB0aGFuCisgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCisgICAg
QVNTRVJUKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAKKyAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgaWYg
KGkgPj0gTUFYX0FSUkFZX0lOREVYIC0gMQorICAgICAgICB8fCAoaSA+PSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYCisgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBjb3Vu
dEVsZW1lbnRzSW5Db250aWd1b3VzKG1fYnV0dGVyZmx5KSkpKSB7CisgICAgICAgIEFTU0VSVChp
IDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOwor
ICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7CisgICAg
ICAgIEFTU0VSVChpID49IGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSk7CisgICAgICAgIGFycmF5
U3RvcmFnZSgpLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZW5zdXJlQ29udGlndW91c0xlbmd0aChnbG9iYWxEYXRhLCBpICsgMSk7CisKKyAgICBBU1NF
UlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworfQorCiB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cs
IEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzQ4LDE3ICsxNTUwLDI5IEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7CiAg
ICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpIHsKLSAgICAgICAgICAgIHB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVl
LCBzaG91bGRUaHJvdywKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGks
IDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewotICAgICAgICAgICAgcHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUs
IHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAg
ICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAg
ICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxE
YXRhLCAwLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBpZiAo
c3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwg
Z2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxE
YXRhLCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQogICAgICAgICAKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwg
MCwgaSArIDEpKTsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7
CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMs
IGksIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTEzODQsOCAr
MTU5OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LQorICAgIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBv
dXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdl
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChhcnJheVN0b3JhZ2Uo
KSA9PSBzdG9yYWdlKTsKICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSB8
fCBhdHRyaWJ1dGVzKTsKICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwogCkBAIC0x
NDY3LDE0ICsxNjgzLDMyIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG8KICAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIGlmIChpbmRleGluZ1No
b3VsZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRlcykKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7Ci0gICAgICAgIGlmICghaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwotICAgICAgICAKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0
b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDE7CisgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0
cmlidXRlcykgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwg
YXR0cmlidXRlcywgbW9kZSwKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICB9
CisgICAgICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
CisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEs
IGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9i
YWxEYXRhLCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNj
ZXNzb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBh
dHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpKTsKKyAgICAgICAgfQorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29u
dGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVlKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC0xNDk5LDEyICsxNzMzLDcgQEAgQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIGVsc2UgaWYgKCFjdXJyZW50VmVjdG9yTGVuZ3Ro
KQogICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVuZ3RoLCBsYXN0
QXJyYXlTaXplKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZh
bGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyAr
IDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0g
KHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBp
cyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0
aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3Ro
ICYgMSk7CisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHRpbWVzVGhyZWVQbHVzT25lRGl2aWRl
ZEJ5VHdvKGRlc2lyZWRMZW5ndGgpOwogICAgIH0KIAogICAgIEFTU0VSVChpbmNyZWFzZWRMZW5n
dGggPj0gZGVzaXJlZExlbmd0aCk7CkBAIC0xNTI0LDkgKzE3NTMsMTAgQEAgQUxXQVlTX0lOTElO
RSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgICAgICB2ZWN0b3JMZW5ndGggPSAwOwog
ICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAt
MTUzNSw2ICsxNzY1LDE2IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5l
d1YKICAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBk
ZXNpcmVkTGVuZ3RoKTsKIH0KIAordW5zaWduZWQgSlNPYmplY3Q6OmNvdW50RWxlbWVudHNJbkNv
bnRpZ3VvdXMoQnV0dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgdW5zaWduZWQgbnVtVmFsdWVz
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBp
LS07KSB7CisgICAgICAgIGlmIChidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKKyAgICAgICAg
ICAgIG51bVZhbHVlcysrOworICAgIH0KKyAgICByZXR1cm4gbnVtVmFsdWVzOworfQorCiBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIG5ld0xlbmd0aCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUg
YXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9l
cyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcApAQCAtMTU0Myw2ICsx
NzgzLDEwIEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9y
YWdlKCk7CisgICAgCisgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
CisgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2ln
bmVkIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOwpAQCAtMTU3NCw2ICsxODE4LDIyIEBA
IGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAordm9pZCBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c0xlbmd0aFNsb3coSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0
aCA8IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgCisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3Rk
OjptaW4oCisgICAgICAgIGxlbmd0aCA8PCAxLAorICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKTsKKyAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB0cnVlLAorICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1Zl
Y3Rvckxlbmd0aCk7Cit9CisKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9y
YWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CkBAIC0xNjAyLDYgKzE4NjIs
MTcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+
PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgMCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0OCw4ICsxNDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtMTYxLDggKzE2Miw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDcsNiArMjA5LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldOwogICAgICAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAg
ICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0yMTgsNiArMjIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0yNjcsOSArMjczLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkKQEAgLTI4NSw4ICsyOTIs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTI5NiwxNSArMzA0LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHNldEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgaWYgKGkg
Pj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBtX2J1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgICAg
IGlmICgheCkgewotICAgICAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAg
ICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsKKyAgICAgICAgICAgICAgICB4LnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZCkgewogICAgICAg
ICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzE1LDYgKzMz
MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CkBAIC0zMzEsNiAr
MzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKQEAgLTM0NCw2ICsz
NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOwpAQCAtNTQxLDYg
KzU2NSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gZm9vLT5hdHRlbXB0VG9JbnRl
cmNlcHRQdXRCeUluZGV4T25Ib2xlKC4uLik7CiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJj
ZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgMCBpZiBjb250aWd1b3VzIHN0b3JhZ2UgY2Fu
bm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQorICAgICAgICAvLyBpbmRleGluZyBzaG91
bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91
cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAg
IAogICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBp
dCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCiAgICAgICAgIC8vIHRoaXMgaWYgeW91J3JlIGFib3V0
IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhlCiAgICAgICAg
IC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdlLCBpZiBpdCBk
aWRuJ3QgaGF2ZSBpdApAQCAtNTUzLDYgKzU4NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOwogICAgICAg
ICB9CiAgICAgICAgIAorICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKExJS0VM
WShoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgp
CkBAIC02MTUsMTEgKzY1NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBBcnJheVN0
b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5p
dGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVk
ZWRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYpOwogICAgICAgICAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CiAgICAg
ICAgIAogICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsK
IAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0
aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
KTsKICAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3csIEFycmF5U3RvcmFnZSopOwogCiAgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKQEAgLTYzMCw2ICs2Nzcs
NTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbm90aWZ5UHJlc2VuY2VPZkluZGV4
ZWRBY2Nlc3NvcnMoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBib29sIGF0dGVt
cHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0
aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2tseSB0byBzdWNjZWVkIGFuZCB5b3UncmUgc3Vy
ZSB0aGF0CisgICAgICAgIC8vIHRoZSBhcnJheSBpcyBjb250aWd1b3VzLgorICAgICAgICB2b2lk
IGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJS
QVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgZW5zdXJlQ29u
dGlndW91c0xlbmd0aFNsb3coZ2xvYmFsRGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKKyAgICAg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMo
QnV0dGVyZmx5KiBidXR0ZXJmbHkpOworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBpbmRl
eGluZ0RhdGEoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkg
eworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3I7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGU+CisgICAgICAgIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWluKAorICAgICAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTY2NCw3ICs3NjEsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRh
Jik7CiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2Jh
bERhdGEmKTsKKyAgICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coSlNH
bG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgQnV0dGVyZmx5
KiBtX2J1dHRlcmZseTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFs
dWUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgSlNW
YWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4ZWMKIAogY2hhciogSlNWYWx1ZTo6ZGVzY3Jp
cHRpb24oKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDEyODsKKyAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7CiAgICAgc3RhdGljIGNoYXIgZGVzY3Jp
cHRpb25bc2l6ZV07CiAKICAgICBpZiAoISp0aGlzKQpAQCAtMjEzLDkgKzIxMywxMiBAQCBjaGFy
KiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgICAgIHUuYXNEb3VibGUgPSBhc0Rv
dWJsZSgpOwogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRvdWJsZTogJTA4
eDolMDh4LCAlbGYiLCB1LmFzVHdvSW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBdLCBhc0RvdWJs
ZSgpKTsKICNlbmRpZgotICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpCi0gICAgICAgIHNucHJpbnRm
KGRlc2NyaXB0aW9uLCBzaXplLCAiQ2VsbDogJXAiLCBhc0NlbGwoKSk7Ci0gICAgZWxzZSBpZiAo
aXNUcnVlKCkpCisgICAgfSBlbHNlIGlmIChpc0NlbGwoKSkgeworICAgICAgICBzbnByaW50ZigK
KyAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBzaXplLCAiQ2VsbDogJXAgKCVwOiAlcywgJXMpIiwK
KyAgICAgICAgICAgIGFzQ2VsbCgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCksIGFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwKKyAgICAgICAgICAgIGluZGV4aW5n
VHlwZVRvU3RyaW5nKGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpKSk7CisgICAgfSBlbHNlIGlmIChpc1RydWUoKSkKICAgICAgICAgc25wcmludGYo
ZGVzY3JpcHRpb24sIHNpemUsICJUcnVlIik7CiAgICAgZWxzZSBpZiAoaXNGYWxzZSgpKQogICAg
ICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkZhbHNlIik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogI2lmICFFTkFC
TEUoWUFSUl9KSVQpCiAgICAgdXNlUmVnRXhwSklUKCkgPSBmYWxzZTsKICNlbmRpZgotCisgICAg
CiAgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRlZCBhbmQgbWFrZSBjb3JyZWN0aW9u
cyB0byB0aGUgb3B0aW9uczoKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIEFT
U0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0
aW1pemVTb29uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsMTEgKzMyMywxNSBAQCBi
b29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyCiAgICAgfQogfQogCi1Ob25Q
cm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24o
KSBjb25zdAorYm9vbCBTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dEluZGV4aW5nKCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAg
Ci0gICAgaWYgKGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSB8
fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpKQorICAgIHJldHVybiBhbnlPYmpl
Y3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKKyAgICAgICAgfHwgZ2xvYmFs
T2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKTsKK30KKworTm9uUHJvcGVydHlUcmFuc2l0aW9u
IFN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0Cit7Cisg
ICAgaWYgKG5lZWRzU2xvd1B1dEluZGV4aW5nKCkpCiAgICAgICAgIHJldHVybiBBbGxvY2F0ZVNs
b3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgCiAgICAgcmV0dXJuIEFsbG9jYXRlQXJyYXlTdG9yYWdl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIAogICAgICAgICBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNj
ZXNzZXMoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiBz
dWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSBjb25zdDsKKyAgICAgICAgYm9vbCBuZWVkc1Ns
b3dQdXRJbmRleGluZygpIGNvbnN0OworICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3Vn
Z2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0OwogICAgICAgICAKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2dsb2JhbE9iamVj
dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3
IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmkKIC8vIFN1cHBvcnQg
Zm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0
byBwcm9wZXJ0aWVzLgogLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHBv
cnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KIGVudW0gTm9uUHJvcGVydHlUcmFuc2l0aW9u
IHsKKyAgICBBbGxvY2F0ZUNvbnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UsCiAg
ICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xvd1B1dEFycmF5
U3RvcmFnZSwKQEAgLTU3LDEyICs1OCwxNiBAQCBpbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVz
KE5vblByb3BlcnR5CiBpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGlu
Z1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7CiAgICAg
c3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3VvdXM6CisgICAg
ICAgIEFTU0VSVCghKG9sZFR5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5
U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1b3VzOwogICAg
IGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFz
QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykg
fCBIYXNBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAg
ICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZTsKICAgICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgQVNT
RVJUKG9sZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICBBU1NFUlQoIShvbGRUeXBl
ICYgSGFzQ29udGlndW91cykpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQXJyYXlT
dG9yYWdlKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBZGRJbmRleGVkQWNj
ZXNzb3JzOgogICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3Jz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKKyNkZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0b3JfaAor
CituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENsYXNzSW5mbzsKKworZW51bSBUeXBlZEFycmF5
VHlwZSB7CisgICAgVHlwZWRBcnJheU5vbmUsCisgICAgVHlwZWRBcnJheUludDgsCisgICAgVHlw
ZWRBcnJheUludDE2LAorICAgIFR5cGVkQXJyYXlJbnQzMiwKKyAgICBUeXBlZEFycmF5VWludDgs
CisgICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKKyAgICBUeXBlZEFycmF5VWludDE2LAorICAg
IFR5cGVkQXJyYXlVaW50MzIsCisgICAgVHlwZWRBcnJheUZsb2F0MzIsCisgICAgVHlwZWRBcnJh
eUZsb2F0NjQKK307CisKK3N0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7CisgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IoKQorICAgICAgICA6IG1fY2xhc3NJbmZvKDApCisgICAgICAgICwgbV9z
dG9yYWdlT2Zmc2V0KDApCisgICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKKyAgICB7CisgICAg
fQorICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBz
aXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKKyAgICAgICAgOiBtX2Ns
YXNzSW5mbyhjbGFzc0luZm8pCisgICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZz
ZXQpCisgICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQorICAgIHsKKyAgICB9
CisgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKKyAgICBzaXplX3QgbV9zdG9yYWdl
T2Zmc2V0OworICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKK307CisKK2VudW0gVHlwZWRBcnJh
eVNpZ25lZG5lc3MgeworICAgIFNpZ25lZFR5cGVkQXJyYXksCisgICAgVW5zaWduZWRUeXBlZEFy
cmF5Cit9OworZW51bSBUeXBlZEFycmF5Um91bmRpbmcgeworICAgIFRydW5jYXRlUm91bmRpbmcs
CisgICAgQ2xhbXBSb3VuZGluZworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRy
YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzA0LDYgKzMwNCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBoYXNU
d29PCiAgICAgcmV0dXJuICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oVCB2
YWx1ZSkKK3sKKyAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgIC8vICAg
KHZhbHVlICogMyArIDEpIC8gMjsKKyAgICAvLyBvcjoKKyAgICAvLyAgICh1bnNpZ25lZCljZWls
KHZhbHVlICogMS41KSk7CisgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5h
bCBvdmVyZmxvdy4KKyAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAodmFsdWUgJiAx
KTsKK30KKwogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIU9TKFNP
TEFSSVMpCiB1c2luZyBzdGQ6OmlzZmluaXRlOwogI2lmICFDT01QSUxFUl9RVUlSSyhHQ0MxMV9H
TE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167879</attachid>
            <date>2012-10-09 17:25:59 -0700</date>
            <delta_ts>2012-10-09 17:53:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>baselinetyped_2.patch</filename>
            <type>text/plain</type>
            <size>48191</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDEyLTEwLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VHlwZWQgYXJyYXlzIHNob3VsZCBub3QgYmUgMjB4IHNsb3dlciBpbiB0aGUgYmFzZWxpbmUgSklU
IHRoYW4gaW4gdGhlIERGRyBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk4NjA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBhZGRzIHR5cGVkIGFycmF5IGdldF9ieV92YWwvcHV0X2J5X3ZhbCBw
YXRjaGluZyB0byB0aGUgYmFzZWxpbmUgSklULiBJdCdzCisgICAgICAgIGEgYmlnICh+NDAlKSB3
aW4gb24gYmVuY2htYXJrcyB0aGF0IGhhdmUgdHJvdWJsZSBzdGF5aW5nIGluIHRoZSBERkcgSklU
LiBFdmVuCisgICAgICAgIGlmIHdlIGZpeCB0aG9zZSBiZW5jaG1hcmtzLCB0aGlzIGZ1bmN0aW9u
YWxpdHkgZ2l2ZXMgdXMgdGhlIGluc3VyYW5jZSB0aGF0IHdlCisgICAgICAgIHR5cGljYWxseSBk
ZXNpcmUgd2l0aCBhbGwgc3BlY3VsYXRpdmUgb3B0aW1pemF0aW9uczogZXZlbiBpZiB3ZSBiYWls
IHRvCisgICAgICAgIGJhc2VsaW5lLCB3ZSdyZSBzdGlsbCByZWFzb25hYmx5IHBlcmZvcm1hbnQu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKE1h
Y3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNoYWJsZUJy
YW5jaFB0cik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoKKyAg
ICAgICAgKE1hY3JvQXNzZW1ibGVyQVJNdjcpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTXY3Ojptb3ZlRG91YmxlVG9JbnRzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk12Nzo6bW92ZUludHNUb0RvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
djc6OnBhdGNoYWJsZUJyYW5jaFB0cik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Lmg6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlclg4Nik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Ojptb3ZlRG91YmxlVG9JbnRzKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5VmFs
SW5mby5oOgorICAgICAgICAoSlNDOjpoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhc3NJbmZv
KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc09wdGltaXphYmxlSW5kZXhpbmcp
OgorICAgICAgICAoSlNDOjpqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8pOgorICAgICAgICAoSlND
OjpqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpCeVZhbEluZm86OkJ5
VmFsSW5mbyk6CisgICAgICAgIChCeVZhbEluZm8pOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJs
eUhlbHBlcnMuY3BwOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmg6CisgICAgICAgIChBc3NlbWJseUhlbHBlcnMpOgorICAgICAgICAoSlNDOjpERkc6
OkFzc2VtYmx5SGVscGVyczo6Ym94RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJs
eUhlbHBlcnM6OnVuYm94RG91YmxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoK
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6dHlw
ZWRBcnJheURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0
b3IuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpUeXBlZEFycmF5RGVz
Y3JpcHRvcjo6VHlwZWRBcnJheURlc2NyaXB0b3IpOgorICAgICAgICAoVHlwZWRBcnJheURlc2Ny
aXB0b3IpOgorCiAyMDEyLTEwLTA5ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVcGRhdGUgdGhlIENTUyBwcm9wZXJ0eSB1c2VkIHRvIHN1cHBvcnQgZHJhZ2dhYmxl
IHJlZ2lvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMw
ODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsOCBAQAogCQkwRkQ4
MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0
IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCAqLzsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owor
CQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRUNCMTYyMzdG
NDcwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAv
KiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3Bw
ICovOyB9OwogCQkwRkY0MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVC
RDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4
NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEZGNDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4
RUJEOTQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgKi87IH07CkBAIC0xMDE1LDYgKzEwMTcs
OCBAQAogCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY3VsYXRlZFR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyog
T3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25z
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2
QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3
QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNhc3NlbWJsZXIu
aDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVRGlzODZEaXNhc3Nl
bWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAvKiB1
ZGlzODZfZGVjb2RlLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHVkaXM4Nl9k
ZWNvZGUuYzsgcGF0aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYvdWRpczg2X2RlY29kZS5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4MCw2ICsyMjg0LDcgQEAKIAkJCQkxNEE0MkUz
RTBGNEY2MEVFMDA1OTkwOTkgLyogVGltZW91dENoZWNrZXIuaCAqLywKIAkJCQk1RDUzNzI2RDBF
MUM1NDZCMDAyMUU1NDkgLyogVHJhY2luZy5kICovLAogCQkJCTVENTM3MjZFMEUxQzU0ODgwMDIx
RTU0OSAvKiBUcmFjaW5nLmggKi8sCisJCQkJMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5
cGVkQXJyYXlEZXNjcmlwdG9yLmggKi8sCiAJCQkJODY2NzM5RDExM0JGREU3MTAwMjNEODdDIC8q
IFVpbnQxNldpdGhGcmFjdGlvbi5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAv
KiBXZWFrR0NNYXAuaCAqLywKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1Jh
bmRvbS5oICovLApAQCAtMjQ2Niw2ICsyNDcxLDcgQEAKIAkJCQk4NkUxMTZCMDBGRTc1QUM4MDBC
NTEyQkMgLyogQ29kZUxvY2F0aW9uLmggKi8sCiAJCQkJMEZGNDI3NTYxNTkxNEEyMDAwNENCOUZG
IC8qIExpbmtCdWZmZXIuY3BwICovLAogCQkJCTg2RDNCM0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBM
aW5rQnVmZmVyLmggKi8sCisJCQkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNz
ZW1ibGVyLmNwcCAqLywKIAkJCQk4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3Nl
bWJsZXIuaCAqLywKIAkJCQk4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJs
ZXJBUk0uY3BwICovLAogCQkJCTg2RDNCMkMyMTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2Vt
YmxlckFSTS5oICovLApAQCAtMjk3NSw2ICsyOTgxLDcgQEAKIAkJCQkwRjgwMjNFQTE2MTM4MzJC
MDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2
RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEz
QzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVC
M0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzU4MSw2ICszNTg4LDcgQEAKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAg
LyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhE
RTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYxM0Mx
RkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVC
M0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzI0RDMxRTIxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworI2lmIEVOQUJMRShBU1NF
TUJMRVIpCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6
OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMDgy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBNYWNyb0Fzc2VtYmxlcl9oCiAj
ZGVmaW5lIE1hY3JvQXNzZW1ibGVyX2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCiAj
aWYgRU5BQkxFKEFTU0VNQkxFUikKIAogI2lmIENQVShBUk1fVEhVTUIyKQpAQCAtOTMsNiArOTUs
OCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJCYXNlOjppbnZlcnQ7CiAgICAgCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTMy
OyAvLyBUaGlzIGlzIHN1cGVyIHVzZWZ1bCBmb3Igc29tZSBkb3VibGUgY29kZS4KKwogICAgIHN0
YXRpYyBEb3VibGVDb25kaXRpb24gaW52ZXJ0KERvdWJsZUNvbmRpdGlvbiBjb25kKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChjb25kKSB7CkBAIC0yMzAsNiArMjM0LDExIEBAIHB1YmxpYzoKICAg
ICB9CiAKICNpZiAhQ1BVKEFSTV9USFVNQjIpCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVC
cmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJ
bW1QdHIgcmlnaHQgPSBUcnVzdGVkSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBh
dGNoYWJsZUp1bXAoYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHJpZ2h0KSk7CisgICAgfQorICAgIAog
ICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1
c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCiAgICAgewog
ICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hQdHJXaXRoUGF0Y2goY29uZCwgbGVm
dCwgZGF0YUxhYmVsLCBpbml0aWFsUmlnaHRWYWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlz
aW9uIDEzMDgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNiArNzU0LDE4IEBAIHB1YmxpYzoK
ICAgICAgICAgc3RvcmUxNihzcmMsIHNldHVwQXJtQWRkcmVzcyhhZGRyZXNzKSk7CiAgICAgfQog
CisgICAgLy8gUG9zc2libHkgY2xvYmJlcnMgc3JjLCBidXQgbm90IG9uIHRoaXMgYXJjaGl0ZWN0
dXJlLgorICAgIHZvaWQgbW92ZURvdWJsZVRvSW50cyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QxLCBSZWdpc3RlcklEIGRlc3QyKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
dm1vdihkZXN0MSwgZGVzdDIsIHNyYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZUludHNU
b0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3RlcklEIGRl
c3QsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNj
cmF0Y2gpOworICAgICAgICBtX2Fzc2VtYmxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOworICAg
IH0KKwogI2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAgICAgc3RhdGljIGJvb2wg
c2hvdWxkQmxpbmRGb3JTcGVjaWZpY0FyY2godWludDMyX3QgdmFsdWUpCiAgICAgewpAQCAtMTY3
Myw2ICsxNjg1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOwogICAgIH0KICAgICAKKyAgICBQ
YXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbVB0ciByaWdodCA9IFRydXN0ZWRJbW1QdHIoMCkpCisg
ICAgeworICAgICAgICBtX21ha2VKdW1wUGF0Y2hhYmxlID0gdHJ1ZTsKKyAgICAgICAgSnVtcCBy
ZXN1bHQgPSBicmFuY2hQdHIoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBtX21ha2VKdW1w
UGF0Y2hhYmxlID0gZmFsc2U7CisgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKHJlc3VsdCk7
CisgICAgfQorICAgIAogICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFJl
c3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBU
cnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IHRy
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2
ICsxMzgsMjIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoLTEyOCA8PSBpbW0ubV92YWx1ZSAm
JiBpbW0ubV92YWx1ZSA8IDEyOCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfaThtKGltbS5t
X3ZhbHVlLCBhZGRyZXNzKTsKICAgICB9CisgICAgCisgICAgLy8gUG9zc2libHkgY2xvYmJlcnMg
c3JjLgorICAgIHZvaWQgbW92ZURvdWJsZVRvSW50cyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QxLCBSZWdpc3RlcklEIGRlc3QyKQorICAgIHsKKyAgICAgICAgbW92ZVBhY2tlZFRv
SW50MzIoc3JjLCBkZXN0MSk7CisgICAgICAgIHJzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIp
LCBzcmMpOworICAgICAgICBtb3ZlUGFja2VkVG9JbnQzMihzcmMsIGRlc3QyKTsKKyAgICB9CisK
KyAgICB2b2lkIG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNy
YzIsIEZQUmVnaXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB7CisgICAg
ICAgIG1vdmVJbnQzMlRvUGFja2VkKHNyYzEsIGRlc3QpOworICAgICAgICBtb3ZlSW50MzJUb1Bh
Y2tlZChzcmMyLCBzY3JhdGNoKTsKKyAgICAgICAgbHNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigz
MiksIHNjcmF0Y2gpOworICAgICAgICBvclBhY2tlZChzY3JhdGNoLCBkZXN0KTsKKyAgICB9CiAK
ICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIg
aW1tLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDEzICszMCwyNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkNsYXNzSW5mby5o
IgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgog
I2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCi1lbnVtIEpJVEFycmF5TW9kZSB7IEpJVENvbnRpZ3VvdXMsIEpJVEFy
cmF5U3RvcmFnZSB9OworZW51bSBKSVRBcnJheU1vZGUgeworICAgIEpJVENvbnRpZ3VvdXMsCisg
ICAgSklUQXJyYXlTdG9yYWdlLAorICAgIEpJVEludDhBcnJheSwKKyAgICBKSVRJbnQxNkFycmF5
LAorICAgIEpJVEludDMyQXJyYXksCisgICAgSklUVWludDhBcnJheSwKKyAgICBKSVRVaW50OENs
YW1wZWRBcnJheSwKKyAgICBKSVRVaW50MTZBcnJheSwKKyAgICBKSVRVaW50MzJBcnJheSwKKyAg
ICBKSVRGbG9hdDMyQXJyYXksCisgICAgSklURmxvYXQ2NEFycmF5Cit9OwogCiBpbmxpbmUgYm9v
bCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiB7
CkBAIC00OSw2ICs2MywxNyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBl
KEluCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xh
c3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworICAgIHJldHVybiBjbGFzc0lu
Zm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZTsKK30KKworaW5saW5l
IGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICByZXR1cm4gaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKQorICAgICAgICB8fCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhc3NJbmZvKHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCkpOworfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogewogICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CkBAIC02Miw2ICs4Nyw0MiBAQCBpbmxpbmUgSklUQXJyYXlNb2Rl
IGppdEFycmF5TW9kZUZvckluZGV4CiAgICAgfQogfQogCitpbmxpbmUgSklUQXJyYXlNb2RlIGpp
dEFycmF5TW9kZUZvckNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAg
ICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBU
eXBlZEFycmF5SW50ODoKKyAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKKyAgICBjYXNlIFR5
cGVkQXJyYXlJbnQxNjoKKyAgICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7CisgICAgY2FzZSBU
eXBlZEFycmF5SW50MzI6CisgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OworICAgIGNhc2Ug
VHlwZWRBcnJheVVpbnQ4OgorICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKKyAgICBjYXNl
IFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBKSVRVaW50OENsYW1wZWRB
cnJheTsKKyAgICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6CisgICAgICAgIHJldHVybiBKSVRVaW50
MTZBcnJheTsKKyAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6CisgICAgICAgIHJldHVybiBKSVRV
aW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgICAgICByZXR1cm4g
SklURmxvYXQzMkFycmF5OworICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6CisgICAgICAgIHJl
dHVybiBKSVRGbG9hdDY0QXJyYXk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CisgICAgfQorfQorCitpbmxpbmUgSklUQXJyYXlN
b2RlIGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSkKKyAgICAgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKTsKKyAgICAKKyAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRleGlu
Z0ZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CisgICAgcmV0dXJuIGppdEFy
cmF5TW9kZUZvckNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKK30KKwogc3RydWN0
IEJ5VmFsSW5mbyB7CiAgICAgQnlWYWxJbmZvKCkgeyB9CiAgICAgCkBAIC03MSw2ICsxMzIsNyBA
QCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQogICAg
ICAgICAsIGJhZFR5cGVKdW1wVG9Eb25lKGJhZFR5cGVKdW1wVG9Eb25lKQogICAgICAgICAsIHJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAgICAgICAs
IHNsb3dQYXRoQ291bnQoMCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNzksNiArMTQxLDcgQEAg
c3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFy
cmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgogICAgIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7CiAgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93
UGF0aDsKKyAgICB1bnNpZ25lZCBzbG93UGF0aENvdW50OwogICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1jb25zdCBkb3VibGUgQXNzZW1ibHlIZWxwZXJzOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEw
MDAwMDAwMHVsbDsKLQogRXhlY3V0YWJsZUJhc2UqIEFzc2VtYmx5SGVscGVyczo6ZXhlY3V0YWJs
ZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogewogICAgIGlmICghY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDEzMDgyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Mywz
MyArMjQzLDE0IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpICYmIENQVShYODYpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkIGJveERvdWJs
ZShGUFJSZWcgZnByLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKICAgICB7Ci0g
ICAgICAgIG1vdmVQYWNrZWRUb0ludDMyKGZwciwgcGF5bG9hZEdQUik7Ci0gICAgICAgIHJzaGlm
dFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBmcHIpOwotICAgICAgICBtb3ZlUGFja2VkVG9JbnQz
MihmcHIsIHRhZ0dQUik7CisgICAgICAgIG1vdmVEb3VibGVUb0ludHMoZnByLCBwYXlsb2FkR1BS
LCB0YWdHUFIpOwogICAgIH0KICAgICB2b2lkIHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQ
UlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJSZWcgc2NyYXRjaEZQUikKICAgICB7Ci0g
ICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGFnR1BSKTsKLSAgICAgICAgbW92ZUludDMyVG9Q
YWNrZWQocGF5bG9hZEdQUiwgZnByKTsKLSAgICAgICAgbW92ZUludDMyVG9QYWNrZWQodGFnR1BS
LCBzY3JhdGNoRlBSKTsKLSAgICAgICAgbHNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigzMiksIHNj
cmF0Y2hGUFIpOwotICAgICAgICBvclBhY2tlZChzY3JhdGNoRlBSLCBmcHIpOwotICAgIH0KLSNl
bmRpZgotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkgJiYgQ1BVKEFSTSkKLSAgICB2b2lkIGJveERv
dWJsZShGUFJSZWcgZnByLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7
Ci0gICAgICAgIG1fYXNzZW1ibGVyLnZtb3YocGF5bG9hZEdQUiwgdGFnR1BSLCBmcHIpOwotICAg
IH0KLSAgICB2b2lkIHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BS
LCBGUFJSZWcgZnByLCBGUFJSZWcgc2NyYXRjaEZQUikKLSAgICB7Ci0gICAgICAgIGppdEFzc2Vy
dElzSlNEb3VibGUodGFnR1BSKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2hGUFIpOwot
ICAgICAgICBtX2Fzc2VtYmxlci52bW92KGZwciwgcGF5bG9hZEdQUiwgdGFnR1BSKTsKKyAgICAg
ICAgbW92ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZwciwgc2NyYXRjaEZQUik7
CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0zNjQsOCArMzQ1LDYgQEAgcHVibGljOgogCiAgICAg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVC
bG9jayopOwogICAgIAotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsKLQogcHJv
dGVjdGVkOgogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayog
bV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTMwODI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMzQsNyAr
MjIzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLCByZXN1bHRSZWcpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWduZWRu
ZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRS
ZWcsIG1fY29tcGlsZUluZGV4KTsKQEAgLTIzNDQsNyArMjM0NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5n
cHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRm91cikpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CiAg
ICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMubGluaygm
bV9qaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTMwODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM3LDE0ICsyMjM3LDYgQEAg
cHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZv
aWQgY29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIGVudW0gVHlwZWRBcnJheVNpZ25lZG5l
c3MgewotICAgICAgICBTaWduZWRUeXBlZEFycmF5LAotICAgICAgICBVbnNpZ25lZFR5cGVkQXJy
YXkKLSAgICB9OwotICAgIGVudW0gVHlwZWRBcnJheVJvdW5kaW5nIHsKLSAgICAgICAgVHJ1bmNh
dGVSb3VuZGluZywKLSAgICAgICAgQ2xhbXBSb3VuZGluZwotICAgIH07CiAgICAgdm9pZCBjb21w
aWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwg
c2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7CiAgICAgdm9pZCBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwg
VHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyA9IFRydW5jYXRlUm91bmRp
bmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMzA4MjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsNiAr
NDk3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0
IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KICAgICAgICAgSnVtcExpc3Qg
ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5
cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5
U2lnbmVkbmVzcyk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAgICAgICAgCiAgICAgICAgIC8vIFBy
b3BlcnR5IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRl
Y2luZyB0eXBlLgogICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2Fk
ZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZApAQCAtNTA0LDcgKzUwNiw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgogICAgICAgICBK
dW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotCisgICAgICAgIEp1bXBMaXN0
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwg
VHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyk7CisgICAgICAgIEp1bXBM
aXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRT
aXplKTsKKyAgICAgICAgCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5h
bCwgS25vd25Ob3RGaW5hbCB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAxMzA4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNI
KCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBhZGRTbG93Q2FzZShiYWRUeXBl
KTsKQEAgLTMwNCw2ICszMDcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3Ry
dWN0aW9uCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVh
azsKICAgICB9CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CkBAIC0xNDEzLDYgKzE0
MTksMzMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNh
c2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBKSVRJbnQ4QXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmlu
dDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0
YS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSklUSW50MzJBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xv
YmFsRGF0YS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUVWludDhBcnJheToKKyAgICBjYXNlIEpJVFVpbnQ4
Q2xhbXBlZEFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OEFycmF5
RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpJVFVpbnQxNkFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51
aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBKSVRVaW50MzJBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xv
YmFsRGF0YS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX2dsb2JhbERhdGEtPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgorICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX2dsb2JhbERhdGEtPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CiAgICAgfQogICAgIAogICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKQEAgLTE0NDcsNiArMTQ4MCwzNiBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBT
aWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBKSVRJbnQxNkFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJh
eVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQx
NkFycmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5n
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRJbnQzMkFycmF5OgorICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBl
ZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRV
aW50OEFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OEFycmF5RGVz
Y3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5z
aWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBKSVRVaW50MTZBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDE2
QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGlu
Zyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX2dsb2JhbERhdGEtPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25l
ZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVEZsb2F0MzJBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9h
dDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEZs
b2F0NjRBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9hdDY0QXJy
YXlEZXNjcmlwdG9yKCksIDgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBDUkFTSCgpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwpAQCAtMTQ2Nyw2ICsxNTMwLDI1MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsK
IH0KIAorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBz
aWduZWRuZXNzKQoreworICAgIC8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBl
IGlzIHRvIHVzZSB0aGUgY2xhc3NJbmZvLiBXZSBuZWVkIHRvIGRvIHNvIHdpdGhvdXQKKyAgICAv
LyBjbG9iYmVyaW5nIHRoZSByZWdpc3RlciB0aGF0IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBi
YXNlLCBhbmQgcHJvcGVydHkuCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQg
YmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdp
c3RlcklEIHJlc3VsdFBheWxvYWQgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSBy
ZWdUMzsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJ
RCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCA9IHJlZ1Qw
OworICAgIFJlZ2lzdGVySUQgcmVzdWx0VGFnID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoID0gcmVnVDM7CisjZW5kaWYKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRy
KGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0
aE9mZnNldCkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3Jh
Z2VPZmZzZXQpLCBiYXNlKTsKKyAgICAKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAg
Y2FzZSAxOgorICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAg
ICAgICAgICAgbG9hZDhTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc09uZSks
IHJlc3VsdFBheWxvYWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkOChCYXNlSW5k
ZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRB
cnJheSkKKyAgICAgICAgICAgIGxvYWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHks
IFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
YWQxNihCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgbG9hZDMyKEJhc2VJbmRleChi
YXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIEp1bXAg
ZG9uZTsKKyAgICBpZiAoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVk
VHlwZWRBcnJheSkgeworICAgICAgICBKdW1wIGNhbkJlSW50ID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAKKyAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBSZWdUMCk7CisgICAg
ICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBmcFJlZ1QwKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMCwgcmVzdWx0
UGF5bG9hZCk7CisgICAgICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBh
eWxvYWQpOworI2Vsc2UKKyAgICAgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBkb25lID0ganVt
cCgpOworICAgICAgICBjYW5CZUludC5saW5rKHRoaXMpOworICAgIH0KKworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgb3JQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsK
KyNlbHNlCisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRU
YWcpOworI2VuZGlmCisgICAgaWYgKGRvbmUuaXNTZXQoKSkKKyAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1l
bnRTaXplKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVn
VDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQgcmVz
dWx0UGF5bG9hZCA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2Vs
c2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5
ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCByZXN1bHRQYXlsb2FkID0gcmVnVDA7CisgICAgUmVn
aXN0ZXJJRCByZXN1bHRUYWcgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdU
MzsKKyNlbmRpZgorICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwor
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRj
aCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRv
ci5tX2NsYXNzSW5mbykpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCks
IGJhc2UpOworICAgIAorICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBjYXNlIDQ6Cisg
ICAgICAgIGxvYWRGbG9hdChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRm91ciksIGZw
UmVnVDApOworICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OiB7CisgICAgICAgIGxvYWREb3VibGUoQmFzZUlu
ZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CisgICAgICAgIEp1bXAg
bm90TmFOID0gYnJhbmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QwKTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpOworICAgICAgICBsb2FkRG91YmxlKCZOYU4sIGZwUmVnVDApOworICAg
ICAgICBub3ROYU4ubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgbW92ZURvdWJsZVRvUHRyKGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOworICAgIHN1YlB0cih0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOworI2Vsc2UKKyAgICBtb3ZlRG91
YmxlVG9JbnRzKGZwUmVnVDAsIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisjZW5kaWYKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOyAgICAKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlw
ZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwor
ICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBsYXRl
U2NyYXRjaCA9IHJlZ1QyOworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0
Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7CisjZW5kaWYK
KyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOworICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7
CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBlYXJseVNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdElt
bWVkaWF0ZUludGVnZXIoZWFybHlTY3JhdGNoKSk7CisjZWxzZQorICAgIGVtaXRMb2FkKHZhbHVl
LCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSkpOworI2VuZGlmCisgICAgCisgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8g
YmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdworICAgIC8vIHBhdGgg
ZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KKyAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAgCisg
ICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1l
bnRTaXplID09IDEpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5l
c3MgPSBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CisgICAg
ICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1
c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0
Y2gpOworICAgICAgICBKdW1wIGNsYW1wZWQgPSBqdW1wKCk7CisgICAgICAgIHRvb0JpZy5saW5r
KHRoaXMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGZmKSwgZWFybHlTY3JhdGNoKTsK
KyAgICAgICAgY2xhbXBlZC5saW5rKHRoaXMpOworICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMp
OworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgY2FzZSAxOgor
ICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3Bl
cnR5LCBUaW1lc09uZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIHN0
b3JlMTYoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1l
c1R3bykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIHN0b3JlMzIoZWFy
bHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRG
bG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwor
ICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBsYXRl
U2NyYXRjaCA9IHJlZ1QyOworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0
Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7CisjZW5kaWYK
KyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOworICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7
CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBlYXJseVNjcmF0Y2gpOworICAgIEp1bXAgZG91YmxlQ2FzZSA9IGVtaXRKdW1wSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VyKGVhcmx5U2NyYXRjaCk7CisgICAgY29udmVydEludDMyVG9Eb3VibGUo
ZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKKyAgICBKdW1wIHJlYWR5ID0ganVtcCgpOworICAgIGRv
dWJsZUNhc2UubGluayh0aGlzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RJ
bW1lZGlhdGVOdW1iZXIoZWFybHlTY3JhdGNoKSk7CisgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKKyAgICBtb3ZlUHRyVG9Eb3VibGUoZWFybHlTY3JhdGNo
LCBmcFJlZ1QwKTsKKyAgICByZWFkeS5saW5rKHRoaXMpOworI2Vsc2UKKyAgICBlbWl0TG9hZCh2
YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7CisgICAgSnVtcCBkb3VibGVDYXNlID0g
YnJhbmNoMzIoTm90RXF1YWwsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKKyAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDAp
OworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlT
Y3JhdGNoLCBsYXRlU2NyYXRjaCwgZnBSZWdUMCk7CisgICAgcmVhZHkubGluayh0aGlzKTsKKyNl
bmRpZgorICAgIAorICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMg
aW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKKyAgICAvLyBwYXRoIGV4cGVjdHMg
dGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRl
c2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIAorICAgIHN3aXRj
aCAoZWxlbWVudFNpemUpIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGNvbnZlcnREb3VibGVUb0Zs
b2F0KGZwUmVnVDAsIGZwUmVnVDApOworICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJ
bmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIDg6CisgICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChsYXRl
U2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWlnaHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNl
czsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzMDgyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDUxLDIxICsyNDUxLDMzIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50
MzIoKSkgewogICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIHRoaXMgYXQg
YWxsLgogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAg
ICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpOwotICAgICAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvKCkpIHsKLSAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAg
ICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCkpOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFNU
VUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMp
KTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOwor
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9m
ZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRC
eVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAgQVNTRVJUKCFieVZhbEluZm8u
c3R1YlJvdXRpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhp
bmcob2JqZWN0LT5zdHJ1Y3R1cmUoKSkpIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0
aW1pemUuCi0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+
Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChpc09w
dGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4
aW5nVHlwZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJy
YXlNb2RlKQotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNU
VUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkp
OworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7Cisg
ICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERS
RVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFkaWRPcHRpbWl6
ZSkgeworICAgICAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRp
bWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAgICAgIC8vIG5l
dmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFu
ZCB3ZSBoYXZlIHNvbWUgb2JqZWN0CisgICAgICAgICAgICAvLyB0aGF0IGludGVyY2VwdHMgaW5k
ZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLiBGb3IgY2FzZXMK
KyAgICAgICAgICAgIC8vIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVj
dHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZgorICAgICAgICAgICAgLy8gb3Bw
b3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9s
eW1vcnBoaWMuCisgICAgICAgICAgICBpZiAoKytieVZhbEluZm8uc2xvd1BhdGhDb3VudCA+PSAx
MAorICAgICAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygp
KSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCisgICAg
ICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCkpOworICAgICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5j
dGlvbihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9n
ZW5lcmljKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTczLDIxICsy
NTg1LDMzIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKICAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewogICAgICAg
ICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KICAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKLSAgICAg
ICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Ci0gICAgICAgICAg
ICAvLyBEb250IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwotICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKLSAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworCisgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsK
KyAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgQnlWYWxJbmZvJiBieVZh
bEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZz
ZXQgLSAxKTsKKyAgICAgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUo
KSkpIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25E
RkdDb2RlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAg
ICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZh
bEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBl
KGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQotICAgICAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFy
cmF5TW9kZSk7CisgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlN
b2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKGFy
cmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAgICAgICAgICAgSklUOjpj
b21waWxlUHV0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAg
ICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICghZGlkT3B0aW1pemUpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIHRh
a2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFr
ZSBzdXJlIHdlCisgICAgICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4g
T3IsIGlmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdAorICAgICAg
ICAgICAgLy8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2Fp
dCB1bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2VzCisgICAgICAgICAgICAvLyB3aGVyZSB3ZSBzZWUg
bm9uLWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMg
d29ydGggb2YKKyAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlIHRo
YXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLgorICAgICAgICAgICAgaWYgKCsr
YnlWYWxJbmZvLnNsb3dQYXRoQ291bnQgPj0gMTAKKyAgICAgICAgICAgICAgICB8fCBvYmplY3Qt
PnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgeworICAgICAgICAgICAgICAgIC8vIERvbid0
IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24oU1RVQl9SRVRVUk5fQUREUkVTUywgRnVu
Y3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHJldmlzaW9uIDEzMDgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNWYWx1ZUlu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTQ5LDE5ICs1MCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzCiAgICAgfTsKIAotICAg
IGVudW0gVHlwZWRBcnJheVR5cGUgewotICAgICAgICBUeXBlZEFycmF5Tm9uZSwKLSAgICAgICAg
VHlwZWRBcnJheUludDgsCi0gICAgICAgIFR5cGVkQXJyYXlJbnQxNiwKLSAgICAgICAgVHlwZWRB
cnJheUludDMyLAotICAgICAgICBUeXBlZEFycmF5VWludDgsCi0gICAgICAgIFR5cGVkQXJyYXlV
aW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgICAgIFR5cGVkQXJy
YXlVaW50MzIsCi0gICAgICAgIFR5cGVkQXJyYXlGbG9hdDMyLAotICAgICAgICBUeXBlZEFycmF5
RmxvYXQ2NAotICAgIH07Ci0KICAgICBjbGFzcyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xh
c3MgSlNWYWx1ZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEz
MDgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5j
bHVkZSAiVGVybWluYXRvci5oIgogI2luY2x1ZGUgIlRpbWVvdXRDaGVja2VyLmgiCisjaW5jbHVk
ZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5j
bHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTEwOCwyNCArMTA5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRocmVhZFN0
YWNrVHlwZVNtYWxsCiAgICAgfTsKIAotICAgIHN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7
Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgIDogbV9jbGFzc0lu
Zm8oMCkKLSAgICAgICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICAgICAsIG1f
bGVuZ3RoT2Zmc2V0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90IHN0b3JhZ2VPZmZz
ZXQsIHNpemVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNz
SW5mbykKLSAgICAgICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAg
ICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICAgICAgewotICAgICAg
ICB9Ci0gICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0gICAgICAgIHNpemVf
dCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLSAgICB9
OwotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiAK
QEAgLTQyOSw2ICs0MTIsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOwogICAgICAgICByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbgorICAgICAgICAKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IHR5cGVkQXJyYXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlZEFy
cmF5Tm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZWRBcnJheUludDg6CisgICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9y
KCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJy
YXlJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7
CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlV
aW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURl
c2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAgY2Fz
ZSBUeXBlZEFycmF5VWludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlE
ZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgICAg
ICAgICAgICAgIHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAg
Y2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogCiAgICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
VHlwZWRBcnJheURlc2NyaXB0b3JfaAorI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCisK
K25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2xhc3NJbmZvOworCitlbnVtIFR5cGVkQXJyYXlU
eXBlIHsKKyAgICBUeXBlZEFycmF5Tm9uZSwKKyAgICBUeXBlZEFycmF5SW50OCwKKyAgICBUeXBl
ZEFycmF5SW50MTYsCisgICAgVHlwZWRBcnJheUludDMyLAorICAgIFR5cGVkQXJyYXlVaW50OCwK
KyAgICBUeXBlZEFycmF5VWludDhDbGFtcGVkLAorICAgIFR5cGVkQXJyYXlVaW50MTYsCisgICAg
VHlwZWRBcnJheVVpbnQzMiwKKyAgICBUeXBlZEFycmF5RmxvYXQzMiwKKyAgICBUeXBlZEFycmF5
RmxvYXQ2NAorfTsKKworc3RydWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKKyAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvcigpCisgICAgICAgIDogbV9jbGFzc0luZm8oMCkKKyAgICAgICAgLCBtX3N0
b3JhZ2VPZmZzZXQoMCkKKyAgICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQorICAgIHsKKyAgICB9
CisgICAgVHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNp
emVfdCBzdG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQorICAgICAgICA6IG1fY2xh
c3NJbmZvKGNsYXNzSW5mbykKKyAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNl
dCkKKyAgICAgICAgLCBtX2xlbmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCisgICAgeworICAgIH0K
KyAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOworICAgIHNpemVfdCBtX3N0b3JhZ2VP
ZmZzZXQ7CisgICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0OworfTsKKworZW51bSBUeXBlZEFycmF5
U2lnbmVkbmVzcyB7CisgICAgU2lnbmVkVHlwZWRBcnJheSwKKyAgICBVbnNpZ25lZFR5cGVkQXJy
YXkKK307CitlbnVtIFR5cGVkQXJyYXlSb3VuZGluZyB7CisgICAgVHJ1bmNhdGVSb3VuZGluZywK
KyAgICBDbGFtcFJvdW5kaW5nCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKKwo=
</data>
<flag name="review"
          id="180676"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="180681"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167885</attachid>
            <date>2012-10-09 17:53:53 -0700</date>
            <delta_ts>2012-10-09 18:52:17 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>baselinetyped_3.patch</filename>
            <type>text/plain</type>
            <size>52061</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwODMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDEyLTEwLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VHlwZWQgYXJyYXlzIHNob3VsZCBub3QgYmUgMjB4IHNsb3dlciBpbiB0aGUgYmFzZWxpbmUgSklU
IHRoYW4gaW4gdGhlIERGRyBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk4NjA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQgYW5k
IEdhdmluIEJhcnJhY2xvdWdoLgorCisgICAgICAgIFRoaXMgYWRkcyB0eXBlZCBhcnJheSBnZXRf
YnlfdmFsL3B1dF9ieV92YWwgcGF0Y2hpbmcgdG8gdGhlIGJhc2VsaW5lIEpJVC4gSXQncworICAg
ICAgICBhIGJpZyAofjQwJSkgd2luIG9uIGJlbmNobWFya3MgdGhhdCBoYXZlIHRyb3VibGUgc3Rh
eWluZyBpbiB0aGUgREZHIEpJVC4gRXZlbgorICAgICAgICBpZiB3ZSBmaXggdGhvc2UgYmVuY2ht
YXJrcywgdGhpcyBmdW5jdGlvbmFsaXR5IGdpdmVzIHVzIHRoZSBpbnN1cmFuY2UgdGhhdCB3ZQor
ICAgICAgICB0eXBpY2FsbHkgZGVzaXJlIHdpdGggYWxsIHNwZWN1bGF0aXZlIG9wdGltaXphdGlv
bnM6IGV2ZW4gaWYgd2UgYmFpbCB0bworICAgICAgICBiYXNlbGluZSwgd2UncmUgc3RpbGwgcmVh
c29uYWJseSBwZXJmb3JtYW50LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChN
YWNyb0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpwYXRjaGFibGVC
cmFuY2hQdHIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6Cisg
ICAgICAgIChNYWNyb0Fzc2VtYmxlckFSTXY3KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk12Nzo6bW92ZURvdWJsZVRvSW50cyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TXY3OjpwYXRjaGFibGVCcmFuY2hQdHIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Ni5oOgorICAgICAgICAoTWFjcm9Bc3NlbWJsZXJYODYpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Njo6bW92ZURvdWJsZVRvSW50cyk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Ojptb3ZlSW50c1RvRG91YmxlKToKKyAgICAgICAgKiBieXRlY29kZS9CeVZh
bEluZm8uaDoKKyAgICAgICAgKEpTQzo6aGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpoYXNPcHRpbWl6YWJsZUluZGV4aW5n
KToKKyAgICAgICAgKEpTQzo6aml0QXJyYXlNb2RlRm9yQ2xhc3NJbmZvKToKKyAgICAgICAgKEpT
Qzo6aml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QnlWYWxJbmZvOjpC
eVZhbEluZm8pOgorICAgICAgICAoQnlWYWxJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1i
bHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKEpTQzo6REZH
OjpBc3NlbWJseUhlbHBlcnM6OmJveERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1i
bHlIZWxwZXJzOjp1bmJveERvdWJsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAg
ICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJ
T04pOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbERhdGEuaDoKKyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsRGF0YTo6dHlwZWRBcnJheURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRB
cnJheURlc2NyaXB0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpU
eXBlZEFycmF5RGVzY3JpcHRvcjo6VHlwZWRBcnJheURlc2NyaXB0b3IpOgorICAgICAgICAoVHlw
ZWRBcnJheURlc2NyaXB0b3IpOgorCiAyMDEyLTEwLTA5ICBKaWFuIExpICA8amlhbmxpQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVcGRhdGUgdGhlIENTUyBwcm9wZXJ0eSB1c2VkIHRvIHN1cHBv
cnQgZHJhZ2dhYmxlIHJlZ2lvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgU0VUKEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBBUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAKICAgICBBUEkv
T3BhcXVlSlNTdHJpbmcuY3BwCiAgICAgCisgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNw
cAogICAgIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAogCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDEzMDgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9u
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oIFwKQEAgLTY3Nyw2ICs2Nzgs
NyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UaW1lb3V0Q2hlY2tlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RpbWVvdXRDaGVja2VyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Ry
YWNpbmcuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2Ny
aXB0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2V2l0aEZyYWN0
aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMDgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwIFwKICAgICBhc3NlbWJsZXIvQVJN
djdBc3NlbWJsZXIuY3BwIFwKICAgICBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgXAorICAgIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAgXAogICAgIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTS5jcHAgXAogICAgIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAgXAogICAgIGJ5
dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMDgyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM4LDYgKzEz
MzgsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5ccnVudGltZVxUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFdlYWtHQ01hcC5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE4MjIsNiArMTgyNiwxMCBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxhc3NlbWJsZXJcTWFjcm9Bc3Nl
bWJsZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMwODI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsOCBAQAogCQkwRkQ4MkU4NjE0MUYzRkYx
MDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNwZWN1bGF0
ZWRUeXBlLmNwcCAqLzsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVC
MTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
MjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9OworCQkwRkVCM0VDRDE2
MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRUNCMTYyMzdGNDcwMEFCNjdBRCAv
KiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovOyB9OwogCQkw
RkY0MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYg
LyogRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0
MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJ
MEZGNDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzM0MTU4RUJEOTQwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmMgKi87IH07CkBAIC0xMDE1LDYgKzEwMTcsOCBAQAogCQkwRkQ4
MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY3VsYXRlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRB
cnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQjNFQ0Ux
NjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZGNDI3MkYxNThFQkQ0NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRp
c2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBw
YXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRjQyNzM0MTU4RUJEOTQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2Rl
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHVkaXM4Nl9kZWNvZGUuYzsgcGF0
aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYvdWRpczg2X2RlY29kZS5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjI4MCw2ICsyMjg0LDcgQEAKIAkJCQkxNEE0MkUzRTBGNEY2MEVFMDA1
OTkwOTkgLyogVGltZW91dENoZWNrZXIuaCAqLywKIAkJCQk1RDUzNzI2RDBFMUM1NDZCMDAyMUU1
NDkgLyogVHJhY2luZy5kICovLAogCQkJCTVENTM3MjZFMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFj
aW5nLmggKi8sCisJCQkJMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNj
cmlwdG9yLmggKi8sCiAJCQkJODY2NzM5RDExM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhG
cmFjdGlvbi5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAu
aCAqLywKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLApA
QCAtMjQ2Niw2ICsyNDcxLDcgQEAKIAkJCQk4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyogQ29k
ZUxvY2F0aW9uLmggKi8sCiAJCQkJMEZGNDI3NTYxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZm
ZXIuY3BwICovLAogCQkJCTg2RDNCM0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmgg
Ki8sCisJCQkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAq
LywKIAkJCQk4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLywK
IAkJCQk4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwICov
LAogCQkJCTg2RDNCMkMyMTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oICov
LApAQCAtMjk3NSw2ICsyOTgxLDcgQEAKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyog
QnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAg
LyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1
IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVCM0VDRDE2MjM3RjRE
MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzU4
MSw2ICszNTg4LDcgQEAKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhp
bmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTU0MUIxMTYxM0MxRkIwMENFM0UyNSAv
KiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVCM0VDRjE2MjM3RjZD
MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0RDMx
RTIxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKK25h
bWVzcGFjZSBKU0MgeworCitjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIg
PSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShBU1NFTUJMRVIpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMDgyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBNYWNyb0Fzc2VtYmxlcl9oCiAjZGVmaW5lIE1hY3Jv
QXNzZW1ibGVyX2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCiAjaWYgRU5BQkxFKEFT
U0VNQkxFUikKIAogI2lmIENQVShBUk1fVEhVTUIyKQpAQCAtOTMsNiArOTUsOCBAQCBwdWJsaWM6
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjppbnZl
cnQ7CiAgICAgCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTMyOyAvLyBUaGlzIGlz
IHN1cGVyIHVzZWZ1bCBmb3Igc29tZSBkb3VibGUgY29kZS4KKwogICAgIHN0YXRpYyBEb3VibGVD
b25kaXRpb24gaW52ZXJ0KERvdWJsZUNvbmRpdGlvbiBjb25kKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChjb25kKSB7CkBAIC0yMzAsNiArMjM0LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiAh
Q1BVKEFSTV9USFVNQjIpCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hQdHIoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW1QdHIgcmlnaHQg
PSBUcnVzdGVkSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAo
YnJhbmNoUHRyKGNvbmQsIGxlZnQsIHJpZ2h0KSk7CisgICAgfQorICAgIAogICAgIFBhdGNoYWJs
ZUp1bXAgcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZEltbVB0ciBp
bml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCiAgICAgewogICAgICAgICByZXR1
cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hQdHJXaXRoUGF0Y2goY29uZCwgbGVmdCwgZGF0YUxhYmVs
LCBpbml0aWFsUmlnaHRWYWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDEzMDgyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNiArNzU0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgc3Rv
cmUxNihzcmMsIHNldHVwQXJtQWRkcmVzcyhhZGRyZXNzKSk7CiAgICAgfQogCisgICAgLy8gUG9z
c2libHkgY2xvYmJlcnMgc3JjLCBidXQgbm90IG9uIHRoaXMgYXJjaGl0ZWN0dXJlLgorICAgIHZv
aWQgbW92ZURvdWJsZVRvSW50cyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QxLCBS
ZWdpc3RlcklEIGRlc3QyKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0MSwg
ZGVzdDIsIHNyYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZUludHNUb0RvdWJsZShSZWdp
c3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3RlcklEIGRlc3QsIEZQUmVnaXN0
ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworICAg
ICAgICBtX2Fzc2VtYmxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOworICAgIH0KKwogI2lmIEVO
QUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxpbmRG
b3JTcGVjaWZpY0FyY2godWludDMyX3QgdmFsdWUpCiAgICAgewpAQCAtMTY3Myw2ICsxNjg1LDE0
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGFkZHJlc3NUZW1wUmVn
aXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOwogICAgIH0KICAgICAKKyAgICBQYXRjaGFibGVKdW1w
IHBhdGNoYWJsZUJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVm
dCwgVHJ1c3RlZEltbVB0ciByaWdodCA9IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgeworICAgICAg
ICBtX21ha2VKdW1wUGF0Y2hhYmxlID0gdHJ1ZTsKKyAgICAgICAgSnVtcCByZXN1bHQgPSBicmFu
Y2hQdHIoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBtX21ha2VKdW1wUGF0Y2hhYmxlID0g
ZmFsc2U7CisgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKHJlc3VsdCk7CisgICAgfQorICAg
IAogICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIo
LTEpKQogICAgIHsKICAgICAgICAgbV9tYWtlSnVtcFBhdGNoYWJsZSA9IHRydWU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Ni5oCShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMjIgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoLTEyOCA8PSBpbW0ubV92YWx1ZSAmJiBpbW0ubV92YWx1
ZSA8IDEyOCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfaThtKGltbS5tX3ZhbHVlLCBhZGRy
ZXNzKTsKICAgICB9CisgICAgCisgICAgLy8gUG9zc2libHkgY2xvYmJlcnMgc3JjLgorICAgIHZv
aWQgbW92ZURvdWJsZVRvSW50cyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QxLCBS
ZWdpc3RlcklEIGRlc3QyKQorICAgIHsKKyAgICAgICAgbW92ZVBhY2tlZFRvSW50MzIoc3JjLCBk
ZXN0MSk7CisgICAgICAgIHJzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzcmMpOworICAg
ICAgICBtb3ZlUGFja2VkVG9JbnQzMihzcmMsIGRlc3QyKTsKKyAgICB9CisKKyAgICB2b2lkIG1v
dmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0
ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB7CisgICAgICAgIG1vdmVJbnQz
MlRvUGFja2VkKHNyYzEsIGRlc3QpOworICAgICAgICBtb3ZlSW50MzJUb1BhY2tlZChzcmMyLCBz
Y3JhdGNoKTsKKyAgICAgICAgbHNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigzMiksIHNjcmF0Y2gp
OworICAgICAgICBvclBhY2tlZChzY3JhdGNoLCBkZXN0KTsKKyAgICB9CiAKICAgICBKdW1wIGJy
YW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgZGVzdCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwyNyBA
QAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUg
IkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpJ
VFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1lbnVtIEpJVEFycmF5TW9kZSB7IEpJVENvbnRpZ3VvdXMsIEpJVEFycmF5U3RvcmFnZSB9
OworZW51bSBKSVRBcnJheU1vZGUgeworICAgIEpJVENvbnRpZ3VvdXMsCisgICAgSklUQXJyYXlT
dG9yYWdlLAorICAgIEpJVEludDhBcnJheSwKKyAgICBKSVRJbnQxNkFycmF5LAorICAgIEpJVElu
dDMyQXJyYXksCisgICAgSklUVWludDhBcnJheSwKKyAgICBKSVRVaW50OENsYW1wZWRBcnJheSwK
KyAgICBKSVRVaW50MTZBcnJheSwKKyAgICBKSVRVaW50MzJBcnJheSwKKyAgICBKSVRGbG9hdDMy
QXJyYXksCisgICAgSklURmxvYXQ2NEFycmF5Cit9OwogCiBpbmxpbmUgYm9vbCBpc09wdGltaXph
YmxlSW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiB7CkBAIC00OSw2ICs2
MywxNyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAgICAgfQog
fQogCitpbmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhc3NJbmZvKGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworICAgIHJldHVybiBjbGFzc0luZm8tPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZTsKK30KKworaW5saW5lIGJvb2wgaGFzT3B0
aW1pemFibGVJbmRleGluZyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gaXNP
cHRpbWl6YWJsZUluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAg
ICB8fCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhc3NJbmZvKHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCkpOworfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckluZGV4aW5n
VHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogewogICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKSB7CkBAIC02Miw2ICs4Nyw0MiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9k
ZUZvckluZGV4CiAgICAgfQogfQogCitpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZv
ckNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBzd2l0Y2ggKGNs
YXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlZEFycmF5SW50
ODoKKyAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKKyAgICBjYXNlIFR5cGVkQXJyYXlJbnQx
NjoKKyAgICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlZEFycmF5SW50
MzI6CisgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OworICAgIGNhc2UgVHlwZWRBcnJheVVp
bnQ4OgorICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKKyAgICBjYXNlIFR5cGVkQXJyYXlV
aW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBKSVRVaW50OENsYW1wZWRBcnJheTsKKyAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MTY6CisgICAgICAgIHJldHVybiBKSVRVaW50MTZBcnJheTsKKyAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6CisgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsK
KyAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgICAgICByZXR1cm4gSklURmxvYXQzMkFy
cmF5OworICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBKSVRGbG9h
dDY0QXJyYXk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJu
IEpJVENvbnRpZ3VvdXM7CisgICAgfQorfQorCitpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5
TW9kZUZvclN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoaXNPcHRp
bWl6YWJsZUluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAg
cmV0dXJuIGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKTsKKyAgICAKKyAgICBBU1NFUlQoaGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5m
byhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSk7CisgICAgcmV0dXJuIGppdEFycmF5TW9kZUZvckNs
YXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKK30KKwogc3RydWN0IEJ5VmFsSW5mbyB7
CiAgICAgQnlWYWxJbmZvKCkgeyB9CiAgICAgCkBAIC03MSw2ICsxMzIsNyBAQCBzdHJ1Y3QgQnlW
YWxJbmZvIHsKICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQogICAgICAgICAsIGJhZFR5
cGVKdW1wVG9Eb25lKGJhZFR5cGVKdW1wVG9Eb25lKQogICAgICAgICAsIHJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAgICAgICAsIHNsb3dQYXRoQ291
bnQoMCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNzksNiArMTQxLDcgQEAgc3RydWN0IEJ5VmFs
SW5mbyB7CiAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhh
dCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgogICAgIGludDE2X3QgYmFkVHlw
ZUp1bXBUb0RvbmU7CiAgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aDsKKyAgICB1
bnNpZ25lZCBzbG93UGF0aENvdW50OwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
c3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDgg
KzMwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jb25zdCBkb3Vi
bGUgQXNzZW1ibHlIZWxwZXJzOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsK
LQogRXhlY3V0YWJsZUJhc2UqIEFzc2VtYmx5SGVscGVyczo6ZXhlY3V0YWJsZUZvcihjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogewogICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDEzMDgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MywzMyArMjQzLDE0IEBA
IHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpICYmIENQVShY
ODYpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkIGJveERvdWJsZShGUFJSZWcgZnBy
LCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKICAgICB7Ci0gICAgICAgIG1vdmVQ
YWNrZWRUb0ludDMyKGZwciwgcGF5bG9hZEdQUik7Ci0gICAgICAgIHJzaGlmdFBhY2tlZChUcnVz
dGVkSW1tMzIoMzIpLCBmcHIpOwotICAgICAgICBtb3ZlUGFja2VkVG9JbnQzMihmcHIsIHRhZ0dQ
Uik7CisgICAgICAgIG1vdmVEb3VibGVUb0ludHMoZnByLCBwYXlsb2FkR1BSLCB0YWdHUFIpOwog
ICAgIH0KICAgICB2b2lkIHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2Fk
R1BSLCBGUFJSZWcgZnByLCBGUFJSZWcgc2NyYXRjaEZQUikKICAgICB7Ci0gICAgICAgIGppdEFz
c2VydElzSlNEb3VibGUodGFnR1BSKTsKLSAgICAgICAgbW92ZUludDMyVG9QYWNrZWQocGF5bG9h
ZEdQUiwgZnByKTsKLSAgICAgICAgbW92ZUludDMyVG9QYWNrZWQodGFnR1BSLCBzY3JhdGNoRlBS
KTsKLSAgICAgICAgbHNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigzMiksIHNjcmF0Y2hGUFIpOwot
ICAgICAgICBvclBhY2tlZChzY3JhdGNoRlBSLCBmcHIpOwotICAgIH0KLSNlbmRpZgotCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkgJiYgQ1BVKEFSTSkKLSAgICB2b2lkIGJveERvdWJsZShGUFJSZWcg
ZnByLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7Ci0gICAgICAgIG1f
YXNzZW1ibGVyLnZtb3YocGF5bG9hZEdQUiwgdGFnR1BSLCBmcHIpOwotICAgIH0KLSAgICB2b2lk
IHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnBy
LCBGUFJSZWcgc2NyYXRjaEZQUikKLSAgICB7Ci0gICAgICAgIGppdEFzc2VydElzSlNEb3VibGUo
dGFnR1BSKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2hGUFIpOwotICAgICAgICBtX2Fz
c2VtYmxlci52bW92KGZwciwgcGF5bG9hZEdQUiwgdGFnR1BSKTsKKyAgICAgICAgbW92ZUludHNU
b0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZwciwgc2NyYXRjaEZQUik7CiAgICAgfQogI2Vu
ZGlmCiAgICAgCkBAIC0zNjQsOCArMzQ1LDYgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogICAg
IAotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsKLQogcHJvdGVjdGVkOgogICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTMwODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMzQsNyArMjIzNCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLCByZXN1bHRSZWcpOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0go
KTsKICAgICB9CiAgICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25l
ZFR5cGVkQXJyYXkpIHsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGls
ZUluZGV4KTsKQEAgLTIzNDQsNyArMjM0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRm91cikpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgaWYgKG5vZGUu
b3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMubGluaygmbV9qaXQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTMwODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM3LDE0ICsyMjM3LDYgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVNv
ZnRNb2R1bG8oTm9kZSYpOwotICAgIGVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3MgewotICAgICAg
ICBTaWduZWRUeXBlZEFycmF5LAotICAgICAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLSAgICB9Owot
ICAgIGVudW0gVHlwZWRBcnJheVJvdW5kaW5nIHsKLSAgICAgICAgVHJ1bmNhdGVSb3VuZGluZywK
LSAgICAgICAgQ2xhbXBSb3VuZGluZwotICAgIH07CiAgICAgdm9pZCBjb21waWxlR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgc2l6ZV90IGVsZW1l
bnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2Us
IEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNp
Z25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyA9IFRydW5jYXRlUm91bmRpbmcpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMzA4MjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsNiArNDk3LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0IGluIHJlZ1QwLCBh
bmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAg
ICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7
CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
c2l6ZV90IGVsZW1lbnRTaXplKTsKICAgICAgICAgCiAgICAgICAgIC8vIFByb3BlcnR5IGlzIGlu
IHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgog
ICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5
IGlzIGludC1jaGVja2VkIGFuZApAQCAtNTA0LDcgKzUwNiw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgogICAgICAgICBKdW1wTGlzdCBlbWl0
Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7
CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotCisgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNp
Z25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9h
dFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAg
ICAgCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RG
aW5hbCB9OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MTMwODI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENS
QVNIKCk7CiAgICAgfQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwpAQCAtMzM3LDYg
KzMzOSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBj
YXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAKICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMzA4MjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDYgKzEyNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5z
dHJ1Y3Rpb24KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKQEAgLTMwNCw2ICsz
MDcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgY2Fz
ZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAg
CiAgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CkBAIC0xNDEzLDYgKzE0MTksMzMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9y
YWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRJbnQ4
QXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEtPmludDhBcnJheURlc2NyaXB0
b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklU
SW50MTZBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50MTZBcnJheURl
c2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSklUSW50MzJBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSklUVWludDhBcnJheToKKyAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5Ogor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAx
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVFVpbnQx
NkFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBKSVRVaW50MzJBcnJheToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDMy
QXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Rmxv
YXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2Jh
bERhdGEtPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSklURmxvYXQ2NEFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2JhbERhdGEt
PmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIENSQVNIKCk7CiAgICAgfQogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKQEAgLTE0NDcsNiArMTQ4MCwzNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwog
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fZ2xvYmFsRGF0YS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5
LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRJbnQxNkFy
cmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5pbnQxNkFycmF5RGVzY3JpcHRv
cigpLCAyLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKSVRJbnQzMkFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxE
YXRhLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0
ZVJvdW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBV
bnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxE
YXRhLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5
LCBDbGFtcFJvdW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRVaW50MTZBcnJh
eToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fZ2xvYmFsRGF0YS0+dWludDE2QXJyYXlEZXNjcmlwdG9y
KCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX2dsb2Jh
bERhdGEtPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRy
dW5jYXRlUm91bmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEZsb2F0MzJBcnJh
eToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9hdDMyQXJyYXlEZXNjcmlw
dG9yKCksIDQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEZsb2F0NjRBcnJheToKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgbV9nbG9iYWxEYXRhLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCks
IDgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwpAQCAtMTQ2
Nyw2ICsxNTMwLDI1MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbElu
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKIH0KIAorSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
c2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQorewor
ICAgIC8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBlIGlzIHRvIHVzZSB0aGUg
Y2xhc3NJbmZvLiBXZSBuZWVkIHRvIGRvIHNvIHdpdGhvdXQKKyAgICAvLyBjbG9iYmVyaW5nIHRo
ZSByZWdpc3RlciB0aGF0IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBiYXNlLCBhbmQgcHJvcGVy
dHkuCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwor
ICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHJlc3VsdFBh
eWxvYWQgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbHNlCisg
ICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJl
Z1QyOworICAgIFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCA9IHJlZ1QwOworICAgIFJlZ2lzdGVy
SUQgcmVzdWx0VGFnID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7Cisj
ZW5kaWYKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9j
bGFzc0luZm8pKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNl
KTsKKyAgICAKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgY2FzZSAxOgorICAgICAg
ICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICAgICAgbG9hZDhT
aWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoYmFzZSwgcHJvcGVy
dHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
MjoKKyAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAg
ICAgIGxvYWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVz
dWx0UGF5bG9hZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgo
YmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgNDoKKyAgICAgICAgbG9hZDMyKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwg
VGltZXNGb3VyKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9uZTsKKyAgICBpZiAo
ZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSkgewor
ICAgICAgICBKdW1wIGNhbkJlSW50ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZXN1
bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAKKyAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBSZWdUMCk7CisgICAgICAgIGFkZERvdWJsZShB
YnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBmcFJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMCwgcmVzdWx0UGF5bG9hZCk7CisgICAg
ICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOworI2Vsc2UK
KyAgICAgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQYXlsb2FkLCByZXN1bHRU
YWcpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBkb25lID0ganVtcCgpOworICAgICAgICBj
YW5CZUludC5saW5rKHRoaXMpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgb3JQ
dHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKKyNlbHNlCisgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWcpOworI2VuZGlmCisg
ICAgaWYgKGRvbmUuaXNTZXQoKSkKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIHJldHVy
biBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQoreworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0
ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCA9IHJl
Z1QwOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2Vsc2UKKyAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAg
UmVnaXN0ZXJJRCByZXN1bHRQYXlsb2FkID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCByZXN1bHRU
YWcgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyNlbmRpZgorICAg
IAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIAor
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGxvYWRGbG9h
dChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVnVDApOworICAgICAg
ICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSA4OiB7CisgICAgICAgIGxvYWREb3VibGUoQmFzZUluZGV4KGJhc2UsIHByb3Bl
cnR5LCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CisgICAgICAgIEp1bXAgbm90TmFOID0gYnJhbmNo
RG91YmxlKERvdWJsZUVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBOYU4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OworICAgICAgICBsb2FkRG91YmxlKCZOYU4sIGZwUmVnVDApOworICAgICAgICBub3ROYU4ubGlu
ayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbW92ZURvdWJsZVRv
UHRyKGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOworICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlc3VsdFBheWxvYWQpOworI2Vsc2UKKyAgICBtb3ZlRG91YmxlVG9JbnRzKGZwUmVn
VDAsIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisjZW5kaWYKKyAgICByZXR1cm4gc2xvd0Nh
c2VzOyAgICAKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50
U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5n
IHJvdW5kaW5nKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQg
ZWFybHlTY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1Qy
OworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHBy
b3BlcnR5ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKKyAg
ICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7CisjZW5kaWYKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBB
ZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0
Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIo
ZWFybHlTY3JhdGNoKSk7CisjZWxzZQorICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwg
ZWFybHlTY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBs
YXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworI2VuZGlmCisg
ICAgCisgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRf
YnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdworICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFz
ZSB0byBiZSB1bmNsb2JiZXJlZC4KKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRv
ci5tX3N0b3JhZ2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAgCisgICAgaWYgKHJvdW5kaW5n
ID09IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBVbnNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFs
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgIEp1bXAgdG9vQmln
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYp
KTsKKyAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOworICAgICAgICBK
dW1wIGNsYW1wZWQgPSBqdW1wKCk7CisgICAgICAgIHRvb0JpZy5saW5rKHRoaXMpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigweGZmKSwgZWFybHlTY3JhdGNoKTsKKyAgICAgICAgY2xhbXBl
ZC5saW5rKHRoaXMpOworICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOworICAgIH0KKyAgICAK
KyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgICBzdG9yZTgo
ZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIHN0b3JlMTYoZWFybHlTY3Jh
dGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc1R3bykpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIHN0b3JlMzIoZWFybHlTY3JhdGNoLCBCYXNl
SW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQ
dXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVs
ZW1lbnRTaXplKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQg
ZWFybHlTY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1Qy
OworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHBy
b3BlcnR5ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKKyAg
ICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7CisjZW5kaWYKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOworICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBB
ZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0
Y2gpOworICAgIEp1bXAgZG91YmxlQ2FzZSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2Vy
KGVhcmx5U2NyYXRjaCk7CisgICAgY29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBm
cFJlZ1QwKTsKKyAgICBKdW1wIHJlYWR5ID0ganVtcCgpOworICAgIGRvdWJsZUNhc2UubGluayh0
aGlzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIo
ZWFybHlTY3JhdGNoKSk7CisgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZWFybHlT
Y3JhdGNoKTsKKyAgICBtb3ZlUHRyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKKyAg
ICByZWFkeS5saW5rKHRoaXMpOworI2Vsc2UKKyAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0
Y2gsIGVhcmx5U2NyYXRjaCk7CisgICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoMzIoTm90RXF1
YWwsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOworICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7CisgICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOworICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRlU2Ny
YXRjaCwgZnBSZWdUMCwgZnBSZWdUMSk7CisgICAgcmVhZHkubGluayh0aGlzKTsKKyNlbmRpZgor
ICAgIAorICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0
X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKKyAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJh
c2UgdG8gYmUgdW5jbG9iYmVyZWQuCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0
b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIAorICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZw
UmVnVDAsIGZwUmVnVDApOworICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChs
YXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDg6CisgICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRj
aCwgcHJvcGVydHksIFRpbWVzRWlnaHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzMDgyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDUxLDIxICsyNDUxLDMzIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkg
ewogICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIHRoaXMgYXQgYWxsLgog
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICAgICAg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpOwotICAgICAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkp
IHsKLSAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwot
ICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVU
VVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKLSAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworCisgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldEZv
ck5vbkRGR0NvZGUoKTsKKyAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAg
QnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbElu
Zm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJv
dXRpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSkpIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUu
Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZz
ZXQpOwotICAgICAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIEFT
U0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChpc09wdGltaXph
YmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlw
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2Rl
KQotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVU
VVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAg
ICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBh
cnJheU1vZGUpOworICAgICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFkaWRPcHRpbWl6ZSkgewor
ICAgICAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdp
dGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAgICAgIC8vIG5ldmVyIG1h
a2UgdGhhdCBtaXN0YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBo
YXZlIHNvbWUgb2JqZWN0CisgICAgICAgICAgICAvLyB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBn
ZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLiBGb3IgY2FzZXMKKyAgICAg
ICAgICAgIC8vIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVjdHMsIHRo
aXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZgorICAgICAgICAgICAgLy8gb3Bwb3J0dW5p
dHkgZm9yIHVzIHRvIG9ic2VydmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBo
aWMuCisgICAgICAgICAgICBpZiAoKytieVZhbEluZm8uc2xvd1BhdGhDb3VudCA+PSAxMAorICAg
ICAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCisgICAgICAgICAg
ICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkp
OworICAgICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihT
VFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmlj
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTczLDIxICsyNTg1LDMz
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKICAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewogICAgICAgICAvLyBT
ZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKLSAgICAgICAgaWYg
KG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Ci0gICAgICAgICAgICAvLyBE
b250IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwotICAgICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAg
ICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8g
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAx
KTsKKyAgICAgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUoKSkpIHsK
ICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2Rl
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgQnlW
YWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8o
Ynl0ZWNvZGVPZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJS
b3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4
aW5nVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0
QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQotICAgICAgICAgICAgICAgICAg
ICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9k
ZSk7CisgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9y
U3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKGFycmF5TW9k
ZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxl
UHV0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAg
ICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghZGlkT3B0aW1pemUpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIHRha2Ugc2xv
dyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJl
IHdlCisgICAgICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gT3IsIGlm
IHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdAorICAgICAgICAgICAg
Ly8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRp
bCAxMCB0aW1lcy4gRm9yIGNhc2VzCisgICAgICAgICAgICAvLyB3aGVyZSB3ZSBzZWUgbm9uLWlu
ZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGgg
b2YKKyAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlIHRoYXQgdGhl
IGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLgorICAgICAgICAgICAgaWYgKCsrYnlWYWxJ
bmZvLnNsb3dQYXRoQ291bnQgPj0gMTAKKyAgICAgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8oKSkgeworICAgICAgICAgICAgICAgIC8vIERvbid0IGV2ZXIg
dHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24oU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25Q
dHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlz
aW9uIDEzMDgyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNWYWx1ZUlubGluZU1l
dGhvZHMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCiAjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTQ5LDE5ICs1MCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzCiAgICAgfTsKIAotICAgIGVudW0g
VHlwZWRBcnJheVR5cGUgewotICAgICAgICBUeXBlZEFycmF5Tm9uZSwKLSAgICAgICAgVHlwZWRB
cnJheUludDgsCi0gICAgICAgIFR5cGVkQXJyYXlJbnQxNiwKLSAgICAgICAgVHlwZWRBcnJheUlu
dDMyLAotICAgICAgICBUeXBlZEFycmF5VWludDgsCi0gICAgICAgIFR5cGVkQXJyYXlVaW50OENs
YW1wZWQsCi0gICAgICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgICAgIFR5cGVkQXJyYXlVaW50
MzIsCi0gICAgICAgIFR5cGVkQXJyYXlGbG9hdDMyLAotICAgICAgICBUeXBlZEFycmF5RmxvYXQ2
NAotICAgIH07Ci0KICAgICBjbGFzcyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgSlNW
YWx1ZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEzMDgyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAi
VGVybWluYXRvci5oIgogI2luY2x1ZGUgIlRpbWVvdXRDaGVja2VyLmgiCisjaW5jbHVkZSAiVHlw
ZWRBcnJheURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8
d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAg
LTEwOCwyNCArMTA5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRocmVhZFN0YWNrVHlw
ZVNtYWxsCiAgICAgfTsKIAotICAgIHN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0gICAg
ICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKCkKLSAgICAgICAgICAgIDogbV9jbGFzc0luZm8oMCkK
LSAgICAgICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICAgICAsIG1fbGVuZ3Ro
T2Zmc2V0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90IHN0b3JhZ2VPZmZzZXQsIHNp
emVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykK
LSAgICAgICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICAg
ICAsIG1fbGVuZ3RoT2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0g
ICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0gICAgICAgIHNpemVfdCBtX3N0
b3JhZ2VPZmZzZXQ7Ci0gICAgICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLSAgICB9OwotCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiAKQEAgLTQy
OSw2ICs0MTIsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOwogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlG
dW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbgorICAgICAgICAKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVk
QXJyYXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5Tm9u
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJh
eUludDg6CisgICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
JmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQz
MjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7CisgICAg
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICAgICAgICAgICAgICByZXR1cm4gJnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENs
YW1wZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURlc2NyaXB0
b3IoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgICAgICAgICAg
ICAgIHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5RmxvYXQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRBcnJheURl
c2NyaXB0b3IoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
CiAgICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNj
cmlwdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRB
cnJheURlc2NyaXB0b3JfaAorI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCisKK25hbWVz
cGFjZSBKU0MgeworCitzdHJ1Y3QgQ2xhc3NJbmZvOworCitlbnVtIFR5cGVkQXJyYXlUeXBlIHsK
KyAgICBUeXBlZEFycmF5Tm9uZSwKKyAgICBUeXBlZEFycmF5SW50OCwKKyAgICBUeXBlZEFycmF5
SW50MTYsCisgICAgVHlwZWRBcnJheUludDMyLAorICAgIFR5cGVkQXJyYXlVaW50OCwKKyAgICBU
eXBlZEFycmF5VWludDhDbGFtcGVkLAorICAgIFR5cGVkQXJyYXlVaW50MTYsCisgICAgVHlwZWRB
cnJheVVpbnQzMiwKKyAgICBUeXBlZEFycmF5RmxvYXQzMiwKKyAgICBUeXBlZEFycmF5RmxvYXQ2
NAorfTsKKworc3RydWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKKyAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvcigpCisgICAgICAgIDogbV9jbGFzc0luZm8oMCkKKyAgICAgICAgLCBtX3N0b3JhZ2VP
ZmZzZXQoMCkKKyAgICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAg
VHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBz
dG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQorICAgICAgICA6IG1fY2xhc3NJbmZv
KGNsYXNzSW5mbykKKyAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKKyAg
ICAgICAgLCBtX2xlbmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCisgICAgeworICAgIH0KKyAgICBj
b25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOworICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7
CisgICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0OworfTsKKworZW51bSBUeXBlZEFycmF5U2lnbmVk
bmVzcyB7CisgICAgU2lnbmVkVHlwZWRBcnJheSwKKyAgICBVbnNpZ25lZFR5cGVkQXJyYXkKK307
CitlbnVtIFR5cGVkQXJyYXlSb3VuZGluZyB7CisgICAgVHJ1bmNhdGVSb3VuZGluZywKKyAgICBD
bGFtcFJvdW5kaW5nCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVk
QXJyYXlEZXNjcmlwdG9yX2gKKwo=
</data>
<flag name="commit-queue"
          id="180695"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>