<?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>93942</bug_id>
          
          <creation_ts>2012-08-14 01:21:30 -0700</creation_ts>
          <short_desc>Rename LayoutTestController to TestRunner in WebKitTestRunner</short_desc>
          <delta_ts>2012-08-15 18:22:33 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>88210</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>694645</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-14 01:21:30 -0700</bug_when>
    <thetext>Rename LayoutTestController to TestRunner in WebKitTestRunner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694647</commentid>
    <comment_count>1</comment_count>
      <attachid>158255</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-14 01:23:27 -0700</bug_when>
    <thetext>Created attachment 158255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694655</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-14 01:27:42 -0700</bug_when>
    <thetext>Attachment 158255 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/WebKitTestRunner...&quot; exit_code: 1
Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:282:  One line control clauses should not use braces.  [whitespace/braces] [4]
Tools/WebKitTestRunner/InjectedBundle/TestRunner.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp:57:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 3 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696537</commentid>
    <comment_count>3</comment_count>
      <attachid>158255</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-15 17:22:08 -0700</bug_when>
    <thetext>Comment on attachment 158255
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696589</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-15 18:22:33 -0700</bug_when>
    <thetext>Committed r125732: &lt;http://trac.webkit.org/changeset/125732&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158255</attachid>
            <date>2012-08-14 01:23:27 -0700</date>
            <delta_ts>2012-08-15 17:22:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93942-20120814012255.patch</filename>
            <type>text/plain</type>
            <size>215053</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEyNTUyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDc1IEBACisyMDEyLTA4LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSBMYXlvdXRUZXN0Q29udHJvbGxlciB0byBUZXN0UnVubmVyIGluIFdl
YktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkzOTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVuYW1lZCB0aGUgY2xhc3MgYW5kIHJlbGV2YW50IGZpbGVzLgorCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0Rlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9HTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0xheW91dFRlc3RDb250cm9sbGVyLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOiBDb3Bp
ZWQgZnJvbSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0xh
eW91dFRlc3RDb250cm9sbGVyLmlkbC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0Rlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmJlZ2luVGVzdGluZyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5oOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6dGVz
dFJ1bm5lcik6CisgICAgICAgIChJbmplY3RlZEJ1bmRsZSk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1RhcmdldC5wcmk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDogQ29waWVkIGZyb20gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAuCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6IENvcGllZCBm
cm9tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaC4KKyAgICAgICAgKFRlc3RSdW5uZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVu
bmVyRWZsLmNwcDogQ29waWVkIGZyb20gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwLgorICAgICAgICAoV1RSOjp3YWl0
VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW52YWxpZGF0
ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5p
dGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQpOgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6cGxhdGZvcm1OYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHA6IENv
cGllZCBmcm9tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcC4KKyAgICAgICAgKFdUUjo6d2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmluaXRpYWxpemVXYWl0VG9E
dW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cGF0
aFRvTG9jYWxSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnBsYXRmb3JtTmFt
ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbTogQ29waWVkIGZyb20gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1l
cik6CisgICAgICAgIChXVFI6OndhaXRVbnRpbERvbmVXYXRjaGRvZ1RpbWVyRmlyZWQpOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJ
Zk5lZWRlZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2Up
OgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpwbGF0Zm9ybU5hbWUpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9x
dC9UZXN0UnVubmVyUXQuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwLgorICAgICAgICAoV1RS
OjpXYXRjaGRvZ1RpbWVySGVscGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW52
YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQpOgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6cGxhdGZvcm1OYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vVGVzdFJ1bm5lcldpbi5j
cHA6IENvcGllZCBmcm9tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW52YWxpZGF0
ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKToKKyAgICAgICAgKFdUUjo6d2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXJGaXJlZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmluaXRpYWxpemVXYWl0
VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cGF0aFRvTG9jYWxSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnBsYXRmb3Jt
TmFtZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFrZToKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9JbmplY3RlZEJ1bmRs
ZS52Y3Byb2o6CisKIDIwMTItMDgtMTMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmVuYW1lIExheW91dFRlc3RDb250cm9sbGVyIHRvIFRlc3RSdW5uZXIgaW4g
RHVtcFJlbmRlclRyZWUKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBTRVQoV2ViS2l0VGVzdFJ1bm5lcklu
amVjdGVkQnVuZGxlX1NPVVJDCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9JTkpFQ1RFREJVTkRM
RV9ESVJ9L0luamVjdGVkQnVuZGxlLmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJfSU5KRUNU
RURCVU5ETEVfRElSfS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJV
Tk5FUl9JTkpFQ1RFREJVTkRMRV9ESVJ9L0luamVjdGVkQnVuZGxlUGFnZS5jcHAKLSAgICAke1dF
QktJVF9URVNUUlVOTkVSX0lOSkVDVEVEQlVORExFX0RJUn0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCisgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9JTkpFQ1RFREJVTkRMRV9ESVJ9L1Rlc3RSdW5u
ZXIuY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9JTkpFQ1RFREJVTkRMRV9ESVJ9L1RleHRJ
bnB1dENvbnRyb2xsZXIuY3BwCiAKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0lOSkVDVEVEQlVO
RExFX0RJUn0vQmluZGluZ3MvSlNXcmFwcGVyLmNwcApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIElOVEVSRkFDRVMgPSBcCiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBcCiAg
ICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlciBcCiAgICAgR0NDb250cm9sbGVyIFwKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciBcCisgICAgVGVzdFJ1bm5lciBcCiAgICAgVGV4dElucHV0Q29udHJv
bGxlciBcCiAjCiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB3ZWJraXR0ZXN0cnVubmVyX2J1aWx0X3Nv
dXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTRXZlbnRT
ZW5kaW5nQ29udHJvbGxlci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pT
R0NDb250cm9sbGVyLmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvSW5qZWN0ZWRCdW5kbGUvSlNMYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pT
VGVzdFJ1bm5lci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTVGV4dElu
cHV0Q29udHJvbGxlci5jcHAKIG5vZGlzdF9MaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVk
QnVuZGxlX2xhX1NPVVJDRVMgPSAkKHdlYmtpdHRlc3RydW5uZXJfYnVpbHRfc291cmNlcykKIEJV
SUxUX1NPVVJDRVMgKz0gJCh3ZWJraXR0ZXN0cnVubmVyX2J1aWx0X3NvdXJjZXMpCkBAIC05OCwx
NCArOTgsMTQgQEAgTGlicmFyaWVzX2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZV9sYQogCVRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRHdGsuY3BwIFwKIAlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0
ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcCBcCiAJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIFwKLQlUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAgXAorCVRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3Bw
IFwKIAlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmNwcCBcCiAJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oIFwKIAlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlTWFpbi5jcHAgXAogCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBcCiAJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaCBcCi0JVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgXAotCVRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBcCisJVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBcCisJVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggXAogCVRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAgXAog
CVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxl
ci5oCiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2
aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFr
ZQkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXRUZXN0
UnVubmVySW5qZWN0ZWRCdW5kCiAKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0lOSkVDVEVEQlVO
RExFX0RJUn0vZWZsL0FjdGl2YXRlRm9udHNFZmwuY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5F
Ul9JTkpFQ1RFREJVTkRMRV9ESVJ9L2VmbC9JbmplY3RlZEJ1bmRsZUVmbC5jcHAKLSAgICAke1dF
QktJVF9URVNUUlVOTkVSX0lOSkVDVEVEQlVORExFX0RJUn0vZWZsL0xheW91dFRlc3RDb250cm9s
bGVyRWZsLmNwcAorICAgICR7V0VCS0lUX1RFU1RSVU5ORVJfSU5KRUNURURCVU5ETEVfRElSfS9l
ZmwvVGVzdFJ1bm5lckVmbC5jcHAKICkKIAogIyBGSVhNRTogRE9XTkxPQURFRF9GT05UU19ESVIg
c2hvdWxkIG5vdCBoYXJkY29kZSB0aGUgZGlyZWN0b3J5CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0Rlcml2ZWRTb3VyY2VzLnByaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Rlcml2ZWRTb3VyY2VzLnByaQko
cmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9EZXJpdmVkU291cmNlcy5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAgSURM
X0JJTkRJTkdTICs9IFwKICAgICBCaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbCBc
CiAgICAgQmluZGluZ3MvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5pZGwgXAogICAgIEJpbmRpbmdz
L0dDQ29udHJvbGxlci5pZGwgXAotICAgIEJpbmRpbmdzL0xheW91dFRlc3RDb250cm9sbGVyLmlk
bCBcCisgICAgQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwgXAogICAgIEJpbmRpbmdzL1RleHRJbnB1
dENvbnRyb2xsZXIuaWRsIFwKIAogIyBHRU5FUkFUT1IgMTogSURMIGNvbXBpbGVyCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
OSwxOSArMTY5LDE5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFcK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKSkgewot
ICAgICAgICBtX2xheW91dFRlc3RDb250cm9sbGVyLT5jYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENh
bGxiYWNrKCk7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+Y2FsbEFkZENocm9tZUlucHV0RmllbGRD
YWxsYmFjaygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRD
YWxsYmFjayIpKSB7Ci0gICAgICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPmNhbGxSZW1vdmVD
aHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soKTsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5jYWxsUmVt
b3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxsRm9j
dXNXZWJWaWV3Q2FsbGJhY2siKSkgewotICAgICAgICBtX2xheW91dFRlc3RDb250cm9sbGVyLT5j
YWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKTsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5jYWxsRm9j
dXNXZWJWaWV3Q2FsbGJhY2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNhbGxTZXRCYWNraW5nU2Nh
bGVGYWN0b3JDYWxsYmFjayIpKSB7Ci0gICAgICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPmNh
bGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOworICAgICAgICBtX3Rlc3RSdW5uZXIt
PmNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKFdLRGljdAogICAgIG1fcmVwYWludFJlY3RzLmNsZWFyKCk7CiAgICAgbV9zdHJpbmdCdWls
ZGVyLT5jbGVhcigpOwogCi0gICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RD
b250cm9sbGVyOjpjcmVhdGUoKTsKKyAgICBtX3Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpjcmVh
dGUoKTsKICAgICBtX2djQ29udHJvbGxlciA9IEdDQ29udHJvbGxlcjo6Y3JlYXRlKCk7CiAgICAg
bV9ldmVudFNlbmRpbmdDb250cm9sbGVyID0gRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y3JlYXRl
KCk7CiAgICAgbV90ZXh0SW5wdXRDb250cm9sbGVyID0gVGV4dElucHV0Q29udHJvbGxlcjo6Y3Jl
YXRlKCk7CkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKFdLRGljdAogCiAgICAgV0tCdW5kbGVSZW1vdmVBbGxVc2VyQ29udGVudChtX2J1bmRsZSwg
bV9wYWdlR3JvdXApOwogCi0gICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0U2hvdWxkRHVt
cEZyYW1lTG9hZENhbGxiYWNrcyhib29sZWFuRm9yS2V5KHNldHRpbmdzLCAiRHVtcEZyYW1lTG9h
ZERlbGVnYXRlcyIpKTsKKyAgICBtX3Rlc3RSdW5uZXItPnNldFNob3VsZER1bXBGcmFtZUxvYWRD
YWxsYmFja3MoYm9vbGVhbkZvcktleShzZXR0aW5ncywgIkR1bXBGcmFtZUxvYWREZWxlZ2F0ZXMi
KSk7CiAKICAgICBwYWdlKCktPnByZXBhcmUoKTsKIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAkocmV2aXNp
b24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFdmVudFNlbmRpbmdDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1JldGFpblB0ci5oPgpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0tCdW5k
bGVSZWYgYnVuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9idW5kbGU7IH0KICAgICBXS0J1bmRsZVBh
Z2VHcm91cFJlZiBwYWdlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VHcm91cDsgfQogCi0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGxheW91dFRlc3RDb250cm9sbGVyKCkgeyByZXR1cm4g
bV9sYXlvdXRUZXN0Q29udHJvbGxlci5nZXQoKTsgfQorICAgIFRlc3RSdW5uZXIqIHRlc3RSdW5u
ZXIoKSB7IHJldHVybiBtX3Rlc3RSdW5uZXIuZ2V0KCk7IH0KICAgICBHQ0NvbnRyb2xsZXIqIGdj
Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fZ2NDb250cm9sbGVyLmdldCgpOyB9CiAgICAgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlciogZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZXZl
bnRTZW5kaW5nQ29udHJvbGxlci5nZXQoKTsgfQogICAgIFRleHRJbnB1dENvbnRyb2xsZXIqIHRl
eHRJbnB1dENvbnRyb2xsZXIoKSB7IHJldHVybiBtX3RleHRJbnB1dENvbnRyb2xsZXIuZ2V0KCk7
IH0KQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxPd25QdHI8SW5qZWN0
ZWRCdW5kbGVQYWdlPiA+IG1fcGFnZXM7CiAKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7Ci0gICAgUmVmUHRyPExheW91dFRlc3RD
b250cm9sbGVyPiBtX2xheW91dFRlc3RDb250cm9sbGVyOworICAgIFJlZlB0cjxUZXN0UnVubmVy
PiBtX3Rlc3RSdW5uZXI7CiAgICAgUmVmUHRyPEdDQ29udHJvbGxlcj4gbV9nY0NvbnRyb2xsZXI7
CiAgICAgUmVmUHRyPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IG1fZXZlbnRTZW5kaW5nQ29udHJv
bGxlcjsKICAgICBSZWZQdHI8VGV4dElucHV0Q29udHJvbGxlcj4gbV90ZXh0SW5wdXRDb250cm9s
bGVyOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMTI1NTE3KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFN0YXJ0UHJvdmlzaQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIGR1bXBGcmFt
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsKICAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgLSBkaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lXG4iKTsKICAgICB9CkBAIC02MTEsNyArNjExLDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxQcm92aXNpbwogICAgICAgICByZXR1cm47CiAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFRvcExvYWRpbmdGcmFtZSgwKTsKIAotICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2Fp
dFRvRHVtcCgpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT53YWl0VG9EdW1wKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5kb25lKCk7CkBAIC02MjIsNyArNjIyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZENvbW1pdExvYWRGbwogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7CkBAIC02
MzQsNyArNjM0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaFByb2dyZQog
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpKQorICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFBy
b2dyZXNzRmluaXNoZWRDYWxsYmFjaygpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoInBvc3RQcm9ncmVzc0Zp
bmlzaGVkTm90aWZpY2F0aW9uXG4iKTsKQEAgLTc0Miw3ICs3NDIsNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcCgpCiB7CiAgICAgQVNTRVJUKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5pc1Rlc3RSdW5uaW5nKCkpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91
dFRlc3RDb250cm9sbGVyKCktPmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmludmFsaWRhdGVXYWl0
VG9EdW1wV2F0Y2hkb2dUaW1lcigpOwogCiAgICAgLy8gRm9yY2UgYSBwYWludCBiZWZvcmUgZHVt
cGluZy4gVGhpcyBtYXRjaGVzIER1bXBSZW5kZXJUcmVlIG9uIFdpbmRvd3MuIChEdW1wUmVuZGVy
VHJlZSBvbiBNYWMKICAgICAvLyBkb2VzIHRoaXMgYXQgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGlt
ZS4pIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcvYi81NTQ2OT4gZm9yIGRldGFpbHMuCkBAIC03NTEs
MzEgKzc1MSwzMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwogICAg
IFdURjo6U3RyaW5nIHVybCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwoZnJhbWUpKS5nZXQoKSkpKTsKICAgICBpZiAodXJs
LmZpbmQoImR1bXBBc1RleHQvIikgIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPmR1bXBBc1RleHQoZmFsc2Up
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5kdW1wQXNU
ZXh0KGZhbHNlKTsKIAotICAgIHN3aXRjaCAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91
dFRlc3RDb250cm9sbGVyKCktPndoYXRUb0R1bXAoKSkgewotICAgIGNhc2UgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OlJlbmRlclRyZWU6IHsKKyAgICBzd2l0Y2ggKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS50ZXN0UnVubmVyKCktPndoYXRUb0R1bXAoKSkgeworICAgIGNhc2UgVGVzdFJ1bm5lcjo6
UmVuZGVyVHJlZTogewogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGV4dChBZG9w
dFdLLCBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24obV9w
YWdlKSk7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIExheW91dFRlc3RDb250cm9sbGVyOjpNYWluRnJhbWVUZXh0OgorICAgIGNhc2UgVGVzdFJ1
bm5lcjo6TWFpbkZyYW1lVGV4dDoKICAgICAgICAgZHVtcEZyYW1lVGV4dChXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUobV9wYWdlKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OkFsbEZyYW1lc1RleHQ6CisgICAgY2FzZSBUZXN0UnVubmVyOjpBbGxGcmFt
ZXNUZXh0OgogICAgICAgICBkdW1wQWxsRnJhbWVzVGV4dCgpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPnNob3VsZER1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucygpKQorICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQWxsRnJhbWVTY3Jv
bGxQb3NpdGlvbnMoKSkKICAgICAgICAgZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKCk7Ci0g
ICAgZWxzZSBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZER1bXBNYWluRnJhbWVTY3JvbGxQb3NpdGlvbigpKQorICAgIGVsc2UgaWYgKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBNYWluRnJhbWVT
Y3JvbGxQb3NpdGlvbigpKQogICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSk7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3Rz
Rm9yQWxsV2luZG93cygpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MoKSkKICAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFn
ZXMoKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2hvdWxkRHVtcFBpeGVs
cygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5z
aG91bGREdW1wUGl4ZWxzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNo
b3VsZER1bXBQaXhlbHMoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wUGl4ZWxzKCkpIHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnNldFBpeGVsUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RJblZpZXdD
b29yZGluYXRlcyhtX3BhZ2UsIFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVudEJvdW5kcyhX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSksIGtXS0ltYWdlT3B0aW9uc1NoYXJlYWJs
ZSkpLmdldCgpKTsKICAgICAgICAgaWYgKFdLQnVuZGxlUGFnZUlzVHJhY2tpbmdSZXBhaW50cyht
X3BhZ2UpKQogICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFJlcGFpbnRS
ZWN0cyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlUcmFja2VkUmVwYWludFJlY3RzKG1fcGFnZSkp
LmdldCgpKTsKQEAgLTc4OSw3ICs3ODksNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
RmluaXNoTG9hZEZvCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVu
bmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiAtIGRpZEZpbmlzaExvYWRGb3JGcmFt
ZVxuIik7CiAgICAgfQpAQCAtNzk4LDcgKzc5OCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRGaW5pc2hMb2FkRm8KICAgICAgICAgcmV0dXJuOwogICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zZXRUb3BMb2FkaW5nRnJhbWUoMCk7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1bXAoKSkKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5kdW1w
KCk7CkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxM
b2FkV2l0aAogICAgICAgICByZXR1cm47CiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNl
dFRvcExvYWRpbmdGcmFtZSgwKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2FpdFRvRHVtcCgpKQorICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53YWl0VG9EdW1wKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5kb25lKCk7CkBAIC04MjQsMTQgKzgy
NCwxNCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlCiAgICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzKCkpIHsKICAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoZnJhbWUpOwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoIiAtIGRpZFJlY2VpdmVUaXRsZTogIik7CiAgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkp
OwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoIlxuIik7CiAgICAgfQogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKQorICAgIGlmICgh
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hh
bmdlcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlRJVExFIENIQU5HRUQ6ICIpOwpAQCAtODQ4LDEyICs4
NDgsMTIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93RgogICAgIEpT
T2JqZWN0UmVmIHdpbmRvdyA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KTsKIAog
ICAgIGlmIChXS0J1bmRsZVNjcmlwdFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkgewotICAg
ICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvdywgdG9KUygiX193b3JsZElE
IikuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIExheW91dFRlc3RDb250cm9sbGVy
Ojp3b3JsZElERm9yV29ybGQod29ybGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwg
MCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93LCB0b0pTKCJf
X3dvcmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgVGVzdFJ1bm5lcjo6
d29ybGRJREZvcldvcmxkKHdvcmxkKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDAp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAw
OwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5t
YWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0
LCB3aW5kb3csICZleGNlcHRpb24pOwogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5nY0Nv
bnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24p
OwogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5ldmVudFNlbmRpbmdDb250cm9sbGVyKCkt
Pm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CkBAIC04NzEsNyArODcxLDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENhbmNlbENsaWVudAogICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChmcmFtZSk7CkBAIC04ODMsNyArODgzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OndpbGxQZXJmb3JtQ2xpZQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBk
dW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7CkBAIC05MDEs
NyArOTAxLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaERvY3VtZQogICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29u
dHJvbGxlcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKSB7CiAgICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KGZyYW1lKTsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCIgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZVxuIik7CiAg
ICAgfQpAQCAtOTIwLDcgKzkyMCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5k
bGVPbmxvYWQKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5n
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7
CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9y
RnJhbWVcbiIpOwogICAgIH0KQEAgLTk1Niw3ICs5NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
aXNIVFRQT3JIVFRQU1NjaGVtZShXCiAKIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBh
Z2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgdWludDY0X3QsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBXS1VSTFJlc3Bv
bnNlUmVmKQogewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmlu
ZygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT53
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29w
eVVSTChyZXF1ZXN0KSk7CkBAIC05OTUsNyArOTk1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZFJlY2VpdmVSZXNwbwogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJM
UmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CkBAIC0xMDQ4LDEwICsxMDQ4LDEwIEBAIFdLQnVu
ZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVAKICAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiBXS0J1bmRsZVBh
Z2VQb2xpY3lBY3Rpb25Vc2U7CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgpKQorICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0
ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblVzZTsK
IAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIo
KS0+d2FpdFRvRHVtcCgpKSB7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPndhaXRUb0R1bXAoKSkgewogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdXJsID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1
ZXN0KSkpOwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwogICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJp
bmcodXJsKSk7CkBAIC0xMDY1LDEwICsxMDY1LDEwIEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlv
biBJbmplY3RlZEJ1bmRsZVAKICAgICAgICAgfQogCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+bm90aWZ5RG9uZSgp
OwogICAgIH0KIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmUoKSkKKyAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZVBlcm1pc3Np
dmUoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblVzZTsKICAgICBy
ZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91Z2g7CiB9CkBAIC0xMTYxLDcg
KzExNjEsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhCiAgICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29u
dHJvbGxlcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0
dXNUZXh0OiIpOwpAQCAtMTI2MCwxMiArMTI2MCwxMiBAQCBib29sIEluamVjdGVkQnVuZGxlUGFn
ZTo6c2hvdWxkQmVnaW5FZGl0CiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTog
c2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dv
cmxkLmdldCgpLCByYW5nZSkpOwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiAgICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5n
KCk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxk
RW5kRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQpAQCAtMTI3MywxMiArMTI3
MywxMiBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluCiAgICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKSB7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6
Iik7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKICAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwog
ICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250
cm9sbGVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmIG5vZGUsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5zZXJ0
QWN0aW9uVHlwZSBhY3Rpb24pCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uRHJv
cHBlZCIsCiAgICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsK
ICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZSkpOwogICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiByZXBsYWNpbmdET01S
YW5nZToiKTsKQEAgLTEzMDEsNyArMTMwMSw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRJbnNlcnROb2QKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKICAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwogICAg
IH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleHQoV0tTdHJpbmdSZWYgdGV4dCwgV0tC
dW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZVRvUmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25UeXBlIGFj
dGlvbikKQEAgLTEzMTUsNyArMTMxNSw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91
bGRJbnNlcnRUZXgKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9
OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
IHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIpOwogICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmco
dGV4dCkpOwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIiByZXBsYWNpbmdET01SYW5nZToiKTsKQEAgLTEzMjQsNyArMTMyNCw3IEBAIGJv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnRUZXgKICAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGluc2VydGFjdGlvbnN0cmlu
Z1thY3Rpb25dKTsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKCJcbiIpOwogICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAg
IHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxv
d0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJh
bmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCkBAIC0xMzMyLDEyICsxMzMyLDEyIEBA
IGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGREZWxldGVSYW4KICAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
IHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiKTsKICAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9T
dHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwogICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiAgICAgfQotICAgIHJl
dHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hv
dWxkQWxsb3dFZGl0aW5nKCk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVm
IGZyb21SYW5nZSwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiB0b1JhbmdlLCBXS0FmZmluaXR5VHlw
ZSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKQEAgLTEzNTQsNyArMTM1NCw3IEBAIGJv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWwKICAgICAgICAgIlRSVUUiCiAg
ICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRy
b2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZCgiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToi
KTsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpKTsKICAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgdG9E
T01SYW5nZToiKTsKQEAgLTEzNjUsNyArMTM2NSw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpzaG91bGRDaGFuZ2VTZWwKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCiAgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29u
dHJvbGxlcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKIGJv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRBcHBseVN0eWxlKFdLQnVuZGxlQ1NTU3R5bGVE
ZWNsYXJhdGlvblJlZiBzdHlsZSwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKQEAgLTEz
NzMsMTQgKzEzNzMsMTQgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5U3R5
bAogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxh
eW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6
Iik7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZChzdHlsZURlY1RvU3RyKHN0eWxlKSk7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIpOwog
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
cmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7CiAgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKICAgICB9
Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9u
TmFtZSkKQEAgLTEzODgsNyArMTM4OCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRC
ZWdpbkVkaXRpbmcKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkg
eworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJl
Z2luRWRpdGluZzoiKTsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwpA
QCAtMTQwMCw3ICsxNDAwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRp
bmcoVwogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlv
dXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0
aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGlu
ZzoiKTsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwpAQCAtMTQxMiw3
ICsxNDEyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cgogICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29u
dHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpIHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIpOwogICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZT
dHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CkBAIC0xNDI0LDcgKzE0MjQsNyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0CiAgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNo
b3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246Iik7CiAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
Zyhub3RpZmljYXRpb25OYW1lKSk7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKQEAgLTE0MzQsMTcgKzE0MzQsMTcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdAogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzdXBwb3J0c0Z1bGxTY3JlZW4oV0tC
dW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLRnVsbFNjcmVlbktleWJvYXJkUmVxdWVzdFR5cGUgcmVx
dWVzdFR5cGUpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQorICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVl
bkNhbGxiYWNrcygpKQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQoInN1cHBvcnRzRnVsbFNjcmVlbigpID09IHRydWVcbiIpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVOb2RlSGFuZGxlUmVm
IGVsZW1lbnRSZWYpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRU
ZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQorICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNj
cmVlbkNhbGxiYWNrcygpKQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQoImVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoKVxuIik7CiAKLSAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5o
YXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSkgeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpIHsK
ICAgICAgICAgV0tCdW5kbGVQYWdlV2lsbEVudGVyRnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICAg
ICAgV0tCdW5kbGVQYWdlRGlkRW50ZXJGdWxsU2NyZWVuKHBhZ2VSZWYpOwogICAgIH0KQEAgLTE0
NTIsMTAgKzE0NTIsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmVudGVyRnVsbFNjcmVl
bgogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudFJlZikK
IHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCisgICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tz
KCkpCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgiZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOwogCi0gICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aGFzQ3VzdG9tRnVsbFNj
cmVlbkJlaGF2aW9yKCkpIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CiAgICAgICAgIFdLQnVu
ZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICAgICAgV0tCdW5kbGVQYWdl
RGlkRXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgfQpAQCAtMTQ2MywyMiArMTQ2MywyMiBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5GCiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpiZWdhbkVudGVyRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYsIFdLUmVj
dCwgV0tSZWN0KQogewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3Jl
ZW5DYWxsYmFja3MoKSkKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCJiZWdhbkVudGVyRnVsbFNjcmVlbigpXG4iKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBX
S1JlY3QsIFdLUmVjdCkKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91
dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxs
U2NyZWVuQ2FsbGJhY2tzKCkpCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiYmVnYW5FeGl0RnVsbFNjcmVlbigpXG4iKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmNsb3NlRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFn
ZVJlZikKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250
cm9sbGVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCisgICAgaWYgKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCgiY2xvc2VGdWxsU2NyZWVuKClcbiIpOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVl
bkJlaGF2aW9yKCkpIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CiAgICAgICAgIFdLQnVuZGxl
UGFnZVdpbGxFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICAgICAgV0tCdW5kbGVQYWdlRGlk
RXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJJbmplY3Rl
ZEJ1bmRsZS5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgotI2luY2x1ZGUgIkpT
TGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNp
bmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZVZpc2liaWxpdHlTdGF0ZS5oPgotI2luY2x1ZGUgPFdlYktp
dDIvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxl
RnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlRnJhbWVQcml2YXRlLmg+Ci0jaW5j
bHVkZSA8V2ViS2l0Mi9XS0J1bmRsZUluc3BlY3Rvci5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tC
dW5kbGVOb2RlSGFuZGxlUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdl
UHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQcml2YXRlLmg+Ci0jaW5jbHVk
ZSA8V2ViS2l0Mi9XS0J1bmRsZVNjcmlwdFdvcmxkLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tTZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4K
LSNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDJfQy5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgotCi0jaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQotI2luY2x1ZGUgPFdlYktpdDIv
V0tCdW5kbGVJbnRlbnRSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS0ludGVudERhdGEu
aD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RSIHsKLQotLy8gVGhpcyBpcyBsb3dlciB0aGFuIER1
bXBSZW5kZXJUcmVlJ3MgdGltZW91dCwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gd29yayB0aHJvdWdo
IHRoZSBmYWlsdXJlcwotLy8gRXZlbnR1YWxseSBpdCBzaG91bGQgYmUgY2hhbmdlZCB0byBtYXRj
aC4KLWNvbnN0IGRvdWJsZSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJJbnRlcnZhbCA9IDY7Ci0KLVBhc3NSZWZQdHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+IExh
eW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TGF5b3V0VGVzdENvbnRyb2xsZXIpOwotfQotCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0
VGVzdENvbnRyb2xsZXIoKQotICAgIDogbV93aGF0VG9EdW1wKFJlbmRlclRyZWUpCi0gICAgLCBt
X3Nob3VsZER1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucyhmYWxzZSkKLSAgICAsIG1fc2hvdWxk
RHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxXaW5kb3dzKGZhbHNlKQotICAgICwgbV9zaG91bGRB
bGxvd0VkaXRpbmcodHJ1ZSkKLSAgICAsIG1fc2hvdWxkQ2xvc2VFeHRyYVdpbmRvd3MoZmFsc2Up
Ci0gICAgLCBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9kdW1wU3RhdHVz
Q2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9kdW1wVGl0bGVDaGFuZ2VzKGZhbHNlKQotICAgICwg
bV9kdW1wUGl4ZWxzKHRydWUpCi0gICAgLCBtX2R1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKGZhbHNl
KQotICAgICwgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9kdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrKGZhbHNlKQotICAgICwgbV9kdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlcyhmYWxzZSkKLSAgICAsIG1fd2FpdFRvRHVtcChmYWxzZSkKLSAgICAsIG1fdGVz
dFJlcGFpbnQoZmFsc2UpCi0gICAgLCBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoZmFs
c2UpCi0gICAgLCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGZhbHNlKQotICAgICwgbV9w
b2xpY3lEZWxlZ2F0ZUVuYWJsZWQoZmFsc2UpCi0gICAgLCBtX3BvbGljeURlbGVnYXRlUGVybWlz
c2l2ZShmYWxzZSkKLSAgICAsIG1fZ2xvYmFsRmxhZyhmYWxzZSkKLSAgICAsIG1fY3VzdG9tRnVs
bFNjcmVlbkJlaGF2aW9yKGZhbHNlKQotICAgICwgbV91c2VyU3R5bGVTaGVldEVuYWJsZWQoZmFs
c2UpCi0gICAgLCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24oYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiIikpKQotewotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwotfQot
Ci1MYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKLXsKLX0KLQot
SlNDbGFzc1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKLXsKLSAgICBy
ZXR1cm4gSlNMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5b3V0VGVzdENvbnRyb2xsZXJDbGFzcygp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKLXsKLSAgICBXS0J1
bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2Uo
KTsKLSAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7Ci0gICAgV0tCdW5kbGVQYWdl
U2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7Ci0gICAgV0tCdW5kbGVQYWdlUmVzZXRUcmFj
a2VkUmVwYWludHMocGFnZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBB
c1RleHQoYm9vbCBkdW1wUGl4ZWxzKQotewotICAgIGlmIChtX3doYXRUb0R1bXAgPCBNYWluRnJh
bWVUZXh0KQotICAgICAgICBtX3doYXRUb0R1bXAgPSBNYWluRnJhbWVUZXh0OwotICAgIG1fZHVt
cFBpeGVscyA9IGR1bXBQaXhlbHM7Ci19Ci0KLS8vIEZJWE1FOiBOZWVkcyBhIGZ1bGwgaW1wbGVt
ZW50YXRpb24gc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjU0
Ngotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9v
bCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpCi17Ci0gICAgbV9wb2xpY3lEZWxlZ2F0ZUVuYWJs
ZWQgPSBlbmFibGVkOwotICAgIG1fcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlID0gcGVybWlzc2l2
ZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRl
KCkKLXsKLSAgICBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlKTsKLSAgICB3YWl0VW50aWxE
b25lKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRVbnRpbERvbmUoKQot
ewotICAgIG1fd2FpdFRvRHVtcCA9IHRydWU7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS51c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpKQotICAgICAgICBpbml0aWFsaXplV2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCkKLXsKLSAgICBpbnZhbGlkYXRl
V2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKTsKLSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZB
SUw6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQobWVzc2Fn
ZSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KCJcbiIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5kb25lKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQotewotICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fd2FpdFRvRHVtcCAmJiAhSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRvcExvYWRpbmdG
cmFtZSgpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5kdW1wKCk7
Ci0KLSAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKLX0KLQotdW5zaWduZWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IElzIGl0IE9LIHRoaXMgd29ya3Mgb25seSBmb3IgdGhlIG1haW4gZnJhbWU/Ci0gICAgLy8g
RklYTUU6IElmIHRoaXMgaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lLCB0aGVuIHdo
eSBpcyB0aGUgZnVuY3Rpb24gb24gV0tCdW5kbGVGcmFtZSBpbnN0ZWFkIG9mIFdLQnVuZGxlUGFn
ZT8KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIHJldHVy
biBXS0J1bmRsZUZyYW1lR2V0TnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKG1haW5GcmFtZSk7Ci19
Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmlu
Z1JlZiBlbGVtZW50SWQpCi17Ci0gICAgLy8gRklYTUU6IElzIGl0IE9LIHRoaXMgd29ya3Mgb25s
eSBmb3IgdGhlIG1haW4gZnJhbWU/Ci0gICAgLy8gRklYTUU6IElmIHRoaXMgaXMgbmVlZGVkIG9u
bHkgZm9yIHRoZSBtYWluIGZyYW1lLCB0aGVuIHdoeSBpcyB0aGUgZnVuY3Rpb24gb24gV0tCdW5k
bGVGcmFtZSBpbnN0ZWFkIG9mIFdLQnVuZGxlUGFnZT8KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCkpOwotICAgIHJldHVybiBXS0J1bmRsZUZyYW1lUGF1c2VBbmltYXRp
b25PbkVsZW1lbnRXaXRoSWQobWFpbkZyYW1lLCB0b1dLKGFuaW1hdGlvbk5hbWUpLmdldCgpLCB0
b1dLKGVsZW1lbnRJZCkuZ2V0KCksIHRpbWUpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9s
bGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJv
cGVydHlOYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQotewotICAgIC8v
IEZJWE1FOiBJcyBpdCBPSyB0aGlzIHdvcmtzIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lPwotICAg
IC8vIEZJWE1FOiBJZiB0aGlzIGlzIG5lZWRlZCBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZSwgdGhl
biB3aHkgaXMgdGhlIGZ1bmN0aW9uIG9uIFdLQnVuZGxlRnJhbWUgaW5zdGVhZCBvZiBXS0J1bmRs
ZVBhZ2U/Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBy
ZXR1cm4gV0tCdW5kbGVGcmFtZVBhdXNlVHJhbnNpdGlvbk9uRWxlbWVudFdpdGhJZChtYWluRnJh
bWUsIHRvV0socHJvcGVydHlOYW1lKS5nZXQoKSwgdG9XSyhlbGVtZW50SWQpLmdldCgpLCB0aW1l
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoKQot
ewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tCdW5k
bGVGcmFtZVN1c3BlbmRBbmltYXRpb25zKG1haW5GcmFtZSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QK
LXsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0KEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5TGF5ZXJU
cmVlQXNUZXh0KG1haW5GcmFtZSkpOwotICAgIHJldHVybiB0b0pTKHRleHQpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwg
Ym9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCdW5k
bGVTY3JpcHRXb3JsZFJlZj4gc2NyaXB0V29ybGQoQWRvcHRXSywgV0tCdW5kbGVTY3JpcHRXb3Js
ZENyZWF0ZVdvcmxkKCkpOwotCi0gICAgV0tCdW5kbGVBZGRVc2VyU2NyaXB0KEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91
cCgpLCBzY3JpcHRXb3JsZC5nZXQoKSwgc291cmNlV0suZ2V0KCksIDAsIDAsIDAsCi0gICAgICAg
IChydW5BdFN0YXJ0ID8ga1dLSW5qZWN0QXREb2N1bWVudFN0YXJ0IDoga1dLSW5qZWN0QXREb2N1
bWVudEVuZCksCi0gICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtX
S0luamVjdEluVG9wRnJhbWVPbmx5KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCi17
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwot
ICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+IHNjcmlwdFdvcmxkKEFkb3B0
V0ssIFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsKLQotICAgIFdLQnVuZGxlQWRk
VXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIHNjcmlwdFdvcmxkLmdldCgpLCBzb3VyY2VX
Sy5nZXQoKSwgMCwgMCwgMCwKLSAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxsRnJh
bWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQotewotICAgIFdLQnVuZGxlU2V0U2hvdWxkVHJhY2tW
aXNpdGVkTGlua3MoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCB0cnVlKTsKLX0K
LQotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGlu
Z1Zpc2l0ZWRJbmZvKEpTVmFsdWVSZWYgZWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogSXMgaXQg
T0sgdGhpcyB3b3JrcyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZT8KLSAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgaWYgKCFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gV0tCdW5kbGVGcmFt
ZUdldENvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhtYWluRnJhbWUsIGNvbnN0X2Nh
c3Q8SlNPYmplY3RSZWY+KGVsZW1lbnQpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRl
eHRGb3JMaXN0SXRlbShKU1ZhbHVlUmVmIGVsZW1lbnQpCi17Ci0gICAgV0tCdW5kbGVGcmFtZVJl
ZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGlmICghZWxlbWVu
dCB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGVsZW1lbnQpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGV4dChBZG9wdFdLLCBXS0J1bmRsZUZy
YW1lQ29weU1hcmtlclRleHQobWFpbkZyYW1lLCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVt
ZW50KSkpOwotICAgIGlmIChXS1N0cmluZ0lzRW1wdHkodGV4dC5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiB0b0pTKHRleHQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiBhcmd1bWVu
dCkKLXsKLSAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB0b1dLKGFyZ3Vt
ZW50KS5nZXQoKSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmco
SlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsdWUpCi17Ci0g
ICAgV0tGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCAwKTsKLSAgICBKU1ZhbHVl
UmVmIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJy
YXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1i
ZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBz
aXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwotICAgICAgICBpZiAoIUpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwotCi0gICAgICAgIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKLSAg
ICAgICAgICAgIG9wdGlvbnMgfD0ga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7Ci0gICAg
ICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQo
KSwgIkF0V29yZFN0YXJ0cyIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBrV0tGaW5kT3B0aW9u
c0F0V29yZFN0YXJ0czsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhvcHRpb25OYW1lLmdldCgpLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkK
LSAgICAgICAgICAgIG9wdGlvbnMgfD0ga1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxB
c1dvcmRTdGFydDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhvcHRpb25OYW1lLmdldCgpLCAiQmFja3dhcmRzIikpCi0gICAgICAgICAgICBvcHRpb25zIHw9
IGtXS0ZpbmRPcHRpb25zQmFja3dhcmRzOwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJXcmFwQXJvdW5kIikpCi0gICAgICAg
ICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZDsKLSAgICAgICAgZWxzZSBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiU3RhcnRJ
blNlbGVjdGlvbiIpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTm8ga1dLRmluZE9wdGlvbnNT
dGFydEluU2VsZWN0aW9uLgotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFdLQnVuZGxl
UGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0
b1dLKHRhcmdldCkuZ2V0KCksIG9wdGlvbnMpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFsbERhdGFiYXNlcygpCi17Ci0gICAgV0tCdW5kbGVDbGVhckFsbERhdGFiYXNl
cyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCkpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIHJl
dHVybiBXS0J1bmRsZVNldERhdGFiYXNlUXVvdGEoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1
bmRsZSgpLCBxdW90YSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxs
QXBwbGljYXRpb25DYWNoZXMoKQotewotICAgIFdLQnVuZGxlQ2xlYXJBcHBsaWNhdGlvbkNhY2hl
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodWludDY0X3Qgc2l6ZSkKLXsKLSAg
ICBXS0J1bmRsZVNldEFwcENhY2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBzaXplKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21t
YW5kRW5hYmxlZChKU1N0cmluZ1JlZiBuYW1lKQotewotICAgIHJldHVybiBXS0J1bmRsZVBhZ2VJ
c0VkaXRpbmdDb21tYW5kRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5w
YWdlKCksIHRvV0sobmFtZSkuZ2V0KCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRDYW5PcGVuV2luZG93cyhib29sKQotewotICAgIC8vIEl0J3Mgbm90IGNsZWFyIGlmIG9y
IHdoeSBhbnkgdGVzdHMgcmVxdWlyZSBvcGVuaW5nIHdpbmRvd3MgYmUgZm9yYmlkZGVuLgotICAg
IC8vIEZvciBub3csIGp1c3QgaWdub3JlIHRoaXMgc2V0dGluZywgYW5kIGlmIHdlIGZpbmQgbGF0
ZXIgaXQncyBuZWVkZWQgd2UgY2FuIGFkZCBpdC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIldlYktpdFhTU0F1ZGl0b3JFbmFibGVkIikpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29s
UHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgp
LCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxl
ZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNj
ZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBXS0J1bmRsZVNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBXS0J1bmRsZVNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxl
VVJMcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdL
QnVuZGxlU2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBXS0J1bmRsZVNldFBsdWdpbnNFbmFibGVkKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgp
LCBlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBXS0J1bmRsZVNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVk
KQotewotICAgICBXS0J1bmRsZVNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZUdyb3VwKCksIGVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICAgV0tCdW5kbGVTZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQotewotICAgICBXS0J1bmRsZVNldFBvcHVwQmxvY2tpbmdFbmFibGVkKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91
cCgpLCBlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgICBXS0J1bmRsZVNldEF1
dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
SlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29s
LCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpCi17Ci0gICAgV0tCdW5kbGVBZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwg
dG9XSyhkZXN0aW5hdGlvblByb3RvY29sKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdl
dCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNv
dXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYg
ZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAg
IFdLQnVuZGxlUmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmJ1bmRsZSgpLCB0b1dLKHNvdXJjZU9yaWdpbikuZ2V0KCksIHRvV0soZGVzdGlu
YXRpb25Qcm90b2NvbCkuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Ib3N0KS5nZXQoKSwgYWxsb3dE
ZXN0aW5hdGlvblN1YmRvbWFpbnMpOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51
bWJlck9mUGFnZXMoZG91YmxlIHBhZ2VXaWR0aEluUGl4ZWxzLCBkb3VibGUgcGFnZUhlaWdodElu
UGl4ZWxzKQotewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgcmV0dXJuIFdLQnVuZGxlTnVtYmVyT2ZQYWdlcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIG1haW5GcmFtZSwgcGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVs
cyk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJbmRleCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20s
IGludCBtYXJnaW5MZWZ0KQotewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSk7Ci0gICAgcmV0dXJuIHRvSlMoV0tCdW5kbGVQYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVs
cyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1haW5GcmFtZSwgcGFnZUluZGV4
LCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1h
cmdpbkxlZnQpKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQYWdlQm94Vmlz
aWJsZShpbnQgcGFnZUluZGV4KQotewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlSXNQYWdlQm94VmlzaWJsZShJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1haW5GcmFtZSwgcGFnZUluZGV4KTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIGlmICgh
ZWxlbWVudCB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGVsZW1lbnQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXS1JldGFpblB0cjxXS0J1bmRsZU5vZGVIYW5kbGVSZWY+IG5vZGVIYW5k
bGUoQWRvcHRXSywgV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8
SlNPYmplY3RSZWY+KGVsZW1lbnQpKSk7Ci0gICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElu
cHV0RWxlbWVudFZhbHVlRm9yVXNlcihub2RlSGFuZGxlLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQo
KSk7Ci19Ci0KLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCi17
Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlQ291bnQoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQotewotICAg
IFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0Q2xlYXIoV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRM
aXN0KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSkpOwotfQotCi0vLyBP
YmplY3QgQ3JlYXRpb24KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgc2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2Jq
ZWN0LCAidGVzdFJ1bm5lciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQotewotI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3Rv
cihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpKTsKLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdl
Ykluc3BlY3RvcigpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBXS0J1bmRsZUluc3Bl
Y3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCkpKTsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2Fs
bElELCBKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tC
dW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVj
dG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSksIGNhbGxJRCwgc2Ny
aXB0V0suZ2V0KCkpOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi19Ci0KLXR5cGVkZWYg
V1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
PiA+IFdvcmxkTWFwOwotc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCi17Ci0gICAgc3RhdGlj
IFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXVu
c2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3Jp
cHRXb3JsZFJlZiB3b3JsZCkKLXsKLSAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
d29ybGRNYXAoKS5lbmQoKTsKLSAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
c2Vjb25kID09IHdvcmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdvcmxk
SUQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICAvLyBBIHdvcmxkSUQgb2YgMCBhbHdheXMg
Y29ycmVzcG9uZHMgdG8gYSBuZXcgd29ybGQuIEFueSBvdGhlciB3b3JsZElEIGNvcnJlc3BvbmRz
IHRvIGEgd29ybGQKLSAgICAvLyB0aGF0IGlzIGNyZWF0ZWQgb25jZSBhbmQgY2FjaGVkIGZvcmV2
ZXIuCi0gICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4gd29ybGQ7Ci0gICAg
aWYgKCF3b3JsZElEKQotICAgICAgICB3b3JsZC5hZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3Jl
YXRlV29ybGQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2Ny
aXB0V29ybGRSZWY+JiB3b3JsZFNsb3QgPSB3b3JsZE1hcCgpLmFkZCh3b3JsZElELCAwKS5pdGVy
YXRvci0+c2Vjb25kOwotICAgICAgICBpZiAoIXdvcmxkU2xvdCkKLSAgICAgICAgICAgIHdvcmxk
U2xvdC5hZG9wdChXS0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7Ci0gICAgICAgIHdv
cmxkID0gd29ybGRTbG90OwotICAgIH0KLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBX
S0J1bmRsZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4dCk7Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBq
c0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFt
ZSwgd29ybGQuZ2V0KCkpOwotICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQs
IDAsIDAsIDAsIDApOyAKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UE9TSVhM
b2NhbGUoSlNTdHJpbmdSZWYgbG9jYWxlKQotewotICAgIGNoYXIgbG9jYWxlQnVmWzMyXTsKLSAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGxvY2FsZSwgbG9jYWxlQnVmLCBzaXplb2YobG9jYWxl
QnVmKSk7Ci0gICAgc2V0bG9jYWxlKExDX0FMTCwgbG9jYWxlQnVmKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24p
Ci17Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICByZXR1
cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lLCB0b1dLKGRpcmVjdGlv
bikuZ2V0KCkpOwotfQotICAgIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2hvdWxk
U3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91bGRTdGF5T25QYWdl
KQotewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0TmV3QmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWUoIXNob3VsZFN0YXlPblBhZ2UpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgc2hvdWxkRGVmZXJMb2FkaW5nKQotewotICAgIFdL
QnVuZGxlUGFnZVNldERlZmVyc0xvYWRpbmcoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpLCBzaG91bGREZWZlckxvYWRpbmcpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShKU1N0cmluZ1JlZiBzdGF0ZSkKLXsKLSAgICBXZWJD
b3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6OlBhZ2VW
aXNpYmlsaXR5U3RhdGVWaXNpYmxlOwotCi0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoc3RhdGUsICJoaWRkZW4iKSkKLSAgICAgICAgdmlzaWJpbGl0eVN0YXRlID0gV2ViQ29y
ZTo6UGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbjsKLSAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKHN0YXRlLCAicHJlcmVuZGVyIikpCi0gICAgICAgIHZpc2liaWxpdHlT
dGF0ZSA9IFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVyZW5kZXI7Ci0gICAgZWxzZSBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdGF0ZSwgInByZXZpZXciKSkKLSAgICAg
ICAgdmlzaWJpbGl0eVN0YXRlID0gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVByZXZpZXc7
Ci0KLSAgICBXS0J1bmRsZVNldFBhZ2VWaXNpYmlsaXR5U3RhdGUoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCks
IHZpc2liaWxpdHlTdGF0ZSwgLyogaXNJbml0aWFsU3RhdGUgKi8gZmFsc2UpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKLXsKLSAgICBXS0J1
bmRsZVNldFBhZ2VWaXNpYmlsaXR5U3RhdGUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIFdlYkNvcmU6OlBh
Z2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCAvKiBpc0luaXRpYWxTdGF0ZSAqLyB0cnVlKTsKLX0K
LQotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFw
Owotc3RhdGljIENhbGxiYWNrTWFwJiBjYWxsYmFja01hcCgpCi17Ci0gICAgc3RhdGljIENhbGxi
YWNrTWFwJiBtYXAgPSAqbmV3IENhbGxiYWNrTWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLWVu
dW0gewotICAgIEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFja0lEID0gMSwKLSAgICBSZW1vdmVD
aHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2tJRCwKLSAgICBGb2N1c1dlYlZpZXdDYWxsYmFja0lELAot
ICAgIFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrSUQKLX07Ci0KLXN0YXRpYyB2b2lkIGNh
Y2hlTGF5b3V0VGVzdENvbnRyb2xsZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJl
ZiBjYWxsYmFjaykKLXsKLSAgICBpZiAoIWNhbGxiYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
Ci0gICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIGNhbGxiYWNrTWFw
KCkuYWRkKGluZGV4LCBjYWxsYmFjayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGxMYXlvdXRUZXN0
Q29udHJvbGxlckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmICghY2FsbGJhY2tN
YXAoKS5jb250YWlucyhpbmRleCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgSlNPYmplY3RS
ZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtl
KGluZGV4KSwgMCk7Ci0gICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFj
aywgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCAwLCAwLCAwKTsKLSAgICBKU1Zh
bHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZChKU1ZhbHVlUmVmIGNhbGxiYWNrKQotewotICAg
IGNhY2hlTGF5b3V0VGVzdENvbnRyb2xsZXJDYWxsYmFjayhBZGRDaHJvbWVJbnB1dEZpZWxkQ2Fs
bGJhY2tJRCwgY2FsbGJhY2spOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0QWRk
Q2hyb21lSW5wdXRGaWVsZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1v
dmVDaHJvbWVJbnB1dEZpZWxkKEpTVmFsdWVSZWYgY2FsbGJhY2spCi17Ci0gICAgY2FjaGVMYXlv
dXRUZXN0Q29udHJvbGxlckNhbGxiYWNrKFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFja0lE
LCBjYWxsYmFjayk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RSZW1vdmVDaHJv
bWVJbnB1dEZpZWxkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3VzV2Vi
VmlldyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQotewotICAgIGNhY2hlTGF5b3V0VGVzdENvbnRyb2xs
ZXJDYWxsYmFjayhGb2N1c1dlYlZpZXdDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RGb2N1c1dlYlZpZXcoKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVG
YWN0b3IsIEpTVmFsdWVSZWYgY2FsbGJhY2spCi17Ci0gICAgY2FjaGVMYXlvdXRUZXN0Q29udHJv
bGxlckNhbGxiYWNrKFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrSUQsIGNhbGxiYWNrKTsK
LSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcihi
YWNraW5nU2NhbGVGYWN0b3IpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRX
aW5kb3dJc0tleShib29sIGlzS2V5KQotewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5w
b3N0U2V0V2luZG93SXNLZXkoaXNLZXkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrKCkKLXsKLSAgICBjYWxsTGF5b3V0VGVz
dENvbnRyb2xsZXJDYWxsYmFjayhBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2tJRCk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2Fs
bGJhY2soKQotewotICAgIGNhbGxMYXlvdXRUZXN0Q29udHJvbGxlckNhbGxiYWNrKFJlbW92ZUNo
cm9tZUlucHV0RmllbGRDYWxsYmFja0lEKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrKCkKLXsKLSAgICBjYWxsTGF5b3V0VGVzdENvbnRy
b2xsZXJDYWxsYmFjayhGb2N1c1dlYlZpZXdDYWxsYmFja0lEKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrKCkKLXsKLSAg
ICBjYWxsTGF5b3V0VGVzdENvbnRyb2xsZXJDYWxsYmFjayhTZXRCYWNraW5nU2NhbGVGYWN0b3JD
YWxsYmFja0lEKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIGJvb2wgdmFsdWUpCi17Ci0gICAgV0tCdW5k
bGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgdG9X
SyhwcmVmZXJlbmNlKS5nZXQoKSwgdmFsdWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYgcmVwbHkpCi17Ci0jaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlSW50ZW50UmVxdWVzdFJl
Zj4gY3VycmVudFJlcXVlc3QgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5jdXJy
ZW50SW50ZW50UmVxdWVzdCgpOwotICAgIGlmICghY3VycmVudFJlcXVlc3QpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAg
SlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQo
bWFpbkZyYW1lKTsKLQotICAgIGlmIChyZXBseSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZVJlZj4gc2VyaWFsaXplZERhdGEoQWRvcHRXSywgV0tTZXJpYWxp
emVkU2NyaXB0VmFsdWVDcmVhdGUoY29udGV4dCwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwg
cmVwbHkpLCAwKSk7Ci0gICAgICAgIFdLQnVuZGxlSW50ZW50UmVxdWVzdFBvc3RSZXN1bHQoY3Vy
cmVudFJlcXVlc3QuZ2V0KCksIHNlcmlhbGl6ZWREYXRhLmdldCgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZXJyb3JSZXBseShKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRVJST1IiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU2VyaWFs
aXplZFNjcmlwdFZhbHVlUmVmPiBzZXJpYWxpemVkRGF0YShBZG9wdFdLLCBXS1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUNyZWF0ZShjb250ZXh0LCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBlcnJv
clJlcGx5LmdldCgpKSwgMCkpOwotICAgICAgICBXS0J1bmRsZUludGVudFJlcXVlc3RQb3N0RmFp
bHVyZShjdXJyZW50UmVxdWVzdC5nZXQoKSwgc2VyaWFsaXplZERhdGEuZ2V0KCkpOwotICAgIH0K
LSNlbmRpZgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50
KEpTU3RyaW5nUmVmIGFjdGlvbiwgSlNTdHJpbmdSZWYgdHlwZSwgSlNTdHJpbmdSZWYgZGF0YSkK
LXsKLSNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBh
Z2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGFjdGlvbldLID0gdG9XSyhhY3Rpb24pOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0eXBlV0sgPSB0b1dLKHR5cGUpOwotICAgIFdLUmV0YWluUHRyPFdLU2VyaWFsaXplZFNj
cmlwdFZhbHVlUmVmPiBkYXRhV0soQWRvcHRXSywgV0tTZXJpYWxpemVkU2NyaXB0VmFsdWVDcmVh
dGUoY29udGV4dCwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgZGF0YSksIDApKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGludGVudEluaXREaWN0KEFkb3B0
V0ssIFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5QWRkSXRl
bShpbnRlbnRJbml0RGljdC5nZXQoKSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFj
dGlvbiIpLCBhY3Rpb25XSy5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5QWRkSXRlbShpbnRlbnRJ
bml0RGljdC5nZXQoKSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSwgdHlw
ZVdLLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlBZGRJdGVtKGludGVudEluaXREaWN0LmdldCgp
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGF0YSIpLCBkYXRhV0suZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tJbnRlbnREYXRhUmVmPiB3a0ludGVudERhdGEoQWRvcHRXSywg
V0tJbnRlbnREYXRhQ3JlYXRlKGludGVudEluaXREaWN0LmdldCgpKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlRGVsaXZlckludGVudFRvRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpLCBtYWluRnJhbWUsIHdrSW50ZW50RGF0YS5nZXQoKSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2Vw
dCkKLXsKLSAgICBXS0J1bmRsZVNldEFsd2F5c0FjY2VwdENvb2tpZXMoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmJ1bmRsZSgpLCBhY2NlcHQpOwotfQotCi1kb3VibGUgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnByZWNpc2VUaW1lKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRpbWUoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGVuYWJsZWQ7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW1wdHlVcmwgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tTdHJpbmdSZWYgbG9jYXRpb24gPSBlbmFi
bGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgpIDogZW1wdHlVcmwuZ2V0KCk7Ci0g
ICAgV0tCdW5kbGVTZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBsb2Nh
dGlvbik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oSlNTdHJpbmdSZWYgbG9jYXRpb24pCi17Ci0gICAgbV91c2VyU3R5bGVTaGVldExv
Y2F0aW9uID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhsb2NhdGlvbikpOwot
Ci0gICAgaWYgKG1fdXNlclN0eWxlU2hlZXRFbmFibGVkKQotICAgICAgICBzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQodHJ1ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcl9oCi0jZGVmaW5lIExheW91dFRlc3RDb250cm9sbGVyX2gKLQotI2lu
Y2x1ZGUgIkpTV3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlU2NyaXB0V29ybGQuaD4KLSNpbmNsdWRl
IDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUnVuTG9vcC5oPgotdHlwZWRlZiBS
ZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+IFBsYXRmb3JtVGltZXJSZWY7Ci0jZWxpZiBQTEFU
Rk9STShXSU4pCi10eXBlZGVmIFVJTlRfUFRSIFBsYXRmb3JtVGltZXJSZWY7Ci0jZWxpZiBQTEFU
Rk9STShRVCkKLSNpbmNsdWRlIDxRVGltZXI+Ci10eXBlZGVmIFFUaW1lciBQbGF0Zm9ybVRpbWVy
UmVmOwotI2VsaWYgUExBVEZPUk0oR1RLKQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgUGxhdGZvcm1U
aW1lclJlZjsKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLXR5cGVkZWYgc3RydWN0IF9FY29yZV9UaW1l
ciBFY29yZV9UaW1lcjsKLXR5cGVkZWYgRWNvcmVfVGltZXIqIFBsYXRmb3JtVGltZXJSZWY7Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdUUiB7Ci0KLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDog
cHVibGljIEpTV3JhcHBhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXlv
dXRUZXN0Q29udHJvbGxlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+TGF5b3V0VGVzdENvbnRy
b2xsZXIoKTsKLQotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdy
YXBwZXJDbGFzcygpOwotCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwotCi0gICAg
Ly8gVGhlIGJhc2ljcy4KLSAgICB2b2lkIGR1bXBBc1RleHQoYm9vbCBkdW1wUGl4ZWxzKTsKLSAg
ICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwotICAgIHZvaWQgZHVtcENoaWxkRnJhbWVz
QXNUZXh0KCkgeyBtX3doYXRUb0R1bXAgPSBBbGxGcmFtZXNUZXh0OyB9Ci0gICAgdm9pZCB3YWl0
VW50aWxEb25lKCk7Ci0gICAgdm9pZCBub3RpZnlEb25lKCk7Ci0gICAgZG91YmxlIHByZWNpc2VU
aW1lKCk7Ci0KLSAgICAvLyBPdGhlciBkdW1waW5nLgotICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJk
TGlzdCgpIHsgbV9zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MgPSB0cnVl
OyB9Ci0gICAgdm9pZCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIHsgbV9zaG91bGRE
dW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMgPSB0cnVlOyB9Ci0gICAgdm9pZCBkdW1wRWRpdGlu
Z0NhbGxiYWNrcygpIHsgbV9kdW1wRWRpdGluZ0NhbGxiYWNrcyA9IHRydWU7IH0KLSAgICB2b2lk
IGR1bXBTZWxlY3Rpb25SZWN0KCkgeyB9IC8vIFdpbGwgbmVlZCB0byBkbyBzb21ldGhpbmcgd2hl
biB3ZSBzdXBwb3J0IHBpeGVsIHRlc3RzLgotICAgIHZvaWQgZHVtcFN0YXR1c0NhbGxiYWNrcygp
IHsgbV9kdW1wU3RhdHVzQ2FsbGJhY2tzID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcFRpdGxlQ2hh
bmdlcygpIHsgbV9kdW1wVGl0bGVDaGFuZ2VzID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcEZ1bGxT
Y3JlZW5DYWxsYmFja3MoKSB7IG1fZHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MgPSB0cnVlOyB9Ci0g
ICAgdm9pZCBkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgeyBzZXRTaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKHRydWUpOyB9Ci0gICAgdm9pZCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNr
KCkgeyBzZXRTaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKHRydWUpOyB9Ci0gICAg
dm9pZCBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpIHsgbV9kdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcyA9IHRydWU7IH0KLQotICAgIHZvaWQgc2V0U2hvdWxkRHVtcEZyYW1lTG9h
ZENhbGxiYWNrcyhib29sIHZhbHVlKSB7IG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHZhbHVl
OyB9Ci0gICAgdm9pZCBzZXRTaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGJvb2wg
dmFsdWUpIHsgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gdmFsdWU7IH0KLQotICAg
IC8vIFNwZWNpYWwgb3B0aW9ucy4KLSAgICB2b2lkIGtlZXBXZWJIaXN0b3J5KCk7Ci0gICAgdm9p
ZCBzZXRBY2NlcHRzRWRpdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkQWxsb3dFZGl0aW5nID0g
dmFsdWU7IH0KLSAgICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGJvb2wpOwotICAgIHZvaWQgc2V0
Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRD
bG9zZUV4dHJhV2luZG93cyA9IHZhbHVlOyB9Ci0gICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxl
ZChib29sKTsKLSAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJv
b2wpOwotICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOwotICAg
IHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFBsdWdp
bnNFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wp
OwotICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sKTsKLSAgICB2
b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRQb3B1cEJs
b2NraW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKGJvb2wpOwotICAgIHZvaWQgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVk
LCBib29sIHBlcm1pc3NpdmUgPSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0
aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3Rp
bmF0aW9uU3ViZG9tYWlucyk7Ci0gICAgdm9pZCByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJv
dG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucyk7Ci0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCk7Ci0g
ICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmKTsKLQotICAgIC8v
IFNwZWNpYWwgRE9NIGZ1bmN0aW9ucy4KLSAgICBKU1ZhbHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNs
dWRpbmdWaXNpdGVkSW5mbyhKU1ZhbHVlUmVmIGVsZW1lbnQpOwotICAgIHZvaWQgY2xlYXJCYWNr
Rm9yd2FyZExpc3QoKTsKLSAgICB2b2lkIGV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpT
U3RyaW5nUmVmIGFyZ3VtZW50KTsKLSAgICBib29sIGlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdS
ZWYgbmFtZSk7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHRGb3JMaXN0
SXRlbShKU1ZhbHVlUmVmIGVsZW1lbnQpOwotICAgIHVuc2lnbmVkIHdpbmRvd0NvdW50KCk7Ci0K
LSAgICAvLyBSZXBhaW50IHRlc3RpbmcuCi0gICAgdm9pZCB0ZXN0UmVwYWludCgpIHsgbV90ZXN0
UmVwYWludCA9IHRydWU7IH0KLSAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseSgpIHsg
bV90ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5ID0gdHJ1ZTsgfQotICAgIHZvaWQgZGlzcGxh
eSgpOwotCi0gICAgLy8gQW5pbWF0aW9uIHRlc3RpbmcuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKCkgY29uc3Q7Ci0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZU9u
RWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNT
dHJpbmdSZWYgZWxlbWVudElkKTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxl
bWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmlu
Z1JlZiBlbGVtZW50SWQpOwotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAKLSAg
ICAvLyBDb21wb3NpdGluZyB0ZXN0aW5nLgotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBs
YXllclRyZWVBc1RleHQoKSBjb25zdDsKLSAgICAKLSAgICAvLyBVc2VyQ29udGVudCB0ZXN0aW5n
LgotICAgIHZvaWQgYWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRT
dGFydCwgYm9vbCBhbGxGcmFtZXMpOwotICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoSlNTdHJp
bmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcyk7Ci0KLSAgICAvLyBUZXh0IHNlYXJjaCB0ZXN0
aW5nLgotICAgIGJvb2wgZmluZFN0cmluZyhKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiBvcHRpb25z
QXJyYXkpOwotCi0gICAgLy8gTG9jYWwgc3RvcmFnZQotICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFz
ZXMoKTsKLSAgICB2b2lkIHNldERhdGFiYXNlUXVvdGEodWludDY0X3QpOwotICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBwYXRoVG9Mb2NhbFJlc291cmNlKEpTU3RyaW5nUmVmKTsKLQotICAg
IC8vIEFwcGxpY2F0aW9uIENhY2hlCi0gICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVz
KCk7Ci0gICAgdm9pZCBzZXRBcHBDYWNoZU1heGltdW1TaXplKHVpbnQ2NF90KTsKLQotICAgIC8v
IFByaW50aW5nCi0gICAgaW50IG51bWJlck9mUGFnZXMoZG91YmxlIHBhZ2VXaWR0aEluUGl4ZWxz
LCBkb3VibGUgcGFnZUhlaWdodEluUGl4ZWxzKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJbmRleCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0
b20sIGludCBtYXJnaW5MZWZ0KTsKLSAgICBib29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJ
bmRleCk7Ci0KLSAgICB2b2lkIHNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYsIEpTVmFsdWVS
ZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpOwotCi0gICAgZW51bSBXaGF0VG9EdW1wIHsg
UmVuZGVyVHJlZSwgTWFpbkZyYW1lVGV4dCwgQWxsRnJhbWVzVGV4dCB9OwotICAgIFdoYXRUb0R1
bXAgd2hhdFRvRHVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fd2hhdFRvRHVtcDsgfQotCi0gICAgYm9v
bCBzaG91bGREdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZER1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQotICAgIGJvb2wgc2hvdWxkRHVtcEJh
Y2tGb3J3YXJkTGlzdHNGb3JBbGxXaW5kb3dzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREdW1w
QmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3M7IH0KLSAgICBib29sIHNob3VsZER1bXBFZGl0
aW5nQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wRWRpdGluZ0NhbGxiYWNrczsgfQot
ICAgIGJvb2wgc2hvdWxkRHVtcE1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV93aGF0VG9EdW1wID09IFJlbmRlclRyZWU7IH0KLSAgICBib29sIHNob3VsZER1bXBTdGF0
dXNDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBTdGF0dXNDYWxsYmFja3M7IH0KLSAg
ICBib29sIHNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBUaXRs
ZUNoYW5nZXM7IH0KLSAgICBib29sIHNob3VsZER1bXBQaXhlbHMoKSBjb25zdCB7IHJldHVybiBt
X2R1bXBQaXhlbHM7IH0KLSAgICBib29sIHNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkg
Y29uc3QgeyByZXR1cm4gbV9kdW1wRnVsbFNjcmVlbkNhbGxiYWNrczsgfQotICAgIGJvb2wgc2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEZyYW1lTG9h
ZENhbGxiYWNrczsgfQotICAgIGJvb2wgc2hvdWxkRHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFj
aygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsgfQotICAg
IGJvb2wgc2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25zdCB7IHJldHVy
biBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOyB9Ci0KLSAgICBib29sIGlzUG9saWN5
RGVsZWdhdGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQ7
IH0KLSAgICBib29sIGlzUG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlKCkgY29uc3QgeyByZXR1cm4g
bV9wb2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmU7IH0KLQotICAgIGJvb2wgd2FpdFRvRHVtcCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2FpdFRvRHVtcDsgfQotICAgIHZvaWQgd2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJGaXJlZCgpOwotICAgIHZvaWQgaW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVy
KCk7Ci0KLSAgICBib29sIHNob3VsZEFsbG93RWRpdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkQWxsb3dFZGl0aW5nOyB9Ci0KLSAgICBib29sIHNob3VsZENsb3NlRXh0cmFXaW5kb3dzQWZ0
ZXJSdW5uaW5nVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xvc2VFeHRyYVdpbmRvd3M7
IH0KLQotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVm
LCB1bnNpZ25lZCB3b3JsZElELCBKU1N0cmluZ1JlZiBzY3JpcHQpOwotICAgIHN0YXRpYyB1bnNp
Z25lZCB3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3JsZFJlZik7Ci0KLSAgICB2b2lk
IHNob3dXZWJJbnNwZWN0b3IoKTsKLSAgICB2b2lkIGNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAg
dm9pZCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3Jp
cHQpOwotCi0gICAgdm9pZCBzZXRQT1NJWExvY2FsZShKU1N0cmluZ1JlZik7Ci0KLSAgICBib29s
IHdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbDsgfQotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9v
bCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9Ci0KLSAgICB2b2lkIHNl
dFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYpOwotCi0gICAgdm9pZCBzZXRTaG91bGRTdGF5T25Q
YWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29sKTsKLQotICAgIHZvaWQgc2V0RGVmZXJz
TG9hZGluZyhib29sKTsKLSAgICAKLSAgICBib29sIGdsb2JhbEZsYWcoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbEZsYWc7IH0KLSAgICB2b2lkIHNldEdsb2JhbEZsYWcoYm9vbCB2YWx1ZSkgeyBt
X2dsb2JhbEZsYWcgPSB2YWx1ZTsgfQotICAgIAotICAgIHZvaWQgYWRkQ2hyb21lSW5wdXRGaWVs
ZChKU1ZhbHVlUmVmKTsKLSAgICB2b2lkIHJlbW92ZUNocm9tZUlucHV0RmllbGQoSlNWYWx1ZVJl
Zik7Ci0gICAgdm9pZCBmb2N1c1dlYlZpZXcoSlNWYWx1ZVJlZik7Ci0gICAgdm9pZCBzZXRCYWNr
aW5nU2NhbGVGYWN0b3IoZG91YmxlLCBKU1ZhbHVlUmVmKTsKLQotICAgIHZvaWQgc2V0V2luZG93
SXNLZXkoYm9vbCk7Ci0KLSAgICB2b2lkIGNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2so
KTsKLSAgICB2b2lkIGNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soKTsKLSAgICB2
b2lkIGNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjaygpOwotICAgIHZvaWQgY2FsbFNldEJhY2tpbmdT
Y2FsZUZhY3RvckNhbGxiYWNrKCk7Ci0KLSAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0
cmluZ1JlZiBwcmVmZXJlbmNlLCBib29sIHZhbHVlKTsKLQotICAgIC8vIFdlYiBpbnRlbnRzIHRl
c3RpbmcuCi0gICAgdm9pZCBzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYgcmVwbHkp
OwotICAgIHZvaWQgZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5n
UmVmIHR5cGUsIEpTU3RyaW5nUmVmIGRhdGEpOwotCi0gICAgLy8gQ29va2llcyB0ZXN0aW5nCi0g
ICAgdm9pZCBzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wpOwotCi0gICAgLy8gQ3VzdG9tIGZ1
bGwgc2NyZWVuIGJlaGF2aW9yLgotICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2
aW9yKGJvb2wgdmFsdWUpIHsgbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSB2YWx1ZTsgfQot
ICAgIGJvb2wgaGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9j
dXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7IH0KLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBwbGF0Zm9ybU5hbWUoKTsKLQotICAgIHZvaWQgc2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdS
ZWYgc3RhdGUpOwotICAgIHZvaWQgcmVzZXRQYWdlVmlzaWJpbGl0eSgpOwotCi1wcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZhbDsK
LQotICAgIExheW91dFRlc3RDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVk
ZWQoKTsKLQotICAgIFdoYXRUb0R1bXAgbV93aGF0VG9EdW1wOwotICAgIGJvb2wgbV9zaG91bGRE
dW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnM7Ci0gICAgYm9vbCBtX3Nob3VsZER1bXBCYWNrRm9y
d2FyZExpc3RzRm9yQWxsV2luZG93czsKLQotICAgIGJvb2wgbV9zaG91bGRBbGxvd0VkaXRpbmc7
Ci0gICAgYm9vbCBtX3Nob3VsZENsb3NlRXh0cmFXaW5kb3dzOwotCi0gICAgYm9vbCBtX2R1bXBF
ZGl0aW5nQ2FsbGJhY2tzOwotICAgIGJvb2wgbV9kdW1wU3RhdHVzQ2FsbGJhY2tzOwotICAgIGJv
b2wgbV9kdW1wVGl0bGVDaGFuZ2VzOwotICAgIGJvb2wgbV9kdW1wUGl4ZWxzOwotICAgIGJvb2wg
bV9kdW1wRnVsbFNjcmVlbkNhbGxiYWNrczsKLSAgICBib29sIG1fZHVtcEZyYW1lTG9hZENhbGxi
YWNrczsKLSAgICBib29sIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKLSAgICBib29s
IG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXM7Ci0gICAgYm9vbCBtX3dhaXRUb0R1bXA7
IC8vIFRydWUgaWYgd2FpdFVudGlsRG9uZSgpIGhhcyBiZWVuIGNhbGxlZCwgYnV0IG5vdGlmeURv
bmUoKSBoYXMgbm90IHlldCBiZWVuIGNhbGxlZC4KLSAgICBib29sIG1fdGVzdFJlcGFpbnQ7Ci0g
ICAgYm9vbCBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHk7Ci0KLSAgICBib29sIG1fd2ls
bFNlbmRSZXF1ZXN0UmV0dXJuc051bGw7Ci0KLSAgICBib29sIG1fcG9saWN5RGVsZWdhdGVFbmFi
bGVkOwotICAgIGJvb2wgbV9wb2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmU7Ci0gICAgCi0gICAgYm9v
bCBtX2dsb2JhbEZsYWc7Ci0gICAgYm9vbCBtX2N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcjsKLQot
ICAgIGJvb2wgbV91c2VyU3R5bGVTaGVldEVuYWJsZWQ7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKLQotICAgIFBsYXRmb3JtVGltZXJSZWYg
bV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdUUgotCi0j
ZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJfaApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTI1NTE3KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UYXJnZXQucHJpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiwxNCArMjIsMTQgQEAgU09VUkNFUyArPSBcCiAgICAgRXZlbnRTZW5k
aW5nQ29udHJvbGxlci5oIFwKICAgICBHQ0NvbnRyb2xsZXIuY3BwIFwKICAgICBHQ0NvbnRyb2xs
ZXIuaCBcCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIFwKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlci5oIFwKKyAgICBUZXN0UnVubmVyLmNwcCBcCisgICAgVGVzdFJ1bm5lci5oIFwKICAg
ICBUZXh0SW5wdXRDb250cm9sbGVyLmNwcCBcCiAgICAgVGV4dElucHV0Q29udHJvbGxlci5oIFwK
ICAgICBCaW5kaW5ncy9KU1dyYXBwZXIuY3BwIFwKICAgICBxdC9BY3RpdmF0ZUZvbnRzUXQuY3Bw
IFwKICAgICBxdC9JbmplY3RlZEJ1bmRsZVF0LmNwcCBcCi0gICAgcXQvTGF5b3V0VGVzdENvbnRy
b2xsZXJRdC5jcHAKKyAgICBxdC9UZXN0UnVubmVyUXQuY3BwCiAKICMgQWRkcyB0aGUgZ2VuZXJh
dGVkIHNvdXJjZXMgdG8gU09VUkNFUwogaW5jbHVkZShEZXJpdmVkU291cmNlcy5wcmkpCkBAIC00
NSw3ICs0NSw3IEBAIEhFQURFUlMgKz0gXAogICAgIEdDQ29udHJvbGxlci5oIFwKICAgICBJbmpl
Y3RlZEJ1bmRsZS5oIFwKICAgICBJbmplY3RlZEJ1bmRsZVBhZ2UuaCBcCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIuaCBcCisgICAgVGVzdFJ1bm5lci5oIFwKICAgICBUZXh0SW5wdXRDb250cm9s
bGVyLmggXAogCiBERVNURElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L2xpYgpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CShyZXZpc2lvbiAxMjU1MTcpCShmcm9tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOjEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlLmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW5jbHVkZSAi
SlNMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgor
I2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlVmlzaWJpbGl0eVN0YXRlLmg+CisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5k
bGVGcmFtZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVGcmFtZVByaXZhdGUuaD4KKyNp
bmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlSW5zcGVjdG9yLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S0J1bmRsZU5vZGVIYW5kbGVQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZVBh
Z2VQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZVByaXZhdGUuaD4KKyNpbmNs
dWRlIDxXZWJLaXQyL1dLQnVuZGxlU2NyaXB0V29ybGQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dL
UmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
PgorI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Ml9DLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisjaW5jbHVkZSA8V2ViS2l0
Mi9XS0J1bmRsZUludGVudFJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLSW50ZW50RGF0
YS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVFIgeworCisvLyBUaGlzIGlzIGxvd2VyIHRoYW4g
RHVtcFJlbmRlclRyZWUncyB0aW1lb3V0LCB0byBtYWtlIGl0IGVhc2llciB0byB3b3JrIHRocm91
Z2ggdGhlIGZhaWx1cmVzCisvLyBFdmVudHVhbGx5IGl0IHNob3VsZCBiZSBjaGFuZ2VkIHRvIG1h
dGNoLgorY29uc3QgZG91YmxlIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0Y2hk
b2dUaW1lckludGVydmFsID0gNjsKKworUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMYXlvdXRUZXN0Q29udHJvbGxlcik7Cit9CisKK0xheW91dFRlc3RDb250cm9sbGVyOjpMYXlv
dXRUZXN0Q29udHJvbGxlcigpCisgICAgOiBtX3doYXRUb0R1bXAoUmVuZGVyVHJlZSkKKyAgICAs
IG1fc2hvdWxkRHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZhbHNlKQorICAgICwgbV9zaG91
bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MoZmFsc2UpCisgICAgLCBtX3Nob3Vs
ZEFsbG93RWRpdGluZyh0cnVlKQorICAgICwgbV9zaG91bGRDbG9zZUV4dHJhV2luZG93cyhmYWxz
ZSkKKyAgICAsIG1fZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBTdGF0
dXNDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBUaXRsZUNoYW5nZXMoZmFsc2UpCisgICAg
LCBtX2R1bXBQaXhlbHModHJ1ZSkKKyAgICAsIG1fZHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoZmFs
c2UpCisgICAgLCBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBQ
cm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soZmFsc2UpCisgICAgLCBtX2R1bXBSZXNvdXJjZVJlc3Bv
bnNlTUlNRVR5cGVzKGZhbHNlKQorICAgICwgbV93YWl0VG9EdW1wKGZhbHNlKQorICAgICwgbV90
ZXN0UmVwYWludChmYWxzZSkKKyAgICAsIG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseShm
YWxzZSkKKyAgICAsIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoZmFsc2UpCisgICAgLCBt
X3BvbGljeURlbGVnYXRlRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fcG9saWN5RGVsZWdhdGVQZXJt
aXNzaXZlKGZhbHNlKQorICAgICwgbV9nbG9iYWxGbGFnKGZhbHNlKQorICAgICwgbV9jdXN0b21G
dWxsU2NyZWVuQmVoYXZpb3IoZmFsc2UpCisgICAgLCBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZChm
YWxzZSkKKyAgICAsIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbihhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCIiKSkpCit7CisgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7Cit9
CisKK0xheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQoreworfQor
CitKU0NsYXNzUmVmIExheW91dFRlc3RDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQoreworICAg
IHJldHVybiBKU0xheW91dFRlc3RDb250cm9sbGVyOjpsYXlvdXRUZXN0Q29udHJvbGxlckNsYXNz
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQoreworICAgIFdL
QnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFn
ZSgpOworICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChwYWdlKTsKKyAgICBXS0J1bmRsZVBh
Z2VTZXRUcmFja3NSZXBhaW50cyhwYWdlLCB0cnVlKTsKKyAgICBXS0J1bmRsZVBhZ2VSZXNldFRy
YWNrZWRSZXBhaW50cyhwYWdlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVt
cEFzVGV4dChib29sIGR1bXBQaXhlbHMpCit7CisgICAgaWYgKG1fd2hhdFRvRHVtcCA8IE1haW5G
cmFtZVRleHQpCisgICAgICAgIG1fd2hhdFRvRHVtcCA9IE1haW5GcmFtZVRleHQ7CisgICAgbV9k
dW1wUGl4ZWxzID0gZHVtcFBpeGVsczsKK30KKworLy8gRklYTUU6IE5lZWRzIGEgZnVsbCBpbXBs
ZW1lbnRhdGlvbiBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQy
NTQ2Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShi
b29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKK3sKKyAgICBtX3BvbGljeURlbGVnYXRlRW5h
YmxlZCA9IGVuYWJsZWQ7CisgICAgbV9wb2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmUgPSBwZXJtaXNz
aXZlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdh
dGUoKQoreworICAgIHNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUpOworICAgIHdhaXRVbnRp
bERvbmUoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVudGlsRG9uZSgp
Cit7CisgICAgbV93YWl0VG9EdW1wID0gdHJ1ZTsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpCisgICAgICAgIGluaXRpYWxpemVX
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKQoreworICAgIGludmFsaWRh
dGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpOworICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAi
RkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChtZXNz
YWdlKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoIlxuIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmRvbmUoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit7CisgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV93YWl0VG9EdW1wICYmICFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudG9wTG9hZGlu
Z0ZyYW1lKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPmR1bXAo
KTsKKworICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICAvLyBG
SVhNRTogSXMgaXQgT0sgdGhpcyB3b3JrcyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZT8KKyAgICAv
LyBGSVhNRTogSWYgdGhpcyBpcyBuZWVkZWQgb25seSBmb3IgdGhlIG1haW4gZnJhbWUsIHRoZW4g
d2h5IGlzIHRoZSBmdW5jdGlvbiBvbiBXS0J1bmRsZUZyYW1lIGluc3RlYWQgb2YgV0tCdW5kbGVQ
YWdlPworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgcmV0
dXJuIFdLQnVuZGxlRnJhbWVHZXROdW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMobWFpbkZyYW1lKTsK
K30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3Ry
aW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICAvLyBGSVhNRTogSXMgaXQgT0sgdGhpcyB3b3JrcyBv
bmx5IGZvciB0aGUgbWFpbiBmcmFtZT8KKyAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBuZWVkZWQg
b25seSBmb3IgdGhlIG1haW4gZnJhbWUsIHRoZW4gd2h5IGlzIHRoZSBmdW5jdGlvbiBvbiBXS0J1
bmRsZUZyYW1lIGluc3RlYWQgb2YgV0tCdW5kbGVQYWdlPworICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVQYXVzZUFuaW1h
dGlvbk9uRWxlbWVudFdpdGhJZChtYWluRnJhbWUsIHRvV0soYW5pbWF0aW9uTmFtZSkuZ2V0KCks
IHRvV0soZWxlbWVudElkKS5nZXQoKSwgdGltZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBw
cm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAg
Ly8gRklYTUU6IElzIGl0IE9LIHRoaXMgd29ya3Mgb25seSBmb3IgdGhlIG1haW4gZnJhbWU/Cisg
ICAgLy8gRklYTUU6IElmIHRoaXMgaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lLCB0
aGVuIHdoeSBpcyB0aGUgZnVuY3Rpb24gb24gV0tCdW5kbGVGcmFtZSBpbnN0ZWFkIG9mIFdLQnVu
ZGxlUGFnZT8KKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAg
IHJldHVybiBXS0J1bmRsZUZyYW1lUGF1c2VUcmFuc2l0aW9uT25FbGVtZW50V2l0aElkKG1haW5G
cmFtZSwgdG9XSyhwcm9wZXJ0eU5hbWUpLmdldCgpLCB0b1dLKGVsZW1lbnRJZCkuZ2V0KCksIHRp
bWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucygp
Cit7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1
bmRsZUZyYW1lU3VzcGVuZEFuaW1hdGlvbnMobWFpbkZyYW1lKTsKK30KKworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25z
dAoreworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRleHQoQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlMYXll
clRyZWVBc1RleHQobWFpbkZyYW1lKSk7CisgICAgcmV0dXJuIHRvSlModGV4dCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNl
LCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNlKTsKKyAgICBXS1JldGFpblB0cjxXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmPiBzY3JpcHRXb3JsZChBZG9wdFdLLCBXS0J1bmRsZVNjcmlwdFdv
cmxkQ3JlYXRlV29ybGQoKSk7CisKKyAgICBXS0J1bmRsZUFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdy
b3VwKCksIHNjcmlwdFdvcmxkLmdldCgpLCBzb3VyY2VXSy5nZXQoKSwgMCwgMCwgMCwKKyAgICAg
ICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmplY3RBdERvY3VtZW50U3RhcnQgOiBrV0tJbmplY3RBdERv
Y3VtZW50RW5kKSwKKyAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxsRnJhbWVzIDog
a1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcykK
K3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7
CisgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4gc2NyaXB0V29ybGQoQWRv
cHRXSywgV0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0ZVdvcmxkKCkpOworCisgICAgV0tCdW5kbGVB
ZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgc2NyaXB0V29ybGQuZ2V0KCksIHNvdXJj
ZVdLLmdldCgpLCAwLCAwLCAwLAorICAgICAgICAoYWxsRnJhbWVzID8ga1dLSW5qZWN0SW5BbGxG
cmFtZXMgOiBrV0tJbmplY3RJblRvcEZyYW1lT25seSkpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCit7CisgICAgV0tCdW5kbGVTZXRTaG91bGRUcmFj
a1Zpc2l0ZWRMaW5rcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIHRydWUpOwor
fQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wdXRlZFN0eWxlSW5jbHVk
aW5nVmlzaXRlZEluZm8oSlNWYWx1ZVJlZiBlbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBJcyBp
dCBPSyB0aGlzIHdvcmtzIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lPworICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKKyAgICBpZiAoIUpT
VmFsdWVJc09iamVjdChjb250ZXh0LCBlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBXS0J1bmRsZUZy
YW1lR2V0Q29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKG1haW5GcmFtZSwgY29uc3Rf
Y2FzdDxKU09iamVjdFJlZj4oZWxlbWVudCkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2Vy
VGV4dEZvckxpc3RJdGVtKEpTVmFsdWVSZWYgZWxlbWVudCkKK3sKKyAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CisgICAgaWYgKCFlbGVt
ZW50IHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZWxlbWVudCkpCisgICAgICAgIHJldHVy
biAwOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0KEFkb3B0V0ssIFdLQnVuZGxl
RnJhbWVDb3B5TWFya2VyVGV4dChtYWluRnJhbWUsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVs
ZW1lbnQpKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eSh0ZXh0LmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHRvSlModGV4dCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIGFyZ3Vt
ZW50KQoreworICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0soYXJn
dW1lbnQpLmdldCgpKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmlu
ZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKK3sK
KyAgICBXS0ZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOworCisgICAgV0tCdW5kbGVGcmFtZVJlZiBt
YWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOworICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIDApOworICAgIEpTVmFs
dWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNB
cnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKKyAgICBpZiAoIUpTVmFsdWVJc051
bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7CisgICAgICAgIGlmICghSlNWYWx1
ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7CisKKyAgICAgICAgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQor
ICAgICAgICAgICAgb3B0aW9ucyB8PSBrV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKKyAg
ICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdl
dCgpLCAiQXRXb3JkU3RhcnRzIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRp
b25zQXRXb3JkU3RhcnRzOworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCIp
KQorICAgICAgICAgICAgb3B0aW9ucyB8PSBrV0tGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRh
bEFzV29yZFN0YXJ0OworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG9wdGlvbk5hbWUuZ2V0KCksICJCYWNrd2FyZHMiKSkKKyAgICAgICAgICAgIG9wdGlvbnMg
fD0ga1dLRmluZE9wdGlvbnNCYWNrd2FyZHM7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIldyYXBBcm91bmQiKSkKKyAgICAg
ICAgICAgIG9wdGlvbnMgfD0ga1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kOworICAgICAgICBlbHNl
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJTdGFy
dEluU2VsZWN0aW9uIikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBObyBrV0tGaW5kT3B0aW9u
c1N0YXJ0SW5TZWxlY3Rpb24uCisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gV0tCdW5k
bGVQYWdlRmluZFN0cmluZyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCks
IHRvV0sodGFyZ2V0KS5nZXQoKSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICBXS0J1bmRsZUNsZWFyQWxsRGF0YWJh
c2VzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEodWludDY0X3QgcXVvdGEpCit7CisgICAg
cmV0dXJuIFdLQnVuZGxlU2V0RGF0YWJhc2VRdW90YShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIHF1b3RhKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpCit7CisgICAgV0tCdW5kbGVDbGVhckFwcGxpY2F0aW9uQ2Fj
aGUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1aW50NjRfdCBzaXplKQorewor
ICAgIFdLQnVuZGxlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuYnVuZGxlKCksIHNpemUpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0Nv
bW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFn
ZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCkt
PnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldENhbk9wZW5XaW5kb3dzKGJvb2wpCit7CisgICAgLy8gSXQncyBub3QgY2xlYXIgaWYg
b3Igd2h5IGFueSB0ZXN0cyByZXF1aXJlIG9wZW5pbmcgd2luZG93cyBiZSBmb3JiaWRkZW4uCisg
ICAgLy8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhpcyBzZXR0aW5nLCBhbmQgaWYgd2UgZmluZCBs
YXRlciBpdCdzIG5lZWRlZCB3ZSBjYW4gYWRkIGl0LgorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiV2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiKSk7CisgICAgV0tCdW5kbGVPdmVycmlkZUJv
b2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxl
KCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFi
bGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQoreworICAgIFdLQnVuZGxlU2V0QWxsb3dV
bml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THMoYm9vbCBlbmFibGVkKQoreworICAgIFdLQnVuZGxlU2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
V0tCdW5kbGVTZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVk
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIFdLQnVuZGxlU2V0UGx1Z2luc0VuYWJsZWQoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3Vw
KCksIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQoreworICAgIFdLQnVuZGxlU2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJs
ZWQpCit7CisgICAgIFdLQnVuZGxlU2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5w
YWdlR3JvdXAoKSwgZW5hYmxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgICBXS0J1bmRsZVNl
dFByaXZhdGVCcm93c2luZ0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgp
LCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCit7CisgICAgIFdLQnVuZGxlU2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdy
b3VwKCksIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgIFdLQnVuZGxlU2V0
QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9j
b2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3Vi
ZG9tYWlucykKK3sKKyAgICBXS0J1bmRsZUFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgdG9XSyhzb3VyY2VPcmlnaW4pLmdldCgp
LCB0b1dLKGRlc3RpbmF0aW9uUHJvdG9jb2wpLmdldCgpLCB0b1dLKGRlc3RpbmF0aW9uSG9zdCku
Z2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYg
c291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1Jl
ZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit7Cisg
ICAgV0tCdW5kbGVSZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCksIHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9XSyhkZXN0
aW5hdGlvblByb3RvY29sKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgpLCBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZQYWdlcyhkb3VibGUgcGFnZVdpZHRoSW5QaXhlbHMsIGRvdWJsZSBwYWdlSGVpZ2h0
SW5QaXhlbHMpCit7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
KyAgICByZXR1cm4gV0tCdW5kbGVOdW1iZXJPZlBhZ2VzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4
ZWxzKTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRv
bSwgaW50IG1hcmdpbkxlZnQpCit7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpKTsKKyAgICByZXR1cm4gdG9KUyhXS0J1bmRsZVBhZ2VTaXplQW5kTWFyZ2luc0luUGl4
ZWxzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlSW5k
ZXgsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwg
bWFyZ2luTGVmdCkpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc1BhZ2VCb3hW
aXNpYmxlKGludCBwYWdlSW5kZXgpCit7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlSW5kZXgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgaWYg
KCFlbGVtZW50IHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZWxlbWVudCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhh
bmRsZShBZG9wdFdLLCBXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29udGV4dCwgY29uc3RfY2Fz
dDxKU09iamVjdFJlZj4oZWxlbWVudCkpKTsKKyAgICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1M
SW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKG5vZGVIYW5kbGUuZ2V0KCksIHRvV0sodmFsdWUpLmdl
dCgpKTsKK30KKwordW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkK
K3sKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VDb3VudCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCit7Cisg
ICAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RDbGVhcihXS0J1bmRsZVBhZ2VHZXRCYWNrRm9yd2Fy
ZExpc3QoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKSk7Cit9CisKKy8v
IE9iamVjdCBDcmVhdGlvbgorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjptYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dP
YmplY3QsICJ0ZXN0UnVubmVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3RvcigpCit7CisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKyAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tCdW5kbGVQYWdlR2V0SW5zcGVj
dG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSkpOworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3Nl
V2ViSW5zcGVjdG9yKCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIFdLQnVuZGxlSW5z
cGVjdG9yQ2xvc2UoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5wYWdlKCktPnBhZ2UoKSkpOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBj
YWxsSUQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKKyAgICBX
S0J1bmRsZUluc3BlY3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNw
ZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKSwgY2FsbElELCBz
Y3JpcHRXSy5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKK30KKwordHlwZWRl
ZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRS
ZWY+ID4gV29ybGRNYXA7CitzdGF0aWMgV29ybGRNYXAmIHdvcmxkTWFwKCkKK3sKKyAgICBzdGF0
aWMgV29ybGRNYXAmIG1hcCA9ICpuZXcgV29ybGRNYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKwor
dW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmIHdvcmxkKQoreworICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB3b3JsZE1hcCgpLmVuZCgpOworICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0
LT5zZWNvbmQgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd29y
bGRJRCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIC8vIEEgd29ybGRJRCBvZiAwIGFsd2F5
cyBjb3JyZXNwb25kcyB0byBhIG5ldyB3b3JsZC4gQW55IG90aGVyIHdvcmxkSUQgY29ycmVzcG9u
ZHMgdG8gYSB3b3JsZAorICAgIC8vIHRoYXQgaXMgY3JlYXRlZCBvbmNlIGFuZCBjYWNoZWQgZm9y
ZXZlci4KKyAgICBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiB3b3JsZDsKKyAg
ICBpZiAoIXdvcmxkSUQpCisgICAgICAgIHdvcmxkLmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRD
cmVhdGVXb3JsZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZj4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0
ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGlmICghd29ybGRTbG90KQorICAgICAgICAgICAgd29y
bGRTbG90LmFkb3B0KFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsKKyAgICAgICAg
d29ybGQgPSB3b3JsZFNsb3Q7CisgICAgfQorCisgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9
IFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4dChjb250ZXh0KTsKKyAgICBpZiAoIWZy
YW1lKQorICAgICAgICBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworCisgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZy
YW1lLCB3b3JsZC5nZXQoKSk7CisgICAgSlNFdmFsdWF0ZVNjcmlwdChqc0NvbnRleHQsIHNjcmlw
dCwgMCwgMCwgMCwgMCk7IAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQT1NJ
WExvY2FsZShKU1N0cmluZ1JlZiBsb2NhbGUpCit7CisgICAgY2hhciBsb2NhbGVCdWZbMzJdOwor
ICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcobG9jYWxlLCBsb2NhbGVCdWYsIHNpemVvZihsb2Nh
bGVCdWYpKTsKKyAgICBzZXRsb2NhbGUoTENfQUxMLCBsb2NhbGVCdWYpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlv
bikKK3sKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIHJl
dHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJhbWUsIHRvV0soZGlyZWN0
aW9uKS5nZXQoKSk7Cit9CisgICAgCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91
bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblBh
Z2UpCit7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3ROZXdCZWZvcmVVbmxvYWRS
ZXR1cm5WYWx1ZSghc2hvdWxkU3RheU9uUGFnZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBzaG91bGREZWZlckxvYWRpbmcpCit7CisgICAg
V0tCdW5kbGVQYWdlU2V0RGVmZXJzTG9hZGluZyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZSgpLT5wYWdlKCksIHNob3VsZERlZmVyTG9hZGluZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KEpTU3RyaW5nUmVmIHN0YXRlKQoreworICAgIFdl
YkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlID0gV2ViQ29yZTo6UGFn
ZVZpc2liaWxpdHlTdGF0ZVZpc2libGU7CisKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdGF0ZSwgImhpZGRlbiIpKQorICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBXZWJD
b3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlSGlkZGVuOworICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoc3RhdGUsICJwcmVyZW5kZXIiKSkKKyAgICAgICAgdmlzaWJpbGl0
eVN0YXRlID0gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRlcjsKKyAgICBlbHNl
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0YXRlLCAicHJldmlldyIpKQorICAg
ICAgICB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlUHJldmll
dzsKKworICAgIFdLQnVuZGxlU2V0UGFnZVZpc2liaWxpdHlTdGF0ZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2Uo
KSwgdmlzaWJpbGl0eVN0YXRlLCAvKiBpc0luaXRpYWxTdGF0ZSAqLyBmYWxzZSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQoreworICAgIFdL
QnVuZGxlU2V0UGFnZVZpc2liaWxpdHlTdGF0ZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgV2ViQ29yZTo6
UGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUsIC8qIGlzSW5pdGlhbFN0YXRlICovIHRydWUpOwor
fQorCit0eXBlZGVmIFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tN
YXA7CitzdGF0aWMgQ2FsbGJhY2tNYXAmIGNhbGxiYWNrTWFwKCkKK3sKKyAgICBzdGF0aWMgQ2Fs
bGJhY2tNYXAmIG1hcCA9ICpuZXcgQ2FsbGJhY2tNYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKwor
ZW51bSB7CisgICAgQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrSUQgPSAxLAorICAgIFJlbW92
ZUNocm9tZUlucHV0RmllbGRDYWxsYmFja0lELAorICAgIEZvY3VzV2ViVmlld0NhbGxiYWNrSUQs
CisgICAgU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2tJRAorfTsKKworc3RhdGljIHZvaWQg
Y2FjaGVMYXlvdXRUZXN0Q29udHJvbGxlckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVl
UmVmIGNhbGxiYWNrKQoreworICAgIGlmICghY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1l
KTsKKyAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CisgICAgY2FsbGJhY2tN
YXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgY2FsbExheW91dFRl
c3RDb250cm9sbGVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCFjYWxsYmFj
a01hcCgpLmNvbnRhaW5zKGluZGV4KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKKyAgICBKU09iamVj
dFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRh
a2UoaW5kZXgpLCAwKTsKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxi
YWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIDAsIDAsIDApOworICAgIEpT
VmFsdWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKEpTVmFsdWVSZWYgY2FsbGJhY2spCit7Cisg
ICAgY2FjaGVMYXlvdXRUZXN0Q29udHJvbGxlckNhbGxiYWNrKEFkZENocm9tZUlucHV0RmllbGRD
YWxsYmFja0lELCBjYWxsYmFjayk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RB
ZGRDaHJvbWVJbnB1dEZpZWxkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
bW92ZUNocm9tZUlucHV0RmllbGQoSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBjYWNoZUxh
eW91dFRlc3RDb250cm9sbGVyQ2FsbGJhY2soUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFJlbW92ZUNo
cm9tZUlucHV0RmllbGQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9jdXNX
ZWJWaWV3KEpTVmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgY2FjaGVMYXlvdXRUZXN0Q29udHJv
bGxlckNhbGxiYWNrKEZvY3VzV2ViVmlld0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdEZvY3VzV2ViVmlldygpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGJhY2tpbmdTY2Fs
ZUZhY3RvciwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBjYWNoZUxheW91dFRlc3RDb250
cm9sbGVyQ2FsbGJhY2soU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2tJRCwgY2FsbGJhY2sp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9y
KGJhY2tpbmdTY2FsZUZhY3Rvcik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFdpbmRvd0lzS2V5KGJvb2wgaXNLZXkpCit7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBvc3RTZXRXaW5kb3dJc0tleShpc0tleSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soKQoreworICAgIGNhbGxMYXlvdXRU
ZXN0Q29udHJvbGxlckNhbGxiYWNrKEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFja0lEKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRD
YWxsYmFjaygpCit7CisgICAgY2FsbExheW91dFRlc3RDb250cm9sbGVyQ2FsbGJhY2soUmVtb3Zl
Q2hyb21lSW5wdXRGaWVsZENhbGxiYWNrSUQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKQoreworICAgIGNhbGxMYXlvdXRUZXN0Q29u
dHJvbGxlckNhbGxiYWNrKEZvY3VzV2ViVmlld0NhbGxiYWNrSUQpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpjYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2soKQorewor
ICAgIGNhbGxMYXlvdXRUZXN0Q29udHJvbGxlckNhbGxiYWNrKFNldEJhY2tpbmdTY2FsZUZhY3Rv
ckNhbGxiYWNrSUQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVBy
ZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBXS0J1
bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCB0
b1dLKHByZWZlcmVuY2UpLmdldCgpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZiByZXBseSkKK3sKKyNpZiBF
TkFCTEUoV0VCX0lOVEVOVFMpCisgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVJbnRlbnRSZXF1ZXN0
UmVmPiBjdXJyZW50UmVxdWVzdCA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPmN1
cnJlbnRJbnRlbnRSZXF1ZXN0KCk7CisgICAgaWYgKCFjdXJyZW50UmVxdWVzdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOworCisgICAgaWYgKHJlcGx5KSB7CisgICAgICAgIFdLUmV0YWluUHRyPFdL
U2VyaWFsaXplZFNjcmlwdFZhbHVlUmVmPiBzZXJpYWxpemVkRGF0YShBZG9wdFdLLCBXS1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUNyZWF0ZShjb250ZXh0LCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0
LCByZXBseSksIDApKTsKKyAgICAgICAgV0tCdW5kbGVJbnRlbnRSZXF1ZXN0UG9zdFJlc3VsdChj
dXJyZW50UmVxdWVzdC5nZXQoKSwgc2VyaWFsaXplZERhdGEuZ2V0KCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlcnJvclJlcGx5KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJFUlJPUiIpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTZXJp
YWxpemVkU2NyaXB0VmFsdWVSZWY+IHNlcmlhbGl6ZWREYXRhKEFkb3B0V0ssIFdLU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlQ3JlYXRlKGNvbnRleHQsIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGVy
cm9yUmVwbHkuZ2V0KCkpLCAwKSk7CisgICAgICAgIFdLQnVuZGxlSW50ZW50UmVxdWVzdFBvc3RG
YWlsdXJlKGN1cnJlbnRSZXF1ZXN0LmdldCgpLCBzZXJpYWxpemVkRGF0YS5nZXQoKSk7CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRl
bnQoSlNTdHJpbmdSZWYgYWN0aW9uLCBKU1N0cmluZ1JlZiB0eXBlLCBKU1N0cmluZ1JlZiBkYXRh
KQoreworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
cGFnZSgpLT5wYWdlKCkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gYWN0aW9uV0sgPSB0b1dLKGFjdGlvbik7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHR5cGVXSyA9IHRvV0sodHlwZSk7CisgICAgV0tSZXRhaW5QdHI8V0tTZXJpYWxpemVk
U2NyaXB0VmFsdWVSZWY+IGRhdGFXSyhBZG9wdFdLLCBXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUNy
ZWF0ZShjb250ZXh0LCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBkYXRhKSwgMCkpOworCisg
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gaW50ZW50SW5pdERpY3QoQWRv
cHRXSywgV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBXS0RpY3Rpb25hcnlBZGRJ
dGVtKGludGVudEluaXREaWN0LmdldCgpLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
YWN0aW9uIiksIGFjdGlvbldLLmdldCgpKTsKKyAgICBXS0RpY3Rpb25hcnlBZGRJdGVtKGludGVu
dEluaXREaWN0LmdldCgpLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidHlwZSIpLCB0
eXBlV0suZ2V0KCkpOworICAgIFdLRGljdGlvbmFyeUFkZEl0ZW0oaW50ZW50SW5pdERpY3QuZ2V0
KCksIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkYXRhIiksIGRhdGFXSy5nZXQoKSk7
CisKKyAgICBXS1JldGFpblB0cjxXS0ludGVudERhdGFSZWY+IHdrSW50ZW50RGF0YShBZG9wdFdL
LCBXS0ludGVudERhdGFDcmVhdGUoaW50ZW50SW5pdERpY3QuZ2V0KCkpKTsKKyAgICBXS0J1bmRs
ZVBhZ2VEZWxpdmVySW50ZW50VG9GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgp
LT5wYWdlKCksIG1haW5GcmFtZSwgd2tJbnRlbnREYXRhLmdldCgpKTsKKyNlbmRpZgorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWNj
ZXB0KQoreworICAgIFdLQnVuZGxlU2V0QWx3YXlzQWNjZXB0Q29va2llcyhJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCksIGFjY2VwdCk7Cit9CisKK2RvdWJsZSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cHJlY2lzZVRpbWUoKQoreworICAgIHJldHVybiBjdXJyZW50VGltZSgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZW5hYmxlZDsKKwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVVybCA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICBXS1N0cmluZ1JlZiBsb2NhdGlvbiA9IGVu
YWJsZWQgPyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVVybC5nZXQoKTsK
KyAgICBXS0J1bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGxv
Y2F0aW9uKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlvbikKK3sKKyAgICBtX3VzZXJTdHlsZVNoZWV0
TG9jYXRpb24gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGxvY2F0aW9uKSk7
CisKKyAgICBpZiAobV91c2VyU3R5bGVTaGVldEVuYWJsZWQpCisgICAgICAgIHNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZCh0cnVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAJKHJldmlzaW9uIDEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxl
LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCi0jaW5jbHVkZSAiSlNMYXlvdXRU
ZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkpTVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtV2ViVmlldy5oIgogI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IlRlc3RDb250cm9sbGVyLmgiCkBAIC01NywxNCArNTcsMTQgQEAgbmFtZXNwYWNlIFdUUiB7CiAK
IC8vIFRoaXMgaXMgbG93ZXIgdGhhbiBEdW1wUmVuZGVyVHJlZSdzIHRpbWVvdXQsIHRvIG1ha2Ug
aXQgZWFzaWVyIHRvIHdvcmsgdGhyb3VnaCB0aGUgZmFpbHVyZXMKIC8vIEV2ZW50dWFsbHkgaXQg
c2hvdWxkIGJlIGNoYW5nZWQgdG8gbWF0Y2guCi1jb25zdCBkb3VibGUgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgPSA2OworY29uc3QgZG91Ymxl
IFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgPSA2OwogCi1QYXNz
UmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRl
KCkKK1Bhc3NSZWZQdHI8VGVzdFJ1bm5lcj4gVGVzdFJ1bm5lcjo6Y3JlYXRlKCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IExheW91dFRlc3RDb250cm9sbGVyKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRlc3RSdW5uZXIpOwogfQogCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0
VGVzdENvbnRyb2xsZXIoKQorVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCiAgICAgOiBtX3doYXRU
b0R1bXAoUmVuZGVyVHJlZSkKICAgICAsIG1fc2hvdWxkRHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRp
b25zKGZhbHNlKQogICAgICwgbV9zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRv
d3MoZmFsc2UpCkBAIC05MiwxNiArOTIsMTYgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbAogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogfQogCi1MYXlvdXRUZXN0
Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKK1Rlc3RSdW5uZXI6On5UZXN0UnVu
bmVyKCkKIHsKIH0KIAotSlNDbGFzc1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d3JhcHBlckNs
YXNzKCkKK0pTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6d3JhcHBlckNsYXNzKCkKIHsKLSAgICByZXR1
cm4gSlNMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5b3V0VGVzdENvbnRyb2xsZXJDbGFzcygpOwor
ICAgIHJldHVybiBKU1Rlc3RSdW5uZXI6OnRlc3RSdW5uZXJDbGFzcygpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgp
CiB7CiAgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
cGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UpOwpAQCAt
MTA5LDcgKzEwOSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQogICAg
IFdLQnVuZGxlUGFnZVJlc2V0VHJhY2tlZFJlcGFpbnRzKHBhZ2UpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkdW1wQXNUZXh0KGJvb2wgZHVtcFBpeGVscykKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1bXBQaXhlbHMpCiB7CiAgICAgaWYgKG1fd2hhdFRvRHVt
cCA8IE1haW5GcmFtZVRleHQpCiAgICAgICAgIG1fd2hhdFRvRHVtcCA9IE1haW5GcmFtZVRleHQ7
CkBAIC0xMTcsMjYgKzExNywyNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNU
ZXh0KGJvCiB9CiAKIC8vIEZJWE1FOiBOZWVkcyBhIGZ1bGwgaW1wbGVtZW50YXRpb24gc2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjU0Ngotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29s
IHBlcm1pc3NpdmUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJv
b2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQogewogICAgIG1fcG9saWN5RGVsZWdhdGVFbmFi
bGVkID0gZW5hYmxlZDsKICAgICBtX3BvbGljeURlbGVnYXRlUGVybWlzc2l2ZSA9IHBlcm1pc3Np
dmU7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0
ZSgpCit2b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCiB7CiAgICAgc2V0
Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSk7CiAgICAgd2FpdFVudGlsRG9uZSgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VW50aWxEb25lKCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6d2FpdFVudGlsRG9uZSgpCiB7CiAgICAgbV93YWl0VG9EdW1wID0gdHJ1ZTsKICAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpCiAg
ICAgICAgIGluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQo
KQordm9pZCBUZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCkKIHsKICAg
ICBpbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKTsKICAgICBjb25zdCBjaGFyKiBt
ZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNh
bGxlZFxuIjsKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3
YWl0VG9EdW1wV2F0CiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmRvbmUoKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit2b2lkIFRlc3RSdW5uZXI6
Om5vdGlmeURvbmUoKQogewogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNl
OwogfQogCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmlt
YXRpb25zKCkgY29uc3QKK3Vuc2lnbmVkIFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IElzIGl0IE9LIHRoaXMgd29ya3Mgb25seSBm
b3IgdGhlIG1haW4gZnJhbWU/CiAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgbmVlZGVkIG9ubHkg
Zm9yIHRoZSBtYWluIGZyYW1lLCB0aGVuIHdoeSBpcyB0aGUgZnVuY3Rpb24gb24gV0tCdW5kbGVG
cmFtZSBpbnN0ZWFkIG9mIFdLQnVuZGxlUGFnZT8KQEAgLTE2NCw3ICsxNjQsNyBAQCB1bnNpZ25l
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBCiAgICAgcmV0dXJuIFdLQnVuZGxlRnJh
bWVHZXROdW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMobWFpbkZyYW1lKTsKIH0KIAotYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNT
dHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJ
ZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQo
SlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1l
bnRJZCkKIHsKICAgICAvLyBGSVhNRTogSXMgaXQgT0sgdGhpcyB3b3JrcyBvbmx5IGZvciB0aGUg
bWFpbiBmcmFtZT8KICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBuZWVkZWQgb25seSBmb3IgdGhl
IG1haW4gZnJhbWUsIHRoZW4gd2h5IGlzIHRoZSBmdW5jdGlvbiBvbiBXS0J1bmRsZUZyYW1lIGlu
c3RlYWQgb2YgV0tCdW5kbGVQYWdlPwpAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW8KICAgICByZXR1cm4gV0tCdW5kbGVGcmFtZVBhdXNl
QW5pbWF0aW9uT25FbGVtZW50V2l0aElkKG1haW5GcmFtZSwgdG9XSyhhbmltYXRpb25OYW1lKS5n
ZXQoKSwgdG9XSyhlbGVtZW50SWQpLmdldCgpLCB0aW1lKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5n
UmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK2Jv
b2wgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3Ry
aW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkK
IHsKICAgICAvLyBGSVhNRTogSXMgaXQgT0sgdGhpcyB3b3JrcyBvbmx5IGZvciB0aGUgbWFpbiBm
cmFtZT8KICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBuZWVkZWQgb25seSBmb3IgdGhlIG1haW4g
ZnJhbWUsIHRoZW4gd2h5IGlzIHRoZSBmdW5jdGlvbiBvbiBXS0J1bmRsZUZyYW1lIGluc3RlYWQg
b2YgV0tCdW5kbGVQYWdlPwpAQCAtMTgwLDIwICsxODAsMjAgQEAgYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGF1c2VUcmFuc2l0aQogICAgIHJldHVybiBXS0J1bmRsZUZyYW1lUGF1c2VUcmFu
c2l0aW9uT25FbGVtZW50V2l0aElkKG1haW5GcmFtZSwgdG9XSyhwcm9wZXJ0eU5hbWUpLmdldCgp
LCB0b1dLKGVsZW1lbnRJZCkuZ2V0KCksIHRpbWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucygpCit2b2lkIFRlc3RSdW5uZXI6OnN1c3BlbmRBbmlt
YXRpb25zKCkKIHsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwog
ICAgIFdLQnVuZGxlRnJhbWVTdXNwZW5kQW5pbWF0aW9ucyhtYWluRnJhbWUpOwogfQogCi1KU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4
dCgpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6bGF5ZXJUcmVl
QXNUZXh0KCkgY29uc3QKIHsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCkpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0KEFkb3B0V0ssIFdLQnVuZGxl
RnJhbWVDb3B5TGF5ZXJUcmVlQXNUZXh0KG1haW5GcmFtZSkpOwogICAgIHJldHVybiB0b0pTKHRl
eHQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3Ry
aW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKK3ZvaWQgVGVz
dFJ1bm5lcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFy
dCwgYm9vbCBhbGxGcmFtZXMpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNvdXJj
ZVdLID0gdG9XSyhzb3VyY2UpOwogICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRS
ZWY+IHNjcmlwdFdvcmxkKEFkb3B0V0ssIFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgp
KTsKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2Vy
U2NyaXB0CiAgICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0lu
amVjdEluVG9wRnJhbWVPbmx5KSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCit2b2lk
IFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBh
bGxGcmFtZXMpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNvdXJjZVdLID0gdG9X
Syhzb3VyY2UpOwogICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+IHNjcmlw
dFdvcmxkKEFkb3B0V0ssIFdLQnVuZGxlU2NyaXB0V29ybGRDcmVhdGVXb3JsZCgpKTsKQEAgLTIx
MiwxMiArMjEyLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVMK
ICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5U
b3BGcmFtZU9ubHkpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhp
c3RvcnkoKQordm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCiB7CiAgICAgV0tCdW5k
bGVTZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIHRydWUpOwogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb21w
dXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNWYWx1ZVJlZiBlbGVtZW50KQorSlNWYWx1
ZVJlZiBUZXN0UnVubmVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNWYWx1
ZVJlZiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiBJcyBpdCBPSyB0aGlzIHdvcmtzIG9ubHkg
Zm9yIHRoZSBtYWluIGZyYW1lPwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSk7CkBAIC0yMzAsNyArMjMwLDcgQEAgSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y29tcHV0ZQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNWYWx1ZVJl
ZiBlbGVtZW50KQorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Om1hcmtlclRl
eHRGb3JMaXN0SXRlbShKU1ZhbHVlUmVmIGVsZW1lbnQpCiB7CiAgICAgV0tCdW5kbGVGcmFtZVJl
ZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwpAQCAtMjQyLDEyICsyNDIs
MTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cgogICAgIHJldHVy
biB0b0pTKHRleHQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFu
ZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiBhcmd1bWVudCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgYXJndW1lbnQpCiB7
CiAgICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyhhcmd1bWVudCku
Z2V0KCkpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTU3Ry
aW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQorYm9vbCBUZXN0
UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25z
QXJyYXlBc1ZhbHVlKQogewogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7CiAKQEAgLTI4
NSwxMTcgKzI4NSwxMTcgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhK
UwogICAgIHJldHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCBvcHRpb25zKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQordm9pZCBUZXN0
UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgV0tCdW5kbGVDbGVhckFsbERhdGFi
YXNlcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCkpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQordm9pZCBU
ZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQogewogICAgIHJldHVy
biBXS0J1bmRsZVNldERhdGFiYXNlUXVvdGEoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBxdW90YSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBw
bGljYXRpb25DYWNoZXMoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2Fj
aGVzKCkKIHsKICAgICBXS0J1bmRsZUNsZWFyQXBwbGljYXRpb25DYWNoZShJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBcHBDYWNoZU1heGltdW1TaXplKHVpbnQ2NF90IHNpemUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEFwcENhY2hlTWF4aW11bVNpemUodWludDY0X3Qgc2l6ZSkKIHsKICAgICBXS0J1bmRsZVNldEFw
cENhY2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBzaXpl
KTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0
cmluZ1JlZiBuYW1lKQorYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5n
UmVmIG5hbWUpCiB7CiAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5n
ZXQoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbk9wZW5XaW5kb3dz
KGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldENhbk9wZW5XaW5kb3dzKGJvb2wpCiB7CiAgICAg
Ly8gSXQncyBub3QgY2xlYXIgaWYgb3Igd2h5IGFueSB0ZXN0cyByZXF1aXJlIG9wZW5pbmcgd2lu
ZG93cyBiZSBmb3JiaWRkZW4uCiAgICAgLy8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhpcyBzZXR0
aW5nLCBhbmQgaWYgd2UgZmluZCBsYXRlciBpdCdzIG5lZWRlZCB3ZSBjYW4gYWRkIGl0LgogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVu
YWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5KEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKICAgICBX
S0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgp
LCBrZXkuZ2V0KCksIGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit2b2lkIFRl
c3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxl
ZCkKIHsKICAgICBXS0J1bmRsZVNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKICAg
ICBXS0J1bmRsZVNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwg
ZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBXS0J1bmRsZVNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RS
dW5uZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBXS0J1bmRsZVNl
dFBsdWdpbnNFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkK
IHsKICAgICBXS0J1bmRsZVNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwg
ZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRD
YW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRKYXZh
U2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlZCkKIHsKICAgICAgV0tCdW5kbGVT
ZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5i
dW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewogICAgICBXS0J1bmRsZVNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICAgV0tCdW5k
bGVTZXRQb3B1cEJsb2NraW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxl
KCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgICBXS0J1bmRsZVNldEF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291
cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBk
ZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit2b2lkIFRl
c3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJj
ZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVz
dGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQogewogICAgIFdL
QnVuZGxlQWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmJ1bmRsZSgpLCB0b1dLKHNvdXJjZU9yaWdpbikuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Q
cm90b2NvbCkuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Ib3N0KS5nZXQoKSwgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3Ry
aW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwg
Ym9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0
cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3Qs
IGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgV0tCdW5kbGVSZW1vdmVP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxl
KCksIHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvblByb3RvY29sKS5n
ZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9t
YWlucyk7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhkb3Vi
bGUgcGFnZVdpZHRoSW5QaXhlbHMsIGRvdWJsZSBwYWdlSGVpZ2h0SW5QaXhlbHMpCitpbnQgVGVz
dFJ1bm5lcjo6bnVtYmVyT2ZQYWdlcyhkb3VibGUgcGFnZVdpZHRoSW5QaXhlbHMsIGRvdWJsZSBw
YWdlSGVpZ2h0SW5QaXhlbHMpCiB7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpKTsKICAgICByZXR1cm4gV0tCdW5kbGVOdW1iZXJPZlBhZ2VzKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlV2lkdGhJblBpeGVscywgcGFnZUhl
aWdodEluUGl4ZWxzKTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RD
b250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1h
cmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVz
dFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJbmRleCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJn
aW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KQogewogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5w
YWdlKCktPnBhZ2UoKSk7CiAgICAgcmV0dXJuIHRvSlMoV0tCdW5kbGVQYWdlU2l6ZUFuZE1hcmdp
bnNJblBpeGVscyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1haW5GcmFtZSwg
cGFnZUluZGV4LCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5C
b3R0b20sIG1hcmdpbkxlZnQpKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQ
YWdlQm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQorYm9vbCBUZXN0UnVubmVyOjppc1BhZ2VCb3hW
aXNpYmxlKGludCBwYWdlSW5kZXgpCiB7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpKTsKICAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlSW5kZXgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpCit2b2lkIFRlc3RS
dW5uZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBl
bGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICBpZiAoIWVsZW1lbnQgfHwgIUpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA0LDM4
ICs0MDQsMzggQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVcwogICAg
IFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIobm9kZUhh
bmRsZS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOwogfQogCi11bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQordW5zaWduZWQgVGVzdFJ1bm5lcjo6d2luZG93Q291
bnQoKQogewogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUNvdW50KCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewogICAgIFdLQnVuZGxl
QmFja0ZvcndhcmRMaXN0Q2xlYXIoV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRMaXN0KEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSkpOwogfQogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit2b2lkIFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQogewogICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInRlc3RSdW5uZXIi
LCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzaG93V2ViSW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3Rvcigp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tC
dW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSkpOwogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xvc2VX
ZWJJbnNwZWN0b3IoKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgV0tCdW5kbGVJbnNw
ZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnBhZ2UoKS0+cGFnZSgpKSk7CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNh
bGxJRCwgSlNTdHJpbmdSZWYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2Vi
SW5zcGVjdG9yKGxvbmcgY2FsbElELCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dL
KHNjcmlwdCk7CkBAIC00NTAsNyArNDUwLDcgQEAgc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgp
CiAgICAgcmV0dXJuIG1hcDsKIH0KIAotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Ondv
cmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQordW5zaWduZWQgVGVz
dFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQpCiB7
CiAgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7CiAg
ICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNDYxLDcgKzQ2MSw3IEBAIHVuc2lnbmVkIExheW91dFRl
c3RDb250cm9sbGVyOjp3b3JsZElERm8KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVm
IGNvbnRleHQsIHVuc2lnbmVkIHdvcmxkSUQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIHVuc2lnbmVkIHdvcmxkSUQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICAvLyBBIHdv
cmxkSUQgb2YgMCBhbHdheXMgY29ycmVzcG9uZHMgdG8gYSBuZXcgd29ybGQuIEFueSBvdGhlciB3
b3JsZElEIGNvcnJlc3BvbmRzIHRvIGEgd29ybGQKICAgICAvLyB0aGF0IGlzIGNyZWF0ZWQgb25j
ZSBhbmQgY2FjaGVkIGZvcmV2ZXIuCkBAIC00ODMsMzAgKzQ4MywzMCBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwCiAgICAgSlNFdmFsdWF0ZVNjcmlwdChqc0NvbnRl
eHQsIHNjcmlwdCwgMCwgMCwgMCwgMCk7IAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRQT1NJWExvY2FsZShKU1N0cmluZ1JlZiBsb2NhbGUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2FsZSkKIHsKICAgICBjaGFyIGxvY2FsZUJ1Zlsz
Ml07CiAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhsb2NhbGUsIGxvY2FsZUJ1Ziwgc2l6ZW9m
KGxvY2FsZUJ1ZikpOwogICAgIHNldGxvY2FsZShMQ19BTEwsIGxvY2FsZUJ1Zik7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGly
ZWN0aW9uKQordm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRp
cmVjdGlvbikKIHsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwog
ICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJhbWUsIHRvV0so
ZGlyZWN0aW9uKS5nZXQoKSk7CiB9CiAgICAgCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0
YXlPblBhZ2UpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRs
aW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUGFnZSkKIHsKICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVlKCFzaG91bGRTdGF5
T25QYWdlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGlu
Zyhib29sIHNob3VsZERlZmVyTG9hZGluZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9h
ZGluZyhib29sIHNob3VsZERlZmVyTG9hZGluZykKIHsKICAgICBXS0J1bmRsZVBhZ2VTZXREZWZl
cnNMb2FkaW5nKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgc2hvdWxk
RGVmZXJMb2FkaW5nKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZp
c2liaWxpdHkoSlNTdHJpbmdSZWYgc3RhdGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNp
YmlsaXR5KEpTU3RyaW5nUmVmIHN0YXRlKQogewogICAgIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5
U3RhdGUgdmlzaWJpbGl0eVN0YXRlID0gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVZpc2li
bGU7CiAKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
YWdlVmlzaWJpCiAgICAgV0tCdW5kbGVTZXRQYWdlVmlzaWJpbGl0eVN0YXRlKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpLCB2aXNpYmlsaXR5U3RhdGUsIC8qIGlzSW5pdGlhbFN0YXRlICovIGZhbHNlKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCit2b2lk
IFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewogICAgIFdLQnVuZGxlU2V0UGFn
ZVZpc2liaWxpdHlTdGF0ZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgV2ViQ29yZTo6UGFnZVZpc2liaWxp
dHlTdGF0ZVZpc2libGUsIC8qIGlzSW5pdGlhbFN0YXRlICovIHRydWUpOwogfQpAQCAtNTM5LDcg
KzUzOSw3IEBAIGVudW0gewogICAgIFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrSUQKIH07
CiAKLXN0YXRpYyB2b2lkIGNhY2hlTGF5b3V0VGVzdENvbnRyb2xsZXJDYWxsYmFjayh1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3N0YXRpYyB2b2lkIGNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGlm
ICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKQEAgLTU1MCw3ICs1NTAsNyBAQCBzdGF0aWMg
dm9pZCBjYWNoZUxheW91dFRlc3RDb250cm9sbGVyQ2FsCiAgICAgY2FsbGJhY2tNYXAoKS5hZGQo
aW5kZXgsIGNhbGxiYWNrKTsKIH0KIAotc3RhdGljIHZvaWQgY2FsbExheW91dFRlc3RDb250cm9s
bGVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgpCitzdGF0aWMgdm9pZCBjYWxsVGVzdFJ1bm5lckNh
bGxiYWNrKHVuc2lnbmVkIGluZGV4KQogewogICAgIGlmICghY2FsbGJhY2tNYXAoKS5jb250YWlu
cyhpbmRleCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU2MSw2MSArNTYxLDYxIEBAIHN0YXRpYyB2
b2lkIGNhbGxMYXlvdXRUZXN0Q29udHJvbGxlckNhbGwKICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNv
bnRleHQsIGNhbGxiYWNrKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hy
b21lSW5wdXRGaWVsZChKU1ZhbHVlUmVmIGNhbGxiYWNrKQordm9pZCBUZXN0UnVubmVyOjphZGRD
aHJvbWVJbnB1dEZpZWxkKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7Ci0gICAgY2FjaGVMYXlvdXRU
ZXN0Q29udHJvbGxlckNhbGxiYWNrKEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFja0lELCBjYWxs
YmFjayk7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQWRkQ2hyb21lSW5wdXRGaWVsZENh
bGxiYWNrSUQsIGNhbGxiYWNrKTsKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdEFk
ZENocm9tZUlucHV0RmllbGQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVt
b3ZlQ2hyb21lSW5wdXRGaWVsZChKU1ZhbHVlUmVmIGNhbGxiYWNrKQordm9pZCBUZXN0UnVubmVy
OjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7Ci0gICAgY2Fj
aGVMYXlvdXRUZXN0Q29udHJvbGxlckNhbGxiYWNrKFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxs
YmFja0lELCBjYWxsYmFjayk7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soUmVtb3ZlQ2hy
b21lSW5wdXRGaWVsZENhbGxiYWNrSUQsIGNhbGxiYWNrKTsKICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucG9zdFJlbW92ZUNocm9tZUlucHV0RmllbGQoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Zm9jdXNXZWJWaWV3KEpTVmFsdWVSZWYgY2FsbGJhY2spCit2b2lkIFRl
c3RSdW5uZXI6OmZvY3VzV2ViVmlldyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewotICAgIGNhY2hl
TGF5b3V0VGVzdENvbnRyb2xsZXJDYWxsYmFjayhGb2N1c1dlYlZpZXdDYWxsYmFja0lELCBjYWxs
YmFjayk7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soRm9jdXNXZWJWaWV3Q2FsbGJhY2tJ
RCwgY2FsbGJhY2spOwogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0Rm9jdXNXZWJW
aWV3KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZh
Y3Rvcihkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGJhY2tpbmdTY2FsZUZh
Y3RvciwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKLSAgICBjYWNoZUxheW91dFRlc3RDb250cm9s
bGVyQ2FsbGJhY2soU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwor
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFNldEJhY2tp
bmdTY2FsZUZhY3RvcihiYWNraW5nU2NhbGVGYWN0b3IpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShib29sIGlzS2V5KQordm9pZCBUZXN0UnVubmVyOjpz
ZXRXaW5kb3dJc0tleShib29sIGlzS2V5KQogewogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wb3N0U2V0V2luZG93SXNLZXkoaXNLZXkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6
Y2FsbEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFjaygpCiB7Ci0gICAgY2FsbExheW91dFRlc3RD
b250cm9sbGVyQ2FsbGJhY2soQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrSUQpOworICAgIGNh
bGxUZXN0UnVubmVyQ2FsbGJhY2soQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrSUQpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENh
bGxiYWNrKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxs
YmFjaygpCiB7Ci0gICAgY2FsbExheW91dFRlc3RDb250cm9sbGVyQ2FsbGJhY2soUmVtb3ZlQ2hy
b21lSW5wdXRGaWVsZENhbGxiYWNrSUQpOworICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soUmVt
b3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrSUQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKQordm9pZCBUZXN0UnVubmVyOjpjYWxs
Rm9jdXNXZWJWaWV3Q2FsbGJhY2soKQogewotICAgIGNhbGxMYXlvdXRUZXN0Q29udHJvbGxlckNh
bGxiYWNrKEZvY3VzV2ViVmlld0NhbGxiYWNrSUQpOworICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJh
Y2soRm9jdXNXZWJWaWV3Q2FsbGJhY2tJRCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpCit2b2lkIFRlc3RSdW5uZXI6
OmNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpCiB7Ci0gICAgY2FsbExheW91dFRl
c3RDb250cm9sbGVyQ2FsbGJhY2soU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2tJRCk7Cisg
ICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFja0lE
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpT
U3RyaW5nUmVmIHByZWZlcmVuY2UsIGJvb2wgdmFsdWUpCit2b2lkIFRlc3RSdW5uZXI6Om92ZXJy
aWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBib29sIHZhbHVlKQogewogICAg
IFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3Vw
KCksIHRvV0socHJlZmVyZW5jZSkuZ2V0KCksIHZhbHVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmIHJlcGx5KQordm9p
ZCBUZXN0UnVubmVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYgcmVwbHkpCiB7
CiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlSW50ZW50
UmVxdWVzdFJlZj4gY3VycmVudFJlcXVlc3QgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZSgpLT5jdXJyZW50SW50ZW50UmVxdWVzdCgpOwpAQCAtNjM2LDcgKzYzNiw3IEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnQKICNlbmRpZgogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmIGFjdGlvbiwgSlNT
dHJpbmdSZWYgdHlwZSwgSlNTdHJpbmdSZWYgZGF0YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsaXZl
cldlYkludGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpTU3RyaW5n
UmVmIGRhdGEpCiB7CiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CkBAIC02NTYsMTcgKzY1NiwxNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50CiAjZW5kaWYKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkKIHsKICAgICBX
S0J1bmRsZVNldEFsd2F5c0FjY2VwdENvb2tpZXMoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1
bmRsZSgpLCBhY2NlcHQpOwogfQogCi1kb3VibGUgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnByZWNp
c2VUaW1lKCkKK2RvdWJsZSBUZXN0UnVubmVyOjpwcmVjaXNlVGltZSgpCiB7CiAgICAgcmV0dXJu
IGN1cnJlbnRUaW1lKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJT
dHlsZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJT
dHlsZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV91c2VyU3R5bGVTaGVldEVu
YWJsZWQgPSBlbmFibGVkOwogCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VXNlclN0eWxlUwogICAgIFdLQnVuZGxlU2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlR3JvdXAoKSwgbG9jYXRpb24pOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGxvY2F0aW9uKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGxv
Y2F0aW9uKQogewogICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcobG9jYXRpb24pKTsKIApJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDEy
NTUxNykJKGZyb20gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5oOjEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXlvdXRUZXN0Q29udHJvbGxlcl9oCisj
ZGVmaW5lIExheW91dFRlc3RDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxXZWJL
aXQyL1dLQnVuZGxlU2NyaXB0V29ybGQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKKyNp
ZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPENv
cmVGb3VuZGF0aW9uL0NGUnVuTG9vcC5oPgordHlwZWRlZiBSZXRhaW5QdHI8Q0ZSdW5Mb29wVGlt
ZXJSZWY+IFBsYXRmb3JtVGltZXJSZWY7CisjZWxpZiBQTEFURk9STShXSU4pCit0eXBlZGVmIFVJ
TlRfUFRSIFBsYXRmb3JtVGltZXJSZWY7CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxR
VGltZXI+Cit0eXBlZGVmIFFUaW1lciBQbGF0Zm9ybVRpbWVyUmVmOworI2VsaWYgUExBVEZPUk0o
R1RLKQordHlwZWRlZiB1bnNpZ25lZCBpbnQgUGxhdGZvcm1UaW1lclJlZjsKKyNlbGlmIFBMQVRG
T1JNKEVGTCkKK3R5cGVkZWYgc3RydWN0IF9FY29yZV9UaW1lciBFY29yZV9UaW1lcjsKK3R5cGVk
ZWYgRWNvcmVfVGltZXIqIFBsYXRmb3JtVGltZXJSZWY7CisjZW5kaWYKKworbmFtZXNwYWNlIFdU
UiB7CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gY3Jl
YXRlKCk7CisgICAgdmlydHVhbCB+TGF5b3V0VGVzdENvbnRyb2xsZXIoKTsKKworICAgIC8vIEpT
V3JhcHBhYmxlCisgICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworCisgICAg
dm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2Jq
ZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisgICAgLy8gVGhlIGJhc2ljcy4KKyAgICB2
b2lkIGR1bXBBc1RleHQoYm9vbCBkdW1wUGl4ZWxzKTsKKyAgICB2b2lkIHdhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSgpOworICAgIHZvaWQgZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgeyBtX3doYXRUb0R1
bXAgPSBBbGxGcmFtZXNUZXh0OyB9CisgICAgdm9pZCB3YWl0VW50aWxEb25lKCk7CisgICAgdm9p
ZCBub3RpZnlEb25lKCk7CisgICAgZG91YmxlIHByZWNpc2VUaW1lKCk7CisKKyAgICAvLyBPdGhl
ciBkdW1waW5nLgorICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdCgpIHsgbV9zaG91bGREdW1w
QmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MgPSB0cnVlOyB9CisgICAgdm9pZCBkdW1wQ2hp
bGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIHsgbV9zaG91bGREdW1wQWxsRnJhbWVTY3JvbGxQb3Np
dGlvbnMgPSB0cnVlOyB9CisgICAgdm9pZCBkdW1wRWRpdGluZ0NhbGxiYWNrcygpIHsgbV9kdW1w
RWRpdGluZ0NhbGxiYWNrcyA9IHRydWU7IH0KKyAgICB2b2lkIGR1bXBTZWxlY3Rpb25SZWN0KCkg
eyB9IC8vIFdpbGwgbmVlZCB0byBkbyBzb21ldGhpbmcgd2hlbiB3ZSBzdXBwb3J0IHBpeGVsIHRl
c3RzLgorICAgIHZvaWQgZHVtcFN0YXR1c0NhbGxiYWNrcygpIHsgbV9kdW1wU3RhdHVzQ2FsbGJh
Y2tzID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcygpIHsgbV9kdW1wVGl0bGVD
aGFuZ2VzID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSB7IG1f
ZHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MgPSB0cnVlOyB9CisgICAgdm9pZCBkdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkgeyBzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOyB9Cisg
ICAgdm9pZCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkgeyBzZXRTaG91bGREdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrKHRydWUpOyB9CisgICAgdm9pZCBkdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcygpIHsgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyA9IHRydWU7
IH0KKworICAgIHZvaWQgc2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29sIHZhbHVl
KSB7IG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRTaG91
bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGJvb2wgdmFsdWUpIHsgbV9kdW1wUHJvZ3Jl
c3NGaW5pc2hlZENhbGxiYWNrID0gdmFsdWU7IH0KKworICAgIC8vIFNwZWNpYWwgb3B0aW9ucy4K
KyAgICB2b2lkIGtlZXBXZWJIaXN0b3J5KCk7CisgICAgdm9pZCBzZXRBY2NlcHRzRWRpdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkQWxsb3dFZGl0aW5nID0gdmFsdWU7IH0KKyAgICB2b2lkIHNl
dENhbk9wZW5XaW5kb3dzKGJvb2wpOworICAgIHZvaWQgc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dz
V2hlbkNvbXBsZXRlKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRDbG9zZUV4dHJhV2luZG93cyA9IHZh
bHVlOyB9CisgICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNl
dEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOworICAgIHZvaWQgc2V0QWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOworICAgIHZvaWQgc2V0RnJhbWVGbGF0dGVu
aW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJvb2wpOworICAg
IHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOworICAgIHZvaWQgc2V0SmF2YVNj
cmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sKTsKKyAgICB2b2lkIHNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sKTsK
KyAgICB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wpOworICAgIHZvaWQg
c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUgPSBm
YWxzZSk7CisgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1Jl
ZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5n
UmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Cisg
ICAgdm9pZCByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3Vy
Y2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRl
c3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEpTU3RyaW5nUmVmKTsKKworICAgIC8vIFNwZWNpYWwgRE9NIGZ1bmN0aW9u
cy4KKyAgICBKU1ZhbHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU1Zh
bHVlUmVmIGVsZW1lbnQpOworICAgIHZvaWQgY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICB2
b2lkIGV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIGFyZ3VtZW50KTsK
KyAgICBib29sIGlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSk7CisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHRGb3JMaXN0SXRlbShKU1ZhbHVlUmVmIGVsZW1l
bnQpOworICAgIHVuc2lnbmVkIHdpbmRvd0NvdW50KCk7CisKKyAgICAvLyBSZXBhaW50IHRlc3Rp
bmcuCisgICAgdm9pZCB0ZXN0UmVwYWludCgpIHsgbV90ZXN0UmVwYWludCA9IHRydWU7IH0KKyAg
ICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseSgpIHsgbV90ZXN0UmVwYWludFN3ZWVwSG9y
aXpvbnRhbGx5ID0gdHJ1ZTsgfQorICAgIHZvaWQgZGlzcGxheSgpOworCisgICAgLy8gQW5pbWF0
aW9uIHRlc3RpbmcuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29u
c3Q7CisgICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmlu
Z1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKTsK
KyAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1Jl
ZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpOworICAg
IHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICAKKyAgICAvLyBDb21wb3NpdGluZyB0ZXN0
aW5nLgorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsYXllclRyZWVBc1RleHQoKSBjb25z
dDsKKyAgICAKKyAgICAvLyBVc2VyQ29udGVudCB0ZXN0aW5nLgorICAgIHZvaWQgYWRkVXNlclNj
cmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMp
OworICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFs
bEZyYW1lcyk7CisKKyAgICAvLyBUZXh0IHNlYXJjaCB0ZXN0aW5nLgorICAgIGJvb2wgZmluZFN0
cmluZyhKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXkpOworCisgICAgLy8gTG9j
YWwgc3RvcmFnZQorICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICB2b2lkIHNldERh
dGFiYXNlUXVvdGEodWludDY0X3QpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYXRo
VG9Mb2NhbFJlc291cmNlKEpTU3RyaW5nUmVmKTsKKworICAgIC8vIEFwcGxpY2F0aW9uIENhY2hl
CisgICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCk7CisgICAgdm9pZCBzZXRBcHBD
YWNoZU1heGltdW1TaXplKHVpbnQ2NF90KTsKKworICAgIC8vIFByaW50aW5nCisgICAgaW50IG51
bWJlck9mUGFnZXMoZG91YmxlIHBhZ2VXaWR0aEluUGl4ZWxzLCBkb3VibGUgcGFnZUhlaWdodElu
UGl4ZWxzKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGFnZVNpemVBbmRNYXJnaW5z
SW5QaXhlbHMoaW50IHBhZ2VJbmRleCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2lu
VG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KTsK
KyAgICBib29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCk7CisKKyAgICB2b2lkIHNl
dFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdS
ZWYgdmFsdWUpOworCisgICAgZW51bSBXaGF0VG9EdW1wIHsgUmVuZGVyVHJlZSwgTWFpbkZyYW1l
VGV4dCwgQWxsRnJhbWVzVGV4dCB9OworICAgIFdoYXRUb0R1bXAgd2hhdFRvRHVtcCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2hhdFRvRHVtcDsgfQorCisgICAgYm9vbCBzaG91bGREdW1wQWxsRnJhbWVT
Y3JvbGxQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZER1bXBBbGxGcmFtZVNjcm9s
bFBvc2l0aW9uczsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxX
aW5kb3dzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFs
bFdpbmRvd3M7IH0KKyAgICBib29sIHNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgY29uc3Qg
eyByZXR1cm4gbV9kdW1wRWRpdGluZ0NhbGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxkRHVtcE1h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93aGF0VG9EdW1wID09IFJl
bmRlclRyZWU7IH0KKyAgICBib29sIHNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBTdGF0dXNDYWxsYmFja3M7IH0KKyAgICBib29sIHNob3VsZER1bXBUaXRs
ZUNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0KKyAgICBib29s
IHNob3VsZER1bXBQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBQaXhlbHM7IH0KKyAgICBi
b29sIHNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1w
RnVsbFNjcmVlbkNhbGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsgfQorICAgIGJv
b2wgc2hvdWxkRHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsgfQorICAgIGJvb2wgc2hvdWxkRHVtcFJlc291
cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBSZXNvdXJjZVJlc3Bv
bnNlTUlNRVR5cGVzOyB9CisKKyAgICBib29sIGlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQ7IH0KKyAgICBib29sIGlzUG9saWN5
RGVsZWdhdGVQZXJtaXNzaXZlKCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3lEZWxlZ2F0ZVBlcm1p
c3NpdmU7IH0KKworICAgIGJvb2wgd2FpdFRvRHVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdFRv
RHVtcDsgfQorICAgIHZvaWQgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIHZv
aWQgaW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCk7CisKKyAgICBib29sIHNob3Vs
ZEFsbG93RWRpdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQWxsb3dFZGl0aW5nOyB9CisK
KyAgICBib29sIHNob3VsZENsb3NlRXh0cmFXaW5kb3dzQWZ0ZXJSdW5uaW5nVGVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkQ2xvc2VFeHRyYVdpbmRvd3M7IH0KKworICAgIHZvaWQgZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmLCB1bnNpZ25lZCB3b3JsZElELCBK
U1N0cmluZ1JlZiBzY3JpcHQpOworICAgIHN0YXRpYyB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQo
V0tCdW5kbGVTY3JpcHRXb3JsZFJlZik7CisKKyAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3IoKTsK
KyAgICB2b2lkIGNsb3NlV2ViSW5zcGVjdG9yKCk7CisgICAgdm9pZCBldmFsdWF0ZUluV2ViSW5z
cGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpOworCisgICAgdm9pZCBzZXRQ
T1NJWExvY2FsZShKU1N0cmluZ1JlZik7CisKKyAgICBib29sIHdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsKCkgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbDsgfQorICAgIHZv
aWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1
ZXN0UmV0dXJuc051bGwgPSBmOyB9CisKKyAgICB2b2lkIHNldFRleHREaXJlY3Rpb24oSlNTdHJp
bmdSZWYpOworCisgICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9y
ZVVubG9hZChib29sKTsKKworICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICAK
KyAgICBib29sIGdsb2JhbEZsYWcoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbEZsYWc7IH0KKyAg
ICB2b2lkIHNldEdsb2JhbEZsYWcoYm9vbCB2YWx1ZSkgeyBtX2dsb2JhbEZsYWcgPSB2YWx1ZTsg
fQorICAgIAorICAgIHZvaWQgYWRkQ2hyb21lSW5wdXRGaWVsZChKU1ZhbHVlUmVmKTsKKyAgICB2
b2lkIHJlbW92ZUNocm9tZUlucHV0RmllbGQoSlNWYWx1ZVJlZik7CisgICAgdm9pZCBmb2N1c1dl
YlZpZXcoSlNWYWx1ZVJlZik7CisgICAgdm9pZCBzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91Ymxl
LCBKU1ZhbHVlUmVmKTsKKworICAgIHZvaWQgc2V0V2luZG93SXNLZXkoYm9vbCk7CisKKyAgICB2
b2lkIGNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNhbGxSZW1v
dmVDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soKTsKKyAgICB2b2lkIGNhbGxGb2N1c1dlYlZpZXdD
YWxsYmFjaygpOworICAgIHZvaWQgY2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrKCk7
CisKKyAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBi
b29sIHZhbHVlKTsKKworICAgIC8vIFdlYiBpbnRlbnRzIHRlc3RpbmcuCisgICAgdm9pZCBzZW5k
V2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYgcmVwbHkpOworICAgIHZvaWQgZGVsaXZlcldl
YkludGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpTU3RyaW5nUmVm
IGRhdGEpOworCisgICAgLy8gQ29va2llcyB0ZXN0aW5nCisgICAgdm9pZCBzZXRBbHdheXNBY2Nl
cHRDb29raWVzKGJvb2wpOworCisgICAgLy8gQ3VzdG9tIGZ1bGwgc2NyZWVuIGJlaGF2aW9yLgor
ICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKGJvb2wgdmFsdWUpIHsgbV9j
dXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSB2YWx1ZTsgfQorICAgIGJvb2wgaGFzQ3VzdG9tRnVs
bFNjcmVlbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZp
b3I7IH0KKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUoKTsKKwor
ICAgIHZvaWQgc2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdSZWYgc3RhdGUpOworICAgIHZvaWQg
cmVzZXRQYWdlVmlzaWJpbGl0eSgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZhbDsKKworICAgIExheW91dFRlc3RDb250
cm9sbGVyKCk7CisKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworICAgIHZvaWQgaW5p
dGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKTsKKworICAgIFdoYXRUb0R1
bXAgbV93aGF0VG9EdW1wOworICAgIGJvb2wgbV9zaG91bGREdW1wQWxsRnJhbWVTY3JvbGxQb3Np
dGlvbnM7CisgICAgYm9vbCBtX3Nob3VsZER1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsV2luZG93
czsKKworICAgIGJvb2wgbV9zaG91bGRBbGxvd0VkaXRpbmc7CisgICAgYm9vbCBtX3Nob3VsZENs
b3NlRXh0cmFXaW5kb3dzOworCisgICAgYm9vbCBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzOworICAg
IGJvb2wgbV9kdW1wU3RhdHVzQ2FsbGJhY2tzOworICAgIGJvb2wgbV9kdW1wVGl0bGVDaGFuZ2Vz
OworICAgIGJvb2wgbV9kdW1wUGl4ZWxzOworICAgIGJvb2wgbV9kdW1wRnVsbFNjcmVlbkNhbGxi
YWNrczsKKyAgICBib29sIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsKKyAgICBib29sIG1fZHVt
cFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKKyAgICBib29sIG1fZHVtcFJlc291cmNlUmVzcG9u
c2VNSU1FVHlwZXM7CisgICAgYm9vbCBtX3dhaXRUb0R1bXA7IC8vIFRydWUgaWYgd2FpdFVudGls
RG9uZSgpIGhhcyBiZWVuIGNhbGxlZCwgYnV0IG5vdGlmeURvbmUoKSBoYXMgbm90IHlldCBiZWVu
IGNhbGxlZC4KKyAgICBib29sIG1fdGVzdFJlcGFpbnQ7CisgICAgYm9vbCBtX3Rlc3RSZXBhaW50
U3dlZXBIb3Jpem9udGFsbHk7CisKKyAgICBib29sIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051
bGw7CisKKyAgICBib29sIG1fcG9saWN5RGVsZWdhdGVFbmFibGVkOworICAgIGJvb2wgbV9wb2xp
Y3lEZWxlZ2F0ZVBlcm1pc3NpdmU7CisgICAgCisgICAgYm9vbCBtX2dsb2JhbEZsYWc7CisgICAg
Ym9vbCBtX2N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcjsKKworICAgIGJvb2wgbV91c2VyU3R5bGVT
aGVldEVuYWJsZWQ7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1fdXNlclN0eWxlU2hl
ZXRMb2NhdGlvbjsKKworICAgIFBsYXRmb3JtVGltZXJSZWYgbV93YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdUUgorCisjZW5kaWYgLy8gTGF5b3V0VGVzdENv
bnRyb2xsZXJfaApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBMYXlvdXRUZXN0Q29udHJvbGxlcl9oCi0jZGVmaW5lIExheW91dFRlc3RDb250cm9s
bGVyX2gKKyNpZm5kZWYgVGVzdFJ1bm5lcl9oCisjZGVmaW5lIFRlc3RSdW5uZXJfaAogCiAjaW5j
bHVkZSAiSlNXcmFwcGFibGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgpAQCAtNTEsMTAgKzUxLDEwIEBAIHR5cGVkZWYgRWNvcmVfVGltZXIqIFBsYXRmb3JtVGlt
ZXJSZWY7CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlciA6
IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBUZXN0UnVubmVyIDogcHVibGljIEpTV3JhcHBh
YmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxl
cj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+TGF5b3V0VGVzdENvbnRyb2xsZXIoKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXN0UnVubmVyPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5UZXN0
UnVubmVyKCk7CiAKICAgICAvLyBKU1dyYXBwYWJsZQogICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3
cmFwcGVyQ2xhc3MoKTsKQEAgLTIzMCw3ICsyMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZhbDsKIAot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKCk7CisgICAgVGVzdFJ1bm5lcigpOwogCiAgICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKICAgICB2b2lkIGluaXRpYWxpemVXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcklmTmVlZGVkKCk7CkBAIC0yNzAsNCArMjcwLDQgQEAgcHJpdmF0ZToKIAogfSAv
LyBuYW1lc3BhY2UgV1RSCiAKLSNlbmRpZiAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcl9oCisjZW5k
aWYgLy8gVGVzdFJ1bm5lcl9oCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0JpbmRpbmdzL0xheW91dFRlc3RDb250cm9sbGVyLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0xheW91dFRlc3RD
b250cm9sbGVyLmlkbAkocmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlvdXRUZXN0Q29udHJvbGxlci5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1
bGUgV1RSIHsKLQotICAgIGludGVyZmFjZSBMYXlvdXRUZXN0Q29udHJvbGxlciB7Ci0gICAgICAg
IC8vIFRoZSBiYXNpY3MuCi0gICAgICAgIHZvaWQgZHVtcEFzVGV4dChpbiBib29sZWFuIGR1bXBQ
aXhlbHMpOwotICAgICAgICB2b2lkIGR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOwotICAgICAgICB2
b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwotICAgICAgICB2b2lkIHdhaXRVbnRpbERvbmUo
KTsKLSAgICAgICAgdm9pZCBub3RpZnlEb25lKCk7Ci0gICAgICAgIGRvdWJsZSBwcmVjaXNlVGlt
ZSgpOwotCi0gICAgICAgIC8vIE90aGVyIGR1bXBpbmcuCi0gICAgICAgIHZvaWQgZHVtcEJhY2tG
b3J3YXJkTGlzdCgpOwotICAgICAgICB2b2lkIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25z
KCk7Ci0gICAgICAgIHZvaWQgZHVtcEVkaXRpbmdDYWxsYmFja3MoKTsKLSAgICAgICAgdm9pZCBk
dW1wU2VsZWN0aW9uUmVjdCgpOwotICAgICAgICB2b2lkIGR1bXBTdGF0dXNDYWxsYmFja3MoKTsK
LSAgICAgICAgdm9pZCBkdW1wVGl0bGVDaGFuZ2VzKCk7Ci0gICAgICAgIHZvaWQgZHVtcEZ1bGxT
Y3JlZW5DYWxsYmFja3MoKTsKLSAgICAgICAgdm9pZCBkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCk7
Ci0gICAgICAgIHZvaWQgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpOwotICAgICAgICB2
b2lkIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCk7Ci0KLSAgICAgICAgLy8gU3BlY2lh
bCBvcHRpb25zLgotICAgICAgICB2b2lkIGtlZXBXZWJIaXN0b3J5KCk7Ci0gICAgICAgIHZvaWQg
c2V0QWNjZXB0c0VkaXRpbmcoaW4gYm9vbGVhbiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgc2V0Q2Fu
T3BlbldpbmRvd3MoaW4gYm9vbGVhbiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgc2V0Q2xvc2VSZW1h
aW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGluIGJvb2xlYW4gdmFsdWUpOwotICAgICAgICB2b2lk
IHNldFhTU0F1ZGl0b3JFbmFibGVkKGluIGJvb2xlYW4gdmFsdWUpOwotICAgICAgICB2b2lkIHNl
dEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGluIGJvb2xlYW4gdmFsdWUpOwotICAg
ICAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhpbiBib29sZWFuIHZhbHVl
KTsKLSAgICAgICAgdm9pZCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGluIGJvb2xlYW4gdmFs
dWUpOwotICAgICAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGluIGJvb2xlYW4gdmFsdWUpOwot
ICAgICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihpbiBib29sZWFuIHZhbHVlKTsK
LSAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGluIGJvb2xlYW4g
dmFsdWUpOwotICAgICAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoaW4gYm9vbGVh
biB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoaW4gYm9vbGVh
biB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoaW4g
Ym9vbGVhbiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoaW4gRE9NU3RyaW5nIHNvdXJjZU9yaWdpbiwgaW4gRE9NU3RyaW5nIGRlc3RpbmF0aW9uUHJv
dG9jb2wsIGluIERPTVN0cmluZyBkZXN0aW5hdGlvbkhvc3QsIGluIGJvb2xlYW4gYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMpOwotICAgICAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGluIERPTVN0cmluZyBzb3VyY2VPcmlnaW4sIGluIERPTVN0cmluZyBkZXN0aW5h
dGlvblByb3RvY29sLCBpbiBET01TdHJpbmcgZGVzdGluYXRpb25Ib3N0LCBpbiBib29sZWFuIGFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLSAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQoaW4gYm9vbGVhbiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgc2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihpbiBET01TdHJpbmcgbG9jYXRpb24pOwotCi0gICAgICAgIC8vIFNwZWNpYWwg
RE9NIGZ1bmN0aW9ucy4KLSAgICAgICAgdm9pZCBjbGVhckJhY2tGb3J3YXJkTGlzdCgpOwotICAg
ICAgICBvYmplY3QgY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGluIG9iamVjdCBl
bGVtZW50KTsKLSAgICAgICAgdm9pZCBleGVjQ29tbWFuZChpbiBET01TdHJpbmcgbmFtZSwgaW4g
RE9NU3RyaW5nIGFyZ3VtZW50KTsKLSAgICAgICAgYm9vbGVhbiBpc0NvbW1hbmRFbmFibGVkKGlu
IERPTVN0cmluZyBuYW1lKTsKLSAgICAgICAgRE9NU3RyaW5nIG1hcmtlclRleHRGb3JMaXN0SXRl
bShpbiBvYmplY3QgZWxlbWVudCk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgd2luZG93Q291bnQo
KTsKLQotICAgICAgICAvLyBTcGVjaWFsIERPTSB2YXJpYWJsZXMuCi0gICAgICAgIGF0dHJpYnV0
ZSBib29sZWFuIGdsb2JhbEZsYWc7Ci0KLSAgICAgICAgLy8gUmVwYWludCB0ZXN0aW5nLgotICAg
ICAgICB2b2lkIHRlc3RSZXBhaW50KCk7Ci0gICAgICAgIHZvaWQgcmVwYWludFN3ZWVwSG9yaXpv
bnRhbGx5KCk7Ci0gICAgICAgIHZvaWQgZGlzcGxheSgpOwotCi0gICAgICAgIC8vIFByaW50aW5n
Ci0gICAgICAgIGludCBudW1iZXJPZlBhZ2VzKGluIGRvdWJsZSBwYWdlV2lkdGhJblBpeGVscywg
aW4gZG91YmxlIHBhZ2VIZWlnaHRJblBpeGVscyk7Ci0gICAgICAgIERPTVN0cmluZyBwYWdlU2l6
ZUFuZE1hcmdpbnNJblBpeGVscyhpbiBpbnQgcGFnZUluZGV4LCBpbiBpbnQgd2lkdGgsIGluIGlu
dCBoZWlnaHQsIGluIGludCBtYXJnaW5Ub3AsIGluIGludCBtYXJnaW5SaWdodCwgaW4gaW50IG1h
cmdpbkJvdHRvbSwgaW4gaW50IG1hcmdpbkxlZnQpOwotICAgICAgICBib29sZWFuIGlzUGFnZUJv
eFZpc2libGUoaW4gaW50IHBhZ2VJbmRleCk7Ci0KLSAgICAgICAgW1Bhc3NDb250ZXh0XSB2b2lk
IHNldFZhbHVlRm9yVXNlcihpbiBvYmplY3QgZWxlbWVudCwgaW4gRE9NU3RyaW5nIHZhbHVlKTsK
LQotICAgICAgICAvLyBBbmltYXRpb24gdGVzdGluZy4KLSAgICAgICAgaW50IG51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucygpOwotICAgICAgICBib29sZWFuIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKGluIERPTVN0cmluZyBhbmltYXRpb25OYW1lLCBpbiBkb3VibGUgdGltZSwg
aW4gRE9NU3RyaW5nIGVsZW1lbnRJZCk7Ci0gICAgICAgIGJvb2xlYW4gcGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKGluIERPTVN0cmluZyBwcm9wZXJ0eU5hbWUsIGluIGRvdWJs
ZSB0aW1lLCBpbiBET01TdHJpbmcgZWxlbWVudElkKTsKLSAgICAgICAgdm9pZCBzdXNwZW5kQW5p
bWF0aW9ucygpOwotCi0gICAgICAgIC8vIFVzZXJDb250ZW50IHRlc3RpbmcuCi0gICAgICAgIHZv
aWQgYWRkVXNlclNjcmlwdChpbiBET01TdHJpbmcgc291cmNlLCBpbiBib29sZWFuIHJ1bkF0U3Rh
cnQsIGluIGJvb2xlYW4gYWxsRnJhbWVzKTsKLSAgICAgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVl
dChpbiBET01TdHJpbmcgc291cmNlLCBpbiBib29sZWFuIGFsbEZyYW1lcyk7Ci0KLSAgICAgICAg
Ly8gTG9jYWwgc3RvcmFnZSBBUEkKLSAgICAgICAgdm9pZCBjbGVhckFsbERhdGFiYXNlcygpOwot
ICAgICAgICB2b2lkIHNldERhdGFiYXNlUXVvdGEoaW4gdW5zaWduZWQgbG9uZyBsb25nIHF1b3Rh
KTsKLSAgICAgICAgRE9NU3RyaW5nIHBhdGhUb0xvY2FsUmVzb3VyY2UoaW4gRE9NU3RyaW5nIHVy
bCk7Ci0KLSAgICAgICAgLy8gQXBwbGljYXRpb24gQ2FjaGUgQVBJCi0gICAgICAgIHZvaWQgY2xl
YXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwotICAgICAgICB2b2lkIHNldEFwcENhY2hlTWF4aW11
bVNpemUoaW4gdW5zaWduZWQgbG9uZyBsb25nIHNpemUpOwotCi0gICAgICAgIC8vIENvbXBvc2l0
aW5nIHRlc3RpbmcuCi0gICAgICAgIERPTVN0cmluZyBsYXllclRyZWVBc1RleHQoKTsKLQotICAg
ICAgICAvLyBUZXh0IHNlYXJjaCB0ZXN0aW5nLgotICAgICAgICBib29sZWFuIGZpbmRTdHJpbmco
aW4gRE9NU3RyaW5nIHRhcmdldCwgaW4gb2JqZWN0IG9wdGlvbnNBcnJheSk7Ci0KLSAgICAgICAg
Ly8gRXZhbHVhdGluZyBzY3JpcHQgaW4gYSBzcGVjaWFsIGNvbnRleHQuCi0gICAgICAgIFtQYXNz
Q29udGV4dF0gdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbiB1bnNpZ25lZCBs
b25nIHdvcmxkSUQsIGluIERPTVN0cmluZyBzY3JpcHQpOwotCi0gICAgICAgIC8vIEZvciBXZWIg
SW5zcGVjdG9yIHRlc3RzCi0gICAgICAgIHZvaWQgc2hvd1dlYkluc3BlY3RvcigpOwotICAgICAg
ICB2b2lkIGNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAgICAgIHZvaWQgZXZhbHVhdGVJbldlYklu
c3BlY3RvcihpbiBsb25nIGNhbGxJRCwgaW4gRE9NU3RyaW5nIHNjcmlwdCk7Ci0KLSAgICAgICAg
dm9pZCBzZXRQT1NJWExvY2FsZShpbiBET01TdHJpbmcgbG9jYWxlKTsKLQotICAgICAgICB2b2lk
IHNldFRleHREaXJlY3Rpb24oaW4gRE9NU3RyaW5nIGRpcmVjdGlvbik7Ci0KLSAgICAgICAgdm9p
ZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChpbiBib29sZWFuIGZsYWcpOwotICAgICAg
ICAKLSAgICAgICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVu
bG9hZChpbiBib29sZWFuIGZsYWcpOwotCi0gICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhp
biBib29sZWFuIGZsYWcpOwotCi0gICAgICAgIC8vIFdlYiBpbnRlbnRzIHRlc3RpbmcuCi0gICAg
ICAgIHZvaWQgc2VuZFdlYkludGVudFJlc3BvbnNlKGluIERPTVN0cmluZyByZXBseSk7Ci0gICAg
ICAgIHZvaWQgZGVsaXZlcldlYkludGVudChpbiBET01TdHJpbmcgYWN0aW9uLCBpbiBET01TdHJp
bmcgdHlwZSwgaW4gRE9NU3RyaW5nIGRhdGEpOwotICAgICAgICAKLSAgICAgICAgLy8gRm9jdXMg
dGVzdGluZy4KLSAgICAgICAgdm9pZCBhZGRDaHJvbWVJbnB1dEZpZWxkKGluIG9iamVjdCBjYWxs
YmFjayk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlQ2hyb21lSW5wdXRGaWVsZChpbiBvYmplY3QgY2Fs
bGJhY2spOwotICAgICAgICB2b2lkIGZvY3VzV2ViVmlldyhpbiBvYmplY3QgY2FsbGJhY2spOwot
Ci0gICAgICAgIHZvaWQgc2V0QmFja2luZ1NjYWxlRmFjdG9yKGluIGRvdWJsZSBiYWNraW5nU2Nh
bGVGYWN0b3IsIGluIG9iamVjdCBjYWxsYmFjayk7Ci0KLSAgICAgICAgdm9pZCBzZXRXaW5kb3dJ
c0tleShpbiBib29sZWFuIGlzS2V5KTsKLQotICAgICAgICAvLyBDb29raWVzIHRlc3RpbmcKLSAg
ICAgICAgdm9pZCBzZXRBbHdheXNBY2NlcHRDb29raWVzKGluIGJvb2xlYW4gYWNjZXB0KTsKLQot
ICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG5vbi1ib29sZWFuIHByZWZlcmVuY2VzLgotICAgICAg
ICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShpbiBET01TdHJpbmcgcHJlZmVyZW5jZSwgaW4gYm9v
bGVhbiB2YWx1ZSk7Ci0KLSAgICAgICAgLy8gUGFnZSBWaXNpYmlsaXR5IEFQSQotICAgICAgICB2
b2lkIHNldFBhZ2VWaXNpYmlsaXR5KGluIERPTVN0cmluZyBzdGF0ZSk7Ci0gICAgICAgIHZvaWQg
cmVzZXRQYWdlVmlzaWJpbGl0eSgpOwotCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgcGxhdGZvcm1OYW1lOwotCi0gICAgICAgIC8vIENvbnRyb2wgZnVsbCBzY3JlZW4gYmVo
YXZpb3IuCi0gICAgICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKGluIGJv
b2xlYW4gdmFsdWUpOwotICAgIH07Ci0KLX0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlk
bAkocmV2aXNpb24gMTI1NTE3KQkoZnJvbSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0JpbmRpbmdzL0xheW91dFRlc3RDb250cm9sbGVyLmlkbDoxMjU1MTcpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIFdUUiB7CisKKyAgICBpbnRlcmZhY2UgTGF5b3V0VGVzdENvbnRyb2xsZXIgewor
ICAgICAgICAvLyBUaGUgYmFzaWNzLgorICAgICAgICB2b2lkIGR1bXBBc1RleHQoaW4gYm9vbGVh
biBkdW1wUGl4ZWxzKTsKKyAgICAgICAgdm9pZCBkdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAg
ICAgICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKKyAgICAgICAgdm9pZCB3YWl0VW50
aWxEb25lKCk7CisgICAgICAgIHZvaWQgbm90aWZ5RG9uZSgpOworICAgICAgICBkb3VibGUgcHJl
Y2lzZVRpbWUoKTsKKworICAgICAgICAvLyBPdGhlciBkdW1waW5nLgorICAgICAgICB2b2lkIGR1
bXBCYWNrRm9yd2FyZExpc3QoKTsKKyAgICAgICAgdm9pZCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBv
c2l0aW9ucygpOworICAgICAgICB2b2lkIGR1bXBFZGl0aW5nQ2FsbGJhY2tzKCk7CisgICAgICAg
IHZvaWQgZHVtcFNlbGVjdGlvblJlY3QoKTsKKyAgICAgICAgdm9pZCBkdW1wU3RhdHVzQ2FsbGJh
Y2tzKCk7CisgICAgICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcygpOworICAgICAgICB2b2lkIGR1
bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCk7CisgICAgICAgIHZvaWQgZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpOworICAgICAgICB2b2lkIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKTsKKyAg
ICAgICAgdm9pZCBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpOworCisgICAgICAgIC8v
IFNwZWNpYWwgb3B0aW9ucy4KKyAgICAgICAgdm9pZCBrZWVwV2ViSGlzdG9yeSgpOworICAgICAg
ICB2b2lkIHNldEFjY2VwdHNFZGl0aW5nKGluIGJvb2xlYW4gdmFsdWUpOworICAgICAgICB2b2lk
IHNldENhbk9wZW5XaW5kb3dzKGluIGJvb2xlYW4gdmFsdWUpOworICAgICAgICB2b2lkIHNldENs
b3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShpbiBib29sZWFuIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxlZChpbiBib29sZWFuIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhpbiBib29sZWFuIHZhbHVl
KTsKKyAgICAgICAgdm9pZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoaW4gYm9vbGVh
biB2YWx1ZSk7CisgICAgICAgIHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChpbiBib29s
ZWFuIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChpbiBib29sZWFuIHZh
bHVlKTsKKyAgICAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oaW4gYm9vbGVhbiB2
YWx1ZSk7CisgICAgICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChpbiBi
b29sZWFuIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGlu
IGJvb2xlYW4gdmFsdWUpOworICAgICAgICB2b2lkIHNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGlu
IGJvb2xlYW4gdmFsdWUpOworICAgICAgICB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKGluIGJvb2xlYW4gdmFsdWUpOworICAgICAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGluIERPTVN0cmluZyBzb3VyY2VPcmlnaW4sIGluIERPTVN0cmluZyBkZXN0aW5h
dGlvblByb3RvY29sLCBpbiBET01TdHJpbmcgZGVzdGluYXRpb25Ib3N0LCBpbiBib29sZWFuIGFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICAgICAgdm9pZCByZW1vdmVPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeShpbiBET01TdHJpbmcgc291cmNlT3JpZ2luLCBpbiBET01TdHJpbmcg
ZGVzdGluYXRpb25Qcm90b2NvbCwgaW4gRE9NU3RyaW5nIGRlc3RpbmF0aW9uSG9zdCwgaW4gYm9v
bGVhbiBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgICAgIHZvaWQgc2V0VXNlclN0
eWxlU2hlZXRFbmFibGVkKGluIGJvb2xlYW4gdmFsdWUpOworICAgICAgICB2b2lkIHNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oaW4gRE9NU3RyaW5nIGxvY2F0aW9uKTsKKworICAgICAgICAvLyBT
cGVjaWFsIERPTSBmdW5jdGlvbnMuCisgICAgICAgIHZvaWQgY2xlYXJCYWNrRm9yd2FyZExpc3Qo
KTsKKyAgICAgICAgb2JqZWN0IGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhpbiBv
YmplY3QgZWxlbWVudCk7CisgICAgICAgIHZvaWQgZXhlY0NvbW1hbmQoaW4gRE9NU3RyaW5nIG5h
bWUsIGluIERPTVN0cmluZyBhcmd1bWVudCk7CisgICAgICAgIGJvb2xlYW4gaXNDb21tYW5kRW5h
YmxlZChpbiBET01TdHJpbmcgbmFtZSk7CisgICAgICAgIERPTVN0cmluZyBtYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0oaW4gb2JqZWN0IGVsZW1lbnQpOworICAgICAgICB1bnNpZ25lZCBsb25nIHdpbmRv
d0NvdW50KCk7CisKKyAgICAgICAgLy8gU3BlY2lhbCBET00gdmFyaWFibGVzLgorICAgICAgICBh
dHRyaWJ1dGUgYm9vbGVhbiBnbG9iYWxGbGFnOworCisgICAgICAgIC8vIFJlcGFpbnQgdGVzdGlu
Zy4KKyAgICAgICAgdm9pZCB0ZXN0UmVwYWludCgpOworICAgICAgICB2b2lkIHJlcGFpbnRTd2Vl
cEhvcml6b250YWxseSgpOworICAgICAgICB2b2lkIGRpc3BsYXkoKTsKKworICAgICAgICAvLyBQ
cmludGluZworICAgICAgICBpbnQgbnVtYmVyT2ZQYWdlcyhpbiBkb3VibGUgcGFnZVdpZHRoSW5Q
aXhlbHMsIGluIGRvdWJsZSBwYWdlSGVpZ2h0SW5QaXhlbHMpOworICAgICAgICBET01TdHJpbmcg
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW4gaW50IHBhZ2VJbmRleCwgaW4gaW50IHdpZHRo
LCBpbiBpbnQgaGVpZ2h0LCBpbiBpbnQgbWFyZ2luVG9wLCBpbiBpbnQgbWFyZ2luUmlnaHQsIGlu
IGludCBtYXJnaW5Cb3R0b20sIGluIGludCBtYXJnaW5MZWZ0KTsKKyAgICAgICAgYm9vbGVhbiBp
c1BhZ2VCb3hWaXNpYmxlKGluIGludCBwYWdlSW5kZXgpOworCisgICAgICAgIFtQYXNzQ29udGV4
dF0gdm9pZCBzZXRWYWx1ZUZvclVzZXIoaW4gb2JqZWN0IGVsZW1lbnQsIGluIERPTVN0cmluZyB2
YWx1ZSk7CisKKyAgICAgICAgLy8gQW5pbWF0aW9uIHRlc3RpbmcuCisgICAgICAgIGludCBudW1i
ZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgYm9vbGVhbiBwYXVzZUFuaW1hdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChpbiBET01TdHJpbmcgYW5pbWF0aW9uTmFtZSwgaW4gZG91Ymxl
IHRpbWUsIGluIERPTVN0cmluZyBlbGVtZW50SWQpOworICAgICAgICBib29sZWFuIHBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChpbiBET01TdHJpbmcgcHJvcGVydHlOYW1lLCBp
biBkb3VibGUgdGltZSwgaW4gRE9NU3RyaW5nIGVsZW1lbnRJZCk7CisgICAgICAgIHZvaWQgc3Vz
cGVuZEFuaW1hdGlvbnMoKTsKKworICAgICAgICAvLyBVc2VyQ29udGVudCB0ZXN0aW5nLgorICAg
ICAgICB2b2lkIGFkZFVzZXJTY3JpcHQoaW4gRE9NU3RyaW5nIHNvdXJjZSwgaW4gYm9vbGVhbiBy
dW5BdFN0YXJ0LCBpbiBib29sZWFuIGFsbEZyYW1lcyk7CisgICAgICAgIHZvaWQgYWRkVXNlclN0
eWxlU2hlZXQoaW4gRE9NU3RyaW5nIHNvdXJjZSwgaW4gYm9vbGVhbiBhbGxGcmFtZXMpOworCisg
ICAgICAgIC8vIExvY2FsIHN0b3JhZ2UgQVBJCisgICAgICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFz
ZXMoKTsKKyAgICAgICAgdm9pZCBzZXREYXRhYmFzZVF1b3RhKGluIHVuc2lnbmVkIGxvbmcgbG9u
ZyBxdW90YSk7CisgICAgICAgIERPTVN0cmluZyBwYXRoVG9Mb2NhbFJlc291cmNlKGluIERPTVN0
cmluZyB1cmwpOworCisgICAgICAgIC8vIEFwcGxpY2F0aW9uIENhY2hlIEFQSQorICAgICAgICB2
b2lkIGNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKTsKKyAgICAgICAgdm9pZCBzZXRBcHBDYWNo
ZU1heGltdW1TaXplKGluIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKTsKKworICAgICAgICAvLyBD
b21wb3NpdGluZyB0ZXN0aW5nLgorICAgICAgICBET01TdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCk7
CisKKyAgICAgICAgLy8gVGV4dCBzZWFyY2ggdGVzdGluZy4KKyAgICAgICAgYm9vbGVhbiBmaW5k
U3RyaW5nKGluIERPTVN0cmluZyB0YXJnZXQsIGluIG9iamVjdCBvcHRpb25zQXJyYXkpOworCisg
ICAgICAgIC8vIEV2YWx1YXRpbmcgc2NyaXB0IGluIGEgc3BlY2lhbCBjb250ZXh0LgorICAgICAg
ICBbUGFzc0NvbnRleHRdIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW4gdW5z
aWduZWQgbG9uZyB3b3JsZElELCBpbiBET01TdHJpbmcgc2NyaXB0KTsKKworICAgICAgICAvLyBG
b3IgV2ViIEluc3BlY3RvciB0ZXN0cworICAgICAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3IoKTsK
KyAgICAgICAgdm9pZCBjbG9zZVdlYkluc3BlY3RvcigpOworICAgICAgICB2b2lkIGV2YWx1YXRl
SW5XZWJJbnNwZWN0b3IoaW4gbG9uZyBjYWxsSUQsIGluIERPTVN0cmluZyBzY3JpcHQpOworCisg
ICAgICAgIHZvaWQgc2V0UE9TSVhMb2NhbGUoaW4gRE9NU3RyaW5nIGxvY2FsZSk7CisKKyAgICAg
ICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKGluIERPTVN0cmluZyBkaXJlY3Rpb24pOworCisgICAg
ICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoaW4gYm9vbGVhbiBmbGFnKTsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdC
ZWZvcmVVbmxvYWQoaW4gYm9vbGVhbiBmbGFnKTsKKworICAgICAgICB2b2lkIHNldERlZmVyc0xv
YWRpbmcoaW4gYm9vbGVhbiBmbGFnKTsKKworICAgICAgICAvLyBXZWIgaW50ZW50cyB0ZXN0aW5n
LgorICAgICAgICB2b2lkIHNlbmRXZWJJbnRlbnRSZXNwb25zZShpbiBET01TdHJpbmcgcmVwbHkp
OworICAgICAgICB2b2lkIGRlbGl2ZXJXZWJJbnRlbnQoaW4gRE9NU3RyaW5nIGFjdGlvbiwgaW4g
RE9NU3RyaW5nIHR5cGUsIGluIERPTVN0cmluZyBkYXRhKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEZvY3VzIHRlc3RpbmcuCisgICAgICAgIHZvaWQgYWRkQ2hyb21lSW5wdXRGaWVsZChpbiBvYmpl
Y3QgY2FsbGJhY2spOworICAgICAgICB2b2lkIHJlbW92ZUNocm9tZUlucHV0RmllbGQoaW4gb2Jq
ZWN0IGNhbGxiYWNrKTsKKyAgICAgICAgdm9pZCBmb2N1c1dlYlZpZXcoaW4gb2JqZWN0IGNhbGxi
YWNrKTsKKworICAgICAgICB2b2lkIHNldEJhY2tpbmdTY2FsZUZhY3RvcihpbiBkb3VibGUgYmFj
a2luZ1NjYWxlRmFjdG9yLCBpbiBvYmplY3QgY2FsbGJhY2spOworCisgICAgICAgIHZvaWQgc2V0
V2luZG93SXNLZXkoaW4gYm9vbGVhbiBpc0tleSk7CisKKyAgICAgICAgLy8gQ29va2llcyB0ZXN0
aW5nCisgICAgICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhpbiBib29sZWFuIGFjY2Vw
dCk7CisKKyAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBub24tYm9vbGVhbiBwcmVmZXJlbmNlcy4K
KyAgICAgICAgdm9pZCBvdmVycmlkZVByZWZlcmVuY2UoaW4gRE9NU3RyaW5nIHByZWZlcmVuY2Us
IGluIGJvb2xlYW4gdmFsdWUpOworCisgICAgICAgIC8vIFBhZ2UgVmlzaWJpbGl0eSBBUEkKKyAg
ICAgICAgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShpbiBET01TdHJpbmcgc3RhdGUpOworICAgICAg
ICB2b2lkIHJlc2V0UGFnZVZpc2liaWxpdHkoKTsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHBsYXRmb3JtTmFtZTsKKworICAgICAgICAvLyBDb250cm9sIGZ1bGwgc2Ny
ZWVuIGJlaGF2aW9yLgorICAgICAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlv
cihpbiBib29sZWFuIHZhbHVlKTsKKyAgICB9OworCit9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1
bm5lci5pZGwJKHJldmlzaW9uIDEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDcgQEAKIAogbW9kdWxlIFdUUiB7CiAKLSAgICBpbnRlcmZhY2UgTGF5b3V0VGVzdENv
bnRyb2xsZXIgeworICAgIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICAgICAgLy8gVGhlIGJh
c2ljcy4KICAgICAgICAgdm9pZCBkdW1wQXNUZXh0KGluIGJvb2xlYW4gZHVtcFBpeGVscyk7CiAg
ICAgICAgIHZvaWQgZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwv
TGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiAxMjU1MTcpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVm
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIK
LSNpbmNsdWRlIDxFY29yZS5oPgotCi1uYW1lc3BhY2UgV1RSIHsKLQotc3RhdGljIEVpbmFfQm9v
bCB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrKHZvaWQqKQotewotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT53YWl0VG9EdW1wV2F0Y2hk
b2dUaW1lckZpcmVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQotewotICAgIG1fd2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXIgPSAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbnZhbGlkYXRl
V2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKQotewotICAgIGlmICghbV93YWl0VG9EdW1wV2F0Y2hk
b2dUaW1lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWNvcmVfdGltZXJfZGVsKG1fd2FpdFRv
RHVtcFdhdGNoZG9nVGltZXIpOwotICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAwOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXJJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSBlY29y
ZV90aW1lcl9sb29wX2FkZCh3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckludGVydmFsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VG9EdW1w
V2F0Y2hkb2dUaW1lckNhbGxiYWNrLCAwKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTU3RyaW5nUmVmIHVy
bCkKLXsKLSAgICByZXR1cm4gdXJsOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCi17Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImVmbCIpKTsKLSAgICByZXR1cm4gcGxhdGZvcm1OYW1lOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL1Rl
c3RSdW5uZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCShyZXZpc2lvbiAxMjU1MTcpCShmcm9t
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0xheW91dFRlc3RDb250
cm9sbGVyRWZsLmNwcDoxMjU1MTcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2VmbC9UZXN0UnVubmVyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisKKyNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZS5oIgorI2luY2x1ZGUgPEVjb3JlLmg+CisKK25hbWVzcGFjZSBX
VFIgeworCitzdGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2so
dm9pZCopCit7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7
CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpCit7CisgICAg
aWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBl
Y29yZV90aW1lcl9kZWwobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcik7CisgICAgbV93YWl0VG9E
dW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlu
aXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV93
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93YWl0VG9E
dW1wV2F0Y2hkb2dUaW1lciA9IGVjb3JlX3RpbWVyX2xvb3BfYWRkKHdhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVySW50ZXJ2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2ssIDApOworfQorCitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2Fs
UmVzb3VyY2UoSlNTdHJpbmdSZWYgdXJsKQoreworICAgIHJldHVybiB1cmw7Cit9CisKK0pTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkK
K3sKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZWZsIikpOworICAgIHJldHVybiBwbGF0Zm9ybU5h
bWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAJ
KHJldmlzaW9uIDEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5k
bGUuaCIKICNpbmNsdWRlIDxFY29yZS5oPgpAQCAtMjcsMTYgKzI3LDE2IEBAIG5hbWVzcGFjZSBX
VFIgewogCiBzdGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2so
dm9pZCopCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQordm9pZCBUZXN0UnVubmVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQog
ewogICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAwOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKQordm9pZCBU
ZXN0UnVubmVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKQogewogICAgIGlm
ICghbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKICAgICAgICAgcmV0dXJuOwpAQCAtNDUsNyAr
NDUsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbnZhbGlkYXRlV2FpCiAgICAgbV93
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQogewog
ICAgIGlmIChtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQogICAgICAgICByZXR1cm47CkBAIC01
NCwxMiArNTQsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVdhaQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0
VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrLCAwKTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTU3RyaW5n
UmVmIHVybCkKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYXRoVG9Mb2Nh
bFJlc291cmNlKEpTU3RyaW5nUmVmIHVybCkKIHsKICAgICByZXR1cm4gdXJsOwogfQogCi1KU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgp
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGxhdGZvcm1OYW1lKCkKIHsK
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZWZsIikpOwogICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRU
ZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lv
biAxMjU1MTcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9M
YXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCi0KLSNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZS5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdU
UiB7Ci0KLXN0YXRpYyBnYm9vbGVhbiB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrKGdw
b2ludGVyKQotewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJv
bGxlcigpLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7Ci0gICAgcmV0dXJuIEZBTFNF
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQot
ewotICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAwOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKQotewotICAg
IGlmICghbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKLSAgICAgICAgcmV0dXJuOwotICAgIGdf
c291cmNlX3JlbW92ZShtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKTsKLSAgICBtX3dhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyID0gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQotewotICAgIGlmIChtX3dh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyID0gZ190aW1lb3V0X2FkZCh3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklu
dGVydmFsICogMTAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrLCAwKTsKLX0KLQotSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNl
KEpTU3RyaW5nUmVmIHVybCkKLXsKLSAgICByZXR1cm4gdXJsOwotfQotCi1KU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCi17Ci0gICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImd0ayIpKTsKLSAgICByZXR1cm4gcGxhdGZvcm1OYW1lOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCShyZXZpc2lv
biAxMjU1MTcpCShmcm9tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoxMjU1MTcpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9UZXN0UnVubmVyR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCIKKworI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCisjaW5jbHVkZSA8Z2xpYi5o
PgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIGdib29sZWFuIHdhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyQ2FsbGJhY2soZ3BvaW50ZXIpCit7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtSW5pdGlhbGl6ZSgpCit7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hk
b2dUaW1lcigpCit7CisgICAgaWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQorICAgICAg
ICByZXR1cm47CisgICAgZ19zb3VyY2VfcmVtb3ZlKG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIp
OworICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAwOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgp
Cit7CisgICAgaWYgKG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSBnX3RpbWVvdXRfYWRkKHdhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgKiAxMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2ssIDAp
OworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
dGhUb0xvY2FsUmVzb3VyY2UoSlNTdHJpbmdSZWYgdXJsKQoreworICAgIHJldHVybiB1cmw7Cit9
CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1OYW1lKCkKK3sKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZ3RrIikpOworICAgIHJldHVybiBw
bGF0Zm9ybU5hbWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvVGVzdFJ1bm5l
ckd0ay5jcHAJKHJldmlzaW9uIDEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRl
c3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCiAjaW5jbHVkZSAiSW5q
ZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlIDxnbGliLmg+CkBAIC0zNCwxNiArMzQsMTYgQEAgbmFt
ZXNwYWNlIFdUUiB7CiAKIHN0YXRpYyBnYm9vbGVhbiB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNh
bGxiYWNrKGdwb2ludGVyKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRU
ZXN0Q29udHJvbGxlcigpLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJGaXJlZCgpOwogICAgIHJldHVybiBGQUxTRTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKIHsKICAgICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyID0gMDsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVy
KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6aW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkK
IHsKICAgICBpZiAoIW1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIpCiAgICAgICAgIHJldHVybjsK
QEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW52YWxpZGF0ZVdh
aQogICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAwOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgp
Cit2b2lkIFRlc3RSdW5uZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVl
ZGVkKCkKIHsKICAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKICAgICAgICAgcmV0
dXJuOwpAQCAtNjAsMTIgKzYwLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmluaXRp
YWxpemVXYWkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrLCAwKTsKIH0KIAotSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTU3Ry
aW5nUmVmIHVybCkKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYXRoVG9M
b2NhbFJlc291cmNlKEpTU3RyaW5nUmVmIHVybCkKIHsKICAgICByZXR1cm4gdXJsOwogfQogCi1K
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFt
ZSgpCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGxhdGZvcm1OYW1lKCkK
IHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZ3RrIikpOwogICAgIHJldHVybiBwbGF0Zm9ybU5h
bWU7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9MYXlv
dXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNp
b24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5j
bHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKLQotbmFtZXNwYWNlIFdUUiB7Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCi17Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpCi17Ci0g
ICAgaWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5nZXQo
KSk7Ci0gICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdhaXRVbnRpbERvbmVXYXRjaGRvZ1RpbWVyRmlyZWQoQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIs
IHZvaWQqIGluZm8pCi17Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RD
b250cm9sbGVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZO
ZWVkZWQoKQotewotICAgIGlmIChtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyLmFkb3B0Q0YoQ0ZSdW5Mb29w
VGltZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50
KCkgKyB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckludGVydmFsLCAwLCAwLCAwLCBXVFI6OndhaXRV
bnRpbERvbmVXYXRjaGRvZ1RpbWVyRmlyZWQsIE5VTEwpKTsKLSAgICBDRlJ1bkxvb3BBZGRUaW1l
cihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuZ2V0KCks
IGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU1N0cmluZ1JlZiB1cmwp
Ci17Ci0gICAgcmV0dXJuIEpTU3RyaW5nUmV0YWluKHVybCk7IC8vIERvIG5vdGhpbmcgb24gbWFj
LgotfQotICAgIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybU5hbWUoKQotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9y
bU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJtYWMiKSk7Ci0gICAg
cmV0dXJuIHBsYXRmb3JtTmFtZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rl
c3RSdW5uZXJNYWMubW0JKHJldmlzaW9uIDEyNTUxNykJKGZyb20gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06MTI1NTE3
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5l
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZS5oIgorCituYW1lc3BhY2UgV1RSIHsKKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW52
YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkKK3sKKyAgICBpZiAoIW1fd2FpdFRvRHVt
cFdhdGNoZG9nVGltZXIpCisgICAgICAgIHJldHVybjsKKworICAgIENGUnVuTG9vcFRpbWVySW52
YWxpZGF0ZShtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyLmdldCgpKTsKKyAgICBtX3dhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyID0gMDsKK30KKworc3RhdGljIHZvaWQgd2FpdFVudGlsRG9uZVdhdGNo
ZG9nVGltZXJGaXJlZChDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCogaW5mbykKK3sKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2FpdFRv
RHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgpCit7CisgICAgaWYg
KG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXIuYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIHdhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVySW50ZXJ2YWwsIDAsIDAsIDAsIFdUUjo6d2FpdFVudGlsRG9uZVdhdGNoZG9nVGlt
ZXJGaXJlZCwgTlVMTCkpOworICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJl
bnQoKSwgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1v
ZGVzKTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICByZXR1cm4gSlNT
dHJpbmdSZXRhaW4odXJsKTsgLy8gRG8gbm90aGluZyBvbiBtYWMuCit9CisgICAgCitKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCit7
CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4gcGxhdGZvcm1OYW1l
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkocmV2
aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvVGVzdFJ1bm5lck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTcgKzIzLDE3IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIkxheW91
dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCiAjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGUuaCIKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit2b2lkIFRlc3RSdW5uZXI6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmludmFsaWRh
dGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpCit2b2lkIFRlc3RSdW5uZXI6OmludmFsaWRhdGVX
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpCiB7CiAgICAgaWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyKQogICAgICAgICByZXR1cm47CkBAIC00NCwxMCArNDQsMTAgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6aW52YWxpZGF0ZVdhaQogCiBzdGF0aWMgdm9pZCB3YWl0VW50aWxEb25l
V2F0Y2hkb2dUaW1lckZpcmVkKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkKiBpbmZvKQog
ewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT53
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJJZk5lZWRlZCgpCit2b2lkIFRlc3RSdW5uZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hk
b2dUaW1lcklmTmVlZGVkKCkKIHsKICAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTYsMTIgKzU2LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmluaXRpYWxpemVXYWkKICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21t
b25Nb2Rlcyk7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU1N0cmluZ1JlZiB1cmwpCitKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU1N0cmluZ1JlZiB1
cmwpCiB7CiAgICAgcmV0dXJuIEpTU3RyaW5nUmV0YWluKHVybCk7IC8vIERvIG5vdGhpbmcgb24g
bWFjLgogfQogICAgIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybU5hbWUoKQorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6
OnBsYXRmb3JtTmFtZSgpCiB7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3Jt
TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKICAgICBy
ZXR1cm4gcGxhdGZvcm1OYW1lOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuY3BwCShyZXZpc2lvbiAxMjU1MTcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6
ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJBY3RpdmF0
ZUZvbnRzLmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKLSNpbmNsdWRlIDxRQ29yZUFw
cGxpY2F0aW9uPgotI2luY2x1ZGUgPFFEaXI+Ci0jaW5jbHVkZSA8UUZvbnREYXRhYmFzZT4KLSNp
bmNsdWRlIDxRT2JqZWN0PgotI2luY2x1ZGUgPHF3ZWJzZXR0aW5ncy5oPgotCi1uYW1lc3BhY2Ug
V1RSIHsKLQotY2xhc3MgV2F0Y2hkb2dUaW1lckhlbHBlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAg
ICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFdhdGNoZG9nVGltZXJIZWxwZXIqIGlu
c3RhbmNlKCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBXYXRjaGRvZ1RpbWVySGVscGVyKiB0aGVJ
bnN0YW5jZSA9IG5ldyBXYXRjaGRvZ1RpbWVySGVscGVyOwotICAgICAgICByZXR1cm4gdGhlSW5z
dGFuY2U7Ci0gICAgfQotCi1wdWJsaWMgc2xvdHM6Ci0gICAgdm9pZCB0aW1lckZpcmVkKCkKLSAg
ICB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFdhdGNoZG9nVGltZXJIZWxwZXIoKSB7fQotfTsKLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLSAgICAvLyBNYWtlIFdlYktpdDIgbWltaWMg
dGhlIGJlaGF2aW91ciBvZiBEdW1wUmVuZGVyVHJlZSwgd2hpY2ggaXMgaW5jb3JyZWN0LAotICAg
IC8vIGJ1dCB0ZXN0cyBhcmUgc3VjY2Vzc2Z1bGx5IHBhc3NlZC4gT24gdGhlIGxvbmcgcnVuLCBR
dCB3aWxsIG1vdmUgdG8gUVJhd0ZvbnQsCi0gICAgLy8gd2hpY2ggbWFrZXMgdGhlIHVzZSBvZiBR
Rm9udERhdGFiYXNlIHVubmVjZXNzYXJ5LgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM0MjcKLSAgICBRV2ViU2V0dGluZ3M6OmNsZWFyTWVtb3J5
Q2FjaGVzKCk7Ci0gICAgUUZvbnREYXRhYmFzZTo6cmVtb3ZlQWxsQXBwbGljYXRpb25Gb250cygp
OwotICAgIGFjdGl2YXRlRm9udHMoKTsKLSAgICBRT2JqZWN0Ojpjb25uZWN0KCZtX3dhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgV2F0Y2hkb2dUaW1lckhlbHBlcjo6
aW5zdGFuY2UoKSwgU0xPVCh0aW1lckZpcmVkKCkpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6aW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkKLXsKLSAgICBtX3dh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQotewotICAg
IGlmIChxZ2V0ZW52KCJRVF9XRUJLSVQyX0RFQlVHIikgPT0gIjEiKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyLnN0YXJ0KHdhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgKiAxMDAwKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTU3RyaW5n
UmVmIHVybCkKLXsKLSAgICBRU3RyaW5nIGxvY2FsVG1wVXJsKFFTdHJpbmdMaXRlcmFsKCJmaWxl
Oi8vL3RtcC9MYXlvdXRUZXN0cyIpKTsKLSAgICBRU3RyaW5nIGdpdmVuVXJsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIodXJsKSksIEpTU3Ry
aW5nR2V0TGVuZ3RoKHVybCkpOwotCi0gICAgLy8gVHJhbnNsYXRlIGEgcmVxdWVzdCBmb3IgL3Rt
cC9MYXlvdXRUZXN0cyB0byB0aGUgcmVwb3NpdG9yeSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCi0g
ICAgLy8gRG8gbm90IHJlbHkgb24gYSBzeW1saW5rIHRvIGJlIGNyZWF0ZWQgdmlhIHRoZSB0ZXN0
IHJ1bm5lciwgd2hpY2ggd2lsbCBub3Qgd29yayBvbiBXaW5kb3dzLgotICAgIGlmIChnaXZlblVy
bC5zdGFydHNXaXRoKGxvY2FsVG1wVXJsKSkgewotICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBs
aXZlcyBpbiBXZWJLaXQvV2ViS2l0QnVpbGQvPGJ1aWxkX21vZGU+L2Jpbi4KLSAgICAgICAgLy8g
VHJhbnNsYXRlIGZyb20gV2ViS2l0L1dlYktpdEJ1aWxkL1JlbGVhc2UvYmluID0+IFdlYktpdC9M
YXlvdXRUZXN0cy4KLSAgICAgICAgUUZpbGVJbmZvIGxheW91dFRlc3RzUm9vdChRQ29yZUFwcGxp
Y2F0aW9uOjphcHBsaWNhdGlvbkRpclBhdGgoKSArIFFTdHJpbmdMaXRlcmFsKCIvLi4vLi4vLi4v
TGF5b3V0VGVzdHMvIikpOwotICAgICAgICBpZiAobGF5b3V0VGVzdHNSb290LmV4aXN0cygpKSB7
Ci0gICAgICAgICAgICBRU3RyaW5nIHBhdGggPSBRU3RyaW5nTGl0ZXJhbCgiZmlsZTovLyIpICsg
bGF5b3V0VGVzdHNSb290LmFic29sdXRlUGF0aCgpICsgZ2l2ZW5VcmwubWlkKGxvY2FsVG1wVXJs
Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSlNDaGFyKj4ocGF0aC5jb25zdERhdGEoKSksIHBh
dGgubGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB1cmw7Ci19Ci0KLUpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1l
KCkKLXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicXQiKSk7Ci0gICAgcmV0dXJuIHBsYXRmb3Jt
TmFtZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCi0KLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29u
dHJvbGxlclF0Lm1vYyIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvcXQvVGVzdFJ1bm5lclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL3F0L1Rlc3RSdW5uZXJRdC5jcHAJKHJldmlzaW9uIDEyNTUxNykJ
KGZyb20gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmNwcDoxMjU1MTcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL3F0L1Rlc3RSdW5uZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFjdGl2YXRlRm9udHMuaCIK
KyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+
CisjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxRRm9udERhdGFiYXNlPgorI2luY2x1ZGUgPFFP
YmplY3Q+CisjaW5jbHVkZSA8cXdlYnNldHRpbmdzLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitj
bGFzcyBXYXRjaGRvZ1RpbWVySGVscGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2F0Y2hkb2dUaW1lckhlbHBlciogaW5zdGFuY2UoKQor
ICAgIHsKKyAgICAgICAgc3RhdGljIFdhdGNoZG9nVGltZXJIZWxwZXIqIHRoZUluc3RhbmNlID0g
bmV3IFdhdGNoZG9nVGltZXJIZWxwZXI7CisgICAgICAgIHJldHVybiB0aGVJbnN0YW5jZTsKKyAg
ICB9CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIHRpbWVyRmlyZWQoKQorICAgIHsKKyAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRU
b0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2F0Y2hk
b2dUaW1lckhlbHBlcigpIHt9Cit9OworCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQoreworICAgIC8vIE1ha2UgV2ViS2l0MiBtaW1pYyB0aGUgYmVoYXZp
b3VyIG9mIER1bXBSZW5kZXJUcmVlLCB3aGljaCBpcyBpbmNvcnJlY3QsCisgICAgLy8gYnV0IHRl
c3RzIGFyZSBzdWNjZXNzZnVsbHkgcGFzc2VkLiBPbiB0aGUgbG9uZyBydW4sIFF0IHdpbGwgbW92
ZSB0byBRUmF3Rm9udCwKKyAgICAvLyB3aGljaCBtYWtlcyB0aGUgdXNlIG9mIFFGb250RGF0YWJh
c2UgdW5uZWNlc3NhcnkuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MzQyNworICAgIFFXZWJTZXR0aW5nczo6Y2xlYXJNZW1vcnlDYWNoZXMoKTsK
KyAgICBRRm9udERhdGFiYXNlOjpyZW1vdmVBbGxBcHBsaWNhdGlvbkZvbnRzKCk7CisgICAgYWN0
aXZhdGVGb250cygpOworICAgIFFPYmplY3Q6OmNvbm5lY3QoJm1fd2FpdFRvRHVtcFdhdGNoZG9n
VGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCBXYXRjaGRvZ1RpbWVySGVscGVyOjppbnN0YW5jZSgp
LCBTTE9UKHRpbWVyRmlyZWQoKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpp
bnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKQoreworICAgIG1fd2FpdFRvRHVtcFdh
dGNoZG9nVGltZXIuc3RvcCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKHFnZXRl
bnYoIlFUX1dFQktJVDJfREVCVUciKSA9PSAiMSIpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuc3RhcnQod2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJJbnRlcnZhbCAqIDEwMDApOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNTdHJpbmdSZWYgdXJsKQor
eworICAgIFFTdHJpbmcgbG9jYWxUbXBVcmwoUVN0cmluZ0xpdGVyYWwoImZpbGU6Ly8vdG1wL0xh
eW91dFRlc3RzIikpOworICAgIFFTdHJpbmcgZ2l2ZW5VcmwocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cih1cmwpKSwgSlNTdHJpbmdHZXRMZW5n
dGgodXJsKSk7CisKKyAgICAvLyBUcmFuc2xhdGUgYSByZXF1ZXN0IGZvciAvdG1wL0xheW91dFRl
c3RzIHRvIHRoZSByZXBvc2l0b3J5IExheW91dFRlc3RzIGRpcmVjdG9yeS4KKyAgICAvLyBEbyBu
b3QgcmVseSBvbiBhIHN5bWxpbmsgdG8gYmUgY3JlYXRlZCB2aWEgdGhlIHRlc3QgcnVubmVyLCB3
aGljaCB3aWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MuCisgICAgaWYgKGdpdmVuVXJsLnN0YXJ0c1dp
dGgobG9jYWxUbXBVcmwpKSB7CisgICAgICAgIC8vIER1bXBSZW5kZXJUcmVlIGxpdmVzIGluIFdl
YktpdC9XZWJLaXRCdWlsZC88YnVpbGRfbW9kZT4vYmluLgorICAgICAgICAvLyBUcmFuc2xhdGUg
ZnJvbSBXZWJLaXQvV2ViS2l0QnVpbGQvUmVsZWFzZS9iaW4gPT4gV2ViS2l0L0xheW91dFRlc3Rz
LgorICAgICAgICBRRmlsZUluZm8gbGF5b3V0VGVzdHNSb290KFFDb3JlQXBwbGljYXRpb246OmFw
cGxpY2F0aW9uRGlyUGF0aCgpICsgUVN0cmluZ0xpdGVyYWwoIi8uLi8uLi8uLi9MYXlvdXRUZXN0
cy8iKSk7CisgICAgICAgIGlmIChsYXlvdXRUZXN0c1Jvb3QuZXhpc3RzKCkpIHsKKyAgICAgICAg
ICAgIFFTdHJpbmcgcGF0aCA9IFFTdHJpbmdMaXRlcmFsKCJmaWxlOi8vIikgKyBsYXlvdXRUZXN0
c1Jvb3QuYWJzb2x1dGVQYXRoKCkgKyBnaXZlblVybC5taWQobG9jYWxUbXBVcmwubGVuZ3RoKCkp
OworICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBKU0NoYXIqPihwYXRoLmNvbnN0RGF0YSgpKSwgcGF0aC5sZW5ndGgo
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHVybDsKK30KKworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQoreworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJxdCIpKTsKKyAgICByZXR1cm4gcGxhdGZvcm1OYW1lOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVFIKKworI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyUXQu
bW9jIgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9UZXN0
UnVubmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvcXQvVGVzdFJ1bm5lclF0LmNwcAkocmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9UZXN0UnVubmVyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5o
IgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxl
LmgiCkBAIC01MCwxNCArNTAsMTQgQEAgcHVibGljOgogcHVibGljIHNsb3RzOgogICAgIHZvaWQg
dGltZXJGaXJlZCgpCiAgICAgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53YWl0VG9EdW1wV2F0
Y2hkb2dUaW1lckZpcmVkKCk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFdhdGNoZG9nVGltZXJI
ZWxwZXIoKSB7fQogfTsKIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKICAgICAv
LyBNYWtlIFdlYktpdDIgbWltaWMgdGhlIGJlaGF2aW91ciBvZiBEdW1wUmVuZGVyVHJlZSwgd2hp
Y2ggaXMgaW5jb3JyZWN0LAogICAgIC8vIGJ1dCB0ZXN0cyBhcmUgc3VjY2Vzc2Z1bGx5IHBhc3Nl
ZC4gT24gdGhlIGxvbmcgcnVuLCBRdCB3aWxsIG1vdmUgdG8gUVJhd0ZvbnQsCkBAIC02OSwxMiAr
NjksMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aQogICAgIFFP
YmplY3Q6OmNvbm5lY3QoJm1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIsIFNJR05BTCh0aW1lb3V0
KCkpLCBXYXRjaGRvZ1RpbWVySGVscGVyOjppbnN0YW5jZSgpLCBTTE9UKHRpbWVyRmlyZWQoKSkp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdh
dGNoZG9nVGltZXIoKQordm9pZCBUZXN0UnVubmVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXIoKQogewogICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIuc3RvcCgpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJJZk5lZWRlZCgpCit2b2lkIFRlc3RSdW5uZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcklmTmVlZGVkKCkKIHsKICAgICBpZiAocWdldGVudigiUVRfV0VCS0lUMl9ERUJV
RyIpID09ICIxIikKICAgICAgICAgcmV0dXJuOwpAQCAtODUsNyArODUsNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpCiAgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lci5zdGFydCh3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckludGVydmFsICogMTAwMCk7CiB9CiAK
LUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9j
YWxSZXNvdXJjZShKU1N0cmluZ1JlZiB1cmwpCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVz
dFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgUVN0
cmluZyBsb2NhbFRtcFVybChRU3RyaW5nTGl0ZXJhbCgiZmlsZTovLy90bXAvTGF5b3V0VGVzdHMi
KSk7CiAgICAgUVN0cmluZyBnaXZlblVybChyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4o
SlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHVybCkpLCBKU1N0cmluZ0dldExlbmd0aCh1cmwpKTsK
QEAgLTEwNCw3ICsxMDQsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENv
bnRyCiAgICAgcmV0dXJuIHVybDsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91
dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IFRlc3RSdW5uZXI6OnBsYXRmb3JtTmFtZSgpCiB7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInF0
IikpOwogICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7CkBAIC0xMTIsNCArMTEyLDQgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cgogCiB9IC8vIG5hbWVzcGFjZSBXVFIK
IAotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyUXQubW9jIgorI2luY2x1ZGUgIlRlc3RS
dW5uZXJRdC5tb2MiCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCShyZXZpc2lvbiAxMjU1MTcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIK
LQotbmFtZXNwYWNlIFdUUiB7Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCi17Ci0gICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcigpCi17Ci0gICAgaWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICA6OktpbGxUaW1lcigwLCBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKTsK
LSAgICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyID0gMDsKLX0KLQotc3RhdGljIHZvaWQgQ0FM
TEJBQ0sgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZChIV05ELCBVSU5ULCBVSU5UX1BUUiwg
RFdPUkQpCi17Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKLX0KLQotc3RhdGljIGNvbnN0
IFVJTlRfUFRSIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWRlbnRpZmllciA9IDE7Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklm
TmVlZGVkKCkKLXsKLSAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDo6U2V0VGltZXIoMCwg
d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZGVudGlmaWVyLCB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1l
ckludGVydmFsICogMTAwMCwgV1RSOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKTsKLX0K
LQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9M
b2NhbFJlc291cmNlKEpTU3RyaW5nUmVmIHVybCkKLXsKLSAgICByZXR1cm4gSlNTdHJpbmdSZXRh
aW4odXJsKTsgLy8gVE9ETy4KLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBwbGF0Zm9ybU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3
aW4iKSk7Ci0gICAgcmV0dXJuIHBsYXRmb3JtTmFtZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RS
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9UZXN0UnVu
bmVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL3dpbi9UZXN0UnVubmVyV2luLmNwcAkocmV2aXNpb24gMTI1NTE3KQkoZnJvbSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxl
cldpbi5jcHA6MTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRUZXN0Q29u
dHJvbGxlci5oIgorCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKKworbmFtZXNwYWNlIFdU
UiB7CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7
CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpCit7CisgICAg
aWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICA6
OktpbGxUaW1lcigwLCBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKTsKKyAgICBtX3dhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyID0gMDsKK30KKworc3RhdGljIHZvaWQgQ0FMTEJBQ0sgd2FpdFRvRHVt
cFdhdGNoZG9nVGltZXJGaXJlZChIV05ELCBVSU5ULCBVSU5UX1BUUiwgRFdPUkQpCit7CisgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKK30KKworc3RhdGljIGNvbnN0IFVJTlRfUFRSIHdhaXRU
b0R1bXBXYXRjaGRvZ1RpbWVySWRlbnRpZmllciA9IDE7CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCkKK3sKKyAg
ICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDo6U2V0VGltZXIoMCwgd2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXJJZGVudGlmaWVyLCB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckludGVydmFsICogMTAw
MCwgV1RSOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKTsKK30KKworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpT
U3RyaW5nUmVmIHVybCkKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsgLy8gVE9E
Ty4KK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybU5hbWUoKQoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5h
bWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aW4iKSk7CisgICAgcmV0
dXJuIHBsYXRmb3JtTmFtZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9UZXN0UnVubmVyV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9UZXN0
UnVubmVyV2luLmNwcAkocmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDE4ICsyNCwxOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJM
YXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAKIG5hbWVzcGFjZSBXVFIgewogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQordm9pZCBUZXN0UnVubmVyOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogewogICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAwOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXIoKQordm9pZCBUZXN0UnVubmVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9n
VGltZXIoKQogewogICAgIGlmICghbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKICAgICAgICAg
cmV0dXJuOwpAQCAtNDYsMTIgKzQ2LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlu
dmFsaWRhdGVXYWkKIAogc3RhdGljIHZvaWQgQ0FMTEJBQ0sgd2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJGaXJlZChIV05ELCBVSU5ULCBVSU5UX1BUUiwgRFdPUkQpCiB7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyRmlyZWQoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CiB9CiAKIHN0YXRpYyBjb25zdCBVSU5UX1BU
UiB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklkZW50aWZpZXIgPSAxOwogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgp
Cit2b2lkIFRlc3RSdW5uZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVl
ZGVkKCkKIHsKICAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKICAgICAgICAgcmV0
dXJuOwpAQCAtNTksMTIgKzU5LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmluaXRp
YWxpemVXYWkKICAgICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyID0gOjpTZXRUaW1lcigwLCB3
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklkZW50aWZpZXIsIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVy
SW50ZXJ2YWwgKiAxMDAwLCBXVFI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOwogfQog
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xv
Y2FsUmVzb3VyY2UoSlNTdHJpbmdSZWYgdXJsKQorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRl
c3RSdW5uZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNTdHJpbmdSZWYgdXJsKQogewogICAgIHJl
dHVybiBKU1N0cmluZ1JldGFpbih1cmwpOyAvLyBUT0RPLgogfQogCi1KU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCitKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGxhdGZvcm1OYW1lKCkKIHsKICAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygid2luIikpOwogICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI1NTE3KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEzICs3MSwxMyBAQAogCQlCQzhGRDhEMjEyMEU1NDVC
MDBGM0U3MUEgLyogSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEZEOEQwMTIwRTU0NUIwMEYzRTcxQSAv
KiBKU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQlCQzkxOTIwNTEzMzNFNEY4
MDAzMDExREMgLyogVGVzdEludm9jYXRpb25DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzkxOTIwNDEzMzNFNEY4MDAzMDExREMgLyogVGVzdElu
dm9jYXRpb25DRy5jcHAgKi87IH07CiAJCUJDOTUyQzBEMTFGM0I5NjUwMDMzOThCNCAvKiBKU1dy
YXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM5NTJDMEMxMUYzQjk2NTAwMzM5OEI0IC8qIEpTV3JhcHBlci5jcHAgKi87IH07Ci0JCUJDOTUy
RjFGMTFGM0M2NTIwMDMzOThCNCAvKiBKU0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTUyRjFEMTFGM0M2NTIw
MDMzOThCNCAvKiBKU0xheW91dFRlc3RDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJQkM5NTJGMUYx
MUYzQzY1MjAwMzM5OEI0IC8qIEpTVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk1MkYxRDExRjNDNjUyMDAzMzk4QjQgLyogSlNU
ZXN0UnVubmVyLmNwcCAqLzsgfTsKIAkJQkNDOTk3QTQxMUQzQzhGNjAwMTdCQ0EyIC8qIEluamVj
dGVkQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDQzk5N0EwMTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZS5jcHAgKi87IH07
CiAJCUJDQzk5N0E1MTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTk3QTIxMUQz
QzhGNjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlUGFnZS5jcHAgKi87IH07Ci0JCUJDQzk5ODE4
MTFEM0Y1MUUwMDE3QkNBMiAvKiBMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAxN0JD
QTIgLyogTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwICovOyB9OworCQlCQ0M5OTgxODExRDNGNTFF
MDAxN0JDQTIgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAxN0JDQTIgLyogVGVzdFJ1bm5lci5j
cHAgKi87IH07CiAJCUJDRDdEMkY4MTE5MjEyNzgwMDZEQjdFRSAvKiBUZXN0SW52b2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Q3RDJG
NzExOTIxMjc4MDA2REI3RUUgLyogVGVzdEludm9jYXRpb24uY3BwICovOyB9OwogCQlCQ0RBMkI5
QTExOTEwNTFGMDBDM0JDNDcgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEQTJCOTkxMTkxMDUxRjAw
QzNCQzQ3IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKLQkJQzBDRTcyMEIxMjQ3
QzkzMzAwQkMwRUM0IC8qIExheW91dFRlc3RDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBDRTcyMEExMjQ3QzkzMzAwQkMwRUM0
IC8qIExheW91dFRlc3RDb250cm9sbGVyTWFjLm1tICovOyB9OworCQlDMENFNzIwQjEyNDdDOTMz
MDBCQzBFQzQgLyogVGVzdFJ1bm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMwQ0U3MjBBMTI0N0M5MzMwMEJDMEVDNCAvKiBUZXN0UnVubmVy
TWFjLm1tICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2lu
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0xODUsMjEgKzE4NSwyMSBAQAog
CQlCQzk1MkMwQzExRjNCOTY1MDAzMzk4QjQgLyogSlNXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDOTUyQzBFMTFGM0I5N0IwMDMzOThCNCAvKiBKU1dyYXBwYWJsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dyYXBwYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzk1MkVDNTExRjNDMTBGMDAzMzk4QjQgLyogRGVyaXZlZFNv
dXJjZXMubWFrZSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEZXJpdmVkU291cmNlcy5tYWtlOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzk1MkVEMjExRjNDMjlGMDAzMzk4QjQgLyog
TGF5b3V0VGVzdENvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExheW91dFRl
c3RDb250cm9sbGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5NTJFRDIx
MUYzQzI5RjAwMzM5OEI0IC8qIFRlc3RSdW5uZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFRlc3RSdW5uZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzk1MkVEMzEx
RjNDMzE4MDAzMzk4QjQgLyogQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5wZXJsOyBwYXRoID0gQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDOTUyRjFEMTFGM0M2NTIwMDMzOThCNCAvKiBKU0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEpTTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0VGVzdFJ1bm5lci9KU0xheW91dFRlc3RDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJQkM5NTJGMUUxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5
b3V0VGVzdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNM
YXlvdXRUZXN0Q29udHJvbGxlci5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0VGVzdFJ1
bm5lci9KU0xheW91dFRlc3RDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CisJCUJDOTUyRjFEMTFGM0M2NTIwMDMzOThCNCAvKiBKU1Rlc3RSdW5uZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNUZXN0UnVubmVyLmNwcDsg
cGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdFRlc3RSdW5uZXIvSlNUZXN0UnVubmVyLmNwcDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJQkM5NTJGMUUxMUYzQzY1MjAw
MzM5OEI0IC8qIEpTVGVzdFJ1bm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBKU1Rlc3RSdW5uZXIuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdFRlc3RSdW5uZXIv
SlNUZXN0UnVubmVyLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUJD
OTlBNDg0MTIwODkwMUEwMDdFOUYwOCAvKiBTdHJpbmdGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDQzk5N0EwMTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQzk5N0ExMTFEM0M4RjYwMDE3QkNB
MiAvKiBJbmplY3RlZEJ1bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmplY3RlZEJ1bmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M5OTdBMjEx
RDNDOEY2MDAxN0JDQTIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQzk5N0EzMTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5k
bGVQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDQzk5ODE2MTFEM0Y1MUUw
MDE3QkNBMiAvKiBMYXlvdXRUZXN0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMYXlvdXRUZXN0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCQ0M5OTgxNzExRDNGNTFFMDAxN0JDQTIgLyogTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0M5OTgxNjExRDNGNTFF
MDAxN0JDQTIgLyogVGVzdFJ1bm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXN0UnVubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQzk5ODE3MTFE
M0Y1MUUwMDE3QkNBMiAvKiBUZXN0UnVubmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRlc3RSdW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0Q3RDJGNjExOTIxMjc4MDA2REI3RUUgLyogVGVzdEludm9jYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdEludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNEN0QyRjcxMTkyMTI3ODAwNkRCN0VFIC8qIFRlc3RJbnZvY2F0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RJbnZvY2F0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEQTJCOTkxMTkxMDUxRjAwQzNC
QzQ3IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owot
CQlDMENFNzIwQTEyNDdDOTMzMDBCQzBFQzQgLyogTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBMYXlvdXRUZXN0Q29udHJv
bGxlck1hYy5tbTsgcGF0aCA9IG1hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzBDRTcyMEExMjQ3QzkzMzAwQkMwRUM0IC8qIFRlc3RS
dW5uZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUZXN0
UnVubmVyTWFjLm1tOyBwYXRoID0gbWFjL1Rlc3RSdW5uZXJNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTMyNCw5ICszMjQsOSBA
QAogCQkJCUJDOEZEOEM4MTIwRTUyN0YwMEYzRTcxQSAvKiBFdmVudFNlbmRpbmdDb250cm9sbGVy
LmggKi8sCiAJCQkJQkMxNEU0RDkxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5jcHAg
Ki8sCiAJCQkJQkMxNEU0RDgxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5oICovLAot
CQkJCUJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAg
Ki8sCi0JCQkJQkNDOTk4MTYxMUQzRjUxRTAwMTdCQ0EyIC8qIExheW91dFRlc3RDb250cm9sbGVy
LmggKi8sCi0JCQkJQzBDRTcyMEExMjQ3QzkzMzAwQkMwRUM0IC8qIExheW91dFRlc3RDb250cm9s
bGVyTWFjLm1tICovLAorCQkJCUJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBUZXN0UnVubmVy
LmNwcCAqLywKKwkJCQlCQ0M5OTgxNjExRDNGNTFFMDAxN0JDQTIgLyogVGVzdFJ1bm5lci5oICov
LAorCQkJCUMwQ0U3MjBBMTI0N0M5MzMwMEJDMEVDNCAvKiBUZXN0UnVubmVyTWFjLm1tICovLAog
CQkJCTU2NjRBNDk4MTQzMjYzODQwMDg4ODFCRSAvKiBUZXh0SW5wdXRDb250cm9sbGVyLmNwcCAq
LywKIAkJCQk1NjY0QTQ5OTE0MzI2Mzg0MDA4ODgxQkUgLyogVGV4dElucHV0Q29udHJvbGxlci5o
ICovLAogCQkJKTsKQEAgLTQxMiw3ICs0MTIsNyBAQAogCQkJCTI5MjEwRURDMTQ0Q0Q1NkUwMDgz
NUJCNSAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbCAqLywKIAkJCQlCQzhGRDhDQjEyMEU1
MkIwMDBGM0U3MUEgLyogRXZlbnRTZW5kaW5nQ29udHJvbGxlci5pZGwgKi8sCiAJCQkJQkMxNEU0
RTExMjBFMDMyMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5pZGwgKi8sCi0JCQkJQkM5NTJFRDIx
MUYzQzI5RjAwMzM5OEI0IC8qIExheW91dFRlc3RDb250cm9sbGVyLmlkbCAqLywKKwkJCQlCQzk1
MkVEMjExRjNDMjlGMDAzMzk4QjQgLyogVGVzdFJ1bm5lci5pZGwgKi8sCiAJCQkJNTY2NEE0OTYx
NDMyNjM3NzAwODg4MUJFIC8qIFRleHRJbnB1dENvbnRyb2xsZXIuaWRsICovLAogCQkJKTsKIAkJ
CXBhdGggPSBCaW5kaW5nczsKQEAgLTQzMyw4ICs0MzMsOCBAQAogCQkJCUJDOEZEOEQxMTIwRTU0
NUIwMEYzRTcxQSAvKiBKU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCAqLywKIAkJCQlCQzE0RTRF
ODEyMEUwM0Q4MDA4MjZDMEMgLyogSlNHQ0NvbnRyb2xsZXIuY3BwICovLAogCQkJCUJDMTRFNEU5
MTIwRTAzRDgwMDgyNkMwQyAvKiBKU0dDQ29udHJvbGxlci5oICovLAotCQkJCUJDOTUyRjFEMTFG
M0M2NTIwMDMzOThCNCAvKiBKU0xheW91dFRlc3RDb250cm9sbGVyLmNwcCAqLywKLQkJCQlCQzk1
MkYxRTExRjNDNjUyMDAzMzk4QjQgLyogSlNMYXlvdXRUZXN0Q29udHJvbGxlci5oICovLAorCQkJ
CUJDOTUyRjFEMTFGM0M2NTIwMDMzOThCNCAvKiBKU1Rlc3RSdW5uZXIuY3BwICovLAorCQkJCUJD
OTUyRjFFMTFGM0M2NTIwMDMzOThCNCAvKiBKU1Rlc3RSdW5uZXIuaCAqLywKIAkJCQk1NjQxRTJD
RTE0MzM1RTk1MDA4MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmNwcCAqLywKIAkJCQk1
NjQxRTJDRjE0MzM1RTk1MDA4MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmggKi8sCiAJ
CQkpOwpAQCAtNTc3LDE2ICs1NzcsMTYgQEAKIAkJCQlCQzI1MUEzRTExRDE2ODMxMDAyRUJDMDEg
LyogSW5qZWN0ZWRCdW5kbGVNYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzk5N0E0MTFE
M0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0M5OTdBNTExRDNDOEY2MDAxN0JDQTIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUJDQzk5ODE4MTFEM0Y1MUUwMDE3QkNBMiAvKiBMYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0M5OTgxODExRDNGNTFFMDAxN0JDQTIgLyog
VGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUVCODVBMDExRUM2N0NDMDAzNEQz
MDAgLyogQWN0aXZhdGVGb250cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOTUyQzBEMTFGM0I5
NjUwMDMzOThCNCAvKiBKU1dyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM5NTJGMUYx
MUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQkM5NTJGMUYxMUYzQzY1MjAwMzM5OEI0IC8qIEpTVGVzdFJ1bm5lci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzE0RTREQjEyMEUwMkQwMDA4MjZDMEMgLyogR0NDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTRFNEVBMTIwRTAzRDgwMDgyNkMwQyAvKiBKU0dD
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzhEQUQ3QjEzMTZEOTEwMDBFQzk2
RkMgLyogSW5qZWN0ZWRCdW5kbGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzhGRDhDQTEy
MEU1MjdGMDBGM0U3MUEgLyogRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzhGRDhEMjEyMEU1NDVCMDBGM0U3MUEgLyogSlNFdmVudFNlbmRpbmdDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMwQ0U3MjBCMTI0N0M5MzMwMEJDMEVDNCAvKiBM
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUMwQ0U3MjBCMTI0
N0M5MzMwMEJDMEVDNCAvKiBUZXN0UnVubmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTY2
NEE0OUExNDMyNjM4NDAwODg4MUJFIC8qIFRleHRJbnB1dENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTY0MUUyRDAxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTIxMEVBRTE0NENBQ0I3MDA4MzVCQjUgLyog
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvd2luL0luamVjdGVkQnVuZGxlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9JbmplY3RlZEJ1bmRsZS52Y3Byb2oJKHJldmlzaW9u
IDEyNTUxNykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL0luamVjdGVkQnVuZGxlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzE4LDcgKzcxOCw3IEBACiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluamVjdGVkQnVuZGxlXEJpbmRpbmdz
XExheW91dFRlc3RDb250cm9sbGVyLmlkbCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluamVjdGVk
QnVuZGxlXEJpbmRpbmdzXFRlc3RSdW5uZXIuaWRsIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC04NzQsMTEgKzg3NCwxMSBAQAogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIkKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iJChDb25maWd1cmF0aW9uQnVpbGRE
aXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1Rlc3RSdW5uZXIuY3BwIgog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIkKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTGF5b3V0
VGVzdENvbnRyb2xsZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoQ29uZmlndXJhdGlvbkJ1aWxk
RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNUZXN0UnVubmVyLmgiCiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTk2NywxNSArOTY3LDE1IEBACiAJCQk+CiAJ
CTwvRmlsZT4KIAkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5qZWN0ZWRCdW5kbGVcTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwIgorCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmplY3RlZEJ1bmRs
ZVxUZXN0UnVubmVyLmNwcCIKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQotCQkJUmVsYXRpdmVQ
YXRoPSIuLlxJbmplY3RlZEJ1bmRsZVxMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCQkJUmVsYXRp
dmVQYXRoPSIuLlxJbmplY3RlZEJ1bmRsZVxUZXN0UnVubmVyLmgiCiAJCQk+CiAJCTwvRmlsZT4K
IAkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5qZWN0ZWRCdW5kbGVcd2luXExheW91dFRl
c3RDb250cm9sbGVyV2luLmNwcCIKKwkJCVJlbGF0aXZlUGF0aD0iLi5cSW5qZWN0ZWRCdW5kbGVc
d2luXFRlc3RSdW5uZXJXaW4uY3BwIgogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCg==
</data>
<flag name="review"
          id="168307"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>