<?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>92319</bug_id>
          
          <creation_ts>2012-07-25 16:45:50 -0700</creation_ts>
          <short_desc>Move the easy LayoutTestController functions into TestRunner.a</short_desc>
          <delta_ts>2012-12-02 13:27:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>102479</dependson>
    
    <dependson>102489</dependson>
          <blocked>91308</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>jochen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>678612</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-25 16:45:50 -0700</bug_when>
    <thetext>Move the easy LayoutTestController functions into TestRunner.a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678613</commentid>
    <comment_count>1</comment_count>
      <attachid>154483</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-25 16:46:15 -0700</bug_when>
    <thetext>Created attachment 154483
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678615</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-25 16:47:15 -0700</bug_when>
    <thetext>I might have tried to do too much at once.  Here&apos;s as much as I got done before I had to go back to working on other things.  It&apos;s likely I should break this patch down into smaller pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769164</commentid>
    <comment_count>3</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-11-16 05:43:23 -0800</bug_when>
    <thetext>splitting this up a bit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154483</attachid>
            <date>2012-07-25 16:46:15 -0700</date>
            <delta_ts>2012-07-25 16:46:15 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-92319-20120725164605.patch</filename>
            <type>text/plain</type>
            <size>236275</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjM5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWJiMDkzMjkyOTEyMzViMWM3NmVhMmEyZTMxMjU3ODA5
ZTYzZGRmNi4uNDY2YWZhMzQ0YjE4MDI3OGI2OTlhZTg4NzNhNWY1MzE3MjljNDVjMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2
NSBAQAogMjAxMi0wNy0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCisgICAg
ICAgIE1vdmUgdGhlIGVhc3kgTGF5b3V0VGVzdENvbnRyb2xsZXIgZnVuY3Rpb25zIGludG8gVGVz
dFJ1bm5lci5hCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MjMxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCBy
YXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09Q
UyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250
cm9sbGVyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9y
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rvcik6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2lu
Z0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEltYWdlc0FsbG93
ZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcmlwdHNBbGxvd2VkKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlQWxsb3dlZCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0FsbG93ZWQpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGlj
ayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcik6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL1Rlc3REZWxlZ2F0ZS5oOgorICAgICAgICAoVGVzdERlbGVnYXRlKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RSdW5uZXIu
Y3BwOgorICAgICAgICAoRW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQpOgorICAgICAgICAo
RW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQ6OkVtcHR5V2ViRGVsaXZlcmVkSW50ZW50Q2xp
ZW50KToKKyAgICAgICAgKEVtcHR5V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50Ojp+RW1wdHlXZWJE
ZWxpdmVyZWRJbnRlbnRDbGllbnQpOgorICAgICAgICAoRW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRD
bGllbnQ6OnBvc3RSZXN1bHQpOgorICAgICAgICAoRW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRDbGll
bnQ6OnBvc3RGYWlsdXJlKToKKyAgICAgICAgKEVtcHR5V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50
OjpkZXN0cm95KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OlRlc3RSdW5uZXIpOgorICAgICAgICAo
VGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjp+V29ya1F1ZXVlKToKKyAgICAgICAgKFRlc3RSdW5uZXI6
OldvcmtRdWV1ZTo6cHJvY2Vzc1dvcmtTb29uKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OldvcmtR
dWV1ZTo6cHJvY2Vzc1dvcmspOgorICAgICAgICAoVGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjpyZXNl
dCk6CisgICAgICAgIChUZXN0UnVubmVyOjpXb3JrUXVldWU6OmFkZFdvcmspOgorICAgICAgICAo
VGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dCk6CisgICAgICAgIChUZXN0UnVubmVyOjpkdW1wRGF0YWJh
c2VDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3Mp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZHVtcEJhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgIChU
ZXN0UnVubmVyOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKToKKyAgICAgICAgKFRlc3RSdW5uZXI6
OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2spOgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6
ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyk6CisgICAgICAgIChUZXN0UnVubmVyOjpkdW1wUmVz
b3VyY2VSZXNwb25zZU1JTUVUeXBlcyk6CisgICAgICAgIChUZXN0UnVubmVyOjpkdW1wQ2hpbGRG
cmFtZVNjcm9sbFBvc2l0aW9ucyk6CisgICAgICAgIChUZXN0UnVubmVyOjpkdW1wQ2hpbGRGcmFt
ZXNBc1RleHQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZHVtcFRpdGxlQ2hhbmdlcyk6CisgICAgICAgIChUZXN0
UnVubmVyOjpkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyk6CisgICAgICAgIChUZXN0UnVu
bmVyOjpkdW1wQ3JlYXRlVmlldyk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRBY2NlcHRzRWRp
dGluZyk6CisgICAgICAgIChUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKToKKyAgICAgICAgKFRl
c3RSdW5uZXI6Om5vdGlmeURvbmUpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y29tcGxldGVOb3Rp
ZnlEb25lKToKKyAgICAgICAgKFdvcmtJdGVtQmFja0ZvcndhcmQpOgorICAgICAgICAoV29ya0l0
ZW1CYWNrRm9yd2FyZDo6V29ya0l0ZW1CYWNrRm9yd2FyZCk6CisgICAgICAgIChXb3JrSXRlbUJh
Y2tGb3J3YXJkOjpydW4pOgorICAgICAgICAoVGVzdFJ1bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlv
bik6CisgICAgICAgIChUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdvcmtJdGVtUmVsb2FkKToKKyAgICAgICAgKFdvcmtJdGVtUmVsb2FkOjpydW4pOgorICAg
ICAgICAoVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQpOgorICAgICAgICAoV29ya0l0ZW1Mb2FkaW5n
U2NyaXB0KToKKyAgICAgICAgKFdvcmtJdGVtTG9hZGluZ1NjcmlwdDo6V29ya0l0ZW1Mb2FkaW5n
U2NyaXB0KToKKyAgICAgICAgKFdvcmtJdGVtTG9hZGluZ1NjcmlwdDo6cnVuKToKKyAgICAgICAg
KFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdCk6CisgICAgICAgIChXb3JrSXRlbU5vbkxvYWRpbmdT
Y3JpcHQ6OldvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdCk6CisgICAgICAgIChXb3JrSXRlbU5vbkxv
YWRpbmdTY3JpcHQ6OnJ1bik6CisgICAgICAgIChUZXN0UnVubmVyOjpxdWV1ZUxvYWRpbmdTY3Jp
cHQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KToKKyAgICAg
ICAgKFdvcmtJdGVtTG9hZCk6CisgICAgICAgIChXb3JrSXRlbUxvYWQ6OldvcmtJdGVtTG9hZCk6
CisgICAgICAgIChXb3JrSXRlbUxvYWQ6OnJ1bik6CisgICAgICAgIChUZXN0UnVubmVyOjpxdWV1
ZUxvYWQpOgorICAgICAgICAoV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyk6CisgICAgICAgIChXb3Jr
SXRlbUxvYWRIVE1MU3RyaW5nOjpXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKToKKyAgICAgICAgKFdv
cmtJdGVtTG9hZEhUTUxTdHJpbmc6OnJ1bik6CisgICAgICAgIChUZXN0UnVubmVyOjpxdWV1ZUxv
YWRIVE1MU3RyaW5nKToKKyAgICAgICAgKFRlc3RSdW5uZXI6Om9iakNJZGVudGl0eUlzRXF1YWwp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6cmVzZXQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6bG9j
YXRpb25DaGFuZ2VEb25lKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnBvbGljeURlbGVnYXRlRG9u
ZSk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk6CisgICAgICAgIChU
ZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6d2luZG93Q291bnQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0Q2xvc2VSZW1h
aW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldEFsd2F5
c0FjY2VwdENvb2tpZXMpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQpOgorICAgICAgICAoVGVzdFJ1bm5l
cjo6aXNDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9h
cmRDb21wYXRpYmlsaXR5TW9kZSk6CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxp
Y2F0aW9uQ2FjaGVzKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNo
ZUZvck9yaWdpbik6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3Jp
Z2luUXVvdGEpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNh
Y2hlKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JP
cmlnaW4pOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KToKKyAgICAg
ICAgKFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKToKKyAgICAgICAg
KFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCk6CisgICAg
ICAgIChUZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKFRlc3RSdW5u
ZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWcpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0
U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCk6CisgICAgICAgIChUZXN0UnVubmVyOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChUZXN0UnVubmVyOjpwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6ZWxl
bWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKToKKyAgICAgICAgKFRlc3RSdW5u
ZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChUZXN0UnVubmVyOjplbmFi
bGVBdXRvUmVzaXplTW9kZSk6CisgICAgICAgIChUZXN0UnVubmVyOjpkaXNhYmxlQXV0b1Jlc2l6
ZU1vZGUpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZCk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOgorICAgICAgICAo
VGVzdFJ1bm5lcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKToKKyAgICAg
ICAgKFRlc3RSdW5uZXI6OmR1bXBBc1dlYkFyY2hpdmUpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6
c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChUZXN0UnVubmVyOjpkdW1w
U2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChUZXN0UnVubmVyOjp0ZXN0UmVwYWludCk6CisgICAg
ICAgIChUZXN0UnVubmVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkpOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6a2Vl
cFdlYkhpc3RvcnkpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c3RvcmVXZWJTY3JpcHRPYmplY3Qp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6YWNjZXNzU3RvcmVkV2ViU2NyaXB0T2JqZWN0KToKKyAg
ICAgICAgKFRlc3RSdW5uZXI6Om9iakNDbGFzc05hbWVPZik6CisgICAgICAgIChUZXN0UnVubmVy
OjphZGREaXNhbGxvd2VkVVJMKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldENhbGxDbG9zZU9u
V2ViVmlld3MpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCk6CisgICAgICAgIChUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFu
ZFJldHVyblZhbHVlKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbik6CisgICAgICAgIChUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9Cb29sKToKKyAgICAg
ICAgKFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0ludDMyKToKKyAgICAgICAgKFRlc3RSdW5uZXI6
OmNwcFZhcmlhbnRUb1dlYlN0cmluZyk6CisgICAgICAgIChUZXN0UnVubmVyOjpjcHBWYXJpYW50
VG9XZWJTdHJpbmdBcnJheSk6CisgICAgICAgIChUZXN0UnVubmVyOjpmYWxsYmFja01ldGhvZCk6
CisgICAgICAgIChUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcyk6CisgICAgICAgIChUZXN0UnVu
bmVyOjpzZXREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFBPU0lYTG9j
YWxlKToKKyAgICAgICAgKHBhcnNlQ3BwQXJndW1lbnRJbnQzMik6CisgICAgICAgIChwYXJzZVBh
Z2VTaXplUGFyYW1ldGVycyk6CisgICAgICAgIChwYXJzZVBhZ2VOdW1iZXIpOgorICAgICAgICAo
cGFyc2VQYWdlTnVtYmVyU2l6ZU1hcmdpbnMpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0UHJp
bnRpbmcpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKToK
KyAgICAgICAgKFRlc3RSdW5uZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKToKKyAgICAg
ICAgKFRlc3RSdW5uZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUpOgorICAgICAgICAoVGVzdFJ1
bm5lcjo6cGFnZVByb3BlcnR5KToKKyAgICAgICAgKFRlc3RSdW5uZXI6Om51bWJlck9mUGFnZXMp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6bG9nRXJyb3JUb0NvbnNvbGUpOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6
YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk6
CisgICAgICAgIChUZXN0UnVubmVyOjphYm9ydE1vZGFsKToKKyAgICAgICAgKFRlc3RSdW5uZXI6
OnN0YXJ0U3BlZWNoSW5wdXQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6bGF5ZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKFRlc3RSdW5uZXI6Omxvc2VDb21wb3NpdG9yQ29udGV4dCk6CisgICAgICAg
IChUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOgorICAgICAgICAoVGVzdFJ1bm5l
cjo6ZmluZFN0cmluZyk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRl
cnZhbCk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKFRl
c3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcik6CisgICAgICAgIChUZXN0UnVubmVyOjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6bG9jYWxTdG9yYWdlRGlza1Vz
YWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6
CisgICAgICAgIChUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQpOgor
ICAgICAgICAoVGVzdFJ1bm5lcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKToKKyAgICAgICAgKFRl
c3RSdW5uZXI6OnNldEZpeGVkTGF5b3V0U2l6ZSk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZWxl
Y3Rpb25Bc01hcmt1cCk6CisgICAgICAgIChUZXN0UnVubmVyOjp3b3JrZXJUaHJlYWRDb3VudCk6
CisgICAgICAgIChUZXN0UnVubmVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UpOgorICAgICAgICAo
VGVzdFJ1bm5lcjo6ZGVsaXZlcldlYkludGVudCk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRU
ZXh0U3VicGl4ZWxQb3NpdGlvbmluZyk6CisgICAgICAgIChJbnZva2VDYWxsYmFja1Rhc2spOgor
ICAgICAgICAoSW52b2tlQ2FsbGJhY2tUYXNrOjpJbnZva2VDYWxsYmFja1Rhc2spOgorICAgICAg
ICAoSW52b2tlQ2FsbGJhY2tUYXNrOjpydW5JZlZhbGlkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6
OnNldEJhY2tpbmdTY2FsZUZhY3Rvcik6CisgICAgICAgIChUZXN0UnVubmVyOjpyZXNldFBhZ2VW
aXNpYmlsaXR5KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KToKKyAg
ICAgICAgKFRlc3RSdW5uZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKToKKyAg
ICAgICAgKFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOgorICAgICAgICAoVGVzdFJ1bm5l
cjo6c2V0QXVkaW9EYXRhKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldEhhc0N1c3RvbUZ1bGxT
Y3JlZW5CZWhhdmlvcik6CisgICAgICAgIChUZXN0UnVubmVyOjp0ZXh0U3Vycm91bmRpbmdOb2Rl
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RSdW5u
ZXIuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChUZXN0UnVubmVyKToKKyAgICAgICAg
KFRlc3RSdW5uZXI6OmRlbGVnYXRlKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldERlbGVnYXRl
KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OndlYlZpZXcpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6
c2V0V2ViVmlldyk6CisgICAgICAgIChUZXN0UnVubmVyOjphdWRpb0RhdGEpOgorICAgICAgICAo
VGVzdFJ1bm5lcjo6c2V0V29ya1F1ZXVlRnJvemVuKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNo
b3VsZER1bXBBc0F1ZGlvKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFNob3VsZER1bXBBc0F1
ZGlvKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNob3VsZER1bXBBc1RleHQpOgorICAgICAgICAo
VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRHVtcEFzVGV4dCk6CisgICAgICAgIChUZXN0UnVubmVyOjpz
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcyk6CisgICAgICAgIChUZXN0UnVubmVyOjpzaG91bGRE
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFNob3VsZER1
bXBGcmFtZUxvYWRDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFBy
b2dyZXNzRmluaXNoZWRDYWxsYmFjayk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRTaG91bGRE
dW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNob3Vs
ZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKToKKyAgICAgICAgKFRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKToKKyAgICAg
ICAgKFRlc3RSdW5uZXI6OnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpOgorICAgICAg
ICAoVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMpOgor
ICAgICAgICAoVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMp
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcyk6CisgICAg
ICAgIChUZXN0UnVubmVyOjpzaG91bGREdW1wU2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChUZXN0
UnVubmVyOjpzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFRlc3RSdW5uZXI6
OnNob3VsZER1bXBUaXRsZUNoYW5nZXMpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2hvdWxkRHVt
cFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2hvdWxk
RHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2hv
dWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNob3VsZEdl
bmVyYXRlUGl4ZWxSZXN1bHRzKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFNob3VsZEdlbmVy
YXRlUGl4ZWxSZXN1bHRzKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNob3VsZER1bXBDcmVhdGVW
aWV3KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmFjY2VwdHNFZGl0aW5nKToKKyAgICAgICAgKFRl
c3RSdW5uZXI6OmNhbk9wZW5XaW5kb3dzKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNob3VsZEFk
ZEZpbGVUb1Bhc3RlYm9hcmQpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c3RvcFByb3Zpc2lvbmFs
RnJhbWVMb2Fkcyk6CisgICAgICAgIChUZXN0UnVubmVyOjpkZWZlck1haW5SZXNvdXJjZURhdGFM
b2FkKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFNob3dEZWJ1Z0xheWVyVHJlZSk6CisgICAg
ICAgIChUZXN0UnVubmVyOjpzZXRUaXRsZVRleHREaXJlY3Rpb24pOgorICAgICAgICAoVGVzdFJ1
bm5lcjo6c2hvdWxkSW50ZXJjZXB0UG9zdE1lc3NhZ2UpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6
c2V0SXNQcmludGluZyk6CisgICAgICAgIChUZXN0UnVubmVyOjppc1ByaW50aW5nKToKKyAgICAg
ICAgKFRlc3RSdW5uZXI6OnRlc3RSZXBhaW50KToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnN3ZWVw
SG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFRlc3RSdW5uZXI6Omhhc0N1c3RvbUZ1bGxTY3JlZW5C
ZWhhdmlvcik6CisgICAgICAgIChXb3JrSXRlbSk6CisgICAgICAgIChUZXN0UnVubmVyOjpXb3Jr
SXRlbTo6fldvcmtJdGVtKToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnRhc2tMaXN0KToKKyAgICAg
ICAgKFRlc3RSdW5uZXI6OnNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2Fk
KToKKyAgICAgICAgKFdvcmtRdWV1ZSk6CisgICAgICAgIChUZXN0UnVubmVyOjpXb3JrUXVldWU6
OldvcmtRdWV1ZSk6CisgICAgICAgIChUZXN0UnVubmVyOjpXb3JrUXVldWU6OnNldEZyb3plbik6
CisgICAgICAgIChUZXN0UnVubmVyOjpXb3JrUXVldWU6OmlzRW1wdHkpOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6V29ya1F1ZXVlOjp0YXNrTGlzdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuaDoKKyAgICAgICAgKFdlYlZpZXdIb3N0KToKKworMjAxMi0w
Ny0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCiAgICAgICAgIFRlc3RSdW5u
ZXIuYSBzaG91bGQgY29udGFpbiBhIFRlc3RSdW5uZXIgb2JqZWN0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjMxMwogCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXgg
ZDVjOTAxOWI4YmE3ZTFiZGRhMzA3MzIyMzkwMDA5YzBkN2NlNWExNS4uMDlmMTk0MDk5ZTFhZTY2
NzdkMGRmOWM1NTM4NjI2NGQzMDlkNjk1YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtODAsMTIzMyArODAs
MTEzIEBACiAjaW5jbHVkZSAibGludXgvV2ViRm9udFJlbmRlcmluZy5oIgogI2VuZGlmCiAKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7Ci0KLWNsYXNzIEVtcHR5V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50IDogcHVi
bGljIFdlYktpdDo6V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBFbXB0
eVdlYkRlbGl2ZXJlZEludGVudENsaWVudCgpIHsgfQotICAgIH5FbXB0eVdlYkRlbGl2ZXJlZElu
dGVudENsaWVudCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBvc3RSZXN1bHQoY29uc3QgV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlJiBkYXRhKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdEZhaWx1cmUoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBkYXRhKSBjb25zdCB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIHsgfQotfTsKLQotTGF5b3V0VGVzdENvbnRy
b2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwpCi0gICAgOiBtX3No
ZWxsKHNoZWxsKQotICAgICwgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MoZmFsc2UpCi0gICAgLCBt
X2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2UpCi0gICAgLCBtX3Nob3dEZWJ1Z0xheWVy
VHJlZShmYWxzZSkKLSAgICAsIG1fd29ya1F1ZXVlKHRoaXMpCi0gICAgLCBtX2ludGVudENsaWVu
dChhZG9wdFB0cihuZXcgRW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQpKQotICAgICwgbV9z
aG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChmYWxzZSkKLXsKLQotICAg
IC8vIEluaXRpYWxpemUgdGhlIG1hcCB0aGF0IGFzc29jaWF0ZXMgbWV0aG9kcyBvZiB0aGlzIGNs
YXNzIHdpdGggdGhlIG5hbWVzCi0gICAgLy8gdGhleSB3aWxsIHVzZSB3aGVuIGNhbGxlZCBieSBK
YXZhU2NyaXB0LiBUaGUgYWN0dWFsIGJpbmRpbmcgb2YgdGhvc2UKLSAgICAvLyBuYW1lcyB0byB0
aGVpciBtZXRob2RzIHdpbGwgYmUgZG9uZSBieSBjYWxsaW5nIGJpbmRUb0phdmFTY3JpcHQoKSAo
ZGVmaW5lZAotICAgIC8vIGJ5IENwcEJvdW5kQ2xhc3MsIHRoZSBwYXJlbnQgdG8gTGF5b3V0VGVz
dENvbnRyb2xsZXIpLgotICAgIGJpbmRNZXRob2QoImFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWci
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWcpOwotI2lm
IEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgYmluZE1ldGhvZCgiYWRkTW9ja1NwZWVjaElucHV0
UmVzdWx0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQp
OwotICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdCk7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAgIGJpbmRNZXRob2QoImFkZE1vY2tTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaFJlY29n
bml0aW9uUmVzdWx0KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25F
cnJvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJy
b3IpOwotICAgIGJpbmRNZXRob2QoIndhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQpOwot
I2VuZGlmCi0gICAgYmluZE1ldGhvZCgiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKLSAg
ICBiaW5kTWV0aG9kKCJhZGRVc2VyU2NyaXB0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGRV
c2VyU2NyaXB0KTsKLSAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU3R5bGVTaGVldCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQpOwotICAgIGJpbmRNZXRob2QoImNsZWFy
QWxsRGF0YWJhc2VzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcyk7
Ci0gICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsKLSNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIGJp
bmRNZXRob2QoImRpZExvc2VQb2ludGVyTG9jayIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlk
TG9zZVBvaW50ZXJMb2NrKTsKLSNlbmRpZgotICAgIGJpbmRNZXRob2QoImRpc2FibGVBdXRvUmVz
aXplTW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUF1dG9SZXNpemVNb2RlKTsK
LSAgICBiaW5kTWV0aG9kKCJkaXNhYmxlSW1hZ2VMb2FkaW5nIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKTsKLSAgICBiaW5kTWV0aG9kKCJkaXNwbGF5IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KTsKLSAgICBiaW5kTWV0aG9kKCJkaXNwbGF5SW52
YWxpZGF0ZWRSZWdpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXlJbnZhbGlkYXRl
ZFJlZ2lvbik7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEFzVGV4dCIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcEFzVGV4dCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEJhY2tGb3J3YXJkTGlzdCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgYmluZE1l
dGhvZCgiZHVtcENoaWxkRnJhbWVzQXNUZXh0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
Q2hpbGRGcmFtZXNBc1RleHQpOwotICAgIGJpbmRNZXRob2QoImR1bXBDaGlsZEZyYW1lU2Nyb2xs
UG9zaXRpb25zIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ2hpbGRGcmFtZVNjcm9sbFBv
c2l0aW9ucyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpkdW1wRGF0YWJhc2VDYWxsYmFja3MpOwotICAgIGJpbmRNZXRob2Qo
ImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRWRpdGlu
Z0NhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcyk7Ci0gICAgYmluZE1l
dGhvZCgiZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFVz
ZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1
bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1w
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wUmVzb3VyY2VSZXNwb25zZU1J
TUVUeXBlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1F
VHlwZXMpOwotICAgIGJpbmRNZXRob2QoImR1bXBTZWxlY3Rpb25SZWN0IiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpkdW1wU2VsZWN0aW9uUmVjdCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFN0YXR1
c0NhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFdpbmRvd1N0YXR1c0NoYW5n
ZXMpOwotICAgIGJpbmRNZXRob2QoImR1bXBUaXRsZUNoYW5nZXMiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmR1bXBUaXRsZUNoYW5nZXMpOwotICAgIGJpbmRNZXRob2QoImR1bXBQZXJtaXNzaW9u
Q2xpZW50Q2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUGVybWlzc2lvbkNs
aWVudENhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcENyZWF0ZVZpZXciLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmR1bXBDcmVhdGVWaWV3KTsKLSAgICBiaW5kTWV0aG9kKCJlbGVtZW50
RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCk7Ci0gICAgYmluZE1ldGhv
ZCgiZW5hYmxlQXV0b1Jlc2l6ZU1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuYWJsZUF1
dG9SZXNpemVNb2RlKTsKLSAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKTsKLSAgICBiaW5k
TWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOwotICAgIGJpbmRNZXRob2QoImV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOwot
ICAgIGJpbmRNZXRob2QoInNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKTsKLSAgICBiaW5k
TWV0aG9kKCJleGVjQ29tbWFuZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQp
OwotICAgIGJpbmRNZXRob2QoImZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyk7Ci0jaWYgRU5BQkxFKE5PVElGSUNB
VElPTlMpCi0gICAgYmluZE1ldGhvZCgiZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lv
biIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlz
c2lvbik7Ci0jZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJmaW5kU3RyaW5nIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpmaW5kU3RyaW5nKTsKLSAgICBiaW5kTWV0aG9kKCJpc0NvbW1hbmRFbmFibGVk
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKTsKLSAgICBiaW5kTWV0
aG9kKCJoYXNDdXN0b21QYWdlU2l6ZVN0eWxlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpoYXND
dXN0b21QYWdlU2l6ZVN0eWxlKTsKLSAgICBiaW5kTWV0aG9kKCJsYXllclRyZWVBc1RleHQiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCk7Ci0gICAgYmluZE1ldGhvZCgi
bG9zZUNvbXBvc2l0b3JDb250ZXh0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpsb3NlQ29tcG9z
aXRvckNvbnRleHQpOwotICAgIGJpbmRNZXRob2QoIm1hcmtlclRleHRGb3JMaXN0SXRlbSIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTsKLSAgICBiaW5kTWV0
aG9kKCJub3RpZnlEb25lIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKTsKLSAg
ICBiaW5kTWV0aG9kKCJudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk7Ci0gICAgYmluZE1ldGhvZCgibnVtYmVy
T2ZQYWdlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyk7Ci0gICAgYmlu
ZE1ldGhvZCgibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OiBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cyk7Ci0gICAgYmluZE1ldGhvZCgib2JqQ0lkZW50aXR5SXNFcXVhbCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6b2JqQ0lkZW50aXR5SXNFcXVhbCk7Ci0gICAgYmluZE1ldGhvZCgi
b3ZlcnJpZGVQcmVmZXJlbmNlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZl
cmVuY2UpOwotICAgIGJpbmRNZXRob2QoInBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKTsKLSAgICBiaW5kTWV0
aG9kKCJwYWdlUHJvcGVydHkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eSk7
Ci0gICAgYmluZE1ldGhvZCgicGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKTsKLSAgICBiaW5kTWV0aG9k
KCJwYXRoVG9Mb2NhbFJlc291cmNlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2Nh
bFJlc291cmNlKTsKLSAgICBiaW5kTWV0aG9kKCJwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnRXaXRoSWQpOwotICAgIGJpbmRNZXRob2QoInBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxl
bWVudFdpdGhJZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZUJhY2tOYXZpZ2F0aW9uIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTsKLSAgICBiaW5kTWV0
aG9kKCJxdWV1ZUZvcndhcmROYXZpZ2F0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1
ZUZvcndhcmROYXZpZ2F0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZUxvYWRpbmdTY3JpcHQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdCk7Ci0gICAgYmluZE1l
dGhvZCgicXVldWVMb2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQpOwotICAg
IGJpbmRNZXRob2QoInF1ZXVlTG9hZEhUTUxTdHJpbmciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOwotICAgIGJpbmRNZXRob2QoInF1ZXVlTm9uTG9hZGluZ1Nj
cmlwdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KTsKLSAg
ICBiaW5kTWV0aG9kKCJxdWV1ZVJlbG9hZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVS
ZWxvYWQpOwotICAgIGJpbmRNZXRob2QoInJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eSk7Ci0gICAgYmluZE1ldGhvZCgicmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkpOwotICAgIGJpbmRNZXRob2Qo
InJlc2V0UGFnZVZpc2liaWxpdHkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZp
c2liaWxpdHkpOwotICAgIGJpbmRNZXRob2QoInNldEFjY2VwdHNFZGl0aW5nIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWxs
b3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFs
bG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd0Zp
bGVBY2Nlc3NGcm9tRmlsZVVSTHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93Rmls
ZUFjY2Vzc0Zyb21GaWxlVVJMcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWxsb3dSdW5uaW5nT2ZJ
bnNlY3VyZUNvbnRlbnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93UnVubmluZ09m
SW5zZWN1cmVDb250ZW50KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd1VuaXZlcnNhbEFjY2Vz
c0Zyb21GaWxlVVJMcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMpOwotICAgIGJpbmRNZXRob2QoInNldEFsd2F5c0FjY2VwdENvb2tp
ZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOwotICAg
IGJpbmRNZXRob2QoInNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhv
ZCgic2V0QXV0b2ZpbGxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZCk7
Ci0gICAgYmluZE1ldGhvZCgic2V0Q2FuT3BlbldpbmRvd3MiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldENhbk9wZW5XaW5kb3dzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRDbG9zZVJlbWFpbmlu
Z1dpbmRvd3NXaGVuQ29tcGxldGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENsb3NlUmVt
YWluaW5nV2luZG93c1doZW5Db21wbGV0ZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0Q3VzdG9tUG9s
aWN5RGVsZWdhdGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVn
YXRlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXREYXRhYmFzZVF1b3RhIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKTsKLSAgICBiaW5kTWV0aG9kKCJzZXREZWZlck1haW5S
ZXNvdXJjZURhdGFMb2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlck1haW5SZXNv
dXJjZURhdGFMb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXREb21haW5SZWxheGF0aW9uRm9yYmlk
ZGVuRm9yVVJMU2NoZW1lIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0
aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBdWRpb0RhdGEi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1ZGlvRGF0YSk7Ci0gICAgYmluZE1ldGhvZCgi
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb24pOwotICAgIGJpbmRNZXRob2QoInNldEljb25EYXRhYmFzZUVuYWJs
ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQpOwotICAg
IGJpbmRNZXRob2QoInNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQpOwotICAgIGJpbmRN
ZXRob2QoInNldE1pbmltdW1UaW1lckludGVydmFsIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRNaW5pbXVtVGltZXJJbnRlcnZhbCk7Ci0gICAgYmluZE1ldGhvZCgic2V0TW9ja0RldmljZU9y
aWVudGF0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24pOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlvbkVycm9yIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcik7Ci0gICAgYmluZE1ldGhvZCgi
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQYWdlVmlzaWJpbGl0
eSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkpOwotICAgIGJpbmRN
ZXRob2QoInNldFBsdWdpbnNFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVn
aW5zRW5hYmxlZCk7Ci0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICBiaW5kTWV0aG9kKCJz
ZXRQb2ludGVyTG9ja1dpbGxGYWlsQXN5bmNocm9ub3VzbHkiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hyb25vdXNseSk7Ci0gICAgYmluZE1ldGhv
ZCgic2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KTsKLSNlbmRpZgotICAg
IGJpbmRNZXRob2QoInNldFBvcHVwQmxvY2tpbmdFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0UE9TSVhM
b2NhbGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKTsKLSAgICBiaW5k
TWV0aG9kKCJzZXRQcmludGluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpbnRpbmcp
OwotICAgIGJpbmRNZXRob2QoInNldFNjcm9sbGJhclBvbGljeSIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RU
cmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRUZXh0U3VicGl4
ZWxQb3NpdGlvbmluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dFN1YnBpeGVsUG9z
aXRpb25pbmcpOwotICAgIGJpbmRNZXRob2QoInNldEJhY2tpbmdTY2FsZUZhY3RvciIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0U3RvcFByb3Zp
c2lvbmFsRnJhbWVMb2FkcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcFByb3Zpc2lv
bmFsRnJhbWVMb2Fkcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMpOwotICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKTsKLSAgICBiaW5kTWV0
aG9kKCJzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRWYWx1ZUZvclVz
ZXIiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcik7Ci0gICAgYmluZE1l
dGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRX
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ls
bFNlbmRSZXF1ZXN0UmV0dXJuc051bGwpOwotICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVx
dWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ls
bFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRX
aW5kb3dJc0tleSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkpOwotICAg
IGJpbmRNZXRob2QoInNldFhTU0F1ZGl0b3JFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzaG93V2ViSW5zcGVj
dG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKTsKLSNpZiBFTkFC
TEUoTk9USUZJQ0FUSU9OUykKLSAgICBiaW5kTWV0aG9kKCJzaW11bGF0ZURlc2t0b3BOb3RpZmlj
YXRpb25DbGljayIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZp
Y2F0aW9uQ2xpY2spOwotI2VuZGlmCi0gICAgYmluZE1ldGhvZCgic3RhcnRTcGVlY2hJbnB1dCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dCk7Ci0gICAgYmluZE1ldGhv
ZCgidGVzdFJlcGFpbnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRlc3RSZXBhaW50KTsKLSAg
ICBiaW5kTWV0aG9kKCJ3YWl0Rm9yUG9saWN5RGVsZWdhdGUiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSk7Ci0gICAgYmluZE1ldGhvZCgid2FpdFVudGlsRG9u
ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVudGlsRG9uZSk7Ci0gICAgYmluZE1ldGhv
ZCgid2luZG93Q291bnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KTsKLSAg
ICBiaW5kTWV0aG9kKCJzZXRUZXh0RGlyZWN0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRUZXh0RGlyZWN0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRJbWFnZXNBbGxvd2VkIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRJbWFnZXNBbGxvd2VkKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRTY3JpcHRzQWxsb3dlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2NyaXB0c0FsbG93
ZWQpOwotICAgIGJpbmRNZXRob2QoInNldFN0b3JhZ2VBbGxvd2VkIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTdG9yYWdlQWxsb3dlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0UGx1Z2luc0Fs
bG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNBbGxvd2VkKTsKLQotICAg
IC8vIFRoZSBmb2xsb3dpbmcgYXJlIHN0dWJzLgotICAgIGJpbmRNZXRob2QoImFib3J0TW9kYWwi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwpOwotICAgIGJpbmRNZXRob2QoImFj
Y2Vzc1N0b3JlZFdlYlNjcmlwdE9iamVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWNjZXNz
U3RvcmVkV2ViU2NyaXB0T2JqZWN0KTsKLSAgICBiaW5kTWV0aG9kKCJhZGREaXNhbGxvd2VkVVJM
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKTsKLSAgICBiaW5kTWV0
aG9kKCJhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKTsKLSAgICBiaW5kTWV0
aG9kKCJjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldyk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBbGxBcHBsaWNh
dGlvbkNhY2hlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNh
Y2hlcyk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4pOwot
ICAgIGJpbmRNZXRob2QoImNsZWFyQmFja0ZvcndhcmRMaXN0IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEFzV2ViQXJj
aGl2ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzV2ViQXJjaGl2ZSk7Ci0gICAgYmlu
ZE1ldGhvZCgia2VlcFdlYkhpc3RvcnkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJI
aXN0b3J5KTsKLSAgICBiaW5kTWV0aG9kKCJvYmpDQ2xhc3NOYW1lT2YiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9iakNDbGFzc05hbWVPZik7Ci0gICAgYmluZE1ldGhvZCgic2V0QXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEpOwotICAgIGJpbmRNZXRob2QoInNldENhbGxDbG9zZU9uV2ViVmll
d3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbGxDbG9zZU9uV2ViVmlld3MpOwotICAg
IGJpbmRNZXRob2QoInNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIpOwotICAgIGJpbmRNZXRob2Qo
InNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldFVzZURhc2hib2FyZENv
bXBhdGliaWxpdHlNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRD
b21wYXRpYmlsaXR5TW9kZSk7Ci0gICAgYmluZE1ldGhvZCgic3RvcmVXZWJTY3JpcHRPYmplY3Qi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0b3JlV2ViU2NyaXB0T2JqZWN0KTsKLSAgICBiaW5k
TWV0aG9kKCJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZSk7Ci0gICAgYmluZE1ldGhvZCgibG9jYWxTdG9yYWdlRGlza1Vz
YWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNh
Z2VGb3JPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk7Ci0gICAgYmlu
ZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoIm9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9i
c2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOwotICAgIGJpbmRNZXRob2QoInN5bmNM
b2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOwot
ICAgIGJpbmRNZXRob2QoInNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5s
b2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZCk7Ci0gICAgYmluZE1ldGhvZCgiZW5hYmxlRml4ZWRMYXlvdXRNb2Rl
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVGaXhlZExheW91dE1vZGUpOwotICAgIGJp
bmRNZXRob2QoInNldEZpeGVkTGF5b3V0U2l6ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
Rml4ZWRMYXlvdXRTaXplKTsKLSAgICBiaW5kTWV0aG9kKCJzZWxlY3Rpb25Bc01hcmt1cCIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2VsZWN0aW9uQXNNYXJrdXApOwotICAgIGJpbmRNZXRob2Qo
InNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKTsKLSAgICBiaW5kTWV0aG9kKCJ0ZXh0U3Vy
cm91bmRpbmdOb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjp0ZXh0U3Vycm91bmRpbmdOb2Rl
KTsKLQotICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gdW5rbm93
biBtZXRob2QgaXMgaW52b2tlZC4KLSAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkxheW91dFRlc3RD
b250cm9sbGVyOjpmYWxsYmFja01ldGhvZCk7Ci0KLSAgICAvLyBTaGFyZWQgcHJvcGVydGllcy4K
LSAgICAvLyBnbG9iYWxGbGFnIGlzIHVzZWQgYnkgYSBudW1iZXIgb2YgbGF5b3V0IHRlc3RzIGlu
Ci0gICAgLy8gTGF5b3V0VGVzdHNcaHR0cFx0ZXN0c1xzZWN1cml0eVxkYXRhVVJMLgotICAgIGJp
bmRQcm9wZXJ0eSgiZ2xvYmFsRmxhZyIsICZtX2dsb2JhbEZsYWcpOwotICAgIC8vIHdlYkhpc3Rv
cnlJdGVtQ291bnQgaXMgdXNlZCBieSB0ZXN0cyBpbiBMYXlvdXRUZXN0c1xodHRwXHRlc3RzXGhp
c3RvcnkKLSAgICBiaW5kUHJvcGVydHkoIndlYkhpc3RvcnlJdGVtQ291bnQiLCAmbV93ZWJIaXN0
b3J5SXRlbUNvdW50KTsKLSAgICBiaW5kUHJvcGVydHkoInRpdGxlVGV4dERpcmVjdGlvbiIsICZt
X3RpdGxlVGV4dERpcmVjdGlvbik7Ci0gICAgYmluZFByb3BlcnR5KCJwbGF0Zm9ybU5hbWUiLCAm
bV9wbGF0Zm9ybU5hbWUpOwotICAgIGJpbmRQcm9wZXJ0eSgiaW50ZXJjZXB0UG9zdE1lc3NhZ2Ui
LCAmbV9pbnRlcmNlcHRQb3N0TWVzc2FnZSk7Ci0gICAgYmluZFByb3BlcnR5KCJ3b3JrZXJUaHJl
YWRDb3VudCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQpOwotICAg
IGJpbmRNZXRob2QoInNlbmRXZWJJbnRlbnRSZXNwb25zZSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2VuZFdlYkludGVudFJlc3BvbnNlKTsKLSAgICBiaW5kTWV0aG9kKCJkZWxpdmVyV2ViSW50
ZW50IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KTsKLX0KLQotTGF5
b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCi17Ci19Ci0KLUxheW91
dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6On5Xb3JrUXVldWUoKQotewotICAgIHJlc2V0KCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6cHJvY2Vzc1dvcmtT
b29uKCkKLXsKLSAgICBpZiAobV9jb250cm9sbGVyLT5tX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT50
b3BMb2FkaW5nRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3F1ZXVlLmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBXZSBkZWxheSBwcm9jZXNzaW5nIHF1ZXVlZCB3b3JrIHRv
IGF2b2lkIHJlY3Vyc2lvbiBwcm9ibGVtcy4KLSAgICAgICAgcG9zdFRhc2sobmV3IFdvcmtRdWV1
ZVRhc2sodGhpcykpOwotICAgIH0gZWxzZSBpZiAoIW1fY29udHJvbGxlci0+bV93YWl0VW50aWxE
b25lKQotICAgICAgICBtX2NvbnRyb2xsZXItPm1fc2hlbGwtPnRlc3RGaW5pc2hlZCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6OnByb2Nlc3NXb3JrKCkKLXsK
LSAgICBUZXN0U2hlbGwqIHNoZWxsID0gbV9jb250cm9sbGVyLT5tX3NoZWxsOwotICAgIC8vIFF1
aXQgZG9pbmcgd29yayBvbmNlIGEgbG9hZCBpcyBpbiBwcm9ncmVzcy4KLSAgICB3aGlsZSAoIW1f
cXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgc3RhcnRlZExvYWQgPSBtX3F1ZXVlLmZp
cnN0KCktPnJ1bihzaGVsbCk7Ci0gICAgICAgIGRlbGV0ZSBtX3F1ZXVlLnRha2VGaXJzdCgpOwot
ICAgICAgICBpZiAoc3RhcnRlZExvYWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCFtX2NvbnRyb2xsZXItPm1fd2FpdFVudGlsRG9uZSAmJiAhc2hlbGwtPndlYlZpZXdI
b3N0KCktPnRvcExvYWRpbmdGcmFtZSgpKQotICAgICAgICBzaGVsbC0+dGVzdEZpbmlzaGVkKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6cmVzZXQoKQotewot
ICAgIG1fZnJvemVuID0gZmFsc2U7Ci0gICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkKLSAg
ICAgICAgZGVsZXRlIG1fcXVldWUudGFrZUZpcnN0KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OldvcmtRdWV1ZTo6YWRkV29yayhXb3JrSXRlbSogd29yaykKLXsKLSAgICBpZiAo
bV9mcm96ZW4pIHsKLSAgICAgICAgZGVsZXRlIHdvcms7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9xdWV1ZS5hcHBlbmQod29yayk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmR1bXBBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBBc1RleHQgPSB0cnVlOwotICAgIG1fZ2VuZXJhdGVQ
aXhlbFJlc3VsdHMgPSBmYWxzZTsKLQotICAgIC8vIE9wdGlvbmFsIHBhcmFtYXRlciwgZGVzY3Jp
YmluZyB3aGV0aGVyIGl0J3MgYWxsb3dlZCB0byBkdW1wIHBpeGVsIHJlc3VsdHMgaW4gZHVtcEFz
VGV4dCBtb2RlLgotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpCi0gICAgICAgIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSBhcmd1bWVudHNbMF0u
dmFsdWUuYm9vbFZhbHVlOwotCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBEYXRhYmFzZUNhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRG8gbm90aGluZzsgd2UgZG9u
J3QgdXNlIHRoaXMgZmxhZyBhbnl3aGVyZSBmb3Igbm93Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBF
ZGl0aW5nQ2FsbGJhY2tzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEJhY2tGb3J3YXJkTGlzdChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wQmFja0ZvcndhcmRM
aXN0ID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0g
dHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxi
YWNrID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcFVzZXJHZXN0
dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1
bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVU
eXBlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
bV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zID0gdHJ1ZTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENoaWxk
RnJhbWVzQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dCA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBXaW5kb3dTdGF0dXND
aGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFRpdGxlQ2hhbmdlcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wVGl0
bGVDaGFuZ2VzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcFBlcm1pc3Np
b25DbGllbnRDYWxsYmFja3MgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ3JlYXRlVmlldyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wQ3JlYXRlVmlldyA9IHRy
dWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFjY2VwdHNFZGl0aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFy
Z3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9hY2NlcHRzRWRpdGluZyA9IGFyZ3VtZW50
c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRVbnRpbERvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmICghd2Via2l0X3N1cHBvcnQ6OkJlaW5n
RGVidWdnZWQoKSkKLSAgICAgICAgcG9zdERlbGF5ZWRUYXNrKG5ldyBOb3RpZnlEb25lVGltZWRP
dXRUYXNrKHRoaXMpLCBtX3NoZWxsLT5sYXlvdXRUZXN0VGltZW91dCgpKTsKLSAgICBtX3dhaXRV
bnRpbERvbmUgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBUZXN0IGRpZG4ndCB0aW1lb3V0LiBLaWxsIHRoZSB0
aW1lb3V0IHRpbWVyLgotICAgIG1fdGFza0xpc3QucmV2b2tlQWxsKCk7Ci0KLSAgICBjb21wbGV0
ZU5vdGlmeURvbmUoZmFsc2UpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1RpbWVvdXQpCi17
Ci0gICAgaWYgKG1fd2FpdFVudGlsRG9uZSAmJiAhbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+dG9w
TG9hZGluZ0ZyYW1lKCkgJiYgbV93b3JrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChp
c1RpbWVvdXQpCi0gICAgICAgICAgICBtX3NoZWxsLT50ZXN0VGltZWRPdXQoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9zaGVsbC0+dGVzdEZpbmlzaGVkKCk7Ci0gICAgfQotICAgIG1f
d2FpdFVudGlsRG9uZSA9IGZhbHNlOwotfQotCi1jbGFzcyBXb3JrSXRlbUJhY2tGb3J3YXJkIDog
cHVibGljIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgV29y
a0l0ZW1CYWNrRm9yd2FyZChpbnQgZGlzdGFuY2UpIDogbV9kaXN0YW5jZShkaXN0YW5jZSkgeyB9
Ci0gICAgYm9vbCBydW4oVGVzdFNoZWxsKiBzaGVsbCkKLSAgICB7Ci0gICAgICAgIHNoZWxsLT5n
b1RvT2Zmc2V0KG1fZGlzdGFuY2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IERp
ZCBpdCByZWFsbHkgc3RhcnQgYSBuYXZpZ2F0aW9uPwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBp
bnQgbV9kaXN0YW5jZTsKLX07Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlQmFj
a05hdmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzTnVtYmVyKCkpCi0gICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtQmFj
a0ZvcndhcmQoLWFyZ3VtZW50c1swXS50b0ludDMyKCkpKTsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlv
bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIo
KSkKLSAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1CYWNrRm9yd2FyZChh
cmd1bWVudHNbMF0udG9JbnQzMigpKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLWNs
YXNzIFdvcmtJdGVtUmVsb2FkIDogcHVibGljIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrSXRl
bSB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBydW4oVGVzdFNoZWxsKiBzaGVsbCkKLSAgICB7Ci0gICAg
ICAgIHNoZWxsLT5yZWxvYWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVSZWxvYWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3
IFdvcmtJdGVtUmVsb2FkKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotY2xhc3MgV29y
a0l0ZW1Mb2FkaW5nU2NyaXB0IDogcHVibGljIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrSXRl
bSB7Ci1wdWJsaWM6Ci0gICAgV29ya0l0ZW1Mb2FkaW5nU2NyaXB0KGNvbnN0IHN0cmluZyYgc2Ny
aXB0KSA6IG1fc2NyaXB0KHNjcmlwdCkgeyB9Ci0gICAgYm9vbCBydW4oVGVzdFNoZWxsKiBzaGVs
bCkKLSAgICB7Ci0gICAgICAgIHNoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5leGVjdXRl
U2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KG1fc2NyaXB0KSkpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IERpZCBpdCByZWFsbHkgc3RhcnQgYSBuYXZp
Z2F0aW9uPwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdHJpbmcgbV9zY3JpcHQ7Ci19OwotCi1j
bGFzcyBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OldvcmtJdGVtIHsKLXB1YmxpYzoKLSAgICBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQoY29u
c3Qgc3RyaW5nJiBzY3JpcHQpIDogbV9zY3JpcHQoc2NyaXB0KSB7IH0KLSAgICBib29sIHJ1bihU
ZXN0U2hlbGwqIHNoZWxsKQotICAgIHsKLSAgICAgICAgc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZy
YW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgo
bV9zY3JpcHQpKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RyaW5nIG1fc2NyaXB0OwotfTsKLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVl
dWVMb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50
c1swXS5pc1N0cmluZygpKQotICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRl
bUxvYWRpbmdTY3JpcHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVOb25Mb2FkaW5n
U2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0
cmluZygpKQotICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbU5vbkxvYWRp
bmdTY3JpcHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotY2xhc3MgV29ya0l0ZW1Mb2FkIDogcHVibGljIExheW91dFRlc3RDb250cm9sbGVy
OjpXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgV29ya0l0ZW1Mb2FkKGNvbnN0IFdlYlVSTCYgdXJs
LCBjb25zdCBXZWJTdHJpbmcmIHRhcmdldCkKLSAgICAgICAgOiBtX3VybCh1cmwpCi0gICAgICAg
ICwgbV90YXJnZXQodGFyZ2V0KSB7IH0KLSAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNoZWxsKQot
ICAgIHsKLSAgICAgICAgc2hlbGwtPndlYlZpZXdIb3N0KCktPmxvYWRVUkxGb3JGcmFtZShtX3Vy
bCwgbV90YXJnZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IERpZCBpdCByZWFs
bHkgc3RhcnQgYSBuYXZpZ2F0aW9uPwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXZWJVUkwgbV91
cmw7Ci0gICAgV2ViU3RyaW5nIG1fdGFyZ2V0OwotfTsKLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cXVldWVMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50
c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgV2ViVVJMOjpy
ZXNvbHZlKCkgYW5kIGF2b2lkIEdVUkwuCi0gICAgICAgIEdVUkwgY3VycmVudFVSTCA9IG1fc2hl
bGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkudXJsKCk7Ci0gICAgICAgIEdV
UkwgZnVsbFVSTCA9IGN1cnJlbnRVUkwuUmVzb2x2ZShhcmd1bWVudHNbMF0udG9TdHJpbmcoKSk7
Ci0KLSAgICAgICAgc3RyaW5nIHRhcmdldCA9ICIiOwotICAgICAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICB0YXJnZXQg
PSBhcmd1bWVudHNbMV0udG9TdHJpbmcoKTsKLQotICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3Jr
KG5ldyBXb3JrSXRlbUxvYWQoZnVsbFVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCh0YXJnZXQpKSk7
Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi1jbGFzcyBXb3JrSXRlbUxvYWRI
VE1MU3RyaW5nIDogcHVibGljIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrSXRlbSAgewotcHVi
bGljOgotICAgIFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGh0bWws
IGNvbnN0IFdlYlVSTCYgYmFzZVVSTCkKLSAgICAgICAgOiBtX2h0bWwoaHRtbCkKLSAgICAgICAg
LCBtX2Jhc2VVUkwoYmFzZVVSTCkgeyB9Ci0gICAgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyhjb25z
dCBzdGQ6OnN0cmluZyYgaHRtbCwgY29uc3QgV2ViVVJMJiBiYXNlVVJMLCBjb25zdCBXZWJVUkwm
IHVucmVhY2hhYmxlVVJMKQotICAgICAgICA6IG1faHRtbChodG1sKQotICAgICAgICAsIG1fYmFz
ZVVSTChiYXNlVVJMKQotICAgICAgICAsIG1fdW5yZWFjaGFibGVVUkwodW5yZWFjaGFibGVVUkwp
IHsgfQotICAgIGJvb2wgcnVuKFRlc3RTaGVsbCogc2hlbGwpCi0gICAgewotICAgICAgICBzaGVs
bC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bG9hZEhUTUxTdHJpbmcoCi0gICAgICAgICAgICBX
ZWJLaXQ6OldlYkRhdGEobV9odG1sLmRhdGEoKSwgbV9odG1sLmxlbmd0aCgpKSwgbV9iYXNlVVJM
LCBtX3VucmVhY2hhYmxlVVJMKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIHN0ZDo6c3RyaW5nIG1faHRtbDsKLSAgICBXZWJVUkwgbV9iYXNlVVJMOwotICAg
IFdlYlVSTCBtX3VucmVhY2hhYmxlVVJMOwotfTsKLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBzdHJpbmcgaHRtbCA9IGFyZ3VtZW50
c1swXS50b1N0cmluZygpOwotICAgICAgICBXZWJVUkwgYmFzZVVSTChHVVJMKCIiKSk7Ci0gICAg
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkK
LSAgICAgICAgICAgIGJhc2VVUkwgPSBXZWJVUkwoR1VSTChhcmd1bWVudHNbMV0udG9TdHJpbmco
KSkpOwotICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzJdLmlz
U3RyaW5nKCkpCi0gICAgICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUxv
YWRIVE1MU3RyaW5nKGh0bWwsIGJhc2VVUkwsIFdlYlVSTChHVVJMKGFyZ3VtZW50c1syXS50b1N0
cmluZygpKSkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV93b3JrUXVldWUuYWRkV29y
ayhuZXcgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyhodG1sLCBiYXNlVVJMKSk7Ci0gICAgfQotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYmpD
SWRlbnRpdHlJc0VxdWFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyKSB7Ci0gICAgICAg
IC8vIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIHRvIHJldHVybiBhbiBlcnJvci4KLSAgICAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVzdWx0
LT5zZXQoYXJndW1lbnRzWzBdLmlzRXF1YWwoYXJndW1lbnRzWzFdKSk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKLXsKLSAgICBpZiAobV9zaGVsbCkgewotICAgICAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFpvb21MZXZlbChmYWxzZSwgMCk7Ci0gICAgICAgIG1f
c2hlbGwtPndlYlZpZXcoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKHRydWUpOwot
I2lmICFPUyhEQVJXSU4pICYmICFPUyhXSU5ET1dTKSAvLyBBY3R1YWxseSwgVE9PTEtJVF9HVEsK
LSAgICAgICAgLy8gKENvbnN0YW50cyBjb3BpZWQgYmVjYXVzZSB3ZSBjYW4ndCBkZXBlbmQgb24g
dGhlIGhlYWRlciB0aGF0IGRlZmluZWQKLSAgICAgICAgLy8gdGhlbSBmcm9tIHRoaXMgZmlsZS4p
Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0U2VsZWN0aW9uQ29sb3JzKDB4ZmYxZTkw
ZmYsIDB4ZmYwMDAwMDAsIDB4ZmZjOGM4YzgsIDB4ZmYzMjMyMzIpOwotI2VuZGlmCi0gICAgICAg
IG1fc2hlbGwtPndlYlZpZXcoKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKLSAgICAgICAgV2Vi
S2l0OjpXZWJTaXplIGVtcHR5OwotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmRpc2FibGVB
dXRvUmVzaXplTW9kZSgpOwotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldERldmljZVNj
YWxlRmFjdG9yKDEpOwotICAgIH0KLSAgICBtX2R1bXBBc1RleHQgPSBmYWxzZTsKLSAgICBtX2R1
bXBBc0F1ZGlvID0gZmFsc2U7Ci0gICAgbV9kdW1wQ3JlYXRlVmlldyA9IGZhbHNlOwotICAgIG1f
ZHVtcEVkaXRpbmdDYWxsYmFja3MgPSBmYWxzZTsKLSAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFj
a3MgPSBmYWxzZTsKLSAgICBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2sgPSBmYWxzZTsK
LSAgICBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAg
bV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAgbV9kdW1wUmVzb3VyY2VS
ZXNwb25zZU1JTUVUeXBlcyA9IGZhbHNlOwotICAgIG1fZHVtcEJhY2tGb3J3YXJkTGlzdCA9IGZh
bHNlOwotICAgIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMgPSBmYWxzZTsKLSAgICBt
X2R1bXBDaGlsZEZyYW1lc0FzVGV4dCA9IGZhbHNlOwotICAgIG1fZHVtcFdpbmRvd1N0YXR1c0No
YW5nZXMgPSBmYWxzZTsKLSAgICBtX2R1bXBTZWxlY3Rpb25SZWN0ID0gZmFsc2U7Ci0gICAgbV9k
dW1wVGl0bGVDaGFuZ2VzID0gZmFsc2U7Ci0gICAgbV9kdW1wUGVybWlzc2lvbkNsaWVudENhbGxi
YWNrcyA9IGZhbHNlOwotICAgIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSB0cnVlOwotICAgIG1f
YWNjZXB0c0VkaXRpbmcgPSB0cnVlOwotICAgIG1fd2FpdFVudGlsRG9uZSA9IGZhbHNlOwotICAg
IG1fY2FuT3BlbldpbmRvd3MgPSBmYWxzZTsKLSAgICBtX3Rlc3RSZXBhaW50ID0gZmFsc2U7Ci0g
ICAgbV9zd2VlcEhvcml6b250YWxseSA9IGZhbHNlOwotICAgIG1fc2hvdWxkQWRkRmlsZVRvUGFz
dGVib2FyZCA9IGZhbHNlOwotICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IGZhbHNl
OwotICAgIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCA9IHRydWU7Ci0gICAgbV9nbG9iYWxG
bGFnLnNldChmYWxzZSk7Ci0gICAgbV93ZWJIaXN0b3J5SXRlbUNvdW50LnNldCgwKTsKLSAgICBt
X3RpdGxlVGV4dERpcmVjdGlvbi5zZXQoImx0ciIpOwotICAgIG1fcGxhdGZvcm1OYW1lLnNldCgi
Y2hyb21pdW0iKTsKLSAgICBtX2ludGVyY2VwdFBvc3RNZXNzYWdlLnNldChmYWxzZSk7Ci0gICAg
bV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gV2ViVVJMKCk7Ci0gICAgbV9pc1ByaW50aW5nID0g
ZmFsc2U7Ci0KLSAgICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNjZXB0QWxsQ29va2llcyhmYWxzZSk7
Ci0gICAgV2ViU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygpOwot
Ci0gICAgLy8gUmVzZXQgdGhlIGRlZmF1bHQgcXVvdGEgZm9yIGVhY2ggb3JpZ2luIHRvIDVNQgot
ICAgIHdlYmtpdF9zdXBwb3J0OjpTZXREYXRhYmFzZVF1b3RhKDUgKiAxMDI0ICogMTAyNCk7Ci0K
LSAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7Ci0KLSAgICBpZiAobV9jbG9zZVJlbWFpbmluZ1dp
bmRvd3MpCi0gICAgICAgIG1fc2hlbGwtPmNsb3NlUmVtYWluaW5nV2luZG93cygpOwotICAgIGVs
c2UKLSAgICAgICAgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MgPSB0cnVlOwotICAgIG1fd29ya1F1
ZXVlLnJlc2V0KCk7Ci0gICAgbV90YXNrTGlzdC5yZXZva2VBbGwoKTsKLSAgICBtX3Nob3VsZFN0
YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkID0gZmFsc2U7Ci0gICAgbV9oYXNDdXN0
b21GdWxsU2NyZWVuQmVoYXZpb3IgPSBmYWxzZTsKLSNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9J
RCkKLSAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGZhbHNlKTsK
LSNlbmRpZgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhdGlvbkNoYW5nZURv
bmUoKQotewotICAgIG1fd2ViSGlzdG9yeUl0ZW1Db3VudC5zZXQobV9zaGVsbC0+bmF2aWdhdGlv
bkVudHJ5Q291bnQoKSk7Ci0KLSAgICAvLyBObyBtb3JlIG5ldyB3b3JrIGFmdGVyIHRoZSBmaXJz
dCBjb21wbGV0ZSBsb2FkLgotICAgIG1fd29ya1F1ZXVlLnNldEZyb3plbih0cnVlKTsKLQotICAg
IGlmICghbV93YWl0VW50aWxEb25lKQotICAgICAgICBtX3dvcmtRdWV1ZS5wcm9jZXNzV29ya1Nv
b24oKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cG9saWN5RGVsZWdhdGVEb25l
KCkKLXsKLSAgICBBU1NFUlQobV93YWl0VW50aWxEb25lKTsKLSAgICBtX3NoZWxsLT50ZXN0Rmlu
aXNoZWQoKTsKLSAgICBtX3dhaXRVbnRpbERvbmUgPSBmYWxzZTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fY2FuT3BlbldpbmRvd3MgPSB0cnVlOwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNl
dFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3
aW5kb3dDb3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXQoc3RhdGljX2Nhc3Q8aW50PihtX3NoZWxsLT53aW5kb3dDb3VudCgp
KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENsb3NlUmVtYWluaW5nV2lu
ZG93c1doZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVu
dHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzID0gYXJndW1l
bnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpID4gMCkKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNldEFjY2VwdEFs
bENvb2tpZXMoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pKTsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdz
KCktPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNwcFZhcmlhbnRUb0Jvb2wo
YXJndW1lbnRzWzBdKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fc2hlbGwtPnNob3dEZXZUb29scygpOwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9z
ZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBtX3NoZWxsLT5jbG9zZURldlRvb2xzKCk7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAg
ICAgICAgbV9zaGVsbC0+c2V0Rm9jdXMobV9zaGVsbC0+d2ViVmlldygpLCBhcmd1bWVudHNbMF0u
dmFsdWUuYm9vbFZhbHVlKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAgICAgICBtX3No
ZWxsLT5wcmVmZXJlbmNlcygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uID0gYXJndW1lbnRzWzBd
LnZhbHVlLmJvb2xWYWx1ZSA/IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA6IFdlYlVSTCgpOwot
ICAgICAgICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1sw
XS5pc1N0cmluZygpKSB7Ci0gICAgICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHdlYmtp
dF9zdXBwb3J0OjpMb2NhbEZpbGVUb0RhdGFVUkwoCi0gICAgICAgICAgICB3ZWJraXRfc3VwcG9y
dDo6UmV3cml0ZUxheW91dFRlc3RzVVJMKGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci0gICAg
ICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBtX3Vz
ZXJTdHlsZVNoZWV0TG9jYXRpb247Ci0gICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMo
KTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAgICAgICBtX3NoZWxs
LT5wcmVmZXJlbmNlcygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCA9IGFyZ3VtZW50c1sw
XS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsK
LSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV4ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPD0gMCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJpbmco
KTsKLSAgICBzdGQ6OnN0cmluZyB2YWx1ZSgiIik7Ci0gICAgLy8gSWdub3JlIHRoZSBzZWNvbmQg
cGFyYW1ldGVyICh3aGljaCBpcyB1c2VySW50ZXJmYWNlKQotICAgIC8vIHNpbmNlIHRoaXMgY29t
bWFuZCBlbXVsYXRlcyBhIG1hbnVhbCBhY3Rpb24uCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
Pj0gMyAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkKLSAgICAgICAgdmFsdWUgPSBhcmd1bWVu
dHNbMl0udG9TdHJpbmcoKTsKLQotICAgIC8vIE5vdGU6IHdlYmtpdCdzIHZlcnNpb24gZG9lcyBu
b3QgcmV0dXJuIHRoZSBib29sZWFuLCBzbyBuZWl0aGVyIGRvIHdlLgotICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVDb21tYW5kKFdlYlN0cmluZzo6ZnJvbVVU
RjgoY29tbWFuZCksIFdlYlN0cmluZzo6ZnJvbVVURjgodmFsdWUpKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgY29t
bWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgIGJvb2wgcnYgPSBtX3NoZWxsLT53
ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5pc0NvbW1hbmRFbmFibGVkKFdlYlN0cmluZzo6ZnJv
bVVURjgoY29tbWFuZCkpOwotICAgIHJlc3VsdC0+c2V0KHJ2KTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIGJvb2wgYmxv
Y2tQb3B1cHMgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7Ci0gICAgICAgIG1fc2hlbGwtPnBy
ZWZlcmVuY2VzKCktPmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkgPSAhYmxv
Y2tQb3B1cHM7Ci0gICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEltYWdlc0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRz
WzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRJbWFn
ZXNBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcmlwdHNBbGxvd2VkKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAg
ICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0U2NyaXB0c0FsbG93ZWQoYXJndW1l
bnRzWzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZUFsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53
ZWJQZXJtaXNzaW9ucygpLT5zZXRTdG9yYWdlQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFu
KCkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRQbHVnaW5zQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBh
cmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlBlcm1pc3Npb25zKCkt
PnNldFBsdWdpbnNBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hi
b2FyZENvbXBhdGliaWxpdHlNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICAvLyBXZSBoYXZlIG5vIG5lZWQgdG8gc3VwcG9ydCBEYXNoYm9hcmQg
Q29tcGF0aWJpbGl0eSBNb2RlIChtYWMtb25seSkKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
cHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRp
bmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCi0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hl
IHF1b3Rhcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1
cHBvcnQgZ2V0dGluZyBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBsaWNhdGlvbiBjYWNoZXMuCi0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBn
ZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4u
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFNjcm9sbGJhclBvbGljeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudC4KLSAgICAvLyBDdXJyZW50bHkgb25s
eSBoYXMgYSBub24tbnVsbCBpbXBsZW1lbnRhdGlvbiBvbiBRVC4KLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVs
ZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9v
bCgpKSB7Ci0gICAgICAgIGJvb2wgZW5hYmxlID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1
ZTsKLSAgICAgICAgYm9vbCBwZXJtaXNzaXZlID0gZmFsc2U7Ci0gICAgICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMSAmJiBhcmd1bWVudHNbMV0uaXNCb29sKCkpCi0gICAgICAgICAgICBwZXJt
aXNzaXZlID0gYXJndW1lbnRzWzFdLnZhbHVlLmJvb2xWYWx1ZTsKLSAgICAgICAgbV9zaGVsbC0+
d2ViVmlld0hvc3QoKS0+c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlLCBwZXJtaXNzaXZl
KTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+d2FpdEZv
clBvbGljeURlbGVnYXRlKCk7Ci0gICAgbV93YWl0VW50aWxEb25lID0gdHJ1ZTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNl
bmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgc3RyaW5nIGhlYWRlciA9IGFyZ3VtZW50
c1swXS50b1N0cmluZygpOwotICAgICAgICBpZiAoIWhlYWRlci5lbXB0eSgpKQotICAgICAgICAg
ICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+YWRkQ2xlYXJIZWFkZXIoU3RyaW5nOjpmcm9tVVRG
OChoZWFkZXIuY19zdHIoKSkpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxP
blJlZGlyZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c0Jvb2woKSkKLSAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0QmxvY2tSZWRpcmVj
dHMoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jv
b2woKSkKLSAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0UmVxdWVzdFJldHVybk51
bGwoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RyaW5nIHVy
bCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKCF1
cmwuZmluZCgiL3RtcC8iKSkgewotICAgICAgICAvLyBXZSB3YW50IGEgdGVtcCBmaWxlLgotICAg
ICAgICBjb25zdCB1bnNpZ25lZCB0ZW1wUHJlZml4TGVuZ3RoID0gNTsKLSAgICAgICAgc2l6ZV90
IGJ1ZmZlclNpemUgPSBNQVhfUEFUSDsKLSAgICAgICAgT3duQXJyYXlQdHI8V0NIQVI+IHRlbXBQ
YXRoID0gYWRvcHRBcnJheVB0cihuZXcgV0NIQVJbYnVmZmVyU2l6ZV0pOwotICAgICAgICBEV09S
RCB0ZW1wTGVuZ3RoID0gOjpHZXRUZW1wUGF0aFcoYnVmZmVyU2l6ZSwgdGVtcFBhdGguZ2V0KCkp
OwotICAgICAgICBpZiAodGVtcExlbmd0aCArIHVybC5sZW5ndGgoKSAtIHRlbXBQcmVmaXhMZW5n
dGggKyAxID4gYnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgYnVmZmVyU2l6ZSA9IHRlbXBMZW5n
dGggKyB1cmwubGVuZ3RoKCkgLSB0ZW1wUHJlZml4TGVuZ3RoICsgMTsKLSAgICAgICAgICAgIHRl
bXBQYXRoID0gYWRvcHRBcnJheVB0cihuZXcgV0NIQVJbYnVmZmVyU2l6ZV0pOwotICAgICAgICAg
ICAgdGVtcExlbmd0aCA9IEdldFRlbXBQYXRoVyhidWZmZXJTaXplLCB0ZW1wUGF0aC5nZXQoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQodGVtcExlbmd0aCA8IGJ1ZmZlclNpemUpOwotICAgICAgICB9
Ci0gICAgICAgIHN0cmluZyByZXN1bHRQYXRoKFdlYlN0cmluZyh0ZW1wUGF0aC5nZXQoKSwgdGVt
cExlbmd0aCkudXRmOCgpKTsKLSAgICAgICAgcmVzdWx0UGF0aC5hcHBlbmQodXJsLnN1YnN0cih0
ZW1wUHJlZml4TGVuZ3RoKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0KHJlc3VsdFBhdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBTb21lIGxheW91dCB0ZXN0cyB1
c2UgZmlsZTovLy8vIHdoaWNoIHdlIHJlc29sdmUgYXMgYSBVTkMgcGF0aC4gTm9ybWFsaXplCi0g
ICAgLy8gdGhlbSB0byBqdXN0IGZpbGU6Ly8vLgotICAgIHN0cmluZyBsb3dlclVybCA9IHVybDsK
LSAgICB0cmFuc2Zvcm0obG93ZXJVcmwuYmVnaW4oKSwgbG93ZXJVcmwuZW5kKCksIGxvd2VyVXJs
LmJlZ2luKCksIDo6dG9sb3dlcik7Ci0gICAgd2hpbGUgKCFsb3dlclVybC5maW5kKCJmaWxlOi8v
Ly8iKSkgewotICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKDAsIDgpICsgdXJsLnN1YnN0cig5KTsK
LSAgICAgICAgbG93ZXJVcmwgPSBsb3dlclVybC5zdWJzdHIoMCwgOCkgKyBsb3dlclVybC5zdWJz
dHIoOSk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0KHdlYmtpdF9zdXBwb3J0OjpSZXdyaXRlTGF5
b3V0VGVzdHNVUkwodXJsKS5zcGVjKCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRGaWxlVG9QYXN0ZWJvYXJkT25EcmFnKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBtX3Nob3VsZEFk
ZEZpbGVUb1Bhc3RlYm9hcmQgPSB0cnVlOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBtX3N0b3BQ
cm92aXNpb25hbEZyYW1lTG9hZHMgPSB0cnVlOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3
SG9zdCgpLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYXJndW1lbnRzWzBdLnZhbHVlLmJv
b2xWYWx1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3No
ZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGFy
Z3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBjb25z
dCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKLXsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3No
ZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghd2ViRnJhbWUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFdlYkFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSB3ZWJGcmFtZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpOwotICAgIGlmICghY29udHJvbGxlcikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJh
bWUtPmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKLSAgICBpZiAoZWxlbWVu
dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250cm9sbGVy
LT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBhbmltYXRpb25OYW1lLCB0aW1lKTsKLX0K
LQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29u
c3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCi17Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV9z
aGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIXdlYkZyYW1lKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVy
ID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9IHdlYkZy
YW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7Ci0gICAgaWYgKGVsZW1l
bnQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udHJvbGxl
ci0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgdGltZSk7Ci19
Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9y
RWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKLXsKLSAgICBXZWJGcmFt
ZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlmICgh
d2ViRnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVu
dCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7Ci0gICAg
aWYgKGVsZW1lbnQuaXNOdWxsKCkgfHwgIWVsZW1lbnQuaGFzVGFnTmFtZSgiaW5wdXQiKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViSW5wdXRFbGVtZW50IGlucHV0RWxlbWVudCA9
IGVsZW1lbnQudG88V2ViSW5wdXRFbGVtZW50PigpOwotICAgIHJldHVybiBpbnB1dEVsZW1lbnQu
YXV0b0NvbXBsZXRlKCk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKCkKLXsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53
ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghd2ViRnJhbWUpCi0gICAgICAgIHJldHVy
biAtMTsKLQotICAgIFdlYkFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJGcmFt
ZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgcmV0dXJuIGNvbnRyb2xsZXItPm51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucygpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgJiYgYXJndW1lbnRz
WzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgV2Vi
U3RyaW5nIGFuaW1hdGlvbk5hbWUgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBd
KTsKLSAgICAgICAgZG91YmxlIHRpbWUgPSBhcmd1bWVudHNbMV0udG9Eb3VibGUoKTsKLSAgICAg
ICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNb
Ml0pOwotICAgICAgICByZXN1bHQtPnNldChwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIg
JiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYg
YXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgV2ViU3RyaW5nIHByb3BlcnR5TmFt
ZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOwotICAgICAgICBkb3VibGUg
dGltZSA9IGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpOwotICAgICAgICBXZWJTdHJpbmcgZWxlbWVu
dElkID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0KHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChwcm9wZXJ0eU5hbWUs
IHRpbWUsIGVsZW1lbnRJZCkpOwotICAgIH0KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
cmVzdWx0LT5zZXQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFdlYlN0cmlu
ZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKTsKLSAgICBy
ZXN1bHQtPnNldChlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoZWxlbWVu
dElkKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuYWJsZUF1dG9SZXNpemVN
b2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCkgewotICAgICAgICByZXN1bHQtPnNl
dChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IG1pbldpZHRoID0gY3Bw
VmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzBdKTsKLSAgICBpbnQgbWluSGVpZ2h0ID0gY3BwVmFy
aWFudFRvSW50MzIoYXJndW1lbnRzWzFdKTsKLSAgICBXZWJLaXQ6OldlYlNpemUgbWluU2l6ZSht
aW5XaWR0aCwgbWluSGVpZ2h0KTsKLQotICAgIGludCBtYXhXaWR0aCA9IGNwcFZhcmlhbnRUb0lu
dDMyKGFyZ3VtZW50c1syXSk7Ci0gICAgaW50IG1heEhlaWdodCA9IGNwcFZhcmlhbnRUb0ludDMy
KGFyZ3VtZW50c1szXSk7Ci0gICAgV2ViS2l0OjpXZWJTaXplIG1heFNpemUobWF4V2lkdGgsIG1h
eEhlaWdodCk7Ci0KLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmVuYWJsZUF1dG9SZXNpemVNb2Rl
KG1pblNpemUsIG1heFNpemUpOwotICAgIHJlc3VsdC0+c2V0KHRydWUpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSAhPTIpIHsKLSAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGludCBuZXdXaWR0aCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3Vt
ZW50c1swXSk7Ci0gICAgaW50IG5ld0hlaWdodCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50
c1sxXSk7Ci0gICAgV2ViS2l0OjpXZWJTaXplIG5ld1NpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7
Ci0KLSAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRXaW5kb3dSZWN0KFdlYlJlY3QoMCwg
MCwgbmV3U2l6ZS53aWR0aCwgbmV3U2l6ZS5oZWlnaHQpKTsKLSAgICBtX3NoZWxsLT53ZWJWaWV3
KCktPmRpc2FibGVBdXRvUmVzaXplTW9kZSgpOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+cmVz
aXplKG5ld1NpemUpOwotICAgIHJlc3VsdC0+c2V0KHRydWUpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRl
c3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwpCisgICAgOiBtX3NoZWxsKHNoZWxsKQogewot
ICAgIHJlc3VsdC0+c2V0KG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
aG93V2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKLSAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkgPSBmYWxzZTsKLSAgICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7CisgICAgbV9zaGVs
bC0+c2hvd0RldlRvb2xzKCk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xvc2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7Ci0gICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSBXZWJLaXQgaWNvbiBkYXRhYmFz
ZS4KKyAgICBtX3NoZWxsLT5jbG9zZURldlRvb2xzKCk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmll
dyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5kaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KCkp
OwotfQotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgcmVz
dWx0LT5zZXQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgbV9zaGVsbC0+
bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPmdyYW50UGVybWlzc2lvbihjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzBdKSk7Ci0jZW5kaWYKLSAgICByZXN1bHQtPnNldCh0cnVlKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9u
Q2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewot
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKKyAgICAg
ICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IGFyZ3Vt
ZW50c1swXS52YWx1ZS5ib29sVmFsdWUgPyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gOiBXZWJV
UkwoKTsKKyAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwogICAgIH0KLSNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAg
IGlmIChtX3NoZWxsLT5ub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+c2ltdWxhdGVDbGljayhjcHBW
YXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSkpCi0gICAgICAgIHJlc3VsdC0+c2V0KHRy
dWUpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZv
cmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFy
Z3VtZW50c1swXS5pc0Jvb2woKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldERvbWFpblJlbGF4YXRpb25Gb3Ji
aWRkZW4oY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pLCBjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzFdKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERl
ZmVyTWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxKQot
ICAgICAgICBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQgPSBjcHBWYXJpYW50VG9Cb29sKGFy
Z3VtZW50c1swXSk7Ci19Ci0KLS8vCi0vLyBVbmltcGxlbWVudGVkIHN0dWJzCi0vLwotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNXZWJBcmNoaXZlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmly
c3RSZXNwb25kZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBTZWxlY3Rpb25SZWN0ID0g
dHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGlzcGxheShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIFdlYlZpZXdIb3N0KiBob3N0ID0gbV9zaGVsbC0+d2ViVmlld0hv
c3QoKTsKLSAgICBjb25zdCBXZWJLaXQ6OldlYlNpemUmIHNpemUgPSBtX3NoZWxsLT53ZWJWaWV3
KCktPnNpemUoKTsKLSAgICBXZWJSZWN0IHJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWln
aHQpOwotICAgIGhvc3QtPnVwZGF0ZVBhaW50UmVjdChyZWN0KTsKLSAgICBob3N0LT5wYWludElu
dmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgaG9zdC0+ZGlzcGxheVJlcGFpbnRNYXNrKCk7Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3Bs
YXlJbnZhbGlkYXRlZFJlZ2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIFdlYlZpZXdIb3N0KiBob3N0ID0gbV9zaGVsbC0+d2Vi
Vmlld0hvc3QoKTsKLSAgICBob3N0LT5wYWludEludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgaG9z
dC0+ZGlzcGxheVJlcGFpbnRNYXNrKCk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBtX3Rlc3RSZXBhaW50ID0gdHJ1ZTsKKyAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAg
ICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gd2Via2l0X3N1cHBvcnQ6OkxvY2FsRmlsZVRv
RGF0YVVSTCgKKyAgICAgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSZXdyaXRlTGF5b3V0VGVzdHNV
UkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5j
ZXMoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsK
KyAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOworICAgIH0KICAgICByZXN1bHQt
PnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVwYWludFN3ZWVw
SG9yaXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7
Ci0gICAgbV9zd2VlcEhvcml6b250YWxseSA9IHRydWU7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgeworICAgICAgICBtX3NoZWxsLT5wcmVm
ZXJlbmNlcygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCA9IGFyZ3VtZW50c1swXS52YWx1
ZS5ib29sVmFsdWU7CisgICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsKKyAgICB9
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJs
b2NraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQogeworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNb
MF0uaXNCb29sKCkpIHsKKyAgICAgICAgYm9vbCBibG9ja1BvcHVwcyA9IGFyZ3VtZW50c1swXS50
b0Jvb2xlYW4oKTsKKyAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+amF2YVNjcmlwdENh
bk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSA9ICFibG9ja1BvcHVwczsKKyAgICAgICAgbV9zaGVs
bC0+YXBwbHlQcmVmZXJlbmNlcygpOworICAgIH0KICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsICBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRJbWFnZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlz
c2lvbnMoKS0+c2V0SW1hZ2VzQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdG9y
ZVdlYlNjcmlwdE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2NyaXB0c0FsbG93
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
IHsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgp
KQorICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRTY3JpcHRzQWxsb3dlZChh
cmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9zaGVsbC0+
d2ViUGVybWlzc2lvbnMoKS0+c2V0U3RvcmFnZUFsbG93ZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVh
bigpKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6b2JqQ0NsYXNzTmFtZU9mKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5z
QWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogeworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNC
b29sKCkpCisgICAgICAgIG1fc2hlbGwtPndlYlBlcm1pc3Npb25zKCktPnNldFBsdWdpbnNBbGxv
d2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgeworICAgICAgICBib29sIGVu
YWJsZSA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CisgICAgICAgIGJvb2wgcGVybWlz
c2l2ZSA9IGZhbHNlOworICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDEgJiYgYXJndW1l
bnRzWzFdLmlzQm9vbCgpKQorICAgICAgICAgICAgcGVybWlzc2l2ZSA9IGFyZ3VtZW50c1sxXS52
YWx1ZS5ib29sVmFsdWU7CisgICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldEN1c3Rv
bVBvbGljeURlbGVnYXRlKGVuYWJsZSwgcGVybWlzc2l2ZSk7CisgICAgfQogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWxsQ2xvc2VP
bldlYlZpZXdzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogeworICAgIG1fc2hl
bGwtPndlYlZpZXdIb3N0KCktPndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOworICAgIG1fd2FpdFVu
dGlsRG9uZSA9IHRydWU7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQogeworICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPmxvYWRzSW1h
Z2VzQXV0b21hdGljYWxseSA9IGZhbHNlOworICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMo
KTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIApAQCAtMTMyOCw1OSArMjA4LDYgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICBXZWJWZWN0b3I8djg6Okxv
Y2FsPHY4OjpWYWx1ZT4gPiB2YWx1ZXM7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAm
JiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgewot
ICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1
bWVudHNbMV0pKTsKLSAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2lu
ZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAotICAgICAgICAvLyBza2V0Y2h5
LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KLSAgICAgICAgbV9zaGVs
bC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxLCAmdmFsdWVzKTsKLSAgICB9
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgLy8gU2luY2Ugb25seSBvbmUgc2NyaXB0IHdh
cyBhZGRlZCwgb25seSBvbmUgcmVzdWx0IGlzIGV4cGVjdGVkCi0gICAgaWYgKHZhbHVlcy5zaXpl
KCkgPT0gMSAmJiAhdmFsdWVzWzBdLklzRW1wdHkoKSkgewotICAgICAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiBzY3JpcHRWYWx1ZSA9IHZhbHVlc1swXTsKLSAgICAgICAgLy8gRklYTUU6IFRoZXJl
IGFyZSBtYW55IG1vcmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4KLSAgICAgICAgaWYgKHNj
cmlwdFZhbHVlLT5Jc1N0cmluZygpKSB7Ci0gICAgICAgICAgICB2ODo6U3RyaW5nOjpBc2NpaVZh
bHVlIGFzY2lpVjgoc2NyaXB0VmFsdWUpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXQoc3RkOjpz
dHJpbmcoKmFzY2lpVjgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNCb29s
ZWFuKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFuKCkt
PlZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkgewot
ICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc0ludDMyKCkpCi0gICAgICAgICAgICAgICAg
cmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvTnVtYmVy
KCktPlZhbHVlKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bGwoKSkK
LSAgICAgICAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgfQotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgJiYgYXJndW1l
bnRzWzFdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgV2ViU2NyaXB0U291cmNlIHNvdXJjZShjcHBW
YXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7Ci0gICAgICAgIC8vIFRoaXMgcmVsaWVz
IG9uIHRoZSBpZnJhbWUgZm9jdXNpbmcgaXRzZWxmIHdoZW4gaXQgbG9hZHMuIFRoaXMgaXMgYSBi
aXQKLSAgICAgICAgLy8gc2tldGNoeSwgYnV0IGl0IHNlZW1zIHRvIGJlIHdoYXQgb3RoZXIgdGVz
dHMgZG8uCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1
dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgJnNvdXJjZSwg
MSwgMSk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50
c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+c2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKAotICAgICAgICBhcmd1bWVudHNbMF0udG9JbnQzMigpLAot
ICAgICAgICBXZWJTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzFdKSkpOwotfQotCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKQEAgLTE0MTUsNjMgKzI0Miw2
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93UnVubmluZ09mSW5zZWN1cmVD
b250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAK
LS8vIE5lZWQgdGhlc2UgY29udmVyc2lvbnMgYmVjYXVzZSB0aGUgZm9ybWF0IG9mIHRoZSB2YWx1
ZSBmb3IgYm9vbGVhbnMKLS8vIG1heSB2YXJ5IC0gZm9yIGV4YW1wbGUsIG9uIG1hYyAiMSIgYW5k
ICIwIiBhcmUgdXNlZCBmb3IgYm9vbGVhbi4KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNw
cFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LmlzQm9vbCgpKQotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCk7Ci0gICAgaWYgKHZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7Ci0gICAgaWYg
KHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgc3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWUu
dG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJ0cnVlIiB8fCB2YWx1ZVN0
cmluZyA9PSAiMSIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHZhbHVl
U3RyaW5nID09ICJmYWxzZSIgfHwgdmFsdWVTdHJpbmcgPT0gIjAiKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZS4g
RXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZS4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludDMy
X3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNwcFZhcmlhbnRUb0ludDMyKGNvbnN0IENwcFZhcmlh
bnQmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4g
dmFsdWUudG9JbnQzMigpOwotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0
cmluZyBzdHJpbmdTb3VyY2UgPSB2YWx1ZS50b1N0cmluZygpOwotICAgICAgICBjb25zdCBjaGFy
KiBzb3VyY2UgPSBzdHJpbmdTb3VyY2UuZGF0YSgpOwotICAgICAgICBjaGFyKiBlbmQ7Ci0gICAg
ICAgIGxvbmcgbnVtYmVyID0gc3RydG9sKHNvdXJjZSwgJmVuZCwgMTApOwotICAgICAgICBpZiAo
ZW5kID09IHNvdXJjZSArIHN0cmluZ1NvdXJjZS5sZW5ndGgoKSAmJiBudW1iZXIgPj0gbnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1pbigpICYmIG51bWJlciA8PSBudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWF4KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obnVt
YmVyKTsKLSAgICB9Ci0gICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUgZm9yIHBy
ZWZlcmVuY2UuIEV4cGVjdGVkIGludGVnZXIgdmFsdWUuIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LVdlYlN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGNv
bnN0IENwcFZhcmlhbnQmIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNTdHJpbmcoKSkgewot
ICAgICAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4g
RXhwZWN0ZWQgc3RyaW5nIHZhbHVlLiIpOwotICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0g
ICAgfQotICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlLnRvU3RyaW5nKCkpOwot
fQotCi1WZWN0b3I8V2ViU3RyaW5nPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRv
V2ViU3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZhbGlkIHZhbHVl
IGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBvYmplY3QgdmFsdWUuIik7Ci0gICAgICAgIHJldHVy
biBWZWN0b3I8V2ViU3RyaW5nPigpOwotICAgIH0KLSAgICBWZWN0b3I8V2ViU3RyaW5nPiByZXN1
bHRWZWN0b3I7Ci0gICAgVmVjdG9yPHN0cmluZz4gc3RyaW5nVmVjdG9yID0gdmFsdWUudG9TdHJp
bmdWZWN0b3IoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ1ZlY3Rvci5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChXZWJTdHJpbmc6OmZyb21VVEY4
KHN0cmluZ1ZlY3RvcltpXS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdFZlY3RvcjsKLX0K
LQogLy8gU2V0cyBtYXAgYmFzZWQgb24gc2NyaXB0Rm9udFBhaXJzLCBhIGNvbGxhcHNlZCB2ZWN0
b3Igb2YgcGFpcnMgb2YgSVNPIDE1OTI0CiAvLyBmb3VyLWxldHRlciBzY3JpcHQgY29kZSBhbmQg
Zm9udCBzdWNoIGFzOgogLy8geyAiQXJhYiIsICJNeSBBcmFiaWMgRm9udCIsICJHcmVrIiwgIk15
IEdyZWVrIEZvbnQiIH0KQEAgLTE1OTIsMjIzICszNjIsNjAgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLAogICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZmFsbGJhY2tNZXRob2QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHByaW50ZigiQ09OU09MRSBNRVNTQUdFOiBKYXZhU2Ny
aXB0IEVSUk9SOiB1bmtub3duIG1ldGhvZCBjYWxsZWQgb24gTGF5b3V0VGVzdENvbnRyb2xsZXJc
biIpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCB8fCAhYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpCi0gICAgICAgIHx8ICFhcmd1bWVudHNb
Ml0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzNdLmlzQm9vbCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXZWJLaXQ6OldlYlVSTCB1cmwoR1VSTChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkp
OwotICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViU2Vj
dXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAotICAgICAgICB1cmws
Ci0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAotICAgICAgICBj
cHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKLSAgICAgICAgYXJndW1lbnRzWzNd
LnRvQm9vbGVhbigpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFh
cmd1bWVudHNbMV0uaXNTdHJpbmcoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5n
KCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
S2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICBpZiAo
IXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlNlY3VyaXR5UG9saWN5
OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgKLSAgICAgICAgdXJsLAotICAgICAg
ICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwKLSAgICAgICAgY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCi0gICAgICAgIGFyZ3VtZW50c1szXS50b0Jvb2xl
YW4oKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2Vz
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgd2Via2l0X3N1cHBvcnQ6OkNsZWFyQWxsRGF0
YWJhc2VzKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVv
dGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoKGFyZ3VtZW50cy5zaXplKCkgPj0g
MSkgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpT
ZXREYXRhYmFzZVF1b3RhKGFyZ3VtZW50c1swXS50b0ludDMyKCkpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQT1NJWExvY2FsZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkp
Ci0gICAgICAgIHNldGxvY2FsZShMQ19BTEwsIGFyZ3VtZW50c1swXS50b1N0cmluZygpLmNfc3Ry
KCkpOwotfQotCi0vLyBQYXJzZSBhIHNpbmdsZSBhcmd1bWVudC4gVGhlIG1ldGhvZCByZXR1cm5z
IHRydWUgaWYgdGhlcmUgaXMgYW4gYXJndW1lbnQgdGhhdAotLy8gaXMgYSBudW1iZXIgb3IgaWYg
dGhlcmUgaXMgbm8gYXJndW1lbnQgYXQgYWxsLiBJdCByZXR1cm5zIGZhbHNlIG9ubHkgaWYgdGhl
cmUKLS8vIGlzIHNvbWUgYXJndW1lbnQgdGhhdCBpcyBub3QgYSBudW1iZXIuIFRoZSB2YWx1ZSBw
YXJhbWV0ZXIgaXMgZmlsbGVkIHdpdGggdGhlCi0vLyBwYXJzZWQgbnVtYmVyLCBvciBnaXZlbiB0
aGUgZGVmYXVsdCBpZiB0aGVyZSBpcyBubyBhcmd1bWVudC4KLXN0YXRpYyBib29sIHBhcnNlQ3Bw
QXJndW1lbnRJbnQzMihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgaW50IGFyZ0lu
ZGV4LCBpbnQqIHZhbHVlLCBpbnQgZGVmYXVsdFZhbHVlKQotewotICAgIGlmIChzdGF0aWNfY2Fz
dDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkpID4gYXJnSW5kZXgpIHsKLSAgICAgICAgaWYgKCFhcmd1
bWVudHNbYXJnSW5kZXhdLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICp2YWx1ZSA9IGFyZ3VtZW50c1thcmdJbmRleF0udG9JbnQzMigpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgKnZhbHVlID0gZGVmYXVsdFZhbHVlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZVBhZ2VTaXplUGFyYW1ldGVycyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmdPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIHBhZ2VXaWR0aEluUGl4ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50KiBwYWdlSGVpZ2h0SW5QaXhlbHMpCi17Ci0gICAgLy8gV2ViS2l0IGlzIHVzaW5n
IHRoZSB3aW5kb3cgd2lkdGgvaGVpZ2h0IG9mIER1bXBSZW5kZXJUcmVlIGFzIHRoZQotICAgIC8v
IGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhZ2Ugc2l6ZS4KLSAgICAvLyBGSVhNRTogc2hhcmUgdGhl
IGRlZmF1bHQgdmFsdWVzIHdpdGggb3RoZXIgcG9ydHMuCi0gICAgaW50IGFyZ0NvdW50ID0gc3Rh
dGljX2Nhc3Q8aW50Pihhcmd1bWVudHMuc2l6ZSgpKSAtIGFyZ09mZnNldDsKLSAgICBpZiAoYXJn
Q291bnQgJiYgYXJnQ291bnQgIT0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
cGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0LCBwYWdlV2lkdGhJblBp
eGVscywgODAwKQotICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywg
YXJnT2Zmc2V0ICsgMSwgcGFnZUhlaWdodEluUGl4ZWxzLCA2MDApKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlUGFnZU51bWJl
cihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgaW50IGFyZ09mZnNldCwgaW50KiBw
YWdlTnVtYmVyKQotewotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkp
ID4gYXJnT2Zmc2V0ICsgMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghcGFyc2VD
cHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0LCBwYWdlTnVtYmVyLCAwKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBw
YXJzZVBhZ2VOdW1iZXJTaXplTWFyZ2lucyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgaW50IGFyZ09mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCogcGFnZU51bWJlciwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG1hcmdpblRvcCwgaW50KiBtYXJnaW5SaWdo
dCwgaW50KiBtYXJnaW5Cb3R0b20sIGludCogbWFyZ2luTGVmdCkKLXsKLSAgICBpbnQgYXJnQ291
bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkpIC0gYXJnT2Zmc2V0OwotICAg
IGlmIChhcmdDb3VudCAmJiBhcmdDb3VudCAhPSA3KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQsIHBhZ2VO
dW1iZXIsIDApCi0gICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBh
cmdPZmZzZXQgKyAxLCB3aWR0aCwgMCkKLSAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1lbnRJbnQz
Mihhcmd1bWVudHMsIGFyZ09mZnNldCArIDIsIGhlaWdodCwgMCkKLSAgICAgICAgfHwgIXBhcnNl
Q3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCArIDMsIG1hcmdpblRvcCwgMCkK
LSAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCAr
IDQsIG1hcmdpblJpZ2h0LCAwKQotICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFy
Z3VtZW50cywgYXJnT2Zmc2V0ICsgNSwgbWFyZ2luQm90dG9tLCAwKQotICAgICAgICB8fCAhcGFy
c2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0ICsgNiwgbWFyZ2luTGVmdCwg
MCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBzZXRJc1ByaW50aW5nKHRydWUp
OwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBs
dWdpbnNFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1sw
XS5pc0Jvb2woKSkgeworICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5wbHVnaW5zRW5h
YmxlZCA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKKyAgICAgICAgbV9zaGVsbC0+YXBwbHlQ
cmVmZXJlbmNlcygpOworICAgIH0KICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpbnQgcGFn
ZVdpZHRoSW5QaXhlbHMgPSAwOwotICAgIGludCBwYWdlSGVpZ2h0SW5QaXhlbHMgPSAwOwotICAg
IGlmICghcGFyc2VQYWdlU2l6ZVBhcmFtZXRlcnMoYXJndW1lbnRzLCAxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnBhZ2VXaWR0aEluUGl4ZWxzLCAmcGFnZUhlaWdodEluUGl4
ZWxzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3
KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBy
ZXN1bHQtPnNldChmcmFtZS0+cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKGNwcFZhcmlhbnRUb1dl
YlN0cmluZyhhcmd1bWVudHNbMF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhZ2VXaWR0aEluUGl4ZWxzKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGZsb2F0PihwYWdlSGVpZ2h0SW5QaXhlbHMpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMp
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJt
aXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7Ci0gICAgcmVzdWx0LT5zZXQoIiIpOwotICAgIGludCBwYWdlTnVtYmVyID0gMDsKLSAg
ICBpbnQgd2lkdGggPSAwOwotICAgIGludCBoZWlnaHQgPSAwOwotICAgIGludCBtYXJnaW5Ub3Ag
PSAwOwotICAgIGludCBtYXJnaW5SaWdodCA9IDA7Ci0gICAgaW50IG1hcmdpbkJvdHRvbSA9IDA7
Ci0gICAgaW50IG1hcmdpbkxlZnQgPSAwOwotICAgIGlmICghcGFyc2VQYWdlTnVtYmVyU2l6ZU1h
cmdpbnMoYXJndW1lbnRzLCAwLCAmcGFnZU51bWJlciwgJndpZHRoLCAmaGVpZ2h0LCAmbWFyZ2lu
VG9wLCAmbWFyZ2luUmlnaHQsICZtYXJnaW5Cb3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbWFyZ2luTGVmdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkZy
YW1lKiBmcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNT
dHJpbmcoKSkgeworICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CiAgICAgICAgIHJldHVybjsK
LSAgICBXZWJTaXplIHBhZ2VTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIGZyYW1lLT5wYWdlU2l6
ZUFuZE1hcmdpbnNJblBpeGVscyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSwgbWFyZ2luVG9wLCBtYXJn
aW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0KTsKLSAgICBzdHJpbmdzdHJlYW0gcmVz
dWx0U3RyaW5nOwotICAgIHJlc3VsdFN0cmluZyA8PCAiKCIgPDwgcGFnZVNpemUud2lkdGggPDwg
IiwgIiA8PCBwYWdlU2l6ZS5oZWlnaHQgPDwgIikgIiA8PCBtYXJnaW5Ub3AgPDwgIiAiIDw8IG1h
cmdpblJpZ2h0IDw8ICIgIgotICAgICAgICAgICAgICAgICA8PCBtYXJnaW5Cb3R0b20gPDwgIiAi
IDw8IG1hcmdpbkxlZnQ7Ci0gICAgcmVzdWx0LT5zZXQocmVzdWx0U3RyaW5nLnN0cigpKTsKKyAg
ICB9CisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FU
SU9OUykKKyAgICBtX3NoZWxsLT5ub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+Z3JhbnRQZXJtaXNz
aW9uKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pKTsKKyNlbmRpZgorICAgIHJl
c3VsdC0+c2V0KHRydWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNDdXN0
b21QYWdlU2l6ZVN0eWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BO
b3RpZmljYXRpb25DbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQogewotICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICBpbnQgcGFnZUlu
ZGV4ID0gMDsKLSAgICBpZiAoIXBhcnNlUGFnZU51bWJlcihhcmd1bWVudHMsIDAsICZwYWdlSW5k
ZXgpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVsbC0+d2Vi
VmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQorICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIHJlc3Vs
dC0+c2V0KGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwotICAgIHJlc3VsdC0+c2V0KGZyYW1lLT5o
YXNDdXN0b21QYWdlU2l6ZVN0eWxlKHBhZ2VJbmRleCkpOworICAgIH0KKyNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorICAgIGlmIChtX3No
ZWxsLT5ub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+c2ltdWxhdGVDbGljayhjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzBdKSkpCisgICAgICAgIHJlc3VsdC0+c2V0KHRydWUpOworICAg
IGVsc2UKKyNlbmRpZgorICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CiB9CisjZW5kaWYKIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwbGF5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5zZXQoIiIpOwotICAgIGludCBwYWdlTnVtYmVy
ID0gMDsKLSAgICBpZiAoIXBhcnNlUGFnZU51bWJlcihhcmd1bWVudHMsIDEsICZwYWdlTnVtYmVy
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCkt
Pm1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJT
aXplIHBhZ2VTaXplKDgwMCwgODAwKTsKLSAgICBmcmFtZS0+cHJpbnRCZWdpbihwYWdlU2l6ZSk7
Ci0gICAgcmVzdWx0LT5zZXQoZnJhbWUtPnBhZ2VQcm9wZXJ0eShjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzBdKSwgcGFnZU51bWJlcikudXRmOCgpKTsKLSAgICBmcmFtZS0+cHJpbnRF
bmQoKTsKKyAgICBXZWJWaWV3SG9zdCogaG9zdCA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCk7Cisg
ICAgY29uc3QgV2ViS2l0OjpXZWJTaXplJiBzaXplID0gbV93ZWJWaWV3LT5zaXplKCk7CisgICAg
V2ViUmVjdCByZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKyAgICBob3N0LT51
cGRhdGVQYWludFJlY3QocmVjdCk7CisgICAgaG9zdC0+cGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigp
OworICAgIGhvc3QtPmRpc3BsYXlSZXBhaW50TWFzaygpOworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKKyAgICBXZWJWaWV3SG9z
dCogaG9zdCA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCk7CisgICAgaG9zdC0+cGFpbnRJbnZhbGlk
YXRlZFJlZ2lvbigpOworICAgIGhvc3QtPmRpc3BsYXlSZXBhaW50TWFzaygpOwogICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGludCBwYWdlV2lkdGhJblBpeGVscyA9IDA7Ci0gICAgaW50IHBh
Z2VIZWlnaHRJblBpeGVscyA9IDA7Ci0gICAgaWYgKCFwYXJzZVBhZ2VTaXplUGFyYW1ldGVycyhh
cmd1bWVudHMsIDAsICZwYWdlV2lkdGhJblBpeGVscywgJnBhZ2VIZWlnaHRJblBpeGVscykpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hlbGwtPndlYlZpZXco
KS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YlByaW50UGFyYW1zIHByaW50UGFyYW1zKFdlYlNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VI
ZWlnaHRJblBpeGVscykpOwotICAgIGludCBudW1iZXJPZlBhZ2VzID0gZnJhbWUtPnByaW50QmVn
aW4ocHJpbnRQYXJhbXMpOwotICAgIGZyYW1lLT5wcmludEVuZCgpOwotICAgIHJlc3VsdC0+c2V0
KG51bWJlck9mUGFnZXMpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJP
ZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTgyMSwxMyArNDI4LDYgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMoY29uc3QgQ3AKICAgICByZXN1bHQtPnNldChudW1iZXJPZlJlcXVlc3Rz
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9nRXJyb3JUb0NvbnNvbGUoY29u
c3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+ZGlk
QWRkTWVzc2FnZVRvQ29uc29sZSgKLSAgICAgICAgV2ViQ29uc29sZU1lc3NhZ2UoV2ViQ29uc29s
ZU1lc3NhZ2U6OkxldmVsRXJyb3IsIFdlYlN0cmluZzo6ZnJvbVVURjgodGV4dCkpLAotICAgICAg
ICBXZWJTdHJpbmcoKSwgMCk7Ci19Ci0KIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKQEAgLTE4MzYsMzYgKzQz
Niw2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Io
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVuCiAgICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNB
Z2VudCgpLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGFy
Z3VtZW50c1sxXS50b1N0cmluZygpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBtX3No
ZWxsLT53ZWJWaWV3KCktPnNldFNlbGVjdGlvbkNvbG9ycygweGZmZWUwMDAwLCAweGZmMDBlZTAw
LCAweGZmMDAwMDAwLCAweGZmYzBjMGMwKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc0Jvb2woKSB8fCAhYXJndW1lbnRzWzJdLmlzQm9vbCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgV2ViVmlldzo6YWRkVXNlclNjcmlwdCgKLSAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5n
KGFyZ3VtZW50c1swXSksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksCi0gICAgICAgIGFyZ3VtZW50
c1sxXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RBdERvY3VtZW50U3Rh
cnQgOiBXZWJWaWV3OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1bWVudEVuZCwKLSAgICAgICAgYXJn
dW1lbnRzWzJdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZy
YW1lcyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHkpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIFdlYlZpZXc6OmFkZFVzZXJTdHlsZVNoZWV0KAotICAgICAgICBjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwKLSAgICAgICAgYXJn
dW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZy
YW1lcyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHksCi0gICAgICAg
IC8vIENocm9taXVtIGRlZmF1bHRzIHRvIEluamVjdEluU3Vic2VxdWVudERvY3VtZW50cywgYnV0
IGZvciBjb21wYXRpYmlsaXR5Ci0gICAgICAgIC8vIHdpdGggdGhlIG90aGVyIHBvcnRzJyBEUlRz
LCB3ZSB1c2UgVXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cy4KLSAgICAgICAgV2Vi
Vmlldzo6VXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cyk7Ci19Ci0KIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwpAQCAtMTkxOCwxMiArNDg4LDYgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWUK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBpKyspCiAgICAg
ICAgIHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRFcnJvcihhcmd1
bWVudHNbMF0udG9JbnQzMigpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7
CiB9Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLX0KLQogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKQEAgLTE5NzUsMzU1ICs1Mzks
NiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25B
Ym9ydGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdAogfQogI2VuZGlmCiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJF
bGVtZW50IGVsZW1lbnQ7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVu
dHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsK
LSAgICBpZiAoIWlucHV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWlucHV0LT5pc1Nw
ZWVjaElucHV0RW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dC0+c3RhcnRT
cGVlY2hJbnB1dCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVB
c1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bGF5ZXJU
cmVlQXNUZXh0KG1fc2hvd0RlYnVnTGF5ZXJUcmVlKS51dGY4KCkpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmdzLCBDcHBWYXJpYW50KikKLXsKLSAgICBpbnQgbnVtVGltZXM7Ci0gICAgaWYgKGFy
Z3Muc2l6ZSgpID09IDEgfHwgIWFyZ3NbMF0uaXNOdW1iZXIoKSkKLSAgICAgICAgbnVtVGltZXMg
PSAxOwotICAgIGVsc2UKLSAgICAgICAgbnVtVGltZXMgPSBhcmdzWzBdLnRvSW50MzIoKTsKLSAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBXZWJF
bGVtZW50IGVsZW1lbnQ7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmdzWzBd
LnZhbHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCi0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0LT5zZXQoZWxlbWVudC5kb2N1bWVudCgpLmZyYW1l
KCktPm1hcmtlclRleHRGb3JMaXN0SXRlbShlbGVtZW50KS51dGY4KCkpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PCAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
V2ViRmluZE9wdGlvbnMgZmluZE9wdGlvbnM7Ci0gICAgYm9vbCB3cmFwQXJvdW5kID0gZmFsc2U7
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMikgewotICAgICAgICBWZWN0b3I8c3RkOjpz
dHJpbmc+IG9wdGlvbnNBcnJheSA9IGFyZ3VtZW50c1sxXS50b1N0cmluZ1ZlY3RvcigpOwotICAg
ICAgICBmaW5kT3B0aW9ucy5tYXRjaENhc2UgPSB0cnVlOwotCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb3B0aW9uc0FycmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgb3B0aW9uID0gb3B0aW9uc0FycmF5W2ldOwotICAgICAgICAgICAgLy8g
RklYTUU6IFN1cHBvcnQgYWxsIHRoZSBvcHRpb25zLCBzbyB3ZSBjYW4gcnVuIGZpbmRTdHJpbmcu
aHRtbCB0b28uCi0gICAgICAgICAgICBpZiAob3B0aW9uID09ICJDYXNlSW5zZW5zaXRpdmUiKQot
ICAgICAgICAgICAgICAgIGZpbmRPcHRpb25zLm1hdGNoQ2FzZSA9IGZhbHNlOwotICAgICAgICAg
ICAgZWxzZSBpZiAob3B0aW9uID09ICJCYWNrd2FyZHMiKQotICAgICAgICAgICAgICAgIGZpbmRP
cHRpb25zLmZvcndhcmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAi
V3JhcEFyb3VuZCIpCi0gICAgICAgICAgICAgICAgd3JhcEFyb3VuZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpOwotICAgIGNvbnN0IGJvb2wgZmluZFJlc3VsdCA9IGZyYW1lLT5maW5kKDAsIGNw
cFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBmaW5kT3B0aW9ucywgd3JhcEFyb3Vu
ZCwgMCk7Ci0gICAgcmVzdWx0LT5zZXQoZmluZFJlc3VsdCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3Mo
KS0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzFd
LmlzQm9vbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJFbGVtZW50IGVsZW1lbnQ7Ci0g
ICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0
VmFsdWUsICZlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViSW5wdXRFbGVtZW50
KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dC0+c2V0QXV0b2ZpbGxlZChhcmd1bWVudHNbMV0u
dmFsdWUuYm9vbFZhbHVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFs
dWVGb3JVc2VyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgIT0gMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViRWxlbWVudCBlbGVtZW50OwotICAg
IGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZh
bHVlLCAmZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYklucHV0RWxlbWVudCog
aW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaW5wdXQtPnNldFZhbHVlKGNwcFZhcmlhbnRUb1dlYlN0cmlu
Zyhhcmd1bWVudHNbMV0pLCB0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KikKLXsKLSAgICAvLyBOb3QgSW1wbGVtZW50ZWQKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKLXsKLSAgICAvLyBOb3QgSW1wbGVt
ZW50ZWQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQotewot
ICAgIC8vIE5vdCBJbXBsZW1lbnRlZAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqKQotewotICAgIC8vIE5vdCBJbXBsZW1lbnRlZAotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQotewotICAgIC8vIE5vdCBJbXBsZW1l
bnRlZAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQotewotICAgIC8vIE5vdCBJbXBsZW1l
bnRlZAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRTdGF5T25QYWdl
QWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3Nob3VsZFN0YXlPblBhZ2VBZnRl
ckhhbmRsaW5nQmVmb3JlVW5sb2FkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwotCi0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuYWJs
ZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgIDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGJvb2wgZW5hYmxlRml4ZWRMYXlvdXQgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7
Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5lbmFibGVGaXhlZExheW91dE1vZGUoZW5hYmxlRml4
ZWRMYXlvdXQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGaXhlZExheW91
dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
ICAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVy
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgd2lkdGggPSBhcmd1bWVudHNbMF0udG9JbnQz
MigpOwotICAgIGludCBoZWlnaHQgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIG1fc2hl
bGwtPndlYlZpZXcoKS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYlNpemUod2lkdGgsIGhlaWdodCkp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZWxlY3Rpb25Bc01hcmt1cChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkFz
TWFya3VwKCkudXRmOCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2Vy
VGhyZWFkQ291bnQoQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KHN0YXRp
Y19jYXN0PGludD4oV2ViV29ya2VySW5mbzo6ZGVkaWNhdGVkV29ya2VyQ291bnQoKSkpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICB2
ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjdHggPSBt
X3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5tYWluV29ybGRTY3JpcHRDb250ZXh0KCk7
Ci0gICAgcmVzdWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+c2VsZWN0
aW9uQXNNYXJrdXAoKS51dGY4KCkpOwotICAgIHY4OjpDb250ZXh0OjpTY29wZSBjc2NvcGUoY3R4
KTsKLQotICAgIFdlYktpdDo6V2ViSW50ZW50UmVxdWVzdCogcmVxdWVzdCA9IG1fc2hlbGwtPndl
YlZpZXdIb3N0KCktPmN1cnJlbnRJbnRlbnRSZXF1ZXN0KCk7Ci0gICAgaWYgKHJlcXVlc3QtPmlz
TnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAx
KSB7Ci0gICAgICAgIFdlYktpdDo6V2ViQ1N0cmluZyByZXBseSA9IGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMF0pLnV0ZjgoKTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHY4dmFsdWUgPSB2ODo6U3RyaW5nOjpOZXcocmVwbHkuZGF0YSgpLCByZXBseS5sZW5ndGgoKSk7
Ci0gICAgICAgIHJlcXVlc3QtPnBvc3RSZXN1bHQoV2ViS2l0OjpXZWJTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OnNlcmlhbGl6ZSh2OHZhbHVlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHY4dmFsdWUgPSB2ODo6U3RyaW5nOjpOZXcoIkVSUk9SIik7Ci0gICAg
ICAgIHJlcXVlc3QtPnBvc3RGYWlsdXJlKFdlYktpdDo6V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpzZXJpYWxpemUodjh2YWx1ZSkpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgIDMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHY4OjpIYW5kbGVT
Y29wZSBzY29wZTsKLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGN0eCA9IG1fc2hlbGwtPndl
YlZpZXcoKS0+bWFpbkZyYW1lKCktPm1haW5Xb3JsZFNjcmlwdENvbnRleHQoKTsKLSAgICByZXN1
bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5zZWxlY3Rpb25Bc01hcmt1
cCgpLnV0ZjgoKSk7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNzY29wZShjdHgpOwotCi0gICAg
V2ViU3RyaW5nIGFjdGlvbiA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOwot
ICAgIFdlYlN0cmluZyB0eXBlID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSk7
Ci0gICAgV2ViS2l0OjpXZWJDU3RyaW5nIGRhdGEgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJn
dW1lbnRzWzJdKS51dGY4KCk7Ci0gICAgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6
ZWREYXRhID0gV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpzZXJpYWxpemUoCi0gICAgICAgIHY4
OjpTdHJpbmc6Ok5ldyhkYXRhLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSkpOwotCi0gICAgV2ViSW50
ZW50IGludGVudCA9IFdlYkludGVudDo6Y3JlYXRlKGFjdGlvbiwgdHlwZSwgc2VyaWFsaXplZERh
dGEudG9TdHJpbmcoKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4oKSk7Ci0KLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5kZWxpdmVySW50
ZW50KGludGVudCwgMCwgbV9pbnRlbnRDbGllbnQuZ2V0KCkpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotI2lmIE9TKExJTlVYKSB8
fCBPUyhBTkRST0lEKQotICAgIC8vIFNpbmNlIEZvbnRDb25maWcgZG9lc24ndCBwcm92aWRlIGEg
dmFyaWFibGUgdG8gY29udHJvbCBzdWJwaXhlbCBwb3NpdGlvbmluZywgd2UnbGwgZmFsbCBiYWNr
Ci0gICAgLy8gdG8gc2V0dGluZyBpdCBnbG9iYWxseSBmb3IgYWxsIGZvbnRzLgotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIFdl
YkZvbnRSZW5kZXJpbmc6OnNldFN1YnBpeGVsUG9zaXRpb25pbmcoYXJndW1lbnRzWzBdLnZhbHVl
LmJvb2xWYWx1ZSk7Ci0jZW5kaWYKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotY2xhc3Mg
SW52b2tlQ2FsbGJhY2tUYXNrIDogcHVibGljIE1ldGhvZFRhc2s8TGF5b3V0VGVzdENvbnRyb2xs
ZXI+IHsKLXB1YmxpYzoKLSAgICBJbnZva2VDYWxsYmFja1Rhc2soTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIG9iamVjdCwgUGFzc093bkFycmF5UHRyPENwcFZhcmlhbnQ+IGNhbGxiYWNrQXJndW1lbnRz
LCB1aW50MzJfdCBudW1iZXJPZkFyZ3VtZW50cykKLSAgICAgICAgOiBNZXRob2RUYXNrPExheW91
dFRlc3RDb250cm9sbGVyPihvYmplY3QpCi0gICAgICAgICwgbV9jYWxsYmFja0FyZ3VtZW50cyhj
YWxsYmFja0FyZ3VtZW50cykKLSAgICAgICAgLCBtX251bWJlck9mQXJndW1lbnRzKG51bWJlck9m
QXJndW1lbnRzKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgp
Ci0gICAgewotICAgICAgICBDcHBWYXJpYW50IGludm9rZVJlc3VsdDsKLSAgICAgICAgbV9jYWxs
YmFja0FyZ3VtZW50c1swXS5pbnZva2VEZWZhdWx0KG1fY2FsbGJhY2tBcmd1bWVudHMuZ2V0KCks
IG1fbnVtYmVyT2ZBcmd1bWVudHMsIGludm9rZVJlc3VsdCk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIE93bkFycmF5UHRyPENwcFZhcmlhbnQ+IG1fY2FsbGJhY2tBcmd1bWVudHM7Ci0gICAgdWlu
dDMyX3QgbV9udW1iZXJPZkFyZ3VtZW50czsKLX07Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8
fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZmxvYXQgdmFsdWUgPSBhcmd1bWVudHNbMF0udmFs
dWUuZG91YmxlVmFsdWU7Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXREZXZpY2VTY2FsZUZh
Y3Rvcih2YWx1ZSk7Ci0KLSAgICBPd25BcnJheVB0cjxDcHBWYXJpYW50PiBjYWxsYmFja0FyZ3Vt
ZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IENwcFZhcmlhbnRbMV0pOwotICAgIGNhbGxiYWNrQXJn
dW1lbnRzWzBdLnNldChhcmd1bWVudHNbMV0pOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAg
IHBvc3RUYXNrKG5ldyBJbnZva2VDYWxsYmFja1Rhc2sodGhpcywgY2FsbGJhY2tBcmd1bWVudHMu
cmVsZWFzZSgpLCAxKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdp
bnNFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c0Jvb2woKSkgewotICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5wbHVnaW5zRW5hYmxl
ZCA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKLSAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVm
ZXJlbmNlcygpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fc2hlbGwtPndlYlZp
ZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCB0
cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHko
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgc3RyaW5nIG5ld1Zpc2liaWxpdHkgPSBhcmd1bWVudHNbMF0udG9TdHJpbmco
KTsKLSAgICAgICAgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInZpc2libGUiKQotICAgICAgICAgICAg
bV9zaGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlT
dGF0ZVZpc2libGUsIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAi
aGlkZGVuIikKLSAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0
YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4sIGZhbHNlKTsKLSAgICAgICAgZWxzZSBp
ZiAobmV3VmlzaWJpbGl0eSA9PSAicHJlcmVuZGVyIikKLSAgICAgICAgICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVyZW5k
ZXIsIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAicHJldmlldyIp
Ci0gICAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQ
YWdlVmlzaWJpbGl0eVN0YXRlUHJldmlldywgZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkK
LXsKLSAgICAvLyBOb3QgSW1wbGVtZW50ZWQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBNYXAgYSBkaXJlY3Rpb24gbmFtZSB0byBhIFdlYlRleHREaXJlY3Rp
b24gdmFsdWUuCi0gICAgc3RkOjpzdHJpbmcgZGlyZWN0aW9uTmFtZSA9IGFyZ3VtZW50c1swXS50
b1N0cmluZygpOwotICAgIFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAg
aWYgKGRpcmVjdGlvbk5hbWUgPT0gImF1dG8iKQotICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6
OldlYlRleHREaXJlY3Rpb25EZWZhdWx0OwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0g
InJ0bCIpCi0gICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvblJpZ2h0
VG9MZWZ0OwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImx0ciIpCi0gICAgICAgIGRp
cmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0OwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRUZXh0RGlyZWN0
aW9uKGRpcmVjdGlvbik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1ZGlv
RGF0YShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PCAxIHx8ICFhcmd1bWVudHNbMF0uaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gQ2hlY2sgdGhhdCBwYXNzZWQtaW4gb2JqZWN0IGlzLCBpbiBmYWN0LCBhbiBBcnJheUJ1ZmZl
clZpZXcuCi0gICAgTlBPYmplY3QqIG5wb2JqZWN0ID0gTlBWQVJJQU5UX1RPX09CSkVDVChhcmd1
bWVudHNbMF0pOwotICAgIGlmICghbnBvYmplY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IVdlYkJpbmRpbmdzOjpnZXRBcnJheUJ1ZmZlclZpZXcobnBvYmplY3QsICZtX2F1ZGlvRGF0YSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNldFNob3VsZER1bXBBc0F1ZGlvKHRydWUpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZp
b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8ICAx
IHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hhc0N1
c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKLX0KLQog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaWRM
b3NlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQogewpAQCAtMjM0MywyNyArNTU4LDMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnQKICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKIH0KICNlbmRpZgotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojp0ZXh0U3Vycm91bmRpbmdOb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPCA0IHx8ICFhcmd1bWVudHNbMF0uaXNPYmplY3QoKSB8fCAhYXJndW1l
bnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc051bWJlcigpIHx8ICFhcmd1bWVu
dHNbM10uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViTm9kZSBub2RlOwot
ICAgIGlmICghV2ViQmluZGluZ3M6OmdldE5vZGUoYXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZh
bHVlLCAmbm9kZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChub2RlLmlzTnVsbCgpIHx8
ICFub2RlLmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUG9pbnQgcG9p
bnQoYXJndW1lbnRzWzFdLnRvSW50MzIoKSwgYXJndW1lbnRzWzJdLnRvSW50MzIoKSk7Ci0gICAg
dW5zaWduZWQgbWF4TGVuZ3RoID0gYXJndW1lbnRzWzNdLnRvSW50MzIoKTsKLQotICAgIFdlYlN1
cnJvdW5kaW5nVGV4dCBzdXJyb3VuZGluZ1RleHQ7Ci0gICAgc3Vycm91bmRpbmdUZXh0LmluaXRp
YWxpemUobm9kZSwgcG9pbnQsIG1heExlbmd0aCk7Ci0gICAgaWYgKHN1cnJvdW5kaW5nVGV4dC5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzdWx0LT5zZXQoc3Vycm91bmRpbmdU
ZXh0LnRleHRDb250ZW50KCkudXRmOCgpKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCmluZGV4IDM0NzYwYzE2MTA0NWM5
ZDAyMmEwZjAzNjM1MGUzMmYyNmZmMTlmNjguLmM2ZjEwZGQ4NjU0MTllOGE3YTA4ZjMzNzA1YWNm
M2FkNjRlMTFiMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtNDcsNjc3ICs0NywxMCBAQCBjbGFzcyBUZXN0U2hl
bGw7CiAKIGNsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFRlc3RSdW5uZXIgewog
cHVibGljOgotICAgIC8vIEJ1aWxkcyB0aGUgcHJvcGVydHkgYW5kIG1ldGhvZCBsaXN0cyBuZWVk
ZWQgdG8gYmluZCB0aGlzIGNsYXNzIHRvIGEgSlMKLSAgICAvLyBvYmplY3QuCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKik7Ci0KLSAgICB+TGF5b3V0VGVzdENvbnRyb2xsZXIo
KTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVz
dF9zaGVsbCB0byBkdW1wIHBhZ2VzIGFzCi0gICAgLy8gcGxhaW4gdGV4dCwgcmF0aGVyIHRoYW4g
YXMgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZW5kZXJlcidzIHN0YXRlLgotICAgIC8v
IEl0IHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB3aGV0aGVyIHRvIGR1bXAgcGl4ZWxzIHJl
c3VsdHMgb3Igbm90LgotICAgIHZvaWQgZHVtcEFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzZXQgYSBmbGFn
IHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lCi0gICAgLy8gb2YgZGVz
Y3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBkYXRhYmFzZSBjb21tYW5kLiBJdCBzaG91bGQgdGFrZSBu
bwotICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZSBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4g
SG93ZXZlciwgYXQgdGhlIG1vbWVudCwgd2UKLSAgICAvLyBkb24ndCBoYXZlIGFueSBEQiBmdW5j
dGlvbiB0aGF0IHByaW50cyBtZXNzYWdlcywgc28gZm9yIG5vdyB0aGlzIGZ1bmN0aW9uCi0gICAg
Ly8gZG9lc24ndCBkbyBhbnl0aGluZy4KLSAgICB2b2lkIGR1bXBEYXRhYmFzZUNhbGxiYWNrcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5l
IG9mCi0gICAgLy8gZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBlZGl0aW5nIGNvbW1hbmQuIEl0
IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kCi0gICAgLy8gaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUg
cHJlc2VudC4KLSAgICB2b2lkIGR1bXBFZGl0aW5nQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcg
dGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YKLSAgICAvLyBkZXNj
cmlwdGl2ZSB0ZXh0IGZvciBlYWNoIGZyYW1lIGxvYWQgY2FsbGJhY2suIEl0IHRha2VzIG5vIGFy
Z3VtZW50cywgYW5kCi0gICAgLy8gaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAg
ICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxz
IHRoZSB0ZXN0X3NoZWxsIHRvIHByaW50IGEgbGluZSBvZgotICAgIC8vIGRlc2NyaXB0aXZlIHRl
eHQgZm9yIHRoZSBwcm9ncmVzcyBmaW5pc2hlZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8KLSAgICAv
LyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZv
aWQgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVs
bHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lIG9mCi0gICAgLy8gdXNlciBnZXN0dXJl
IHN0YXR1cyB0ZXh0IGZvciBzb21lIGZyYW1lIGxvYWQgY2FsbGJhY2tzLiBJdCB0YWtlcyBubwot
ICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0g
ICAgdm9pZCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBm
bGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0IGEgdGV4dAotICAgIC8v
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4gSXQgaWdub3JlcyBhbGwg
YXJndW1lbnRzLgotICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFn
IHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0IHRoZQotICAgIC8vIHNjcm9s
bCBvZmZzZXRzIG9mIHRoZSBjaGlsZCBmcmFtZXMuIEl0IGlnbm9yZXMgYWxsLgotICAgIHZvaWQg
ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxz
IHRoZSB0ZXN0X3NoZWxsIHRvIHJlY3Vyc2l2ZWx5Ci0gICAgLy8gZHVtcCBhbGwgZnJhbWVzIGFz
IHBsYWluIHRleHQgaWYgdGhlIGR1bXBBc1RleHQgZmxhZyBpcyBzZXQuCi0gICAgLy8gSXQgdGFr
ZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAg
ICB2b2lkIGR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRl
bGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYSBkZXNjcmlwdGl2ZQotICAgIC8vIGxpbmUgZm9y
IGVhY2ggcmVzb3VyY2UgbG9hZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQg
aWdub3JlcwotICAgIC8vIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
ICAgIAotICAgIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0
aGUgdGVzdF9zaGVsbCB0byBkdW1wIHRoZSBNSU1FIHR5cGUKLSAgICAvLyBmb3IgZWFjaCByZXNv
dXJjZSB0aGF0IHdhcyBsb2FkZWQuIEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kIGlnbm9yZXMg
YW55Ci0gICAgLy8gdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2b2lkIGR1bXBSZXNvdXJjZVJl
c3BvbnNlTUlNRVR5cGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVs
bCB0byBkdW1wIGFsbCBjYWxscwotICAgIC8vIHRvIHdpbmRvdy5zdGF0dXMoKS4KLSAgICAvLyBJ
dCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50
LgotICAgIHZvaWQgZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0
IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYWxsIGNhbGxzIHRvCi0gICAgLy8gV2ViVmll
d0NsaWVudDo6Y3JlYXRlVmlldygpLgotICAgIC8vIEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5k
IGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1wQ3JlYXRlVmll
dyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBXaGVuIGNh
bGxlZCB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCwgdGhpcyBzZXRzIGEgZmxhZyB0aGF0IGNvbnRy
b2xzCi0gICAgLy8gd2hldGhlciBjb250ZW50LWVkaXRhYmxlIGVsZW1lbnRzIGFjY2VwdCBlZGl0
aW5nIGZvY3VzIHdoZW4gYW4gZWRpdGluZwotICAgIC8vIGF0dGVtcHQgaXMgbWFkZS4gSXQgaWdu
b3JlcyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMuCi0gICAgdm9pZCBzZXRBY2NlcHRzRWRpdGlu
Zyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBGdW5jdGlv
bnMgZm9yIGRlYWxpbmcgd2l0aCB3aW5kb3dzLiBCeSBkZWZhdWx0IHdlIGJsb2NrIGFsbCBuZXcg
d2luZG93cy4KLSAgICB2b2lkIHdpbmRvd0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENsb3NlUmVtYWluaW5nV2luZG93c1do
ZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAv
LyBCeSBkZWZhdWx0LCB0ZXN0cyBlbmQgd2hlbiBwYWdlIGxvYWQgaXMgY29tcGxldGUuIFRoZXNl
IG1ldGhvZHMgYXJlIHVzZWQKLSAgICAvLyB0byBkZWxheSB0aGUgY29tcGxldGlvbiBvZiB0aGUg
dGVzdCB1bnRpbCBub3RpZnlEb25lIGlzIGNhbGxlZC4KLSAgICB2b2lkIHdhaXRVbnRpbERvbmUo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgbm90aWZ5RG9u
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBNZXRob2Rz
IGZvciBhZGRpbmcgYWN0aW9ucyB0byB0aGUgd29yayBxdWV1ZS4gVXNlZCBpbiBjb25qdW5jdGlv
biB3aXRoCi0gICAgLy8gd2FpdFVudGlsRG9uZS9ub3RpZnlEb25lIGFib3ZlLgotICAgIHZvaWQg
cXVldWVCYWNrTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlUmVsb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBxdWV1ZU5vbkxvYWRpbmdTY3Jp
cHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcXVldWVM
b2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVl
TG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0g
ICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBuYW1lZCAib2JqQyIgdG8gbWF0Y2ggdGhlIE1hYyB2ZXJz
aW9uLCBpdCBhY3R1YWxseSB0ZXN0cwotICAgIC8vIHRoZSBpZGVudGl0eSBvZiBpdHMgdHdvIGFy
Z3VtZW50cyBpbiBDKysuCi0gICAgdm9pZCBvYmpDSWRlbnRpdHlJc0VxdWFsKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENoYW5nZXMgdGhlIGNvb2tpZSBw
b2xpY3kgZnJvbSB0aGUgZGVmYXVsdCB0byBhbGxvdyBhbGwgY29va2llcy4KLSAgICB2b2lkIHNl
dEFsd2F5c0FjY2VwdENvb2tpZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotCi0gICAgLy8gQ2hhbmdlcyBhc3luY2hyb25vdXMgc3BlbGxjaGVja2luZyBmbGFnIG9uIHRo
ZSBzZXR0aW5ncy4KLSAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFNob3dzIERl
dlRvb2xzIHdpbmRvdy4KLSAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3IoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gR2l2ZXMgZm9jdXMgdG8g
dGhlIHdpbmRvdy4KLSAgICB2b2lkIHNldFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIE1ldGhvZCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIg
cHJlc3NpbmcgVGFiIGtleSBjeWNsZXMgdGhyb3VnaCBwYWdlIGVsZW1lbnRzCi0gICAgLy8gb3Ig
aW5zZXJ0cyBhICdcdCcgY2hhciBpbiB0ZXh0IGFyZWEKLSAgICB2b2lkIHNldFRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICAvLyBQYXNzZXMgdGhyb3VnaCB0byBXZWJQcmVmZXJlbmNlcyB3aGljaCBhbGxvd3MgdGhl
IHVzZXIgdG8gaGF2ZSBhIGN1c3RvbQotICAgIC8vIHN0eWxlIHNoZWV0LgotICAgIHZvaWQgc2V0
VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gUGFzc2VzIHRoaXMgcHJlZmVyZW5jZSB0aHJv
dWdoIHRvIFdlYlNldHRpbmdzLgotICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gUHV0cyBX
ZWJraXQgaW4gImRhc2hib2FyZCBjb21wYXRpYmlsaXR5IG1vZGUiLCB3aGljaCBpcyB1c2VkIGlu
IG9ic2N1cmUKLSAgICAvLyBNYWMtb25seSBjaXJjdW1zdGFuY2VzLiBJdCdzIG5vdCByZWFsbHkg
bmVjZXNzYXJ5LCBhbmQgd2lsbCBtb3N0IGxpa2VseQotICAgIC8vIG5ldmVyIGJlIHVzZWQgYnkg
Q2hyb21lLCBidXQgc29tZSBsYXlvdXQgdGVzdHMgZGVwZW5kIG9uIGl0cyBwcmVzZW5jZS4KLSAg
ICB2b2lkIHNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgc2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENhdXNlcyBuYXZpZ2F0
aW9uIGFjdGlvbnMganVzdCBwcmludG91dCB0aGUgaW50ZW5kZWQgbmF2aWdhdGlvbiBpbnN0ZWFk
Ci0gICAgLy8gb2YgdGFraW5nIHlvdSB0byB0aGUgcGFnZS4gVGhpcyBpcyB1c2VkIGZvciBjYXNl
cyBsaWtlIG1haWx0bywgd2hlcmUgeW91Ci0gICAgLy8gZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBv
cGVuIHRoZSBtYWlsIHByb2dyYW0uCi0gICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBEZWxheXMgY29t
cGxldGlvbiBvZiB0aGUgdGVzdCB1bnRpbCB0aGUgcG9saWN5IGRlbGVnYXRlIHJ1bnMuCi0gICAg
dm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotCi0gICAgLy8gQ2F1c2VzIFdpbGxTZW5kUmVxdWVzdCB0byBjbGVhciBjZXJ0YWlu
IGhlYWRlcnMuCi0gICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcihjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDYXVzZXMgV2lsbFNlbmRS
ZXF1ZXN0IHRvIGJsb2NrIHJlZGlyZWN0cy4KLSAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJl
dHVybnNOdWxsT25SZWRpcmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0KLSAgICAvLyBDYXVzZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIHJldHVybiBhbiBlbXB0eSByZXF1
ZXN0LgotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ29udmVydHMgYSBVUkwgc3RhcnRp
bmcgd2l0aCBmaWxlOi8vL3RtcC8gdG8gdGhlIGxvY2FsIG1hcHBpbmcuCi0gICAgdm9pZCBwYXRo
VG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQot
ICAgIC8vIFNldHMgYSBib29sIHN1Y2ggdGhhdCB3aGVuIGEgZHJhZyBpcyBzdGFydGVkLCB3ZSBm
aWxsIHRoZSBkcmFnIGNsaXBib2FyZAotICAgIC8vIHdpdGggYSBmYWtlIGZpbGUgb2JqZWN0Lgot
ICAgIHZvaWQgYWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFeGVjdXRlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChz
dXBlcnNldCBvZiBkb2N1bWVudC5leGVjQ29tbWFuZCgpIGNvbW1hbmRzKS4KLSAgICB2b2lkIGV4
ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IENoZWNrcyBpZiBhbiBpbnRlcm5hbCBjb21tYW5kIGlzIGN1cnJlbnRseSBhdmFpbGFibGUuCi0g
ICAgdm9pZCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIC8vIFNldCB0aGUgV2ViUHJlZmVyZW5jZSB0aGF0IGNvbnRyb2xzIHdlYmtp
dCdzIHBvcHVwIGJsb2NraW5nLgotICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gSWYgdHJ1ZSwgY2F1
c2VzIHByb3Zpc2lvbmFsIGZyYW1lIGxvYWRzIHRvIGJlIHN0b3BwZWQgZm9yIHRoZSByZW1haW5k
ZXIgb2YKLSAgICAvLyB0aGUgdGVzdC4KLSAgICB2b2lkIHNldFN0b3BQcm92aXNpb25hbEZyYW1l
TG9hZHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRW5h
YmxlIG9yIGRpc2FibGUgc21hcnQgaW5zZXJ0L2RlbGV0ZS4gVGhpcyBpcyBlbmFibGVkIGJ5IGRl
ZmF1bHQuCi0gICAgdm9pZCBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgdHJh
aWxpbmcgd2hpdGVzcGFjZSBzZWxlY3Rpb24gb24gZG91YmxlIGNsaWNrLgotICAgIHZvaWQgc2V0
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHBhdXNl
VHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRX
aXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZW5h
YmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgZGlzYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkaXNhYmxlSW1hZ2VMb2FkaW5n
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEljb25E
YXRhYmFzZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgLy8gR3JhbnRzIHBlcm1pc3Np
b24gZm9yIGRlc2t0b3Agbm90aWZpY2F0aW9ucyB0byBhbiBvcmlnaW4KLSAgICB2b2lkIGdyYW50
RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIC8vIFNpbXVsYXRlcyBhIGNsaWNrIG9uIGEgZGVza3RvcCBub3RpZmlj
YXRpb24uCi0gICAgdm9pZCBzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0RG9t
YWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIERlYWxzIHdpdGgg
V2ViIEF1ZGlvIFdBViBmaWxlIGRhdGEuCi0gICAgdm9pZCBzZXRBdWRpb0RhdGEoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIGNvbnN0IFdlYktpdDo6V2ViQXJyYXlC
dWZmZXJWaWV3JiBhdWRpb0RhdGEoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvRGF0YTsgfSAKLQot
ICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgc3R1YnMuCi0gICAgLy8gRklYTUU6IEltcGxl
bWVudCBhbnkgb2YgdGhlc2UgdGhhdCBhcmUgbmVlZGVkIHRvIHBhc3MgdGhlIGxheW91dCB0ZXN0
cy4KLSAgICB2b2lkIGR1bXBBc1dlYkFyY2hpdmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVy
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRpc3BsYXko
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZGlzcGxheUlu
dmFsaWRhdGVkUmVnaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjbGVhckJhY2tGb3J3YXJkTGlzdChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBrZWVwV2ViSGlzdG9yeShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdG9yZVdlYlNjcmlw
dE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBh
Y2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgb2JqQ0NsYXNzTmFtZU9mKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENhbGxD
bG9zZU9uV2ViVmlld3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0WFNTQXVk
aXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEFsbG93RGlzcGxheU9m
SW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29u
dGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIGV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0
SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLQotICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBu
b25leGlzdGVudCBtZXRob2QgaXMgY2FsbGVkIG9uCi0gICAgLy8gdGhlIGxheW91dCB0ZXN0IGNv
bnRyb2xsZXIgb2JqZWN0LgotICAgIC8vIEl0IGlzIHVzZWZ1bGwgdG8gY2F0Y2ggdHlwb3MgaW4g
dGhlIEphdmFTY3JpcHQgY29kZSAoYSBmZXcgbGF5b3V0IHRlc3RzCi0gICAgLy8gZG8gaGF2ZSB0
eXBvcyBpbiB0aGVtKSBhbmQgaXQgYWxsb3dzIHRoZSBzY3JpcHQgdG8gY29udGludWUgcnVubmlu
ZyBpbgotICAgIC8vIHRoYXQgY2FzZSAoYXMgdGhlIE1hYyBkb2VzKS4KLSAgICB2b2lkIGZhbGxi
YWNrTWV0aG9kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdoaXRlbGlzdGluZy4KLSAg
ICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENsZWFy
cyBhbGwgYXBwbGljYXRpb24gY2FjaGVzLgotICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlvbkNh
Y2hlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8gQ2xlYXJz
IGFuIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCi0gICAgdm9pZCBjbGVhckFwcGxp
Y2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotICAgIC8vIFJldHVybnMgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2FjaGVzLgot
ICAgIHZvaWQgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICAvLyBTZXRzIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBxdW90
YSBmb3IgdGhlIGxvY2FsaG9zdCBvcmlnaW4uCi0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hl
T3JpZ2luUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIC8v
IFJldHVybnMgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmln
aW4uCi0gICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENsZWFycyBhbGwgZGF0YWJh
c2VzLgotICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgcXVvdGEgZm9yIGFsbCBvcmln
aW5zCi0gICAgdm9pZCBzZXREYXRhYmFzZVF1b3RhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLQotICAgIC8vIENhbGxzIHNldGxvY2FsZShMQ19BTEwsIC4uLikgZm9yIGEg
c3BlY2lmaWVkIGxvY2FsZS4KLSAgICAvLyBSZXNldHMgYmV0d2VlbiB0ZXN0cy4KLSAgICB2b2lk
IHNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQot
ICAgIC8vIENhdXNlcyBsYXlvdXQgdG8gaGFwcGVuIGFzIGlmIHRhcmdldHRlZCB0byBwcmludGVk
IHBhZ2VzLgotICAgIHZvaWQgc2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2Ugd2hlcmUgdGhlIHNw
ZWNpZmllZCBlbGVtZW50IHdpbGwgYmUgcHV0LgotICAgIHZvaWQgcGFnZU51bWJlckZvckVsZW1l
bnRCeUlkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEdl
dHMgdGhlIHBhZ2Ugc2l6ZSBhbmQgbWFyZ2lucyBmb3IgYSBwcmludGVkIHBhZ2UuCi0gICAgdm9p
ZCBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgcGFnZSBib3gg
aGFzIGN1c3RvbSBwYWdlIHNpemUgc3R5bGUgZm9yCi0gICAgLy8gcHJpbnRpbmcuCi0gICAgdm9p
ZCBoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIC8vIEdldHMgdGhlIHBhZ2UtcmVsYXRlZCBwcm9wZXJ0eSBmb3IgcHJpbnRl
ZCBjb250ZW50Ci0gICAgdm9pZCBwYWdlUHJvcGVydHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGJlIHBy
aW50ZWQuCi0gICAgdm9pZCBudW1iZXJPZlBhZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLQotICAgIC8vIEdldHMgdGhlIG51bWJlciBvZiBnZW9sb2NhdGlvbiBwZXJt
aXNzaW9ucyByZXF1ZXN0cyBwZW5kaW5nLgotICAgIHZvaWQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgLy8gQWxsb3dzIGxheW91dCB0ZXN0cyB0byBleGVjIHNjcmlwdHMgYXQgV2Vi
SW5zcGVjdG9yIHNpZGUuCi0gICAgdm9pZCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEZvcmNlcyB0aGUgc2VsZWN0
aW9uIGNvbG9ycyBmb3IgdGVzdGluZyB1bmRlciBMaW51eC4KLSAgICB2b2lkIGZvcmNlUmVkU2Vs
ZWN0aW9uQ29sb3JzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIEFkZHMgYSB1c2VyIHNjcmlwdCBvciB1c2VyIHN0eWxlIHNoZWV0IHRvIGJlIGluamVjdGVk
IGludG8gbmV3IGRvY3VtZW50cy4KLSAgICB2b2lkIGFkZFVzZXJTY3JpcHQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRGV2aWNlT3JpZW50
YXRpb24gcmVsYXRlZCBmdW5jdGlvbnMKLSAgICB2b2lkIHNldE1vY2tEZXZpY2VPcmllbnRhdGlv
bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBHZW9sb2Nh
dGlvbiByZWxhdGVkIGZ1bmN0aW9ucy4KLSAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBhcml0
eSB3aXRoIG9iamVjdCBtb2RlbCBleHBvc2VkIGJ5IGdsb2JhbCBMYXlvdXRUZXN0Q29udHJvbGxl
ci4KLSAgICB2b2lkIGFib3J0TW9kYWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgLy8gU3BlZWNoIGlucHV0IHJlbGF0ZWQgZnVuY3Rpb25zLgotI2lmIEVOQUJM
RShJTlBVVF9TUEVFQ0gpCi0gICAgdm9pZCBhZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0TW9ja1NwZWVjaElu
cHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotI2VuZGlm
Ci0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLSAgICB2b2lkIGFkZE1vY2tTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSNlbmRpZgotICAgIHZvaWQg
c3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICB2b2lkIGxheWVyVHJlZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENw
cFZhcmlhbnQqIHJlc3VsdCk7Ci0KLSAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCk7Ci0KLSAgICB2b2lk
IG1hcmtlclRleHRGb3JMaXN0SXRlbShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2YWwoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1l
bnQgdG8gYmUgYW4gaW5wdXQgZWxlbWVudCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBh
IGJvb2xlYW4uCi0gICAgLy8gRm9yd2FyZHMgdGhlIHNldEF1dG9maWxsZWQoKSBjYWxsIHRvIHRo
ZSBlbGVtZW50LgotICAgIHZvaWQgc2V0QXV0b2ZpbGxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBi
ZSBhbiBpbnB1dCBlbGVtZW50IGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgc3RyaW5n
IHZhbHVlLgotICAgIC8vIEZvcndhcmRzIHRoZSBzZXRWYWx1ZUZvclVzZXIoKSBjYWxsIHRvIHRo
ZSBlbGVtZW50LgotICAgIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIExvY2FsU3RvcmFnZSBvcmlnaW4tcmVsYXRlZAot
ICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBs
b2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzeW5jTG9jYWxT
dG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFdl
YlBlcm1pc3Npb25DbGllbnQgcmVsYXRlZC4KLSAgICB2b2lkIHNldEltYWdlc0FsbG93ZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0U2NyaXB0c0Fs
bG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0
U3RvcmFnZUFsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgc2V0UGx1Z2luc0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgcGx1
Z2lucy4KLSAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFN3aXRjaCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcGFn
ZS4KLSAgICB2b2lkIHNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlc2V0UGFnZVZpc2liaWxpdHkoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2hhbmdlcyB0aGUgZGlyZWN0aW9uIG9m
IHRoZSBmb2N1c2VkIGVsZW1lbnQuCi0gICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgc2V0U2hvdWxkU3RheU9u
UGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgdm9pZCBlbmFibGVGaXhlZExheW91dE1vZGUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0Rml4ZWRMYXlvdXRTaXplKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgc2VsZWN0aW9u
QXNNYXJrdXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8g
U3dpdGNoIHRoZSBsaW5rIGRldGVjdGlvbi4KLSAgICB2b2lkIHNldEF1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkKGJvb2wpOwotCi0jaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKLSAgICB2b2lk
IGRpZExvc2VQb2ludGVyTG9jayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRQb2ludGVyTG9ja1dpbGxG
YWlsQXN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
I2VuZGlmCi0KLSAgICB2b2lkIHdvcmtlclRocmVhZENvdW50KENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIEV4cGVjdHMgb25lIHN0cmluZyBhcmd1bWVudCBmb3Igc2VuZGluZyBzdWNjZXNzZnVsIHJl
c3VsdCwgemVybwotICAgIC8vIGFyZ3VtZW50cyBmb3Igc2VuZGluZyBhIGZhaWx1cmUgcmVzdWx0
LgotICAgIHZvaWQgc2VuZFdlYkludGVudFJlc3BvbnNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENhdXNlIHRoZSB3ZWIgaW50ZW50IHRvIGJlIGRlbGl2
ZXJlZCB0byB0aGlzIGNvbnRleHQuCi0gICAgdm9pZCBkZWxpdmVyV2ViSW50ZW50KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEVuYWJsZXMgb3IgZGlzYWJs
ZXMgc3VicGl4ZWwgcG9zaXRpb25pbmcgKGkuZS4gZnJhY3Rpb25hbCBYIHBvc2l0aW9ucyBmb3IK
LSAgICAvLyBnbHlwaHMpIGluIHRleHQgcmVuZGVyaW5nIG9uIExpbnV4LiBTaW5jZSB0aGlzIG1l
dGhvZCBjaGFuZ2VzIGdsb2JhbAotICAgIC8vIHNldHRpbmdzLCB0ZXN0cyB0aGF0IGNhbGwgaXQg
bXVzdCB1c2UgdGhlaXIgb3duIGN1c3RvbSBmb250IGZhbWlseSBmb3IKLSAgICAvLyBhbGwgdGV4
dCB0aGF0IHRoZXkgcmVuZGVyLiBJZiBub3QsIGFuIGFscmVhZHktY2FjaGVkIHN0eWxlIHdpbGwg
YmUgdXNlZCwKLSAgICAvLyByZXN1bHRpbmcgaW4gdGhlIGNoYW5nZWQgc2V0dGluZyBiZWluZyBp
Z25vcmVkLgotICAgIHZvaWQgc2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gVXNlZCB0byBzZXQgdGhlIGRldmlj
ZSBzY2FsZSBmYWN0b3IuCi0gICAgdm9pZCBzZXRCYWNraW5nU2NhbGVGYWN0b3IoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gUmV0cmlldmVzIHRoZSB0ZXh0
IHN1cnJvdW5kaW5nIGEgcG9zaXRpb24gaW4gYSB0ZXh0IG5vZGUuCi0gICAgLy8gRXhwZWN0cyB0
aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSB0ZXh0IG5vZGUsIHRoZSBzZWNvbmQgYW5kIHRoaXJk
IHRvIGJlCi0gICAgLy8gcG9pbnQgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIG5vZGUgYW5k
IHRoZSBmb3VydGggdGhlIG1heGltdW0gdGV4dAotICAgIC8vIGxlbmd0aCB0byByZXRyaWV2ZS4K
LSAgICB2b2lkIHRleHRTdXJyb3VuZGluZ05vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi1wdWJsaWM6Ci0gICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBu
b3QgZXhwb3NlZCB0byBKYXZhU2NyaXB0LgotICAgIHZvaWQgc2V0V29ya1F1ZXVlRnJvemVuKGJv
b2wgZnJvemVuKSB7IG1fd29ya1F1ZXVlLnNldEZyb3plbihmcm96ZW4pOyB9Ci0KLSAgICBib29s
IHNob3VsZER1bXBBc0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNBdWRpbzsgfSAKLSAg
ICB2b2lkIHNldFNob3VsZER1bXBBc0F1ZGlvKGJvb2wgZHVtcEFzQXVkaW8pIHsgbV9kdW1wQXNB
dWRpbyA9IGR1bXBBc0F1ZGlvOyB9IAotICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4dCgpIHsgcmV0
dXJuIG1fZHVtcEFzVGV4dDsgfQotICAgIHZvaWQgc2V0U2hvdWxkRHVtcEFzVGV4dChib29sIHZh
bHVlKSB7IG1fZHVtcEFzVGV4dCA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7IH0KLSAgICBib29s
IHNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSB7IHJldHVybiBtX2R1bXBGcmFtZUxvYWRD
YWxsYmFja3M7IH0KLSAgICB2b2lkIHNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoYm9v
bCB2YWx1ZSkgeyBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB2YWx1ZTsgfQotICAgIGJvb2wg
c2hvdWxkRHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpIHsgcmV0dXJuIG1fZHVtcFByb2dy
ZXNzRmluaXNoZWRDYWxsYmFjazsgfQotICAgIHZvaWQgc2V0U2hvdWxkRHVtcFByb2dyZXNzRmlu
aXNoZWRDYWxsYmFjayhib29sIHZhbHVlKSB7IG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFj
ayA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENh
bGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3M7
IH0KLSAgICB2b2lkIHNldFNob3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
KGJvb2wgdmFsdWUpIHsgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyA9IHZh
bHVlOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkge3JldHVy
biBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3M7IH0KLSAgICB2b2lkIHNldFNob3VsZER1bXBS
ZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGJvb2wgdmFsdWUpIHsgbV9kdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcygpIHtyZXR1cm4gbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlczsg
fQotICAgIGJvb2wgc2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcFdp
bmRvd1N0YXR1c0NoYW5nZXM7IH0KLSAgICBib29sIHNob3VsZER1bXBTZWxlY3Rpb25SZWN0KCkg
eyByZXR1cm4gbV9kdW1wU2VsZWN0aW9uUmVjdDsgfQotICAgIGJvb2wgc2hvdWxkRHVtcEJhY2tG
b3J3YXJkTGlzdCgpIHsgcmV0dXJuIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsgfQotICAgIGJvb2wg
c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpIHsgcmV0dXJuIG1fZHVtcFRpdGxlQ2hhbmdlczsgfQot
ICAgIGJvb2wgc2hvdWxkRHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MoKSB7IHJldHVybiBt
X2R1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wQ2hp
bGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIHsgcmV0dXJuIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQ
b3NpdGlvbnM7IH0KLSAgICBib29sIHNob3VsZER1bXBDaGlsZEZyYW1lc0FzVGV4dCgpIHsgcmV0
dXJuIG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0OyB9Ci0gICAgYm9vbCBzaG91bGRHZW5lcmF0ZVBp
eGVsUmVzdWx0cygpIHsgcmV0dXJuIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHM7IH0KLSAgICB2b2lk
IHNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGJvb2wgdmFsdWUpIHsgbV9nZW5lcmF0ZVBp
eGVsUmVzdWx0cyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wQ3JlYXRlVmlldygpIHsg
cmV0dXJuIG1fZHVtcENyZWF0ZVZpZXc7IH0KLSAgICBib29sIGFjY2VwdHNFZGl0aW5nKCkgeyBy
ZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsgfQotICAgIGJvb2wgY2FuT3BlbldpbmRvd3MoKSB7IHJl
dHVybiBtX2Nhbk9wZW5XaW5kb3dzOyB9Ci0gICAgYm9vbCBzaG91bGRBZGRGaWxlVG9QYXN0ZWJv
YXJkKCkgeyByZXR1cm4gbV9zaG91bGRBZGRGaWxlVG9QYXN0ZWJvYXJkOyB9Ci0gICAgYm9vbCBz
dG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkgeyByZXR1cm4gbV9zdG9wUHJvdmlzaW9uYWxGcmFt
ZUxvYWRzOyB9Ci0gICAgYm9vbCBkZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkgeyByZXR1cm4g
bV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOyB9Ci0gICAgdm9pZCBzZXRTaG93RGVidWdMYXll
clRyZWUoYm9vbCB2YWx1ZSkgeyBtX3Nob3dEZWJ1Z0xheWVyVHJlZSA9IHZhbHVlOyB9Ci0gICAg
dm9pZCBzZXRUaXRsZVRleHREaXJlY3Rpb24oV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9uIGRpcikK
LSAgICB7Ci0gICAgICAgIG1fdGl0bGVUZXh0RGlyZWN0aW9uLnNldChkaXIgPT0gV2ViS2l0OjpX
ZWJUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQgPyAibHRyIiA6ICJydGwiKTsKLSAgICB9Ci0KLSAg
ICBib29sIHNob3VsZEludGVyY2VwdFBvc3RNZXNzYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVyY2VwdFBvc3RNZXNzYWdlLmlzQm9vbCgpICYmIG1faW50ZXJjZXB0UG9zdE1lc3Nh
Z2UudG9Cb29sZWFuKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJc1ByaW50aW5nKGJvb2wgdmFs
dWUpIHsgbV9pc1ByaW50aW5nID0gdmFsdWU7IH0KLSAgICBib29sIGlzUHJpbnRpbmcoKSB7IHJl
dHVybiBtX2lzUHJpbnRpbmc7IH0KLQotICAgIGJvb2wgdGVzdFJlcGFpbnQoKSBjb25zdCB7IHJl
dHVybiBtX3Rlc3RSZXBhaW50OyB9Ci0gICAgYm9vbCBzd2VlcEhvcml6b250YWxseSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3dlZXBIb3Jpem9udGFsbHk7IH0KLQotICAgIHZvaWQgc2V0SGFzQ3VzdG9t
RnVsbFNjcmVlbkJlaGF2aW9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICBib29sIGhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yOyB9Ci0KLSAgICAvLyBDYWxsZWQgYnkgdGhlIHdl
YnZpZXcgZGVsZWdhdGUgd2hlbiB0aGUgdG9wbGV2ZWwgZnJhbWUgbG9hZCBpcyBkb25lLgotICAg
IHZvaWQgbG9jYXRpb25DaGFuZ2VEb25lKCk7Ci0KLSAgICAvLyBDYWxsZWQgYnkgdGhlIHdlYnZp
ZXcgZGVsZWdhdGUgd2hlbiB0aGUgcG9saWN5IGRlbGVnYXRlIHJ1bnMgaWYgdGhlCi0gICAgLy8g
d2FpdEZvclBvbGljeURlbGVnYXRlIHdhcyBjYWxsZWQuCi0gICAgdm9pZCBwb2xpY3lEZWxlZ2F0
ZURvbmUoKTsKLQotICAgIC8vIFJlaW5pdGlhbGl6ZXMgYWxsIHN0YXRpYyB2YWx1ZXMuIFRoZSBy
ZXNldCgpIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkCi0gICAgLy8gYmVmb3JlIHRoZSBzdGFydCBv
ZiBlYWNoIHRlc3QgKGN1cnJlbnRseSBmcm9tIFRlc3RTaGVsbDo6cnVuRmlsZVRlc3QpLgotICAg
IHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIEEgc2luZ2xlIGl0ZW0gaW4gdGhlIHdvcmsgcXVldWUu
Ci0gICAgY2xhc3MgV29ya0l0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+V29y
a0l0ZW0oKSB7IH0KLQotICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdGFydGVkIGEg
bG9hZC4KLSAgICAgICAgdmlydHVhbCBib29sIHJ1bihUZXN0U2hlbGwqKSA9IDA7Ci0gICAgfTsK
LQotICAgIFRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLSAg
ICBib29sIHNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZDsgfQor
ICAgIGV4cGxpY2l0IExheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCopOwogCiBwcml2YXRl
OgotICAgIGZyaWVuZCBjbGFzcyBXb3JrSXRlbTsKLSAgICBmcmllbmQgY2xhc3MgV29ya1F1ZXVl
OwotCi0gICAgLy8gSGVscGVyIGNsYXNzIGZvciBtYW5hZ2luZyBldmVudHMgcXVldWVkIGJ5IG1l
dGhvZHMgbGlrZSBxdWV1ZUxvYWQgb3IKLSAgICAvLyBxdWV1ZVNjcmlwdC4KLSAgICBjbGFzcyBX
b3JrUXVldWUgewotICAgIHB1YmxpYzoKLSAgICAgICAgV29ya1F1ZXVlKExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyKSA6IG1fZnJvemVuKGZhbHNlKSwgbV9jb250cm9sbGVyKGNvbnRy
b2xsZXIpIHsgfQotICAgICAgICB2aXJ0dWFsIH5Xb3JrUXVldWUoKTsKLSAgICAgICAgdm9pZCBw
cm9jZXNzV29ya1Nvb24oKTsKLQotICAgICAgICAvLyBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIGNs
YXNzIGJldHdlZW4gdGVzdHMuCi0gICAgICAgIHZvaWQgcmVzZXQoKTsKLQotICAgICAgICB2b2lk
IGFkZFdvcmsoV29ya0l0ZW0qKTsKLQotICAgICAgICB2b2lkIHNldEZyb3plbihib29sIGZyb3pl
bikgeyBtX2Zyb3plbiA9IGZyb3plbjsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biBtX3F1ZXVlLmlzRW1wdHkoKTsgfQotICAgICAgICBUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJl
dHVybiAmbV90YXNrTGlzdDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBwcm9jZXNz
V29yaygpOwotICAgICAgICBjbGFzcyBXb3JrUXVldWVUYXNrOiBwdWJsaWMgTWV0aG9kVGFzazxX
b3JrUXVldWU+IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgV29ya1F1ZXVlVGFzayhX
b3JrUXVldWUqIG9iamVjdCk6IE1ldGhvZFRhc2s8V29ya1F1ZXVlPihvYmplY3QpIHsgfQotICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5wcm9jZXNzV29y
aygpOyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICAg
ICAgRGVxdWU8V29ya0l0ZW0qPiBtX3F1ZXVlOwotICAgICAgICBib29sIG1fZnJvemVuOwotICAg
ICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogbV9jb250cm9sbGVyOwotICAgIH07Ci0KLSAgICAv
LyBTdXBwb3J0IGZvciBvdmVycmlkZVByZWZlcmVuY2UuCi0gICAgYm9vbCBjcHBWYXJpYW50VG9C
b29sKGNvbnN0IENwcFZhcmlhbnQmKTsKLSAgICBpbnQzMl90IGNwcFZhcmlhbnRUb0ludDMyKGNv
bnN0IENwcFZhcmlhbnQmKTsKLSAgICBXZWJLaXQ6OldlYlN0cmluZyBjcHBWYXJpYW50VG9XZWJT
dHJpbmcoY29uc3QgQ3BwVmFyaWFudCYpOwotICAgIFZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4g
Y3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYpOwotCi0gICAgdm9p
ZCBsb2dFcnJvclRvQ29uc29sZShjb25zdCBzdGQ6OnN0cmluZyYpOwotICAgIHZvaWQgY29tcGxl
dGVOb3RpZnlEb25lKGJvb2wgaXNUaW1lb3V0KTsKLSAgICBjbGFzcyBOb3RpZnlEb25lVGltZWRP
dXRUYXNrOiBwdWJsaWMgTWV0aG9kVGFzazxMYXlvdXRUZXN0Q29udHJvbGxlcj4gewotICAgIHB1
YmxpYzoKLSAgICAgICAgTm90aWZ5RG9uZVRpbWVkT3V0VGFzayhMYXlvdXRUZXN0Q29udHJvbGxl
ciogb2JqZWN0KTogTWV0aG9kVGFzazxMYXlvdXRUZXN0Q29udHJvbGxlcj4ob2JqZWN0KSB7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5jb21wbGV0ZU5v
dGlmeURvbmUodHJ1ZSk7IH0KLSAgICB9OwotCi0KLSAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVsZW1lbnRJZCk7Ci0gICAg
Ym9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViS2l0OjpX
ZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiBlbGVtZW50SWQpOwotICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7Ci0gICAgaW50IG51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucygpOwotCi0gICAgLy8gVXNlZCBmb3IgdGVzdCB0aW1lb3V0cy4KLSAgICBU
YXNrTGlzdCBtX3Rhc2tMaXN0OwotCi0gICAgLy8gTm9uLW93bmluZyBwb2ludGVyLiBUaGUgTGF5
b3V0VGVzdENvbnRyb2xsZXIgaXMgb3duZWQgYnkgdGhlIGhvc3QuCiAgICAgVGVzdFNoZWxsKiBt
X3NoZWxsOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBwcm9kdWNlIGEg
cGxhaW4gdGV4dCBkdW1wIHJhdGhlciB0aGFuIGEKLSAgICAvLyB0ZXh0IHJlcHJlc2VudGF0aW9u
IG9mIHRoZSByZW5kZXJlci4KLSAgICBib29sIG1fZHVtcEFzVGV4dDsKLQotICAgIC8vIElmIHRy
dWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgYmFzZTY0IGVuY29kZWQgV0FWRSBmaWxl
LgotICAgIGJvb2wgbV9kdW1wQXNBdWRpbzsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3No
ZWxsIHdpbGwgd3JpdGUgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBlYWNoIGVkaXRpbmcKLSAgICAv
LyBjb21tYW5kLgotICAgIGJvb2wgbV9kdW1wRWRpdGluZ0NhbGxiYWNrczsKLQotICAgIC8vIElm
IHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgZHJhdyB0aGUgYm91bmRzIG9mIHRoZSBjdXJyZW50
IHNlbGVjdGlvbiByZWN0Ci0gICAgLy8gdGFraW5nIHBvc3NpYmxlIHRyYW5zZm9ybXMgb2YgdGhl
IHNlbGVjdGlvbiByZWN0IGludG8gYWNjb3VudC4KLSAgICBib29sIG1fZHVtcFNlbGVjdGlvblJl
Y3Q7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRlc2Ny
aXB0aXZlIGxpbmUgZm9yIGVhY2ggZnJhbWUKLSAgICAvLyBsb2FkIGNhbGxiYWNrLgotICAgIGJv
b2wgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rf
c2hlbGwgd2lsbCBvdXRwdXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciB0aGUgcHJvZ3Jlc3MKLSAg
ICAvLyBmaW5pc2hlZCBjYWxsYmFjay4KLSAgICBib29sIG1fZHVtcFByb2dyZXNzRmluaXNoZWRD
YWxsYmFjazsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEg
bGluZSBvZiB0aGUgdXNlciBnZXN0dXJlIHN0YXR1cwotICAgIC8vIHRleHQgZm9yIHNvbWUgZnJh
bWUgbG9hZCBjYWxsYmFja3MuCi0gICAgYm9vbCBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQg
YSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBlYWNoIHJlc291cmNlCi0gICAgLy8gbG9hZCBjYWxsYmFj
ay4KLSAgICBib29sIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsKLSAgICAKLSAgICAvLyBJ
ZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCB0aGUgTUlNRSB0eXBlIGZvciBlYWNo
IHJlc291cmNlIHRoYXQgCi0gICAgLy8gd2FzIGxvYWRlZC4KLSAgICBib29sIG1fZHVtcFJlc291
cmNlUmVzcG9uc2VNSU1FVHlwZXM7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3
aWxsIHByb2R1Y2UgYSBkdW1wIG9mIHRoZSBiYWNrIGZvcndhcmQgbGlzdCBhcwotICAgIC8vIHdl
bGwuCi0gICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7Ci0KLSAgICAvLyBJZiB0cnVlLCB0
aGUgdGVzdF9zaGVsbCB3aWxsIHByaW50IG91dCB0aGUgY2hpbGQgZnJhbWUgc2Nyb2xsIG9mZnNl
dHMgYXMKLSAgICAvLyB3ZWxsLgotICAgIGJvb2wgbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0
aW9uczsKLQotICAgIC8vIElmIHRydWUgYW5kIGlmIGR1bXBfYXNfdGV4dF8gaXMgdHJ1ZSwgdGhl
IHRlc3Rfc2hlbGwgd2lsbCByZWN1cnNpdmVseQotICAgIC8vIGR1bXAgYWxsIGZyYW1lcyBhcyBw
bGFpbiB0ZXh0LgotICAgIGJvb2wgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQ7Ci0KLSAgICAvLyBJ
ZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIGR1bXAgYWxsIGNoYW5nZXMgdG8gd2luZG93LnN0
YXR1cy4KLSAgICBib29sIG1fZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXM7Ci0KLSAgICAvLyBJZiB0
cnVlLCBvdXRwdXQgYSBtZXNzYWdlIHdoZW4gdGhlIHBhZ2UgdGl0bGUgaXMgY2hhbmdlZC4KLSAg
ICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKLQotICAgIC8vIElmIHRydWUsIG91dHB1dCBhIGRl
c2NyaXB0aXZlIGxpbmUgZWFjaCB0aW1lIGEgcGVybWlzc2lvbiBjbGllbnQKLSAgICAvLyBjYWxs
YmFjayBpcyBpbnZva2VkLiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgYWxsb3dJbWFn
ZS4KLSAgICBib29sIG1fZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3M7Ci0KLSAgICAvLyBJ
ZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIGdlbmVyYXRlIHBpeGVsIHJlc3VsdHMgaW4gZHVt
cEFzVGV4dCBtb2RlCi0gICAgYm9vbCBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzOwotCi0gICAgLy8g
SWYgdHJ1ZSwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBlYWNoIHRpbWUgV2ViVmlld0NsaWVu
dDo6Y3JlYXRlVmlldwotICAgIC8vIGlzIGludm9rZWQuCi0gICAgYm9vbCBtX2R1bXBDcmVhdGVW
aWV3OwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIGVsZW1lbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGVk
aXRhYmxlLiBUaGlzIHZhbHVlIGlzIHJldHVybmVkCi0gICAgLy8gZnJvbSB2YXJpb3VzIGVkaXRp
bmcgY2FsbGJhY2tzIHRoYXQgYXJlIGNhbGxlZCBqdXN0IGJlZm9yZSBlZGl0IG9wZXJhdGlvbnMK
LSAgICAvLyBhcmUgYWxsb3dlZC4KLSAgICBib29sIG1fYWNjZXB0c0VkaXRpbmc7Ci0KLSAgICAv
LyBJZiB0cnVlLCBuZXcgd2luZG93cyBjYW4gYmUgb3BlbmVkIHZpYSBqYXZhc2NyaXB0IG9yIGJ5
IHBsdWdpbnMuIEJ5Ci0gICAgLy8gZGVmYXVsdCwgc2V0IHRvIGZhbHNlIGFuZCBjYW4gYmUgdG9n
Z2xlZCB0byB0cnVlIHVzaW5nCi0gICAgLy8gc2V0Q2FuT3BlbldpbmRvd3MoKS4KLSAgICBib29s
IG1fY2FuT3BlbldpbmRvd3M7Ci0KLSAgICAvLyBXaGVuIHJlc2V0IGlzIGNhbGxlZCwgZ28gdGhy
b3VnaCBhbmQgY2xvc2UgYWxsIGJ1dCB0aGUgbWFpbiB0ZXN0IHNoZWxsCi0gICAgLy8gd2luZG93
LiBCeSBkZWZhdWx0LCBzZXQgdG8gdHJ1ZSBidXQgdG9nZ2xlZCB0byBmYWxzZSB1c2luZwotICAg
IC8vIHNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSgpLgotICAgIGJvb2wgbV9j
bG9zZVJlbWFpbmluZ1dpbmRvd3M7Ci0KLSAgICAvLyBJZiB0cnVlLCBwaXhlbCBkdW1wIHdpbGwg
YmUgcHJvZHVjZWQgYXMgYSBzZXJpZXMgb2YgMXB4LXRhbGwsIHZpZXctd2lkZQotICAgIC8vIGlu
ZGl2aWR1YWwgcGFpbnRzIG92ZXIgdGhlIGhlaWdodCBvZiB0aGUgdmlldy4KLSAgICBib29sIG1f
dGVzdFJlcGFpbnQ7Ci0gICAgLy8gSWYgdHJ1ZSBhbmQgdGVzdF9yZXBhaW50XyBpcyB0cnVlIGFz
IHdlbGwsIHBpeGVsIGR1bXAgd2lsbCBiZSBwcm9kdWNlZCBhcwotICAgIC8vIGEgc2VyaWVzIG9m
IDFweC13aWRlLCB2aWV3LXRhbGwgcGFpbnRzIGFjcm9zcyB0aGUgd2lkdGggb2YgdGhlIHZpZXcu
Ci0gICAgYm9vbCBtX3N3ZWVwSG9yaXpvbnRhbGx5OwotCi0gICAgLy8gSWYgdHJ1ZSBhbmQgYSBk
cmFnIHN0YXJ0cywgYWRkcyBhIGZpbGUgdG8gdGhlIGRyYWcmZHJvcCBjbGlwYm9hcmQuCi0gICAg
Ym9vbCBtX3Nob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQ7Ci0KLSAgICAvLyBJZiB0cnVlLCBzdG9w
cyBwcm92aXNpb25hbCBmcmFtZSBsb2FkcyBkdXJpbmcgdGhlCi0gICAgLy8gRGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFjay4KLSAgICBib29sIG1fc3RvcFByb3Zpc2lvbmFs
RnJhbWVMb2FkczsKLQotICAgIC8vIElmIHRydWUsIGRvbid0IGR1bXAgb3V0cHV0IHVudGlsIG5v
dGlmeURvbmUgaXMgY2FsbGVkLgotICAgIGJvb2wgbV93YWl0VW50aWxEb25lOwotCi0gICAgLy8g
SWYgZmFsc2UsIGFsbCBuZXcgcmVxdWVzdHMgd2lsbCBub3QgZGVmZXIgdGhlIG1haW4gcmVzb3Vy
Y2UgZGF0YSBsb2FkLgotICAgIGJvb2wgbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOwotCi0g
ICAgLy8gSWYgdHJ1ZSwgd2Ugd2lsbCBzaG93IGV4dGVuZGVkIGluZm9ybWF0aW9uIGluIHRoZSBn
cmFwaGljcyBsYXllciB0cmVlLgotICAgIGJvb2wgbV9zaG93RGVidWdMYXllclRyZWU7Ci0KLSAg
ICAvLyBJZiB0cnVlLCBsYXlvdXQgaXMgdG8gdGFyZ2V0IHByaW50ZWQgcGFnZXMuCi0gICAgYm9v
bCBtX2lzUHJpbnRpbmc7Ci0KLSAgICBXb3JrUXVldWUgbV93b3JrUXVldWU7Ci0KLSAgICBDcHBW
YXJpYW50IG1fZ2xvYmFsRmxhZzsKLQotICAgIC8vIEJvdW5kIHZhcmlhYmxlIGNvdW50aW5nIHRo
ZSBudW1iZXIgb2YgdG9wIFVSTHMgdmlzaXRlZC4KLSAgICBDcHBWYXJpYW50IG1fd2ViSGlzdG9y
eUl0ZW1Db3VudDsKLQotICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRyYWNraW5nIHRoZSBkaXJlY3Rp
b25hbGl0eSBvZiB0aGUgPHRpdGxlPiB0YWcuCi0gICAgQ3BwVmFyaWFudCBtX3RpdGxlVGV4dERp
cmVjdGlvbjsKLQotICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRvIHJldHVybiB0aGUgbmFtZSBvZiB0
aGlzIHBsYXRmb3JtIChjaHJvbWl1bSkuCi0gICAgQ3BwVmFyaWFudCBtX3BsYXRmb3JtTmFtZTsK
LQotICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRvIHNldCB3aGV0aGVyIHBvc3RNZXNzYWdlcyBzaG91
bGQgYmUgaW50ZXJjZXB0ZWQgb3Igbm90Ci0gICAgQ3BwVmFyaWFudCBtX2ludGVyY2VwdFBvc3RN
ZXNzYWdlOwotCi0gICAgV2ViS2l0OjpXZWJVUkwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOwot
Ci0gICAgLy8gV0FWIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGhlcmUuCi0gICAgV2ViS2l0OjpXZWJB
cnJheUJ1ZmZlclZpZXcgbV9hdWRpb0RhdGE7Ci0KLSAgICAvLyBNb2NrIG9iamVjdCBmb3IgdGVz
dGluZyBkZWxpdmVyaW5nIHdlYiBpbnRlbnRzLgotICAgIE93blB0cjxXZWJLaXQ6OldlYkRlbGl2
ZXJlZEludGVudENsaWVudD4gbV9pbnRlbnRDbGllbnQ7Ci0KLSAgICBib29sIG1fc2hvdWxkU3Rh
eU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7Ci0KLSAgICAvLyBJZiB0cnVlLCBjYWxs
cyB0byBXZWJWaWV3SG9zdDo6ZW50ZXIvZXhpdEZ1bGxTY3JlZW5Ob3cgd2lsbCBub3QgcmVzdWx0
IGluIAotICAgIC8vIGNhbGxzIHRvIERvY3VtZW50Ojp3aWxsL2RpZC9FbnRlci9FeGl0RnVsbFNj
cmVlbi4KLSAgICBib29sIG1faGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yOwogfTsKIAogI2Vu
ZGlmIC8vIExheW91dFRlc3RDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdERlbGVnYXRlLmggYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3REZWxlZ2F0ZS5oCmluZGV4IDRkMWFmN2E3
Mjc4ZDM1NjY2MDljYTc0YWI1NDIwYmQyMGE2ZTQ4M2EuLjFlM2Y4Y2E3ZjlhY2Q2ZDY2MmYxOGUz
YWU2MzRkNzI0ZjQ1ZmUxMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvVGVzdERlbGVnYXRlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9UZXN0RGVsZWdhdGUuaApAQCAtNDUsNiArNDUsMjEgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBmaWxsU3BlbGxpbmdTdWdnZXN0aW9uTGlzdChjb25zdCBX
ZWJLaXQ6OldlYlN0cmluZyYgd29yZCwgVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiogc3VnZ2Vz
dGlvbnMpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmQoY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOwogICAgIHZpcnR1YWwg
V2ViS2l0OjpXZWJDb250ZXh0TWVudURhdGEqIGxhc3RDb250ZXh0TWVudURhdGEoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkZyYW1lKiB0b3BMb2FkaW5nRnJhbWUoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdGVzdEZpbmlzaGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB0ZXN0VGltZWRPdXQoKSA9IDA7CisgICAgdmlydHVhbCBpbnQgbGF5b3V0VGVzdFRpbWVvdXQo
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFVSTChjb25zdCBXZWJLaXQ6OldlYlVSTCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsb2FkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBn
b1RvT2Zmc2V0KGludCBvZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIGludCBuYXZpZ2F0aW9uRW50
cnlDb3VudCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUo
Y29uc3QgV2ViS2l0OjpXZWJVUkwmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZnJhbWVOYW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpID0gMDsKKyAg
ICB2aXJ0dWFsIGludCB3aW5kb3dDb3VudCgpID0gMDsKKwogfTsKIAogI2VuZGlmIC8vIFRlc3RE
ZWxlZ2F0ZV9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9UZXN0UnVubmVyLmNwcAppbmRleCBlYTZiOTY0YmFkZTM5YzkyMmM5NzUzNjhjMDU5
NjcwMDM5Zjk4MDZkLi43NGY1Mjc0M2MxZWJkMjgwNWM2ZTE2NDE5OWIwNGE2NGU4NDg5YTEyIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RS
dW5uZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
VGVzdFJ1bm5lci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0UnVubmVyLmgiCiAKKyNpbmNsdWRlICJUZXN0RGVsZWdhdGUuaCIKICNpbmNs
dWRlICJXZWJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQmluZGluZ3MuaCIK
ICNpbmNsdWRlICJXZWJDb25zb2xlTWVzc2FnZS5oIgpAQCAtNzgsNiArNzksMTgwNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCitjbGFzcyBFbXB0eVdlYkRlbGl2ZXJlZEludGVudENsaWVudCA6IHB1Ymxp
YyBXZWJLaXQ6OldlYkRlbGl2ZXJlZEludGVudENsaWVudCB7CitwdWJsaWM6CisgICAgRW1wdHlX
ZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQoKSB7IH0KKyAgICB+RW1wdHlXZWJEZWxpdmVyZWRJbnRl
bnRDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwb3N0UmVzdWx0KGNvbnN0IFdlYlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSYgZGF0YSkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHBv
c3RGYWlsdXJlKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgZGF0YSkgY29uc3QgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IH0KK307CisKIFRlc3RSdW5uZXI6OlRlc3RS
dW5uZXIoKQorICAgIDogbV9kZWxlZ2F0ZSgwKQorICAgICwgbV9jbG9zZVJlbWFpbmluZ1dpbmRv
d3MoZmFsc2UpCisgICAgLCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2UpCisgICAg
LCBtX3Nob3dEZWJ1Z0xheWVyVHJlZShmYWxzZSkKKyAgICAsIG1fd29ya1F1ZXVlKHRoaXMpCisg
ICAgLCBtX2ludGVudENsaWVudChhZG9wdFB0cihuZXcgRW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRD
bGllbnQpKQorICAgICwgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9h
ZChmYWxzZSkKK3sKKworICAgIC8vIEluaXRpYWxpemUgdGhlIG1hcCB0aGF0IGFzc29jaWF0ZXMg
bWV0aG9kcyBvZiB0aGlzIGNsYXNzIHdpdGggdGhlIG5hbWVzCisgICAgLy8gdGhleSB3aWxsIHVz
ZSB3aGVuIGNhbGxlZCBieSBKYXZhU2NyaXB0LiBUaGUgYWN0dWFsIGJpbmRpbmcgb2YgdGhvc2UK
KyAgICAvLyBuYW1lcyB0byB0aGVpciBtZXRob2RzIHdpbGwgYmUgZG9uZSBieSBjYWxsaW5nIGJp
bmRUb0phdmFTY3JpcHQoKSAoZGVmaW5lZAorICAgIC8vIGJ5IENwcEJvdW5kQ2xhc3MsIHRoZSBw
YXJlbnQgdG8gVGVzdFJ1bm5lcikuCisgICAgYmluZE1ldGhvZCgiYWRkRmlsZVRvUGFzdGVib2Fy
ZE9uRHJhZyIsICZUZXN0UnVubmVyOjphZGRGaWxlVG9QYXN0ZWJvYXJkT25EcmFnKTsKKyNpZiBF
TkFCTEUoSU5QVVRfU1BFRUNIKQorICAgIGJpbmRNZXRob2QoImFkZE1vY2tTcGVlY2hJbnB1dFJl
c3VsdCIsICZUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQpOworICAgIGJpbmRN
ZXRob2QoInNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0IiwgJlRlc3RSdW5uZXI6OnNldE1vY2tT
cGVlY2hJbnB1dER1bXBSZWN0KTsKKyNlbmRpZgorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gp
CisgICAgYmluZE1ldGhvZCgiYWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0IiwgJlRlc3RS
dW5uZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk7CisgICAgYmluZE1ldGhvZCgi
c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IiLCAmVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVj
aFJlY29nbml0aW9uRXJyb3IpOworICAgIGJpbmRNZXRob2QoIndhc01vY2tTcGVlY2hSZWNvZ25p
dGlvbkFib3J0ZWQiLCAmVGVzdFJ1bm5lcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRl
ZCk7CisjZW5kaWYKKyAgICBiaW5kTWV0aG9kKCJhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eSIsICZUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CisgICAgYmlu
ZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTsKKyAg
ICBiaW5kTWV0aG9kKCJhZGRVc2VyU3R5bGVTaGVldCIsICZUZXN0UnVubmVyOjphZGRVc2VyU3R5
bGVTaGVldCk7CisgICAgYmluZE1ldGhvZCgiY2xlYXJBbGxEYXRhYmFzZXMiLCAmVGVzdFJ1bm5l
cjo6Y2xlYXJBbGxEYXRhYmFzZXMpOworICAgIGJpbmRNZXRob2QoImNsb3NlV2ViSW5zcGVjdG9y
IiwgJlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsKKyNpZiBFTkFCTEUoUE9JTlRFUl9M
T0NLKQorICAgIGJpbmRNZXRob2QoImRpZExvc2VQb2ludGVyTG9jayIsICZUZXN0UnVubmVyOjpk
aWRMb3NlUG9pbnRlckxvY2spOworI2VuZGlmCisgICAgYmluZE1ldGhvZCgiZGlzYWJsZUF1dG9S
ZXNpemVNb2RlIiwgJlRlc3RSdW5uZXI6OmRpc2FibGVBdXRvUmVzaXplTW9kZSk7CisgICAgYmlu
ZE1ldGhvZCgiZGlzYWJsZUltYWdlTG9hZGluZyIsICZUZXN0UnVubmVyOjpkaXNhYmxlSW1hZ2VM
b2FkaW5nKTsKKyAgICBiaW5kTWV0aG9kKCJkaXNwbGF5IiwgJlRlc3RSdW5uZXI6OmRpc3BsYXkp
OworICAgIGJpbmRNZXRob2QoImRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbiIsICZUZXN0UnVubmVy
OjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24pOworICAgIGJpbmRNZXRob2QoImR1bXBBc1RleHQi
LCAmVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dCk7CisgICAgYmluZE1ldGhvZCgiZHVtcEJhY2tGb3J3
YXJkTGlzdCIsICZUZXN0UnVubmVyOjpkdW1wQmFja0ZvcndhcmRMaXN0KTsKKyAgICBiaW5kTWV0
aG9kKCJkdW1wQ2hpbGRGcmFtZXNBc1RleHQiLCAmVGVzdFJ1bm5lcjo6ZHVtcENoaWxkRnJhbWVz
QXNUZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyIs
ICZUZXN0UnVubmVyOjpkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyk7CisgICAgYmluZE1l
dGhvZCgiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgJlRlc3RSdW5uZXI6OmR1bXBEYXRhYmFzZUNh
bGxiYWNrcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcEVkaXRpbmdDYWxsYmFja3MiLCAmVGVzdFJ1
bm5lcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3MpOworICAgIGJpbmRNZXRob2QoImR1bXBGcmFtZUxv
YWRDYWxsYmFja3MiLCAmVGVzdFJ1bm5lcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcyk7CisgICAg
YmluZE1ldGhvZCgiZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayIsICZUZXN0UnVubmVyOjpk
dW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wVXNlckdl
c3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyIsICZUZXN0UnVubmVyOjpkdW1wVXNlckdlc3R1cmVJ
bkZyYW1lTG9hZENhbGxiYWNrcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcFJlc291cmNlTG9hZENh
bGxiYWNrcyIsICZUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICBi
aW5kTWV0aG9kKCJkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyIsICZUZXN0UnVubmVyOjpk
dW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcFNlbGVj
dGlvblJlY3QiLCAmVGVzdFJ1bm5lcjo6ZHVtcFNlbGVjdGlvblJlY3QpOworICAgIGJpbmRNZXRo
b2QoImR1bXBTdGF0dXNDYWxsYmFja3MiLCAmVGVzdFJ1bm5lcjo6ZHVtcFdpbmRvd1N0YXR1c0No
YW5nZXMpOworICAgIGJpbmRNZXRob2QoImR1bXBUaXRsZUNoYW5nZXMiLCAmVGVzdFJ1bm5lcjo6
ZHVtcFRpdGxlQ2hhbmdlcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcFBlcm1pc3Npb25DbGllbnRD
YWxsYmFja3MiLCAmVGVzdFJ1bm5lcjo6ZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MpOwor
ICAgIGJpbmRNZXRob2QoImR1bXBDcmVhdGVWaWV3IiwgJlRlc3RSdW5uZXI6OmR1bXBDcmVhdGVW
aWV3KTsKKyAgICBiaW5kTWV0aG9kKCJlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRX
aXRoSWQiLCAmVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKTsKKyAgICBiaW5kTWV0aG9kKCJlbmFibGVBdXRvUmVzaXplTW9kZSIsICZUZXN0UnVubmVy
OjplbmFibGVBdXRvUmVzaXplTW9kZSk7CisgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVJbldlYklu
c3BlY3RvciIsICZUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKTsKKyAgICBiaW5k
TWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIsICZUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk7CisgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSIsICZUZXN0UnVubmVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4iLCAmVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKTsKKyAgICBiaW5kTWV0aG9kKCJleGVjQ29tbWFuZCIsICZUZXN0UnVu
bmVyOjpleGVjQ29tbWFuZCk7CisgICAgYmluZE1ldGhvZCgiZm9yY2VSZWRTZWxlY3Rpb25Db2xv
cnMiLCAmVGVzdFJ1bm5lcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMpOworI2lmIEVOQUJMRShO
T1RJRklDQVRJT05TKQorICAgIGJpbmRNZXRob2QoImdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBl
cm1pc3Npb24iLCAmVGVzdFJ1bm5lcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lv
bik7CisjZW5kaWYKKyAgICBiaW5kTWV0aG9kKCJmaW5kU3RyaW5nIiwgJlRlc3RSdW5uZXI6OmZp
bmRTdHJpbmcpOworICAgIGJpbmRNZXRob2QoImlzQ29tbWFuZEVuYWJsZWQiLCAmVGVzdFJ1bm5l
cjo6aXNDb21tYW5kRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgiaGFzQ3VzdG9tUGFnZVNpemVT
dHlsZSIsICZUZXN0UnVubmVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKTsKKyAgICBiaW5kTWV0
aG9kKCJsYXllclRyZWVBc1RleHQiLCAmVGVzdFJ1bm5lcjo6bGF5ZXJUcmVlQXNUZXh0KTsKKyAg
ICBiaW5kTWV0aG9kKCJsb3NlQ29tcG9zaXRvckNvbnRleHQiLCAmVGVzdFJ1bm5lcjo6bG9zZUNv
bXBvc2l0b3JDb250ZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0i
LCAmVGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTsKKyAgICBiaW5kTWV0aG9kKCJu
b3RpZnlEb25lIiwgJlRlc3RSdW5uZXI6Om5vdGlmeURvbmUpOworICAgIGJpbmRNZXRob2QoIm51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIsICZUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1h
dGlvbnMpOworICAgIGJpbmRNZXRob2QoIm51bWJlck9mUGFnZXMiLCAmVGVzdFJ1bm5lcjo6bnVt
YmVyT2ZQYWdlcyk7CisgICAgYmluZE1ldGhvZCgibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMiLCAmVGVzdFJ1bm5lcjo6IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKKyAgICBiaW5kTWV0aG9kKCJvYmpDSWRlbnRpdHlJc0Vx
dWFsIiwgJlRlc3RSdW5uZXI6Om9iakNJZGVudGl0eUlzRXF1YWwpOworICAgIGJpbmRNZXRob2Qo
Im92ZXJyaWRlUHJlZmVyZW5jZSIsICZUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UpOwor
ICAgIGJpbmRNZXRob2QoInBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZCIsICZUZXN0UnVubmVyOjpw
YWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOworICAgIGJpbmRNZXRob2QoInBhZ2VQcm9wZXJ0eSIs
ICZUZXN0UnVubmVyOjpwYWdlUHJvcGVydHkpOworICAgIGJpbmRNZXRob2QoInBhZ2VTaXplQW5k
TWFyZ2luc0luUGl4ZWxzIiwgJlRlc3RSdW5uZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxz
KTsKKyAgICBiaW5kTWV0aG9kKCJwYXRoVG9Mb2NhbFJlc291cmNlIiwgJlRlc3RSdW5uZXI6OnBh
dGhUb0xvY2FsUmVzb3VyY2UpOworICAgIGJpbmRNZXRob2QoInBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkIiwgJlRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKTsKKyAgICBiaW5kTWV0aG9kKCJwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQiLCAmVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgJlRlc3RSdW5uZXI6
OnF1ZXVlQmFja05hdmlnYXRpb24pOworICAgIGJpbmRNZXRob2QoInF1ZXVlRm9yd2FyZE5hdmln
YXRpb24iLCAmVGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbik7CisgICAgYmluZE1l
dGhvZCgicXVldWVMb2FkaW5nU2NyaXB0IiwgJlRlc3RSdW5uZXI6OnF1ZXVlTG9hZGluZ1Njcmlw
dCk7CisgICAgYmluZE1ldGhvZCgicXVldWVMb2FkIiwgJlRlc3RSdW5uZXI6OnF1ZXVlTG9hZCk7
CisgICAgYmluZE1ldGhvZCgicXVldWVMb2FkSFRNTFN0cmluZyIsICZUZXN0UnVubmVyOjpxdWV1
ZUxvYWRIVE1MU3RyaW5nKTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1ZU5vbkxvYWRpbmdTY3JpcHQi
LCAmVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KTsKKyAgICBiaW5kTWV0aG9kKCJx
dWV1ZVJlbG9hZCIsICZUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCk7CisgICAgYmluZE1ldGhvZCgi
cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCAmVGVzdFJ1bm5lcjo6cmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOworICAgIGJpbmRNZXRob2QoInJlcGFpbnRTd2VlcEhv
cml6b250YWxseSIsICZUZXN0UnVubmVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkpOworICAg
IGJpbmRNZXRob2QoInJlc2V0UGFnZVZpc2liaWxpdHkiLCAmVGVzdFJ1bm5lcjo6cmVzZXRQYWdl
VmlzaWJpbGl0eSk7CisgICAgYmluZE1ldGhvZCgic2V0QWNjZXB0c0VkaXRpbmciLCAmVGVzdFJ1
bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcpOworICAgIGJpbmRNZXRob2QoInNldEFsbG93RGlzcGxh
eU9mSW5zZWN1cmVDb250ZW50IiwgJlRlc3RSdW5uZXI6OnNldEFsbG93RGlzcGxheU9mSW5zZWN1
cmVDb250ZW50KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THMiLCAmVGVzdFJ1bm5lcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKTsKKyAgICBi
aW5kTWV0aG9kKCJzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCIsICZUZXN0UnVubmVy
OjpzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCk7CisgICAgYmluZE1ldGhvZCgic2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMiLCAmVGVzdFJ1bm5lcjo6c2V0QWxsb3dV
bml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMpOworICAgIGJpbmRNZXRob2QoInNldEFsd2F5c0Fj
Y2VwdENvb2tpZXMiLCAmVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyk7CisgICAg
YmluZE1ldGhvZCgic2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQiLCAmVGVzdFJ1bm5lcjo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQpOworICAgIGJpbmRNZXRob2QoInNldEF1dG9m
aWxsZWQiLCAmVGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0
Q2FuT3BlbldpbmRvd3MiLCAmVGVzdFJ1bm5lcjo6c2V0Q2FuT3BlbldpbmRvd3MpOworICAgIGJp
bmRNZXRob2QoInNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSIsICZUZXN0UnVu
bmVyOjpzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUpOworICAgIGJpbmRNZXRo
b2QoInNldEN1c3RvbVBvbGljeURlbGVnYXRlIiwgJlRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXREYXRhYmFzZVF1b3RhIiwgJlRlc3RSdW5u
ZXI6OnNldERhdGFiYXNlUXVvdGEpOworICAgIGJpbmRNZXRob2QoInNldERlZmVyTWFpblJlc291
cmNlRGF0YUxvYWQiLCAmVGVzdFJ1bm5lcjo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCk7
CisgICAgYmluZE1ldGhvZCgic2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVt
ZSIsICZUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBdWRpb0RhdGEiLCAmVGVzdFJ1bm5lcjo6c2V0QXVkaW9E
YXRhKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iLCAmVGVzdFJ1
bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJY29u
RGF0YWJhc2VFbmFibGVkIiwgJlRlc3RSdW5uZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQpOwor
ICAgIGJpbmRNZXRob2QoInNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQiLCAmVGVzdFJ1
bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7CisgICAgYmluZE1ldGhvZCgi
c2V0TWluaW11bVRpbWVySW50ZXJ2YWwiLCAmVGVzdFJ1bm5lcjo6c2V0TWluaW11bVRpbWVySW50
ZXJ2YWwpOworICAgIGJpbmRNZXRob2QoInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsICZUZXN0
UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24pOworICAgIGJpbmRNZXRob2QoInNldE1v
Y2tHZW9sb2NhdGlvbkVycm9yIiwgJlRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9y
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsICZUZXN0UnVu
bmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik7CisgICAgYmluZE1ldGhvZCgic2V0UGFn
ZVZpc2liaWxpdHkiLCAmVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkpOworICAgIGJpbmRN
ZXRob2QoInNldFBsdWdpbnNFbmFibGVkIiwgJlRlc3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVk
KTsKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgIGJpbmRNZXRob2QoInNldFBvaW50ZXJM
b2NrV2lsbEZhaWxBc3luY2hyb25vdXNseSIsICZUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dp
bGxGYWlsQXN5bmNocm9ub3VzbHkpOworICAgIGJpbmRNZXRob2QoInNldFBvaW50ZXJMb2NrV2ls
bEZhaWxTeW5jaHJvbm91c2x5IiwgJlRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxT
eW5jaHJvbm91c2x5KTsKKyNlbmRpZgorICAgIGJpbmRNZXRob2QoInNldFBvcHVwQmxvY2tpbmdF
bmFibGVkIiwgJlRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKTsKKyAgICBiaW5k
TWV0aG9kKCJzZXRQT1NJWExvY2FsZSIsICZUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZSk7Cisg
ICAgYmluZE1ldGhvZCgic2V0UHJpbnRpbmciLCAmVGVzdFJ1bm5lcjo6c2V0UHJpbnRpbmcpOwor
ICAgIGJpbmRNZXRob2QoInNldFNjcm9sbGJhclBvbGljeSIsICZUZXN0UnVubmVyOjpzZXRTY3Jv
bGxiYXJQb2xpY3kpOworICAgIGJpbmRNZXRob2QoInNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQiLCAmVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZCk7CisgICAgYmluZE1ldGhvZCgic2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmciLCAmVGVzdFJ1
bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcpOworICAgIGJpbmRNZXRob2QoInNldEJh
Y2tpbmdTY2FsZUZhY3RvciIsICZUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IpOwor
ICAgIGJpbmRNZXRob2QoInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCIsICZUZXN0UnVubmVy
OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOworICAgIGJpbmRNZXRob2QoInNldFN0b3BQ
cm92aXNpb25hbEZyYW1lTG9hZHMiLCAmVGVzdFJ1bm5lcjo6c2V0U3RvcFByb3Zpc2lvbmFsRnJh
bWVMb2Fkcyk7CisgICAgYmluZE1ldGhvZCgic2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRz
IiwgJlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk7CisgICAgYmlu
ZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRFbmFibGVkIiwgJlRlc3RSdW5uZXI6OnNldFVzZXJT
dHlsZVNoZWV0RW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbiIsICZUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTsKKyAgICBiaW5k
TWV0aG9kKCJzZXRWYWx1ZUZvclVzZXIiLCAmVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlciIsICZUZXN0UnVu
bmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcik7CisgICAgYmluZE1ldGhvZCgic2V0
V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwiLCAmVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1
ZXN0UmV0dXJuc051bGwpOworICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsT25SZWRpcmVjdCIsICZUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5z
TnVsbE9uUmVkaXJlY3QpOworICAgIGJpbmRNZXRob2QoInNldFdpbmRvd0lzS2V5IiwgJlRlc3RS
dW5uZXI6OnNldFdpbmRvd0lzS2V5KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRYU1NBdWRpdG9yRW5h
YmxlZCIsICZUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk7CisgICAgYmluZE1ldGhv
ZCgic2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQiLCAmVGVzdFJ1bm5lcjo6c2V0
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworICAgIGJpbmRNZXRob2QoInNob3dX
ZWJJbnNwZWN0b3IiLCAmVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3Rvcik7CisjaWYgRU5BQkxF
KE5PVElGSUNBVElPTlMpCisgICAgYmluZE1ldGhvZCgic2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0
aW9uQ2xpY2siLCAmVGVzdFJ1bm5lcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2sp
OworI2VuZGlmCisgICAgYmluZE1ldGhvZCgic3RhcnRTcGVlY2hJbnB1dCIsICZUZXN0UnVubmVy
OjpzdGFydFNwZWVjaElucHV0KTsKKyAgICBiaW5kTWV0aG9kKCJ0ZXN0UmVwYWludCIsICZUZXN0
UnVubmVyOjp0ZXN0UmVwYWludCk7CisgICAgYmluZE1ldGhvZCgid2FpdEZvclBvbGljeURlbGVn
YXRlIiwgJlRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSk7CisgICAgYmluZE1ldGhv
ZCgid2FpdFVudGlsRG9uZSIsICZUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKTsKKyAgICBiaW5k
TWV0aG9kKCJ3aW5kb3dDb3VudCIsICZUZXN0UnVubmVyOjp3aW5kb3dDb3VudCk7CisgICAgYmlu
ZE1ldGhvZCgic2V0VGV4dERpcmVjdGlvbiIsICZUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9u
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJbWFnZXNBbGxvd2VkIiwgJlRlc3RSdW5uZXI6OnNldElt
YWdlc0FsbG93ZWQpOworICAgIGJpbmRNZXRob2QoInNldFNjcmlwdHNBbGxvd2VkIiwgJlRlc3RS
dW5uZXI6OnNldFNjcmlwdHNBbGxvd2VkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRTdG9yYWdlQWxs
b3dlZCIsICZUZXN0UnVubmVyOjpzZXRTdG9yYWdlQWxsb3dlZCk7CisgICAgYmluZE1ldGhvZCgi
c2V0UGx1Z2luc0FsbG93ZWQiLCAmVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0FsbG93ZWQpOworCisg
ICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgc3R1YnMuCisgICAgYmluZE1ldGhvZCgiYWJvcnRNb2Rh
bCIsICZUZXN0UnVubmVyOjphYm9ydE1vZGFsKTsKKyAgICBiaW5kTWV0aG9kKCJhY2Nlc3NTdG9y
ZWRXZWJTY3JpcHRPYmplY3QiLCAmVGVzdFJ1bm5lcjo6YWNjZXNzU3RvcmVkV2ViU2NyaXB0T2Jq
ZWN0KTsKKyAgICBiaW5kTWV0aG9kKCJhZGREaXNhbGxvd2VkVVJMIiwgJlRlc3RSdW5uZXI6OmFk
ZERpc2FsbG93ZWRVUkwpOworICAgIGJpbmRNZXRob2QoImFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNh
Z2VGb3JPcmlnaW4iLCAmVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9y
aWdpbik7CisgICAgYmluZE1ldGhvZCgiY2FsbFNob3VsZENsb3NlT25XZWJWaWV3IiwgJlRlc3RS
dW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyk7CisgICAgYmluZE1ldGhvZCgiY2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcyIsICZUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2Fj
aGVzKTsKKyAgICBiaW5kTWV0aG9kKCJjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4iLCAm
VGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKTsKKyAgICBiaW5kTWV0
aG9kKCJjbGVhckJhY2tGb3J3YXJkTGlzdCIsICZUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJk
TGlzdCk7CisgICAgYmluZE1ldGhvZCgiZHVtcEFzV2ViQXJjaGl2ZSIsICZUZXN0UnVubmVyOjpk
dW1wQXNXZWJBcmNoaXZlKTsKKyAgICBiaW5kTWV0aG9kKCJrZWVwV2ViSGlzdG9yeSIsICZUZXN0
UnVubmVyOjprZWVwV2ViSGlzdG9yeSk7CisgICAgYmluZE1ldGhvZCgib2JqQ0NsYXNzTmFtZU9m
IiwgJlRlc3RSdW5uZXI6Om9iakNDbGFzc05hbWVPZik7CisgICAgYmluZE1ldGhvZCgic2V0QXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhIiwgJlRlc3RSdW5uZXI6OnNldEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSk7CisgICAgYmluZE1ldGhvZCgic2V0Q2FsbENsb3NlT25XZWJWaWV3cyIs
ICZUZXN0UnVubmVyOjpzZXRDYWxsQ2xvc2VPbldlYlZpZXdzKTsKKyAgICBiaW5kTWV0aG9kKCJz
ZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyIiwgJlRlc3RSdW5uZXI6OnNldE1haW5GcmFtZUlz
Rmlyc3RSZXNwb25kZXIpOworICAgIGJpbmRNZXRob2QoInNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQiLCAmVGVzdFJ1bm5lcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisgICAgYmluZE1l
dGhvZCgic2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUiLCAmVGVzdFJ1bm5lcjo6c2V0
VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOworICAgIGJpbmRNZXRob2QoInN0b3JlV2Vi
U2NyaXB0T2JqZWN0IiwgJlRlc3RSdW5uZXI6OnN0b3JlV2ViU2NyaXB0T2JqZWN0KTsKKyAgICBi
aW5kTWV0aG9kKCJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCAmVGVzdFJ1bm5lcjo6ZGVsZXRlQWxs
TG9jYWxTdG9yYWdlKTsKKyAgICBiaW5kTWV0aG9kKCJsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JP
cmlnaW4iLCAmVGVzdFJ1bm5lcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKTsKKyAg
ICBiaW5kTWV0aG9kKCJvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSIsICZUZXN0UnVubmVyOjpvcmln
aW5zV2l0aExvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luIiwgJlRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik7Cisg
ICAgYmluZE1ldGhvZCgib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIsICZUZXN0
UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKTsKKyAgICBiaW5kTWV0
aG9kKCJzeW5jTG9jYWxTdG9yYWdlIiwgJlRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOwor
ICAgIGJpbmRNZXRob2QoInNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5s
b2FkIiwgJlRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkKTsKKyAgICBiaW5kTWV0aG9kKCJlbmFibGVGaXhlZExheW91dE1vZGUiLCAmVGVzdFJ1
bm5lcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRGaXhlZExh
eW91dFNpemUiLCAmVGVzdFJ1bm5lcjo6c2V0Rml4ZWRMYXlvdXRTaXplKTsKKyAgICBiaW5kTWV0
aG9kKCJzZWxlY3Rpb25Bc01hcmt1cCIsICZUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cCk7
CisgICAgYmluZE1ldGhvZCgic2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yIiwgJlRlc3RS
dW5uZXI6OnNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcik7CisgICAgYmluZE1ldGhvZCgi
dGV4dFN1cnJvdW5kaW5nTm9kZSIsICZUZXN0UnVubmVyOjp0ZXh0U3Vycm91bmRpbmdOb2RlKTsK
KworICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gdW5rbm93biBt
ZXRob2QgaXMgaW52b2tlZC4KKyAgICBiaW5kRmFsbGJhY2tNZXRob2QoJlRlc3RSdW5uZXI6OmZh
bGxiYWNrTWV0aG9kKTsKKworICAgIC8vIFNoYXJlZCBwcm9wZXJ0aWVzLgorICAgIC8vIGdsb2Jh
bEZsYWcgaXMgdXNlZCBieSBhIG51bWJlciBvZiBsYXlvdXQgdGVzdHMgaW4KKyAgICAvLyBMYXlv
dXRUZXN0c1xodHRwXHRlc3RzXHNlY3VyaXR5XGRhdGFVUkwuCisgICAgYmluZFByb3BlcnR5KCJn
bG9iYWxGbGFnIiwgJm1fZ2xvYmFsRmxhZyk7CisgICAgLy8gd2ViSGlzdG9yeUl0ZW1Db3VudCBp
cyB1c2VkIGJ5IHRlc3RzIGluIExheW91dFRlc3RzXGh0dHBcdGVzdHNcaGlzdG9yeQorICAgIGJp
bmRQcm9wZXJ0eSgid2ViSGlzdG9yeUl0ZW1Db3VudCIsICZtX3dlYkhpc3RvcnlJdGVtQ291bnQp
OworICAgIGJpbmRQcm9wZXJ0eSgidGl0bGVUZXh0RGlyZWN0aW9uIiwgJm1fdGl0bGVUZXh0RGly
ZWN0aW9uKTsKKyAgICBiaW5kUHJvcGVydHkoInBsYXRmb3JtTmFtZSIsICZtX3BsYXRmb3JtTmFt
ZSk7CisgICAgYmluZFByb3BlcnR5KCJpbnRlcmNlcHRQb3N0TWVzc2FnZSIsICZtX2ludGVyY2Vw
dFBvc3RNZXNzYWdlKTsKKyAgICBiaW5kUHJvcGVydHkoIndvcmtlclRocmVhZENvdW50IiwgJlRl
c3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KTsKKyAgICBiaW5kTWV0aG9kKCJzZW5kV2ViSW50
ZW50UmVzcG9uc2UiLCAmVGVzdFJ1bm5lcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKTsKKyAgICBi
aW5kTWV0aG9kKCJkZWxpdmVyV2ViSW50ZW50IiwgJlRlc3RSdW5uZXI6OmRlbGl2ZXJXZWJJbnRl
bnQpOworfQorCitUZXN0UnVubmVyOjpXb3JrUXVldWU6On5Xb3JrUXVldWUoKQoreworICAgIHJl
c2V0KCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjpwcm9jZXNzV29ya1Nvb24o
KQoreworICAgIGlmIChtX2NvbnRyb2xsZXItPmRlbGVnYXRlKCktPnRvcExvYWRpbmdGcmFtZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAg
ICAgIC8vIFdlIGRlbGF5IHByb2Nlc3NpbmcgcXVldWVkIHdvcmsgdG8gYXZvaWQgcmVjdXJzaW9u
IHByb2JsZW1zLgorICAgICAgICBwb3N0VGFzayhuZXcgV29ya1F1ZXVlVGFzayh0aGlzKSk7Cisg
ICAgfSBlbHNlIGlmICghbV9jb250cm9sbGVyLT5tX3dhaXRVbnRpbERvbmUpCisgICAgICAgIG1f
Y29udHJvbGxlci0+ZGVsZWdhdGUoKS0+dGVzdEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6V29ya1F1ZXVlOjpwcm9jZXNzV29yaygpCit7CisgICAgLy8gUXVpdCBkb2luZyB3b3Jr
IG9uY2UgYSBsb2FkIGlzIGluIHByb2dyZXNzLgorICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgYm9vbCBzdGFydGVkTG9hZCA9IG1fcXVldWUuZmlyc3QoKS0+cnVuKG1f
Y29udHJvbGxlcik7CisgICAgICAgIGRlbGV0ZSBtX3F1ZXVlLnRha2VGaXJzdCgpOworICAgICAg
ICBpZiAoc3RhcnRlZExvYWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtX2NvbnRyb2xsZXItPm1fd2FpdFVudGlsRG9uZSAmJiAhbV9jb250cm9sbGVyLT5kZWxlZ2F0
ZSgpLT50b3BMb2FkaW5nRnJhbWUoKSkKKyAgICAgICAgbV9jb250cm9sbGVyLT5kZWxlZ2F0ZSgp
LT50ZXN0RmluaXNoZWQoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpXb3JrUXVldWU6OnJlc2V0
KCkKK3sKKyAgICBtX2Zyb3plbiA9IGZhbHNlOworICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5
KCkpCisgICAgICAgIGRlbGV0ZSBtX3F1ZXVlLnRha2VGaXJzdCgpOworfQorCit2b2lkIFRlc3RS
dW5uZXI6OldvcmtRdWV1ZTo6YWRkV29yayhXb3JrSXRlbSogd29yaykKK3sKKyAgICBpZiAobV9m
cm96ZW4pIHsKKyAgICAgICAgZGVsZXRlIHdvcms7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9xdWV1ZS5hcHBlbmQod29yayk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4
dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIG1fZHVtcEFzVGV4dCA9IHRydWU7CisgICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0cyA9
IGZhbHNlOworCisgICAgLy8gT3B0aW9uYWwgcGFyYW1hdGVyLCBkZXNjcmliaW5nIHdoZXRoZXIg
aXQncyBhbGxvd2VkIHRvIGR1bXAgcGl4ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUuCisg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAg
ICAgICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFs
dWU7CisKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkdW1w
RGF0YWJhc2VDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIC8vIERvIG5vdGhpbmc7IHdlIGRvbid0IHVzZSB0aGlzIGZsYWcgYW55d2hl
cmUgZm9yIG5vdworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6
OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzID0gdHJ1ZTsKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkdW1wQmFja0ZvcndhcmRMaXN0
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1
bXBCYWNrRm9yd2FyZExpc3QgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2
b2lkIFRlc3RSdW5uZXI6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNr
cyA9IHRydWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6
ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0g
dHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkdW1w
VXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENh
bGxiYWNrcyA9IHRydWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0g
dHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkdW1w
UmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyA9IHRy
dWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZHVtcENo
aWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMgPSB0cnVl
OworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBDaGls
ZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBX
aW5kb3dTdGF0dXNDaGFuZ2VzID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBUZXN0UnVubmVyOjpkdW1wVGl0bGVDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSB0cnVlOwor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBQZXJtaXNz
aW9uQ2xpZW50Q2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICBtX2R1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzID0gdHJ1ZTsKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkdW1wQ3JlYXRlVmll
dyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9k
dW1wQ3JlYXRlVmlldyA9IHRydWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX2FjY2VwdHNFZGl0aW5nID0g
YXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXdlYmtpdF9zdXBwb3J0OjpCZWluZ0Rl
YnVnZ2VkKCkpCisgICAgICAgIHBvc3REZWxheWVkVGFzayhuZXcgTm90aWZ5RG9uZVRpbWVkT3V0
VGFzayh0aGlzKSwgbV9kZWxlZ2F0ZS0+bGF5b3V0VGVzdFRpbWVvdXQoKSk7CisgICAgbV93YWl0
VW50aWxEb25lID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjpub3RpZnlEb25lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICAvLyBUZXN0IGRpZG4ndCB0aW1lb3V0LiBLaWxsIHRoZSB0aW1lb3V0IHRp
bWVyLgorICAgIG1fdGFza0xpc3QucmV2b2tlQWxsKCk7CisKKyAgICBjb21wbGV0ZU5vdGlmeURv
bmUoZmFsc2UpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6
OmNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCkKK3sKKyAgICBpZiAobV93YWl0VW50
aWxEb25lICYmICFtX2RlbGVnYXRlLT50b3BMb2FkaW5nRnJhbWUoKSAmJiBtX3dvcmtRdWV1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGlzVGltZW91dCkKKyAgICAgICAgICAgIG1fZGVsZWdh
dGUtPnRlc3RUaW1lZE91dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RlbGVnYXRl
LT50ZXN0RmluaXNoZWQoKTsKKyAgICB9CisgICAgbV93YWl0VW50aWxEb25lID0gZmFsc2U7Cit9
CisKK2NsYXNzIFdvcmtJdGVtQmFja0ZvcndhcmQgOiBwdWJsaWMgVGVzdFJ1bm5lcjo6V29ya0l0
ZW0geworcHVibGljOgorICAgIFdvcmtJdGVtQmFja0ZvcndhcmQoaW50IGRpc3RhbmNlKSA6IG1f
ZGlzdGFuY2UoZGlzdGFuY2UpIHsgfQorICAgIGJvb2wgcnVuKFRlc3RSdW5uZXIqIHJ1bm5lcikK
KyAgICB7CisgICAgICAgIHJ1bm5lci0+ZGVsZWdhdGUoKS0+Z29Ub09mZnNldChtX2Rpc3RhbmNl
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIEZJWE1FOiBEaWQgaXQgcmVhbGx5IHN0YXJ0IGEg
bmF2aWdhdGlvbj8KKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZGlzdGFuY2U7Cit9Owor
Cit2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlQmFja05hdmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCisgICAgICAgIG1fd29ya1F1
ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtQmFja0ZvcndhcmQoLWFyZ3VtZW50c1swXS50b0ludDMy
KCkpKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpxdWV1
ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3Vt
ZW50c1swXS5pc051bWJlcigpKQorICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3Jr
SXRlbUJhY2tGb3J3YXJkKGFyZ3VtZW50c1swXS50b0ludDMyKCkpKTsKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKworY2xhc3MgV29ya0l0ZW1SZWxvYWQgOiBwdWJsaWMgVGVzdFJ1bm5lcjo6
V29ya0l0ZW0geworcHVibGljOgorICAgIGJvb2wgcnVuKFRlc3RSdW5uZXIqIHJ1bm5lcikKKyAg
ICB7CisgICAgICAgIHJ1bm5lci0+ZGVsZWdhdGUoKS0+cmVsb2FkKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK307CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fd29ya1F1ZXVl
LmFkZFdvcmsobmV3IFdvcmtJdGVtUmVsb2FkKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
KworY2xhc3MgV29ya0l0ZW1Mb2FkaW5nU2NyaXB0IDogcHVibGljIFRlc3RSdW5uZXI6OldvcmtJ
dGVtIHsKK3B1YmxpYzoKKyAgICBXb3JrSXRlbUxvYWRpbmdTY3JpcHQoY29uc3Qgc3RyaW5nJiBz
Y3JpcHQpIDogbV9zY3JpcHQoc2NyaXB0KSB7IH0KKyAgICBib29sIHJ1bihUZXN0UnVubmVyKiBy
dW5uZXIpCisgICAgeworICAgICAgICBydW5uZXItPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmV4
ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgobV9zY3JpcHQp
KSk7CisgICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogRGlkIGl0IHJlYWxseSBzdGFydCBh
IG5hdmlnYXRpb24/CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cmluZyBtX3NjcmlwdDsKK307
CisKK2NsYXNzIFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdCA6IHB1YmxpYyBUZXN0UnVubmVyOjpX
b3JrSXRlbSB7CitwdWJsaWM6CisgICAgV29ya0l0ZW1Ob25Mb2FkaW5nU2NyaXB0KGNvbnN0IHN0
cmluZyYgc2NyaXB0KSA6IG1fc2NyaXB0KHNjcmlwdCkgeyB9CisgICAgYm9vbCBydW4oVGVzdFJ1
bm5lciogcnVubmVyKQorICAgIHsKKyAgICAgICAgcnVubmVyLT53ZWJWaWV3KCktPm1haW5GcmFt
ZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KG1f
c2NyaXB0KSkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAg
IHN0cmluZyBtX3NjcmlwdDsKK307CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2Ny
aXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmlu
ZygpKQorICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUxvYWRpbmdTY3Jp
cHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAgIG1fd29y
a1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdChhcmd1bWVudHNbMF0u
dG9TdHJpbmcoKSkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCitjbGFzcyBXb3JrSXRl
bUxvYWQgOiBwdWJsaWMgVGVzdFJ1bm5lcjo6V29ya0l0ZW0geworcHVibGljOgorICAgIFdvcmtJ
dGVtTG9hZChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViU3RyaW5nJiB0YXJnZXQpCisgICAg
ICAgIDogbV91cmwodXJsKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkgeyB9CisgICAgYm9v
bCBydW4oVGVzdFJ1bm5lciogcnVubmVyKQorICAgIHsKKyAgICAgICAgcnVubmVyLT5kZWxlZ2F0
ZSgpLT5sb2FkVVJMRm9yRnJhbWUobV91cmwsIG1fdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7IC8vIEZJWE1FOiBEaWQgaXQgcmVhbGx5IHN0YXJ0IGEgbmF2aWdhdGlvbj8KKyAgICB9CisK
K3ByaXZhdGU6CisgICAgV2ViVVJMIG1fdXJsOworICAgIFdlYlN0cmluZyBtX3RhcmdldDsKK307
CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgV2ViVVJMOjpyZXNvbHZlKCkgYW5kIGF2b2lkIEdVUkwuCisgICAgICAgIEdVUkwgY3Vy
cmVudFVSTCA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkudXJsKCk7CisgICAg
ICAgIEdVUkwgZnVsbFVSTCA9IGN1cnJlbnRVUkwuUmVzb2x2ZShhcmd1bWVudHNbMF0udG9TdHJp
bmcoKSk7CisKKyAgICAgICAgc3RyaW5nIHRhcmdldCA9ICIiOworICAgICAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCisgICAgICAgICAgICB0
YXJnZXQgPSBhcmd1bWVudHNbMV0udG9TdHJpbmcoKTsKKworICAgICAgICBtX3dvcmtRdWV1ZS5h
ZGRXb3JrKG5ldyBXb3JrSXRlbUxvYWQoZnVsbFVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCh0YXJn
ZXQpKSk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCitjbGFzcyBXb3JrSXRl
bUxvYWRIVE1MU3RyaW5nIDogcHVibGljIFRlc3RSdW5uZXI6OldvcmtJdGVtICB7CitwdWJsaWM6
CisgICAgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgaHRtbCwgY29u
c3QgV2ViVVJMJiBiYXNlVVJMKQorICAgICAgICA6IG1faHRtbChodG1sKQorICAgICAgICAsIG1f
YmFzZVVSTChiYXNlVVJMKSB7IH0KKyAgICBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGNvbnN0IHN0
ZDo6c3RyaW5nJiBodG1sLCBjb25zdCBXZWJVUkwmIGJhc2VVUkwsIGNvbnN0IFdlYlVSTCYgdW5y
ZWFjaGFibGVVUkwpCisgICAgICAgIDogbV9odG1sKGh0bWwpCisgICAgICAgICwgbV9iYXNlVVJM
KGJhc2VVUkwpCisgICAgICAgICwgbV91bnJlYWNoYWJsZVVSTCh1bnJlYWNoYWJsZVVSTCkgeyB9
CisgICAgYm9vbCBydW4oVGVzdFJ1bm5lciogcnVubmVyKQorICAgIHsKKyAgICAgICAgcnVubmVy
LT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5sb2FkSFRNTFN0cmluZygKKyAgICAgICAgICAgIFdl
YktpdDo6V2ViRGF0YShtX2h0bWwuZGF0YSgpLCBtX2h0bWwubGVuZ3RoKCkpLCBtX2Jhc2VVUkws
IG1fdW5yZWFjaGFibGVVUkwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RkOjpzdHJpbmcgbV9odG1sOworICAgIFdlYlVSTCBtX2Jhc2VVUkw7CisgICAg
V2ViVVJMIG1fdW5yZWFjaGFibGVVUkw7Cit9OworCit2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9h
ZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgc3RyaW5nIGh0bWwgPSBhcmd1bWVudHNbMF0udG9TdHJp
bmcoKTsKKyAgICAgICAgV2ViVVJMIGJhc2VVUkwoR1VSTCgiIikpOworICAgICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCisgICAgICAgICAg
ICBiYXNlVVJMID0gV2ViVVJMKEdVUkwoYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpKTsKKyAgICAg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKQor
ICAgICAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Mb2FkSFRNTFN0cmlu
ZyhodG1sLCBiYXNlVVJMLCBXZWJVUkwoR1VSTChhcmd1bWVudHNbMl0udG9TdHJpbmcoKSkpKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJ
dGVtTG9hZEhUTUxTdHJpbmcoaHRtbCwgYmFzZVVSTCkpOworICAgIH0KKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpvYmpDSWRlbnRpdHlJc0VxdWFsKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlc3Qg
d2UgY2FuIGRvIHRvIHJldHVybiBhbiBlcnJvci4KKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVzdWx0LT5zZXQoYXJndW1lbnRzWzBdLmlz
RXF1YWwoYXJndW1lbnRzWzFdKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVzZXQoKQorewor
ICAgIGlmIChtX3dlYlZpZXcpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5zZXRab29tTGV2ZWwoZmFs
c2UsIDApOworICAgICAgICBtX3dlYlZpZXctPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cyh0cnVlKTsKKyNpZiAhT1MoREFSV0lOKSAmJiAhT1MoV0lORE9XUykgLy8gQWN0dWFsbHksIFRP
T0xLSVRfR1RLCisgICAgICAgIC8vIChDb25zdGFudHMgY29waWVkIGJlY2F1c2Ugd2UgY2FuJ3Qg
ZGVwZW5kIG9uIHRoZSBoZWFkZXIgdGhhdCBkZWZpbmVkCisgICAgICAgIC8vIHRoZW0gZnJvbSB0
aGlzIGZpbGUuKQorICAgICAgICBtX3dlYlZpZXctPnNldFNlbGVjdGlvbkNvbG9ycygweGZmMWU5
MGZmLCAweGZmMDAwMDAwLCAweGZmYzhjOGM4LCAweGZmMzIzMjMyKTsKKyNlbmRpZgorICAgICAg
ICBtX3dlYlZpZXctPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgICAgIFdlYktpdDo6V2Vi
U2l6ZSBlbXB0eTsKKyAgICAgICAgbV93ZWJWaWV3LT5kaXNhYmxlQXV0b1Jlc2l6ZU1vZGUoKTsK
KyAgICAgICAgbV93ZWJWaWV3LT5zZXREZXZpY2VTY2FsZUZhY3RvcigxKTsKKyAgICB9CisgICAg
bV9kdW1wQXNUZXh0ID0gZmFsc2U7CisgICAgbV9kdW1wQXNBdWRpbyA9IGZhbHNlOworICAgIG1f
ZHVtcENyZWF0ZVZpZXcgPSBmYWxzZTsKKyAgICBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzID0gZmFs
c2U7CisgICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gZmFsc2U7CisgICAgbV9kdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gZmFsc2U7CisgICAgbV9kdW1wVXNlckdlc3R1cmVJbkZy
YW1lTG9hZENhbGxiYWNrcyA9IGZhbHNlOworICAgIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cyA9IGZhbHNlOworICAgIG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMgPSBmYWxzZTsK
KyAgICBtX2R1bXBCYWNrRm9yd2FyZExpc3QgPSBmYWxzZTsKKyAgICBtX2R1bXBDaGlsZEZyYW1l
U2Nyb2xsUG9zaXRpb25zID0gZmFsc2U7CisgICAgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQgPSBm
YWxzZTsKKyAgICBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzID0gZmFsc2U7CisgICAgbV9kdW1w
U2VsZWN0aW9uUmVjdCA9IGZhbHNlOworICAgIG1fZHVtcFRpdGxlQ2hhbmdlcyA9IGZhbHNlOwor
ICAgIG1fZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MgPSBmYWxzZTsKKyAgICBtX2dlbmVy
YXRlUGl4ZWxSZXN1bHRzID0gdHJ1ZTsKKyAgICBtX2FjY2VwdHNFZGl0aW5nID0gdHJ1ZTsKKyAg
ICBtX3dhaXRVbnRpbERvbmUgPSBmYWxzZTsKKyAgICBtX2Nhbk9wZW5XaW5kb3dzID0gZmFsc2U7
CisgICAgbV90ZXN0UmVwYWludCA9IGZhbHNlOworICAgIG1fc3dlZXBIb3Jpem9udGFsbHkgPSBm
YWxzZTsKKyAgICBtX3Nob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQgPSBmYWxzZTsKKyAgICBtX3N0
b3BQcm92aXNpb25hbEZyYW1lTG9hZHMgPSBmYWxzZTsKKyAgICBtX2RlZmVyTWFpblJlc291cmNl
RGF0YUxvYWQgPSB0cnVlOworICAgIG1fZ2xvYmFsRmxhZy5zZXQoZmFsc2UpOworICAgIG1fd2Vi
SGlzdG9yeUl0ZW1Db3VudC5zZXQoMCk7CisgICAgbV90aXRsZVRleHREaXJlY3Rpb24uc2V0KCJs
dHIiKTsKKyAgICBtX3BsYXRmb3JtTmFtZS5zZXQoImNocm9taXVtIik7CisgICAgbV9pbnRlcmNl
cHRQb3N0TWVzc2FnZS5zZXQoZmFsc2UpOworICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9
IFdlYlVSTCgpOworICAgIG1faXNQcmludGluZyA9IGZhbHNlOworCisgICAgd2Via2l0X3N1cHBv
cnQ6OlNldEFjY2VwdEFsbENvb2tpZXMoZmFsc2UpOworICAgIFdlYlNlY3VyaXR5UG9saWN5Ojpy
ZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMoKTsKKworICAgIC8vIFJlc2V0IHRoZSBkZWZhdWx0
IHF1b3RhIGZvciBlYWNoIG9yaWdpbiB0byA1TUIKKyAgICB3ZWJraXRfc3VwcG9ydDo6U2V0RGF0
YWJhc2VRdW90YSg1ICogMTAyNCAqIDEwMjQpOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIp
OworCisgICAgaWYgKG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzKQorICAgICAgICBtX2RlbGVnYXRl
LT5jbG9zZVJlbWFpbmluZ1dpbmRvd3MoKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2xvc2VSZW1h
aW5pbmdXaW5kb3dzID0gdHJ1ZTsKKyAgICBtX3dvcmtRdWV1ZS5yZXNldCgpOworICAgIG1fdGFz
a0xpc3QucmV2b2tlQWxsKCk7CisgICAgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0Jl
Zm9yZVVubG9hZCA9IGZhbHNlOworICAgIG1faGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0g
ZmFsc2U7CisjaWYgT1MoTElOVVgpIHx8IE9TKEFORFJPSUQpCisgICAgV2ViRm9udFJlbmRlcmlu
Zzo6c2V0U3VicGl4ZWxQb3NpdGlvbmluZyhmYWxzZSk7CisjZW5kaWYKK30KKwordm9pZCBUZXN0
UnVubmVyOjpsb2NhdGlvbkNoYW5nZURvbmUoKQoreworICAgIG1fd2ViSGlzdG9yeUl0ZW1Db3Vu
dC5zZXQobV9kZWxlZ2F0ZS0+bmF2aWdhdGlvbkVudHJ5Q291bnQoKSk7CisKKyAgICAvLyBObyBt
b3JlIG5ldyB3b3JrIGFmdGVyIHRoZSBmaXJzdCBjb21wbGV0ZSBsb2FkLgorICAgIG1fd29ya1F1
ZXVlLnNldEZyb3plbih0cnVlKTsKKworICAgIGlmICghbV93YWl0VW50aWxEb25lKQorICAgICAg
ICBtX3dvcmtRdWV1ZS5wcm9jZXNzV29ya1Nvb24oKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpw
b2xpY3lEZWxlZ2F0ZURvbmUoKQoreworICAgIEFTU0VSVChtX3dhaXRVbnRpbERvbmUpOworICAg
IG1fZGVsZWdhdGUtPnRlc3RGaW5pc2hlZCgpOworICAgIG1fd2FpdFVudGlsRG9uZSA9IGZhbHNl
OworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldENhbk9wZW5XaW5kb3dzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2Nhbk9wZW5XaW5kb3dzID0g
dHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3dlYlZpZXctPnNldFRhYktleUN5
Y2xlc1Rocm91Z2hFbGVtZW50cyhhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChz
dGF0aWNfY2FzdDxpbnQ+KG1fZGVsZWdhdGUtPndpbmRvd0NvdW50KCkpKTsKK30KKwordm9pZCBU
ZXN0UnVubmVyOjpzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBt
X2Nsb3NlUmVtYWluaW5nV2luZG93cyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNj
ZXB0Q29va2llcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCkKKyAgICAgICAgd2Via2l0
X3N1cHBvcnQ6OlNldEFjY2VwdEFsbENvb2tpZXMoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNb
MF0pKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRB
c3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fd2ViVmlldy0+c2V0dGlu
Z3MoKS0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY3BwVmFyaWFudFRvQm9v
bChhcmd1bWVudHNbMF0pKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjpzZXRXaW5kb3dJc0tleShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBh
cmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fZGVsZWdhdGUtPnNldEZvY3VzKG1fd2Vi
VmlldywgYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNT
dHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGFy
Z3VtZW50c1swXS50b1N0cmluZygpOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlKCIiKTsKKyAgICAv
LyBJZ25vcmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdoaWNoIGlzIHVzZXJJbnRlcmZhY2UpCisg
ICAgLy8gc2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVzIGEgbWFudWFsIGFjdGlvbi4KKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKQorICAg
ICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmluZygpOworCisgICAgLy8gTm90ZTogd2Vi
a2l0J3MgdmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhlIGJvb2xlYW4sIHNvIG5laXRoZXIgZG8g
d2UuCisgICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZUNvbW1hbmQoV2ViU3Ry
aW5nOjpmcm9tVVRGOChjb21tYW5kKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSkpOworfQor
Cit2b2lkIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICByZXN1bHQt
PnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIGNv
bW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBib29sIHJ2ID0gbV93ZWJWaWV3
LT5mb2N1c2VkRnJhbWUoKS0+aXNDb21tYW5kRW5hYmxlZChXZWJTdHJpbmc6OmZyb21VVEY4KGNv
bW1hbmQpKTsKKyAgICByZXN1bHQtPnNldChydik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIFdlIGhhdmUgbm8gbmVlZCB0byBzdXBwb3J0IERh
c2hib2FyZCBDb21wYXRpYmlsaXR5IE1vZGUgKG1hYy1vbmx5KQorICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCisgICAgcmVz
dWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNh
Y2hlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxp
Y2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgorICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgb3JpZ2lucyB0aGF0IGhhdmUg
YXBwbGljYXRpb24gY2FjaGVzLgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogeworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0aW9uIGNhY2hl
IGZvciBhbiBvcmlnaW4uCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIC8vIEN1cnJlbnRs
eSBvbmx5IGhhcyBhIG5vbi1udWxsIGltcGxlbWVudGF0aW9uIG9uIFFULgorICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFy
SGVhZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0
cmluZygpKSB7CisgICAgICAgIHN0cmluZyBoZWFkZXIgPSBhcmd1bWVudHNbMF0udG9TdHJpbmco
KTsKKyAgICAgICAgaWYgKCFoZWFkZXIuZW1wdHkoKSkKKyAgICAgICAgICAgIG1fZGVsZWdhdGUt
PmFkZENsZWFySGVhZGVyKFN0cmluZzo6ZnJvbVVURjgoaGVhZGVyLmNfc3RyKCkpKTsKKyAgICB9
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV93ZWJWaWV3SG9zdC0+c2V0
QmxvY2tSZWRpcmVjdHMoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKQorICAgICAgICBtX2RlbGVnYXRlLT5zZXRSZXF1ZXN0UmV0dXJuTnVsbChhcmd1bWVu
dHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPD0gMCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5n
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0cmluZyB1cmwgPSBhcmd1bWVudHNbMF0udG9T
dHJpbmcoKTsKKyNpZiBPUyhXSU5ET1dTKQorICAgIGlmICghdXJsLmZpbmQoIi90bXAvIikpIHsK
KyAgICAgICAgLy8gV2Ugd2FudCBhIHRlbXAgZmlsZS4KKyAgICAgICAgY29uc3QgdW5zaWduZWQg
dGVtcFByZWZpeExlbmd0aCA9IDU7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gTUFYX1BB
VEg7CisgICAgICAgIE93bkFycmF5UHRyPFdDSEFSPiB0ZW1wUGF0aCA9IGFkb3B0QXJyYXlQdHIo
bmV3IFdDSEFSW2J1ZmZlclNpemVdKTsKKyAgICAgICAgRFdPUkQgdGVtcExlbmd0aCA9IDo6R2V0
VGVtcFBhdGhXKGJ1ZmZlclNpemUsIHRlbXBQYXRoLmdldCgpKTsKKyAgICAgICAgaWYgKHRlbXBM
ZW5ndGggKyB1cmwubGVuZ3RoKCkgLSB0ZW1wUHJlZml4TGVuZ3RoICsgMSA+IGJ1ZmZlclNpemUp
IHsKKyAgICAgICAgICAgIGJ1ZmZlclNpemUgPSB0ZW1wTGVuZ3RoICsgdXJsLmxlbmd0aCgpIC0g
dGVtcFByZWZpeExlbmd0aCArIDE7CisgICAgICAgICAgICB0ZW1wUGF0aCA9IGFkb3B0QXJyYXlQ
dHIobmV3IFdDSEFSW2J1ZmZlclNpemVdKTsKKyAgICAgICAgICAgIHRlbXBMZW5ndGggPSBHZXRU
ZW1wUGF0aFcoYnVmZmVyU2l6ZSwgdGVtcFBhdGguZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJU
KHRlbXBMZW5ndGggPCBidWZmZXJTaXplKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpbmcgcmVz
dWx0UGF0aChXZWJTdHJpbmcodGVtcFBhdGguZ2V0KCksIHRlbXBMZW5ndGgpLnV0ZjgoKSk7Cisg
ICAgICAgIHJlc3VsdFBhdGguYXBwZW5kKHVybC5zdWJzdHIodGVtcFByZWZpeExlbmd0aCkpOwor
ICAgICAgICByZXN1bHQtPnNldChyZXN1bHRQYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgLy8gU29tZSBsYXlvdXQgdGVzdHMgdXNlIGZpbGU6Ly8vLyB3aGljaCB3
ZSByZXNvbHZlIGFzIGEgVU5DIHBhdGguIE5vcm1hbGl6ZQorICAgIC8vIHRoZW0gdG8ganVzdCBm
aWxlOi8vLy4KKyAgICBzdHJpbmcgbG93ZXJVcmwgPSB1cmw7CisgICAgdHJhbnNmb3JtKGxvd2Vy
VXJsLmJlZ2luKCksIGxvd2VyVXJsLmVuZCgpLCBsb3dlclVybC5iZWdpbigpLCA6OnRvbG93ZXIp
OworICAgIHdoaWxlICghbG93ZXJVcmwuZmluZCgiZmlsZTovLy8vIikpIHsKKyAgICAgICAgdXJs
ID0gdXJsLnN1YnN0cigwLCA4KSArIHVybC5zdWJzdHIoOSk7CisgICAgICAgIGxvd2VyVXJsID0g
bG93ZXJVcmwuc3Vic3RyKDAsIDgpICsgbG93ZXJVcmwuc3Vic3RyKDkpOworICAgIH0KKyAgICBy
ZXN1bHQtPnNldCh3ZWJraXRfc3VwcG9ydDo6UmV3cml0ZUxheW91dFRlc3RzVVJMKHVybCkuc3Bl
YygpKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjphZGRGaWxlVG9QYXN0ZWJvYXJkT25EcmFnKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQt
PnNldE51bGwoKTsKKyAgICBtX3Nob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQgPSB0cnVlOworfQor
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IHRydWU7Cit9CisKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9kZWxlZ2F0
ZS0+c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFs
dWUpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFNl
bGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX2RlbGVnYXRlLT5zZXRTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUp
OworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCitib29sIFRlc3RSdW5uZXI6OnBhdXNlQW5p
bWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQoreworICAgIFdlYkZy
YW1lKiB3ZWJGcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFt
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQW5pbWF0aW9uQ29udHJvbGxlciog
Y29udHJvbGxlciA9IHdlYkZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgaWYgKCFj
b250cm9sbGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJFbGVtZW50IGVsZW1l
bnQgPSB3ZWJGcmFtZS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOworICAg
IGlmIChlbGVtZW50LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQsIGFuaW1hdGlvbk5hbWUs
IHRpbWUpOworfQorCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxl
bWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNv
bnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQoreworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1f
d2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgV2ViQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYkZy
YW1lLT5hbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQgPSB3ZWJGcmFtZS0+ZG9j
dW1lbnQoKS5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOworICAgIGlmIChlbGVtZW50LmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNl
VHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHRpbWUpOworfQorCitib29s
IFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25z
dCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKK3sKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3dl
YlZpZXctPm1haW5GcmFtZSgpOworICAgIGlmICghd2ViRnJhbWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdl
dEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisgICAgaWYgKGVsZW1lbnQuaXNOdWxsKCkgfHwgIWVs
ZW1lbnQuaGFzVGFnTmFtZSgiaW5wdXQiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
V2ViSW5wdXRFbGVtZW50IGlucHV0RWxlbWVudCA9IGVsZW1lbnQudG88V2ViSW5wdXRFbGVtZW50
PigpOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQuYXV0b0NvbXBsZXRlKCk7Cit9CisKK2ludCBU
ZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKQoreworICAgIFdlYkZyYW1lKiB3
ZWJGcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgV2ViQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxl
ciA9IHdlYkZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVy
KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gY29udHJvbGxlci0+bnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChmYWxzZSk7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpICYmIGFyZ3VtZW50
c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKSB7CisgICAgICAgIFdl
YlN0cmluZyBhbmltYXRpb25OYW1lID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sw
XSk7CisgICAgICAgIGRvdWJsZSB0aW1lID0gYXJndW1lbnRzWzFdLnRvRG91YmxlKCk7CisgICAg
ICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzJdKTsKKyAgICAgICAgcmVzdWx0LT5zZXQocGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRX
aXRoSWQoYW5pbWF0aW9uTmFtZSwgdGltZSwgZWxlbWVudElkKSk7CisgICAgfQorfQorCit2b2lk
IFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0KGZhbHNlKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1l
bnRzWzBdLmlzU3RyaW5nKCkgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRz
WzJdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgV2ViU3RyaW5nIHByb3BlcnR5TmFtZSA9IGNwcFZh
cmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOworICAgICAgICBkb3VibGUgdGltZSA9IGFy
Z3VtZW50c1sxXS50b0RvdWJsZSgpOworICAgICAgICBXZWJTdHJpbmcgZWxlbWVudElkID0gY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSk7CisgICAgICAgIHJlc3VsdC0+c2V0KHBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChwcm9wZXJ0eU5hbWUsIHRpbWUsIGVs
ZW1lbnRJZCkpOworICAgIH0KK30KKwordm9pZCBUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9D
b21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8
ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZh
cmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOworICAgIHJlc3VsdC0+c2V0KGVsZW1lbnRE
b2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChlbGVtZW50SWQpKTsKK30KKwordm9pZCBU
ZXN0UnVubmVyOjplbmFibGVBdXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ICE9IDQpIHsKKyAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGludCBtaW5XaWR0aCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1swXSk7
CisgICAgaW50IG1pbkhlaWdodCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1sxXSk7Cisg
ICAgV2ViS2l0OjpXZWJTaXplIG1pblNpemUobWluV2lkdGgsIG1pbkhlaWdodCk7CisKKyAgICBp
bnQgbWF4V2lkdGggPSBjcHBWYXJpYW50VG9JbnQzMihhcmd1bWVudHNbMl0pOworICAgIGludCBt
YXhIZWlnaHQgPSBjcHBWYXJpYW50VG9JbnQzMihhcmd1bWVudHNbM10pOworICAgIFdlYktpdDo6
V2ViU2l6ZSBtYXhTaXplKG1heFdpZHRoLCBtYXhIZWlnaHQpOworCisgICAgbV93ZWJWaWV3LT5l
bmFibGVBdXRvUmVzaXplTW9kZShtaW5TaXplLCBtYXhTaXplKTsKKyAgICByZXN1bHQtPnNldCh0
cnVlKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSAhPTIpIHsKKyAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBuZXdXaWR0aCA9IGNwcFZhcmlhbnRUb0lu
dDMyKGFyZ3VtZW50c1swXSk7CisgICAgaW50IG5ld0hlaWdodCA9IGNwcFZhcmlhbnRUb0ludDMy
KGFyZ3VtZW50c1sxXSk7CisgICAgV2ViS2l0OjpXZWJTaXplIG5ld1NpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CisKKyAgICBtX2RlbGVnYXRlLT5zZXRXaW5kb3dSZWN0KFdlYlJlY3QoMCwgMCwg
bmV3U2l6ZS53aWR0aCwgbmV3U2l6ZS5oZWlnaHQpKTsKKyAgICBtX3dlYlZpZXctPmRpc2FibGVB
dXRvUmVzaXplTW9kZSgpOworICAgIG1fd2ViVmlldy0+cmVzaXplKG5ld1NpemUpOworICAgIHJl
c3VsdC0+c2V0KHRydWUpOworfQorCit2b2lkIFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgV2ViS2l0IGlj
b24gZGF0YWJhc2UuCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5l
cjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChtX3dlYlZpZXctPmRpc3BhdGNoQmVm
b3JlVW5sb2FkRXZlbnQoKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIg
fHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3dlYlZpZXctPnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRk
ZW4oY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pLCBjcHBWYXJpYW50VG9XZWJTdHJpbmco
YXJndW1lbnRzWzFdKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJNYWluUmVzb3Vy
Y2VEYXRhTG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEpCisgICAgICAgIG1fZGVm
ZXJNYWluUmVzb3VyY2VEYXRhTG9hZCA9IGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKTsK
K30KKworLy8KKy8vIFVuaW1wbGVtZW50ZWQgc3R1YnMKKy8vCisKK3ZvaWQgVGVzdFJ1bm5lcjo6
ZHVtcEFzV2ViQXJjaGl2ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RS
dW5uZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkdW1wU2VsZWN0aW9uUmVjdChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcFNl
bGVjdGlvblJlY3QgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OnRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBtX3Rlc3RSZXBhaW50ID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fc3dlZXBI
b3Jpem9udGFsbHkgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9
CisKK3ZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3RvcnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsICBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RvcmVXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjphY2Nlc3NTdG9yZWRXZWJTY3Jp
cHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpv
YmpDQ2xhc3NOYW1lT2YoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVu
bmVyOjphZGREaXNhbGxvd2VkVVJMKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0Q2FsbENsb3NlT25XZWJWaWV3cyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwor
ICAgIFdlYlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+IHZhbHVlczsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50
c1sxXS5pc1N0cmluZygpKSB7CisgICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAgICAgICAvLyBUaGlzIHJlbGllcyBv
biB0aGUgaWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0
CisgICAgICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3Rz
IGRvLgorICAgICAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEsICZ2YWx1
ZXMpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAvLyBTaW5jZSBvbmx5IG9u
ZSBzY3JpcHQgd2FzIGFkZGVkLCBvbmx5IG9uZSByZXN1bHQgaXMgZXhwZWN0ZWQKKyAgICBpZiAo
dmFsdWVzLnNpemUoKSA9PSAxICYmICF2YWx1ZXNbMF0uSXNFbXB0eSgpKSB7CisgICAgICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHNjcmlwdFZhbHVlID0gdmFsdWVzWzBdOworICAgICAgICAvLyBG
SVhNRTogVGhlcmUgYXJlIG1hbnkgbW9yZSB0eXBlcyB0aGF0IGNhbiBiZSBoYW5kbGVkLgorICAg
ICAgICBpZiAoc2NyaXB0VmFsdWUtPklzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIHY4OjpTdHJp
bmc6OkFzY2lpVmFsdWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7CisgICAgICAgICAgICByZXN1bHQt
PnNldChzdGQ6OnN0cmluZygqYXNjaWlWOCkpOworICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZh
bHVlLT5Jc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5U
b0Jvb2xlYW4oKS0+VmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051
bWJlcigpKSB7CisgICAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzSW50MzIoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1
ZS0+VG9OdW1iZXIoKS0+VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUt
PklzTnVsbCgpKQorICAgICAgICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICB9Cit9CisK
K3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3Vt
ZW50c1sxXS5pc1N0cmluZygpKSB7CisgICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAgICAgICAvLyBUaGlzIHJlbGll
cyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEg
Yml0CisgICAgICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRl
c3RzIGRvLgorICAgICAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEpOwor
ICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8
ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJW
aWV3LT5mb2N1c2VkRnJhbWUoKS0+c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKAorICAg
ICAgICBhcmd1bWVudHNbMF0udG9JbnQzMigpLAorICAgICAgICBXZWJTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlRnJvbVN0cmluZyhjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSkpOwor
fQorCisvLyBOZWVkIHRoZXNlIGNvbnZlcnNpb25zIGJlY2F1c2UgdGhlIGZvcm1hdCBvZiB0aGUg
dmFsdWUgZm9yIGJvb2xlYW5zCisvLyBtYXkgdmFyeSAtIGZvciBleGFtcGxlLCBvbiBtYWMgIjEi
IGFuZCAiMCIgYXJlIHVzZWQgZm9yIGJvb2xlYW4uCitib29sIFRlc3RSdW5uZXI6OmNwcFZhcmlh
bnRUb0Jvb2woY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9v
bCgpKQorICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCk7CisgICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7CisgICAgaWYgKHZhbHVl
LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgc3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoKTsKKyAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJ0cnVlIiB8fCB2YWx1ZVN0cmluZyA9
PSAiMSIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHZhbHVlU3RyaW5n
ID09ICJmYWxzZSIgfHwgdmFsdWVTdHJpbmcgPT0gIjAiKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZS4gRXhwZWN0
ZWQgYm9vbGVhbiB2YWx1ZS4iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVGVz
dFJ1bm5lcjo6Y3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7
CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgc3RyaW5nIHN0cmluZ1NvdXJj
ZSA9IHZhbHVlLnRvU3RyaW5nKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHN0cmlu
Z1NvdXJjZS5kYXRhKCk7CisgICAgICAgIGNoYXIqIGVuZDsKKyAgICAgICAgbG9uZyBudW1iZXIg
PSBzdHJ0b2woc291cmNlLCAmZW5kLCAxMCk7CisgICAgICAgIGlmIChlbmQgPT0gc291cmNlICsg
c3RyaW5nU291cmNlLmxlbmd0aCgpICYmIG51bWJlciA+PSBudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkgJiYgbnVtYmVyIDw9IG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihudW1iZXIpOworICAgIH0KKyAg
ICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0
ZWQgaW50ZWdlciB2YWx1ZS4iKTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViU3RyaW5nIFRlc3RS
dW5uZXI6OmNwcFZhcmlhbnRUb1dlYlN0cmluZyhjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKK3sK
KyAgICBpZiAoIXZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgbG9nRXJyb3JUb0NvbnNvbGUo
IkludmFsaWQgdmFsdWUgZm9yIHByZWZlcmVuY2UuIEV4cGVjdGVkIHN0cmluZyB2YWx1ZS4iKTsK
KyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gV2ViU3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZS50b1N0cmluZygpKTsKK30KKworVmVjdG9yPFdlYlN0cmluZz4gVGVz
dFJ1bm5lcjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYgdmFs
dWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIGxvZ0Vycm9yVG9D
b25zb2xlKCJJbnZhbGlkIHZhbHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBvYmplY3QgdmFs
dWUuIik7CisgICAgICAgIHJldHVybiBWZWN0b3I8V2ViU3RyaW5nPigpOworICAgIH0KKyAgICBW
ZWN0b3I8V2ViU3RyaW5nPiByZXN1bHRWZWN0b3I7CisgICAgVmVjdG9yPHN0cmluZz4gc3RyaW5n
VmVjdG9yID0gdmFsdWUudG9TdHJpbmdWZWN0b3IoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHN0cmluZ1ZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVu
ZChXZWJTdHJpbmc6OmZyb21VVEY4KHN0cmluZ1ZlY3RvcltpXS5jX3N0cigpKSk7CisgICAgcmV0
dXJuIHJlc3VsdFZlY3RvcjsKK30KKworCit2b2lkIFRlc3RSdW5uZXI6OmZhbGxiYWNrTWV0aG9k
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBwcmlu
dGYoIkNPTlNPTEUgTUVTU0FHRTogSmF2YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2Fs
bGVkIG9uIExheW91dFRlc3RDb250cm9sbGVyXG4iKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCB8fCAh
YXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpCisgICAg
ICAgIHx8ICFhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzNdLmlzQm9vbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXQ6OldlYlVSTCB1cmwoR1VSTChhcmd1bWVu
dHNbMF0udG9TdHJpbmcoKSkpOworICAgIGlmICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV2ViU2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KAorICAgICAgICB1cmwsCisgICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVu
dHNbMV0pLAorICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKKyAg
ICAgICAgYXJndW1lbnRzWzNdLnRvQm9vbGVhbigpKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpy
ZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5n
KCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpCisgICAgICAgIHx8ICFhcmd1bWVudHNbMl0u
aXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzNdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBXZWJLaXQ6OldlYlVSTCB1cmwoR1VSTChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwor
ICAgIGlmICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViU2VjdXJp
dHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAorICAgICAgICB1cmws
CisgICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAorICAgICAgICBj
cHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKKyAgICAgICAgYXJndW1lbnRzWzNd
LnRvQm9vbGVhbigpKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIHdlYmtpdF9zdXBwb3J0OjpDbGVhckFsbERhdGFi
YXNlcygpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKKyAgICBpZiAoKGFyZ3VtZW50cy5zaXplKCkgPj0gMSkgJiYgYXJndW1l
bnRzWzBdLmlzTnVtYmVyKCkpCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXREYXRhYmFzZVF1
b3RhKGFyZ3VtZW50c1swXS50b0ludDMyKCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFBP
U0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPT0gMSAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAgc2V0bG9jYWxlKExD
X0FMTCwgYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkuY19zdHIoKSk7Cit9CisKKy8vIFBhcnNlIGEg
c2luZ2xlIGFyZ3VtZW50LiBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBh
cmd1bWVudCB0aGF0CisvLyBpcyBhIG51bWJlciBvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudCBh
dCBhbGwuIEl0IHJldHVybnMgZmFsc2Ugb25seSBpZiB0aGVyZQorLy8gaXMgc29tZSBhcmd1bWVu
dCB0aGF0IGlzIG5vdCBhIG51bWJlci4gVGhlIHZhbHVlIHBhcmFtZXRlciBpcyBmaWxsZWQgd2l0
aCB0aGUKKy8vIHBhcnNlZCBudW1iZXIsIG9yIGdpdmVuIHRoZSBkZWZhdWx0IGlmIHRoZXJlIGlz
IG5vIGFyZ3VtZW50Lgorc3RhdGljIGJvb2wgcGFyc2VDcHBBcmd1bWVudEludDMyKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBpbnQgYXJnSW5kZXgsIGludCogdmFsdWUsIGludCBk
ZWZhdWx0VmFsdWUpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUo
KSkgPiBhcmdJbmRleCkgeworICAgICAgICBpZiAoIWFyZ3VtZW50c1thcmdJbmRleF0uaXNOdW1i
ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgKnZhbHVlID0gYXJndW1l
bnRzW2FyZ0luZGV4XS50b0ludDMyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAqdmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi
b29sIHBhcnNlUGFnZVNpemVQYXJhbWV0ZXJzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ09mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcGFnZVdpZHRoSW5QaXhl
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBhZ2VIZWlnaHRJ
blBpeGVscykKK3sKKyAgICAvLyBXZWJLaXQgaXMgdXNpbmcgdGhlIHdpbmRvdyB3aWR0aC9oZWln
aHQgb2YgRHVtcFJlbmRlclRyZWUgYXMgdGhlCisgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiB0aGUg
cGFnZSBzaXplLgorICAgIC8vIEZJWE1FOiBzaGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgd2l0aCBv
dGhlciBwb3J0cy4KKyAgICBpbnQgYXJnQ291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50
cy5zaXplKCkpIC0gYXJnT2Zmc2V0OworICAgIGlmIChhcmdDb3VudCAmJiBhcmdDb3VudCAhPSAy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwYXJzZUNwcEFyZ3VtZW50SW50MzIo
YXJndW1lbnRzLCBhcmdPZmZzZXQsIHBhZ2VXaWR0aEluUGl4ZWxzLCA4MDApCisgICAgICAgIHx8
ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQgKyAxLCBwYWdlSGVp
Z2h0SW5QaXhlbHMsIDYwMCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIGJvb2wgcGFyc2VQYWdlTnVtYmVyKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBpbnQgYXJnT2Zmc2V0LCBpbnQqIHBhZ2VOdW1iZXIpCit7CisgICAgaWYg
KHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUoKSkgPiBhcmdPZmZzZXQgKyAxKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1l
bnRzLCBhcmdPZmZzZXQsIHBhZ2VOdW1iZXIsIDApKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlUGFnZU51bWJlclNpemVNYXJn
aW5zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBpbnQgYXJnT2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwYWdlTnVtYmVyLCBpbnQq
IHdpZHRoLCBpbnQqIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCogbWFyZ2luVG9wLCBpbnQqIG1hcmdpblJpZ2h0LCBpbnQqIG1hcmdpbkJvdHRvbSwg
aW50KiBtYXJnaW5MZWZ0KQoreworICAgIGludCBhcmdDb3VudCA9IHN0YXRpY19jYXN0PGludD4o
YXJndW1lbnRzLnNpemUoKSkgLSBhcmdPZmZzZXQ7CisgICAgaWYgKGFyZ0NvdW50ICYmIGFyZ0Nv
dW50ICE9IDcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXBhcnNlQ3BwQXJndW1l
bnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCwgcGFnZU51bWJlciwgMCkKKyAgICAgICAgfHwg
IXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCArIDEsIHdpZHRoLCAw
KQorICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0
ICsgMiwgaGVpZ2h0LCAwKQorICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3Vt
ZW50cywgYXJnT2Zmc2V0ICsgMywgbWFyZ2luVG9wLCAwKQorICAgICAgICB8fCAhcGFyc2VDcHBB
cmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0ICsgNCwgbWFyZ2luUmlnaHQsIDApCisg
ICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQgKyA1
LCBtYXJnaW5Cb3R0b20sIDApCisgICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJn
dW1lbnRzLCBhcmdPZmZzZXQgKyA2LCBtYXJnaW5MZWZ0LCAwKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFByaW50aW5n
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgc2V0SXNQcmludGluZyh0cnVlKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBUZXN0UnVubmVyOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKKyAgICBpbnQgcGFnZVdpZHRoSW5QaXhlbHMgPSAwOworICAgIGludCBwYWdlSGVp
Z2h0SW5QaXhlbHMgPSAwOworICAgIGlmICghcGFyc2VQYWdlU2l6ZVBhcmFtZXRlcnMoYXJndW1l
bnRzLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZ2VXaWR0aEluUGl4
ZWxzLCAmcGFnZUhlaWdodEluUGl4ZWxzKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghYXJn
dW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJGcmFtZSogZnJh
bWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICByZXN1bHQtPnNldChmcmFtZS0+cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKGNw
cFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhZ2VXaWR0aElu
UGl4ZWxzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGZsb2F0PihwYWdlSGVpZ2h0SW5QaXhlbHMpKSk7Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldCgiIik7
CisgICAgaW50IHBhZ2VOdW1iZXIgPSAwOworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhl
aWdodCA9IDA7CisgICAgaW50IG1hcmdpblRvcCA9IDA7CisgICAgaW50IG1hcmdpblJpZ2h0ID0g
MDsKKyAgICBpbnQgbWFyZ2luQm90dG9tID0gMDsKKyAgICBpbnQgbWFyZ2luTGVmdCA9IDA7Cisg
ICAgaWYgKCFwYXJzZVBhZ2VOdW1iZXJTaXplTWFyZ2lucyhhcmd1bWVudHMsIDAsICZwYWdlTnVt
YmVyLCAmd2lkdGgsICZoZWlnaHQsICZtYXJnaW5Ub3AsICZtYXJnaW5SaWdodCwgJm1hcmdpbkJv
dHRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXJnaW5MZWZ0KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3LT5tYWlu
RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgV2ViU2l6ZSBw
YWdlU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBmcmFtZS0+cGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMocGFnZU51bWJlciwgcGFnZVNpemUsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdp
bkJvdHRvbSwgbWFyZ2luTGVmdCk7CisgICAgc3RyaW5nc3RyZWFtIHJlc3VsdFN0cmluZzsKKyAg
ICByZXN1bHRTdHJpbmcgPDwgIigiIDw8IHBhZ2VTaXplLndpZHRoIDw8ICIsICIgPDwgcGFnZVNp
emUuaGVpZ2h0IDw8ICIpICIgPDwgbWFyZ2luVG9wIDw8ICIgIiA8PCBtYXJnaW5SaWdodCA8PCAi
ICIKKyAgICAgICAgICAgICAgICAgPDwgbWFyZ2luQm90dG9tIDw8ICIgIiA8PCBtYXJnaW5MZWZ0
OworICAgIHJlc3VsdC0+c2V0KHJlc3VsdFN0cmluZy5zdHIoKSk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAg
ICBpbnQgcGFnZUluZGV4ID0gMDsKKyAgICBpZiAoIXBhcnNlUGFnZU51bWJlcihhcmd1bWVudHMs
IDAsICZwYWdlSW5kZXgpKQorICAgICAgICByZXR1cm47CisgICAgV2ViRnJhbWUqIGZyYW1lID0g
bV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisgICAgcmVzdWx0LT5zZXQoZnJhbWUtPmhhc0N1c3RvbVBhZ2VTaXplU3R5bGUocGFnZUluZGV4
KSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cGFnZVByb3BlcnR5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQo
IiIpOworICAgIGludCBwYWdlTnVtYmVyID0gMDsKKyAgICBpZiAoIXBhcnNlUGFnZU51bWJlcihh
cmd1bWVudHMsIDEsICZwYWdlTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghYXJn
dW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJGcmFtZSogZnJh
bWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICBXZWJTaXplIHBhZ2VTaXplKDgwMCwgODAwKTsKKyAgICBmcmFtZS0+cHJpbnRC
ZWdpbihwYWdlU2l6ZSk7CisgICAgcmVzdWx0LT5zZXQoZnJhbWUtPnBhZ2VQcm9wZXJ0eShjcHBW
YXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgcGFnZU51bWJlcikudXRmOCgpKTsKKyAg
ICBmcmFtZS0+cHJpbnRFbmQoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpudW1iZXJPZlBhZ2Vz
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaW50IHBhZ2VXaWR0aEluUGl4ZWxzID0gMDsK
KyAgICBpbnQgcGFnZUhlaWdodEluUGl4ZWxzID0gMDsKKyAgICBpZiAoIXBhcnNlUGFnZVNpemVQ
YXJhbWV0ZXJzKGFyZ3VtZW50cywgMCwgJnBhZ2VXaWR0aEluUGl4ZWxzLCAmcGFnZUhlaWdodElu
UGl4ZWxzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWUqIGZyYW1lID0gbV93ZWJW
aWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAg
V2ViUHJpbnRQYXJhbXMgcHJpbnRQYXJhbXMoV2ViU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFn
ZUhlaWdodEluUGl4ZWxzKSk7CisgICAgaW50IG51bWJlck9mUGFnZXMgPSBmcmFtZS0+cHJpbnRC
ZWdpbihwcmludFBhcmFtcyk7CisgICAgZnJhbWUtPnByaW50RW5kKCk7CisgICAgcmVzdWx0LT5z
ZXQobnVtYmVyT2ZQYWdlcyk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6bG9nRXJyb3JUb0NvbnNv
bGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgbV9kZWxlZ2F0ZS0+ZGlkQWRkTWVz
c2FnZVRvQ29uc29sZSgKKyAgICAgICAgV2ViQ29uc29sZU1lc3NhZ2UoV2ViQ29uc29sZU1lc3Nh
Z2U6OkxldmVsRXJyb3IsIFdlYlN0cmluZzo6ZnJvbVVURjgodGV4dCkpLAorICAgICAgICBXZWJT
dHJpbmcoKSwgMCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xv
cnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBtX3dlYlZpZXctPnNldFNlbGVjdGlvbkNv
bG9ycygweGZmZWUwMDAwLCAweGZmMDBlZTAwLCAweGZmMDAwMDAwLCAweGZmYzBjMGMwKTsKK30K
Kwordm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMl0uaXNCb29sKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJWaWV3OjphZGRVc2VyU2NyaXB0KAorICAgICAgICBjcHBW
YXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwK
KyAgICAgICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlclNjcmlwdElu
amVjdEF0RG9jdW1lbnRTdGFydCA6IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RBdERvY3VtZW50
RW5kLAorICAgICAgICBhcmd1bWVudHNbMl0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2VyQ29u
dGVudEluamVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJblRvcEZy
YW1lT25seSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3Vt
ZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBXZWJWaWV3OjphZGRVc2VyU3R5bGVTaGVldCgKKyAgICAgICAgY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksCisgICAg
ICAgIGFyZ3VtZW50c1sxXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0
SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluVG9wRnJhbWVPbmx5LAor
ICAgICAgICAvLyBDaHJvbWl1bSBkZWZhdWx0cyB0byBJbmplY3RJblN1YnNlcXVlbnREb2N1bWVu
dHMsIGJ1dCBmb3IgY29tcGF0aWJpbGl0eQorICAgICAgICAvLyB3aXRoIHRoZSBvdGhlciBwb3J0
cycgRFJUcywgd2UgdXNlIFVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVudHMuCisgICAg
ICAgIFdlYlZpZXc6OlVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworfQorCit2
b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBUZXN0UnVubmVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2ViRWxlbWVudCBlbGVtZW50OworICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJn
dW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVu
dCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbnB1dC0+
aXNTcGVlY2hJbnB1dEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5wdXQtPnN0
YXJ0U3BlZWNoSW5wdXQoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpsYXllclRyZWVBc1RleHQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
cmVzdWx0LT5zZXQobV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+bGF5ZXJUcmVlQXNUZXh0KG1fc2hv
d0RlYnVnTGF5ZXJUcmVlKS51dGY4KCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6Omxvc2VDb21w
b3NpdG9yQ29udGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqKQor
eworICAgIGludCBudW1UaW1lczsKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMSB8fCAhYXJnc1sw
XS5pc051bWJlcigpKQorICAgICAgICBudW1UaW1lcyA9IDE7CisgICAgZWxzZQorICAgICAgICBu
dW1UaW1lcyA9IGFyZ3NbMF0udG9JbnQzMigpOworICAgIG1fd2ViVmlldy0+bG9zZUNvbXBvc2l0
b3JDb250ZXh0KG51bVRpbWVzKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgV2ViRWxlbWVudCBlbGVtZW50OworICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVs
ZW1lbnQoYXJnc1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQorICAgICAgICByZXN1
bHQtPnNldE51bGwoKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC0+c2V0KGVsZW1lbnQuZG9j
dW1lbnQoKS5mcmFtZSgpLT5tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCkudXRmOCgpKTsK
K30KKwordm9pZCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViRmluZE9wdGlvbnMgZmluZE9wdGlvbnM7CisgICAgYm9vbCB3cmFwQXJvdW5kID0gZmFs
c2U7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMikgeworICAgICAgICBWZWN0b3I8c3Rk
OjpzdHJpbmc+IG9wdGlvbnNBcnJheSA9IGFyZ3VtZW50c1sxXS50b1N0cmluZ1ZlY3RvcigpOwor
ICAgICAgICBmaW5kT3B0aW9ucy5tYXRjaENhc2UgPSB0cnVlOworCisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb3B0aW9uc0FycmF5LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgb3B0aW9uID0gb3B0aW9uc0FycmF5W2ldOworICAgICAgICAgICAg
Ly8gRklYTUU6IFN1cHBvcnQgYWxsIHRoZSBvcHRpb25zLCBzbyB3ZSBjYW4gcnVuIGZpbmRTdHJp
bmcuaHRtbCB0b28uCisgICAgICAgICAgICBpZiAob3B0aW9uID09ICJDYXNlSW5zZW5zaXRpdmUi
KQorICAgICAgICAgICAgICAgIGZpbmRPcHRpb25zLm1hdGNoQ2FzZSA9IGZhbHNlOworICAgICAg
ICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJCYWNrd2FyZHMiKQorICAgICAgICAgICAgICAgIGZp
bmRPcHRpb25zLmZvcndhcmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9
PSAiV3JhcEFyb3VuZCIpCisgICAgICAgICAgICAgICAgd3JhcEFyb3VuZCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFt
ZSgpOworICAgIGNvbnN0IGJvb2wgZmluZFJlc3VsdCA9IGZyYW1lLT5maW5kKDAsIGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBmaW5kT3B0aW9ucywgd3JhcEFyb3VuZCwgMCk7
CisgICAgcmVzdWx0LT5zZXQoZmluZFJlc3VsdCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
TWluaW11bVRpbWVySW50ZXJ2YWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRNaW5pbXVtVGltZXJJbnRlcnZh
bChhcmd1bWVudHNbMF0udG9Eb3VibGUoKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0
b2ZpbGxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ICE9IDIgfHwgIWFyZ3VtZW50c1sxXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2ViRWxlbWVudCBlbGVtZW50OworICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJn
dW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVu
dCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5wdXQtPnNldEF1
dG9maWxsZWQoYXJndW1lbnRzWzFdLnZhbHVlLmJvb2xWYWx1ZSk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0VmFsdWVGb3JVc2VyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgIT0gMikKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRWxlbWVudCBl
bGVtZW50OworICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZh
bHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYklu
cHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7CisgICAgaWYg
KCFpbnB1dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5wdXQtPnNldFZhbHVlKGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLCB0cnVlKTsKK30KKwordm9pZCBUZXN0UnVubmVy
OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIFRlc3RS
dW5uZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9
CisKK3ZvaWQgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1l
bnRlZAorfQorCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCit7CisgICAgLy8g
Tm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFj
a2VyTm90aWZpY2F0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKK3sK
KyAgICAvLyBOb3QgSW1wbGVtZW50ZWQKK30KKwordm9pZCBUZXN0UnVubmVyOjpzeW5jTG9jYWxT
dG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5v
dCBJbXBsZW1lbnRlZAorfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VB
ZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSAm
JiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7CisKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjplbmFibGVGaXhlZExheW91
dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
ICAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKyAgICBib29s
IGVuYWJsZUZpeGVkTGF5b3V0ID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOworICAgIG1fd2Vi
Vmlldy0+ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGVuYWJsZUZpeGVkTGF5b3V0KTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
KyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8ICAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIo
KSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQg
d2lkdGggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOworICAgIGludCBoZWlnaHQgPSBhcmd1bWVu
dHNbMV0udG9JbnQzMigpOworICAgIG1fd2ViVmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYlNp
emUod2lkdGgsIGhlaWdodCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNlbGVjdGlvbkFzTWFy
a3VwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXQobV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+c2VsZWN0aW9uQXNN
YXJrdXAoKS51dGY4KCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50
KENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChzdGF0aWNfY2FzdDxpbnQ+
KFdlYldvcmtlckluZm86OmRlZGljYXRlZFdvcmtlckNvdW50KCkpKTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjdHggPSBtX3dlYlZpZXctPm1haW5GcmFtZSgp
LT5tYWluV29ybGRTY3JpcHRDb250ZXh0KCk7CisgICAgcmVzdWx0LT5zZXQobV93ZWJWaWV3LT5t
YWluRnJhbWUoKS0+c2VsZWN0aW9uQXNNYXJrdXAoKS51dGY4KCkpOworICAgIHY4OjpDb250ZXh0
OjpTY29wZSBjc2NvcGUoY3R4KTsKKworICAgIFdlYktpdDo6V2ViSW50ZW50UmVxdWVzdCogcmVx
dWVzdCA9IG1fZGVsZWdhdGUtPmN1cnJlbnRJbnRlbnRSZXF1ZXN0KCk7CisgICAgaWYgKHJlcXVl
c3QtPmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA9PSAxKSB7CisgICAgICAgIFdlYktpdDo6V2ViQ1N0cmluZyByZXBseSA9IGNwcFZhcmlhbnRU
b1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLnV0ZjgoKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHY4dmFsdWUgPSB2ODo6U3RyaW5nOjpOZXcocmVwbHkuZGF0YSgpLCByZXBseS5sZW5n
dGgoKSk7CisgICAgICAgIHJlcXVlc3QtPnBvc3RSZXN1bHQoV2ViS2l0OjpXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OnNlcmlhbGl6ZSh2OHZhbHVlKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4dmFsdWUgPSB2ODo6U3RyaW5nOjpOZXcoIkVSUk9SIik7
CisgICAgICAgIHJlcXVlc3QtPnBvc3RGYWlsdXJlKFdlYktpdDo6V2ViU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpzZXJpYWxpemUodjh2YWx1ZSkpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpkZWxpdmVyV2ViSW50ZW50KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPCAgMykKKyAgICAgICAgcmV0dXJuOworCisgICAgdjg6OkhhbmRsZVNjb3Bl
IHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY3R4ID0gbV93ZWJWaWV3LT5tYWlu
RnJhbWUoKS0+bWFpbldvcmxkU2NyaXB0Q29udGV4dCgpOworICAgIHJlc3VsdC0+c2V0KG1fd2Vi
Vmlldy0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkFzTWFya3VwKCkudXRmOCgpKTsKKyAgICB2ODo6
Q29udGV4dDo6U2NvcGUgY3Njb3BlKGN0eCk7CisKKyAgICBXZWJTdHJpbmcgYWN0aW9uID0gY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7CisgICAgV2ViU3RyaW5nIHR5cGUgPSBj
cHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKTsKKyAgICBXZWJLaXQ6OldlYkNTdHJp
bmcgZGF0YSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLnV0ZjgoKTsKKyAg
ICBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFsaXplZERhdGEgPSBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OnNlcmlhbGl6ZSgKKyAgICAgICAgdjg6OlN0cmluZzo6TmV3KGRhdGEuZGF0
YSgpLCBkYXRhLmxlbmd0aCgpKSk7CisKKyAgICBXZWJJbnRlbnQgaW50ZW50ID0gV2ViSW50ZW50
OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBzZXJpYWxpemVkRGF0YS50b1N0cmluZygpLCBXZWJWZWN0
b3I8V2ViU3RyaW5nPigpLCBXZWJWZWN0b3I8V2ViU3RyaW5nPigpKTsKKworICAgIG1fd2ViVmll
dy0+bWFpbkZyYW1lKCktPmRlbGl2ZXJJbnRlbnQoaW50ZW50LCAwLCBtX2ludGVudENsaWVudC5n
ZXQoKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmco
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9JRCkKKyAgICAvLyBTaW5jZSBGb250Q29uZmlnIGRv
ZXNuJ3QgcHJvdmlkZSBhIHZhcmlhYmxlIHRvIGNvbnRyb2wgc3VicGl4ZWwgcG9zaXRpb25pbmcs
IHdlJ2xsIGZhbGwgYmFjaworICAgIC8vIHRvIHNldHRpbmcgaXQgZ2xvYmFsbHkgZm9yIGFsbCBm
b250cy4KKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9v
bCgpKQorICAgICAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGFy
Z3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOworI2VuZGlmCisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK2NsYXNzIEludm9rZUNhbGxiYWNrVGFzayA6IHB1YmxpYyBNZXRob2RUYXNrPFRl
c3RSdW5uZXI+IHsKK3B1YmxpYzoKKyAgICBJbnZva2VDYWxsYmFja1Rhc2soVGVzdFJ1bm5lciog
b2JqZWN0LCBQYXNzT3duQXJyYXlQdHI8Q3BwVmFyaWFudD4gY2FsbGJhY2tBcmd1bWVudHMsIHVp
bnQzMl90IG51bWJlck9mQXJndW1lbnRzKQorICAgICAgICA6IE1ldGhvZFRhc2s8VGVzdFJ1bm5l
cj4ob2JqZWN0KQorICAgICAgICAsIG1fY2FsbGJhY2tBcmd1bWVudHMoY2FsbGJhY2tBcmd1bWVu
dHMpCisgICAgICAgICwgbV9udW1iZXJPZkFyZ3VtZW50cyhudW1iZXJPZkFyZ3VtZW50cykKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKQorICAgIHsKKyAgICAg
ICAgQ3BwVmFyaWFudCBpbnZva2VSZXN1bHQ7CisgICAgICAgIG1fY2FsbGJhY2tBcmd1bWVudHNb
MF0uaW52b2tlRGVmYXVsdChtX2NhbGxiYWNrQXJndW1lbnRzLmdldCgpLCBtX251bWJlck9mQXJn
dW1lbnRzLCBpbnZva2VSZXN1bHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBPd25BcnJheVB0
cjxDcHBWYXJpYW50PiBtX2NhbGxiYWNrQXJndW1lbnRzOworICAgIHVpbnQzMl90IG1fbnVtYmVy
T2ZBcmd1bWVudHM7Cit9OworCit2b2lkIFRlc3RSdW5uZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rv
cihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVy
KCkgfHwgIWFyZ3VtZW50c1sxXS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgZmxvYXQgdmFsdWUgPSBhcmd1bWVudHNbMF0udmFsdWUuZG91YmxlVmFsdWU7CisgICAgbV93
ZWJWaWV3LT5zZXREZXZpY2VTY2FsZUZhY3Rvcih2YWx1ZSk7CisKKyAgICBPd25BcnJheVB0cjxD
cHBWYXJpYW50PiBjYWxsYmFja0FyZ3VtZW50cyA9IGFkb3B0QXJyYXlQdHIobmV3IENwcFZhcmlh
bnRbMV0pOworICAgIGNhbGxiYWNrQXJndW1lbnRzWzBdLnNldChhcmd1bWVudHNbMV0pOworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworICAgIHBvc3RUYXNrKG5ldyBJbnZva2VDYWxsYmFja1Rhc2so
dGhpcywgY2FsbGJhY2tBcmd1bWVudHMucmVsZWFzZSgpLCAxKSk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fd2ViVmlldy0+c2V0VmlzaWJpbGl0eVN0
YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCB0cnVlKTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICBzdHJpbmcgbmV3VmlzaWJpbGl0
eSA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgICAgICBpZiAobmV3VmlzaWJpbGl0eSA9
PSAidmlzaWJsZSIpCisgICAgICAgICAgICBtX3dlYlZpZXctPnNldFZpc2liaWxpdHlTdGF0ZShX
ZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChu
ZXdWaXNpYmlsaXR5ID09ICJoaWRkZW4iKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5zZXRWaXNp
YmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbiwgZmFsc2UpOworICAgICAg
ICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQorICAgICAgICAgICAgbV93
ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRl
ciwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmV2aWV3IikK
KyAgICAgICAgICAgIG1fd2ViVmlldy0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmls
aXR5U3RhdGVQcmV2aWV3LCBmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCit7CisgICAgLy8gTm90IEltcGxl
bWVudGVkCit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXAgYSBkaXJlY3Rp
b24gbmFtZSB0byBhIFdlYlRleHREaXJlY3Rpb24gdmFsdWUuCisgICAgc3RkOjpzdHJpbmcgZGly
ZWN0aW9uTmFtZSA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgIFdlYktpdDo6V2ViVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImF1dG8iKQor
ICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25EZWZhdWx0OworICAg
IGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gInJ0bCIpCisgICAgICAgIGRpcmVjdGlvbiA9IFdl
YktpdDo6V2ViVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0OworICAgIGVsc2UgaWYgKGRpcmVjdGlv
bk5hbWUgPT0gImx0ciIpCisgICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVj
dGlvbkxlZnRUb1JpZ2h0OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJW
aWV3LT5zZXRUZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0QXVkaW9EYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBDaGVjayB0aGF0IHBhc3NlZC1pbiBvYmplY3QgaXMsIGluIGZhY3QsIGFuIEFy
cmF5QnVmZmVyVmlldy4KKyAgICBOUE9iamVjdCogbnBvYmplY3QgPSBOUFZBUklBTlRfVE9fT0JK
RUNUKGFyZ3VtZW50c1swXSk7CisgICAgaWYgKCFucG9iamVjdCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghV2ViQmluZGluZ3M6OmdldEFycmF5QnVmZmVyVmlldyhucG9iamVjdCwgJm1fYXVk
aW9EYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2hvdWxkRHVtcEFzQXVkaW8odHJ1
ZSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9y
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMSB8
fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9oYXNDdXN0
b21GdWxsU2NyZWVuQmVoYXZpb3IgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7Cit9CisKK3Zv
aWQgVGVzdFJ1bm5lcjo6dGV4dFN1cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgNCB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0
KCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIo
KSB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
Yk5vZGUgbm9kZTsKKyAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXROb2RlKGFyZ3VtZW50c1swXS52
YWx1ZS5vYmplY3RWYWx1ZSwgJm5vZGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobm9k
ZS5pc051bGwoKSB8fCAhbm9kZS5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFdlYlBvaW50IHBvaW50KGFyZ3VtZW50c1sxXS50b0ludDMyKCksIGFyZ3VtZW50c1syXS50b0lu
dDMyKCkpOworICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IGFyZ3VtZW50c1szXS50b0ludDMyKCk7
CisKKyAgICBXZWJTdXJyb3VuZGluZ1RleHQgc3Vycm91bmRpbmdUZXh0OworICAgIHN1cnJvdW5k
aW5nVGV4dC5pbml0aWFsaXplKG5vZGUsIHBvaW50LCBtYXhMZW5ndGgpOworICAgIGlmIChzdXJy
b3VuZGluZ1RleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdC0+c2V0
KHN1cnJvdW5kaW5nVGV4dC50ZXh0Q29udGVudCgpLnV0ZjgoKSk7CiB9CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RSdW5uZXIuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdFJ1bm5lci5oCmluZGV4
IGY3MDY5NDAxYThmMDA0M2NmM2YyN2I3YzFhMTg0ZGZhOTYwZWVjZWMuLmFhYzBkNWNkODM3MmM5
YzVmNmNlMzNkYWNkOTI3YzJmN2VjNWUzZjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdFJ1bm5lci5oCkBAIC00NCwxNSArNDQsNjkw
IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViR2VvbG9jYXRpb25DbGllbnRNb2Nr
OworY2xhc3MgV2ViVmlldzsKIH0KIAogbmFtZXNwYWNlIHdlYmtpdF9zdXBwb3J0IHsKIGNsYXNz
IFNjb3BlZFRlbXBEaXJlY3Rvcnk7CiB9CiAKK2NsYXNzIFRlc3REZWxlZ2F0ZTsKKwogY2xhc3Mg
VGVzdFJ1bm5lciA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKIHB1YmxpYzoKICAgICBUZXN0UnVu
bmVyKCk7CisKKyAgICBUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWxlZ2F0ZTsgfQorICAgIHZvaWQgc2V0RGVsZWdhdGUoVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkg
eyBtX2RlbGVnYXRlID0gZGVsZWdhdGU7IH0KKworICAgIFdlYktpdDo6V2ViVmlldyogd2ViVmll
dygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQorICAgIHZvaWQgc2V0V2ViVmlldyhXZWJL
aXQ6OldlYlZpZXcqIHdlYlZpZXcpIHsgbV93ZWJWaWV3ID0gd2ViVmlldzsgfQorCisgICAgLy8g
VGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1
bXAgcGFnZXMgYXMKKyAgICAvLyBwbGFpbiB0ZXh0LCByYXRoZXIgdGhhbiBhcyBhIHRleHQgcmVw
cmVzZW50YXRpb24gb2YgdGhlIHJlbmRlcmVyJ3Mgc3RhdGUuCisgICAgLy8gSXQgdGFrZXMgYW4g
b3B0aW9uYWwgYXJndW1lbnQsIHdoZXRoZXIgdG8gZHVtcCBwaXhlbHMgcmVzdWx0cyBvciBub3Qu
CisgICAgdm9pZCBkdW1wQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHNldCBhIGZsYWcgdGhhdCB0ZWxscyB0
aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUKKyAgICAvLyBvZiBkZXNjcmlwdGl2ZSB0ZXh0
IGZvciBlYWNoIGRhdGFiYXNlIGNvbW1hbmQuIEl0IHNob3VsZCB0YWtlIG5vCisgICAgLy8gYXJn
dW1lbnRzLCBhbmQgaWdub3JlIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LiBIb3dldmVyLCBhdCB0
aGUgbW9tZW50LCB3ZQorICAgIC8vIGRvbid0IGhhdmUgYW55IERCIGZ1bmN0aW9uIHRoYXQgcHJp
bnRzIG1lc3NhZ2VzLCBzbyBmb3Igbm93IHRoaXMgZnVuY3Rpb24KKyAgICAvLyBkb2Vzbid0IGRv
IGFueXRoaW5nLgorICAgIHZvaWQgZHVtcERhdGFiYXNlQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZs
YWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YKKyAgICAvLyBk
ZXNjcmlwdGl2ZSB0ZXh0IGZvciBlYWNoIGVkaXRpbmcgY29tbWFuZC4gSXQgdGFrZXMgbm8gYXJn
dW1lbnRzLCBhbmQKKyAgICAvLyBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgorICAg
IHZvaWQgZHVtcEVkaXRpbmdDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRo
ZSB0ZXN0X3NoZWxsIHRvIHByaW50IGEgbGluZSBvZgorICAgIC8vIGRlc2NyaXB0aXZlIHRleHQg
Zm9yIGVhY2ggZnJhbWUgbG9hZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQK
KyAgICAvLyBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgorICAgIHZvaWQgZHVtcEZy
YW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hl
bGwgdG8gcHJpbnQgYSBsaW5lIG9mCisgICAgLy8gZGVzY3JpcHRpdmUgdGV4dCBmb3IgdGhlIHBy
b2dyZXNzIGZpbmlzaGVkIGNhbGxiYWNrLiBJdCB0YWtlcyBubworICAgIC8vIGFyZ3VtZW50cywg
YW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCisgICAgdm9pZCBkdW1wUHJvZ3Jl
c3NGaW5pc2hlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9z
aGVsbCB0byBwcmludCBhIGxpbmUgb2YKKyAgICAvLyB1c2VyIGdlc3R1cmUgc3RhdHVzIHRleHQg
Zm9yIHNvbWUgZnJhbWUgbG9hZCBjYWxsYmFja3MuIEl0IHRha2VzIG5vCisgICAgLy8gYXJndW1l
bnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KKyAgICB2b2lkIGR1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxs
cyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBvdXQgYSB0ZXh0CisgICAgLy8gcmVwcmVzZW50YXRp
b24gb2YgdGhlIGJhY2svZm9yd2FyZCBsaXN0LiBJdCBpZ25vcmVzIGFsbCBhcmd1bWVudHMuCisg
ICAgdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0
aGUgdGVzdF9zaGVsbCB0byBwcmludCBvdXQgdGhlCisgICAgLy8gc2Nyb2xsIG9mZnNldHMgb2Yg
dGhlIGNoaWxkIGZyYW1lcy4gSXQgaWdub3JlcyBhbGwuCisgICAgdm9pZCBkdW1wQ2hpbGRGcmFt
ZVNjcm9sbFBvc2l0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hl
bGwgdG8gcmVjdXJzaXZlbHkKKyAgICAvLyBkdW1wIGFsbCBmcmFtZXMgYXMgcGxhaW4gdGV4dCBp
ZiB0aGUgZHVtcEFzVGV4dCBmbGFnIGlzIHNldC4KKyAgICAvLyBJdCB0YWtlcyBubyBhcmd1bWVu
dHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgorICAgIHZvaWQgZHVtcENo
aWxkRnJhbWVzQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rf
c2hlbGwgdG8gZHVtcCBhIGRlc2NyaXB0aXZlCisgICAgLy8gbGluZSBmb3IgZWFjaCByZXNvdXJj
ZSBsb2FkIGNhbGxiYWNrLiBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzCisgICAg
Ly8gYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCisgICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsgICAgCisgICAgCisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxs
IHRvIGR1bXAgdGhlIE1JTUUgdHlwZQorICAgIC8vIGZvciBlYWNoIHJlc291cmNlIHRoYXQgd2Fz
IGxvYWRlZC4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkKKyAgICAvLyB0
aGF0IG1heSBiZSBwcmVzZW50LgorICAgIHZvaWQgZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlw
ZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gVGhpcyBm
dW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYWxs
IGNhbGxzCisgICAgLy8gdG8gd2luZG93LnN0YXR1cygpLgorICAgIC8vIEl0IHRha2VzIG5vIGFy
Z3VtZW50cywgYW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCisgICAgdm9pZCBk
dW1wV2luZG93U3RhdHVzQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRl
c3Rfc2hlbGwgdG8gZHVtcCBhbGwgY2FsbHMgdG8KKyAgICAvLyBXZWJWaWV3Q2xpZW50OjpjcmVh
dGVWaWV3KCkuCisgICAgLy8gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkg
dGhhdCBtYXkgYmUgcHJlc2VudC4KKyAgICB2b2lkIGR1bXBDcmVhdGVWaWV3KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFdoZW4gY2FsbGVkIHdpdGggYSBi
b29sZWFuIGFyZ3VtZW50LCB0aGlzIHNldHMgYSBmbGFnIHRoYXQgY29udHJvbHMKKyAgICAvLyB3
aGV0aGVyIGNvbnRlbnQtZWRpdGFibGUgZWxlbWVudHMgYWNjZXB0IGVkaXRpbmcgZm9jdXMgd2hl
biBhbiBlZGl0aW5nCisgICAgLy8gYXR0ZW1wdCBpcyBtYWRlLiBJdCBpZ25vcmVzIGFueSBhZGRp
dGlvbmFsIGFyZ3VtZW50cy4KKyAgICB2b2lkIHNldEFjY2VwdHNFZGl0aW5nKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgZGVhbGlu
ZyB3aXRoIHdpbmRvd3MuIEJ5IGRlZmF1bHQgd2UgYmxvY2sgYWxsIG5ldyB3aW5kb3dzLgorICAg
IHZvaWQgd2luZG93Q291bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgc2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEJ5IGRlZmF1bHQs
IHRlc3RzIGVuZCB3aGVuIHBhZ2UgbG9hZCBpcyBjb21wbGV0ZS4gVGhlc2UgbWV0aG9kcyBhcmUg
dXNlZAorICAgIC8vIHRvIGRlbGF5IHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0ZXN0IHVudGlsIG5v
dGlmeURvbmUgaXMgY2FsbGVkLgorICAgIHZvaWQgd2FpdFVudGlsRG9uZShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBub3RpZnlEb25lKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIE1ldGhvZHMgZm9yIGFkZGluZyBh
Y3Rpb25zIHRvIHRoZSB3b3JrIHF1ZXVlLiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAv
LyB3YWl0VW50aWxEb25lL25vdGlmeURvbmUgYWJvdmUuCisgICAgdm9pZCBxdWV1ZUJhY2tOYXZp
Z2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHF1
ZXVlRm9yd2FyZE5hdmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworICAgIHZvaWQgcXVldWVSZWxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgcXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBxdWV1ZUxvYWQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgcXVldWVMb2FkSFRNTFN0cmlu
Zyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBBbHRob3Vn
aCB0aGlzIGlzIG5hbWVkICJvYmpDIiB0byBtYXRjaCB0aGUgTWFjIHZlcnNpb24sIGl0IGFjdHVh
bGx5IHRlc3RzCisgICAgLy8gdGhlIGlkZW50aXR5IG9mIGl0cyB0d28gYXJndW1lbnRzIGluIEMr
Ky4KKyAgICB2b2lkIG9iakNJZGVudGl0eUlzRXF1YWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworCisgICAgLy8gQ2hhbmdlcyB0aGUgY29va2llIHBvbGljeSBmcm9tIHRo
ZSBkZWZhdWx0IHRvIGFsbG93IGFsbCBjb29raWVzLgorICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0
Q29va2llcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBD
aGFuZ2VzIGFzeW5jaHJvbm91cyBzcGVsbGNoZWNraW5nIGZsYWcgb24gdGhlIHNldHRpbmdzLgor
ICAgIHZvaWQgc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gU2hvd3MgRGV2VG9vbHMgd2luZG93
LgorICAgIHZvaWQgc2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBHaXZlcyBmb2N1cyB0byB0aGUgd2luZG93Lgor
ICAgIHZvaWQgc2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworCisgICAgLy8gTWV0aG9kIHRoYXQgY29udHJvbHMgd2hldGhlciBwcmVzc2luZyBUYWIg
a2V5IGN5Y2xlcyB0aHJvdWdoIHBhZ2UgZWxlbWVudHMKKyAgICAvLyBvciBpbnNlcnRzIGEgJ1x0
JyBjaGFyIGluIHRleHQgYXJlYQorICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFBhc3Nl
cyB0aHJvdWdoIHRvIFdlYlByZWZlcmVuY2VzIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBoYXZl
IGEgY3VzdG9tCisgICAgLy8gc3R5bGUgc2hlZXQuCisgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQg
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKKyAgICAvLyBQYXNzZXMgdGhpcyBwcmVmZXJlbmNlIHRocm91Z2ggdG8gV2ViU2V0
dGluZ3MuCisgICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBQdXRzIFdlYmtpdCBpbiAiZGFz
aGJvYXJkIGNvbXBhdGliaWxpdHkgbW9kZSIsIHdoaWNoIGlzIHVzZWQgaW4gb2JzY3VyZQorICAg
IC8vIE1hYy1vbmx5IGNpcmN1bXN0YW5jZXMuIEl0J3Mgbm90IHJlYWxseSBuZWNlc3NhcnksIGFu
ZCB3aWxsIG1vc3QgbGlrZWx5CisgICAgLy8gbmV2ZXIgYmUgdXNlZCBieSBDaHJvbWUsIGJ1dCBz
b21lIGxheW91dCB0ZXN0cyBkZXBlbmQgb24gaXRzIHByZXNlbmNlLgorICAgIHZvaWQgc2V0VXNl
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworCisgICAgdm9pZCBzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2F1c2VzIG5hdmlnYXRpb24gYWN0aW9ucyBq
dXN0IHByaW50b3V0IHRoZSBpbnRlbmRlZCBuYXZpZ2F0aW9uIGluc3RlYWQKKyAgICAvLyBvZiB0
YWtpbmcgeW91IHRvIHRoZSBwYWdlLiBUaGlzIGlzIHVzZWQgZm9yIGNhc2VzIGxpa2UgbWFpbHRv
LCB3aGVyZSB5b3UKKyAgICAvLyBkb24ndCBhY3R1YWxseSB3YW50IHRvIG9wZW4gdGhlIG1haWwg
cHJvZ3JhbS4KKyAgICB2b2lkIHNldEN1c3RvbVBvbGljeURlbGVnYXRlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIERlbGF5cyBjb21wbGV0aW9uIG9mIHRo
ZSB0ZXN0IHVudGlsIHRoZSBwb2xpY3kgZGVsZWdhdGUgcnVucy4KKyAgICB2b2lkIHdhaXRGb3JQ
b2xpY3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBDYXVzZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIGNsZWFyIGNlcnRhaW4gaGVhZGVycy4KKyAg
ICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENhdXNlcyBXaWxsU2VuZFJlcXVlc3QgdG8gYmxv
Y2sgcmVkaXJlY3RzLgorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJl
ZGlyZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENh
dXNlcyBXaWxsU2VuZFJlcXVlc3QgdG8gcmV0dXJuIGFuIGVtcHR5IHJlcXVlc3QuCisgICAgdm9p
ZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICAvLyBDb252ZXJ0cyBhIFVSTCBzdGFydGluZyB3aXRoIGZpbGU6
Ly8vdG1wLyB0byB0aGUgbG9jYWwgbWFwcGluZy4KKyAgICB2b2lkIHBhdGhUb0xvY2FsUmVzb3Vy
Y2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gU2V0cyBh
IGJvb2wgc3VjaCB0aGF0IHdoZW4gYSBkcmFnIGlzIHN0YXJ0ZWQsIHdlIGZpbGwgdGhlIGRyYWcg
Y2xpcGJvYXJkCisgICAgLy8gd2l0aCBhIGZha2UgZmlsZSBvYmplY3QuCisgICAgdm9pZCBhZGRG
aWxlVG9QYXN0ZWJvYXJkT25EcmFnKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKworICAgIC8vIEV4ZWN1dGVzIGFuIGludGVybmFsIGNvbW1hbmQgKHN1cGVyc2V0IG9mIGRv
Y3VtZW50LmV4ZWNDb21tYW5kKCkgY29tbWFuZHMpLgorICAgIHZvaWQgZXhlY0NvbW1hbmQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2hlY2tzIGlmIGFu
IGludGVybmFsIGNvbW1hbmQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS4KKyAgICB2b2lkIGlzQ29t
bWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gU2V0IHRoZSBXZWJQcmVmZXJlbmNlIHRoYXQgY29udHJvbHMgd2Via2l0J3MgcG9wdXAgYmxv
Y2tpbmcuCisgICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBJZiB0cnVlLCBjYXVzZXMgcHJvdmlzaW9u
YWwgZnJhbWUgbG9hZHMgdG8gYmUgc3RvcHBlZCBmb3IgdGhlIHJlbWFpbmRlciBvZgorICAgIC8v
IHRoZSB0ZXN0LgorICAgIHZvaWQgc2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJs
ZSBzbWFydCBpbnNlcnQvZGVsZXRlLiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICB2
b2lkIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSB0cmFpbGluZyB3aGl0ZXNw
YWNlIHNlbGVjdGlvbiBvbiBkb3VibGUgY2xpY2suCisgICAgdm9pZCBzZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIHZvaWQgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgcGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBlbmFibGVBdXRvUmVzaXpl
TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkaXNh
YmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGRpc2FibGVJbWFnZUxvYWRpbmcoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlRW5hYmxl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkdW1wU2Vs
ZWN0aW9uUmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAvLyBHcmFudHMgcGVybWlzc2lvbiBmb3IgZGVza3Rv
cCBub3RpZmljYXRpb25zIHRvIGFuIG9yaWdpbgorICAgIHZvaWQgZ3JhbnREZXNrdG9wTm90aWZp
Y2F0aW9uUGVybWlzc2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgLy8gU2ltdWxhdGVzIGEgY2xpY2sgb24gYSBkZXNrdG9wIG5vdGlmaWNhdGlvbi4KKyAgICB2
b2lkIHNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9u
Rm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIHNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gRGVhbHMgd2l0aCBXZWIgQXVkaW8gV0FW
IGZpbGUgZGF0YS4KKyAgICB2b2lkIHNldEF1ZGlvRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgY29uc3QgV2ViS2l0OjpXZWJBcnJheUJ1ZmZlclZpZXcmIGF1
ZGlvRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9EYXRhOyB9IAorCisgICAgLy8gVGhlIGZv
bGxvd2luZyBhcmUgb25seSBzdHVicy4KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFueSBvZiB0
aGVzZSB0aGF0IGFyZSBuZWVkZWQgdG8gcGFzcyB0aGUgbGF5b3V0IHRlc3RzLgorICAgIHZvaWQg
ZHVtcEFzV2ViQXJjaGl2ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBkdW1wVGl0bGVDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZGlzcGxheShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRSZWdp
b24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgdGVzdFJl
cGFpbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgcmVw
YWludFN3ZWVwSG9yaXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIGNsZWFyQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGtlZXBXZWJIaXN0b3J5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHN0b3JlV2ViU2NyaXB0T2JqZWN0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGFjY2Vzc1N0b3JlZFdl
YlNjcmlwdE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAg
dm9pZCBvYmpDQ2xhc3NOYW1lT2YoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworICAgIHZvaWQgYWRkRGlzYWxsb3dlZFVSTChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0Q2FsbENsb3NlT25XZWJWaWV3
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxlZChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBvdmVycmlkZVBy
ZWZlcmVuY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQg
c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRl
bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0QWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgLy8gVGhlIGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhIG5vbmV4aXN0ZW50IG1l
dGhvZCBpcyBjYWxsZWQgb24KKyAgICAvLyB0aGUgbGF5b3V0IHRlc3QgY29udHJvbGxlciBvYmpl
Y3QuCisgICAgLy8gSXQgaXMgdXNlZnVsbCB0byBjYXRjaCB0eXBvcyBpbiB0aGUgSmF2YVNjcmlw
dCBjb2RlIChhIGZldyBsYXlvdXQgdGVzdHMKKyAgICAvLyBkbyBoYXZlIHR5cG9zIGluIHRoZW0p
IGFuZCBpdCBhbGxvd3MgdGhlIHNjcmlwdCB0byBjb250aW51ZSBydW5uaW5nIGluCisgICAgLy8g
dGhhdCBjYXNlIChhcyB0aGUgTWFjIGRvZXMpLgorICAgIHZvaWQgZmFsbGJhY2tNZXRob2QoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQWxsb3dzIGxheW91
dCB0ZXN0cyB0byBtYW5hZ2Ugb3JpZ2lucycgd2hpdGVsaXN0aW5nLgorICAgIHZvaWQgYWRkT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2xlYXJzIGFsbCBhcHBsaWNh
dGlvbiBjYWNoZXMuCisgICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICAvLyBDbGVhcnMgYW4gYXBwbGljYXRp
b24gY2FjaGUgZm9yIGFuIG9yaWdpbi4KKyAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25DYWNoZUZv
ck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgLy8gUmV0
dXJucyBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBsaWNhdGlvbiBjYWNoZXMuCisgICAgdm9pZCBvcmln
aW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIC8vIFNldHMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIHF1b3RhIGZvciB0aGUgbG9j
YWxob3N0IG9yaWdpbi4KKyAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgLy8gUmV0dXJucyBkaXNr
IHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KKyAgICB2b2lk
IGFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2xlYXJzIGFsbCBkYXRhYmFzZXMuCisgICAgdm9p
ZCBjbGVhckFsbERhdGFiYXNlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgLy8gU2V0cyB0aGUgZGVmYXVsdCBxdW90YSBmb3IgYWxsIG9yaWdpbnMKKyAgICB2b2lk
IHNldERhdGFiYXNlUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
CisgICAgLy8gQ2FsbHMgc2V0bG9jYWxlKExDX0FMTCwgLi4uKSBmb3IgYSBzcGVjaWZpZWQgbG9j
YWxlLgorICAgIC8vIFJlc2V0cyBiZXR3ZWVuIHRlc3RzLgorICAgIHZvaWQgc2V0UE9TSVhMb2Nh
bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2F1c2Vz
IGxheW91dCB0byBoYXBwZW4gYXMgaWYgdGFyZ2V0dGVkIHRvIHByaW50ZWQgcGFnZXMuCisgICAg
dm9pZCBzZXRQcmludGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgcGFnZSB3aGVyZSB0aGUgc3BlY2lmaWVkIGVsZW1l
bnQgd2lsbCBiZSBwdXQuCisgICAgdm9pZCBwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gR2V0cyB0aGUgcGFnZSBz
aXplIGFuZCBtYXJnaW5zIGZvciBhIHByaW50ZWQgcGFnZS4KKyAgICB2b2lkIHBhZ2VTaXplQW5k
TWFyZ2luc0luUGl4ZWxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9tIHBh
Z2Ugc2l6ZSBzdHlsZSBmb3IKKyAgICAvLyBwcmludGluZy4KKyAgICB2b2lkIGhhc0N1c3RvbVBh
Z2VTaXplU3R5bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gR2V0cyB0aGUgcGFnZS1yZWxhdGVkIHByb3BlcnR5IGZvciBwcmludGVkIGNvbnRlbnQKKyAg
ICB2b2lkIHBhZ2VQcm9wZXJ0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisKKyAgICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gYmUgcHJpbnRlZC4KKyAgICB2
b2lkIG51bWJlck9mUGFnZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
CisgICAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb25zIHJlcXVl
c3RzIHBlbmRpbmcuCisgICAgdm9pZCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAv
LyBBbGxvd3MgbGF5b3V0IHRlc3RzIHRvIGV4ZWMgc2NyaXB0cyBhdCBXZWJJbnNwZWN0b3Igc2lk
ZS4KKyAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gRm9yY2VzIHRoZSBzZWxlY3Rpb24gY29sb3JzIGZv
ciB0ZXN0aW5nIHVuZGVyIExpbnV4LgorICAgIHZvaWQgZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQWRkcyBhIHVz
ZXIgc2NyaXB0IG9yIHVzZXIgc3R5bGUgc2hlZXQgdG8gYmUgaW5qZWN0ZWQgaW50byBuZXcgZG9j
dW1lbnRzLgorICAgIHZvaWQgYWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBEZXZpY2VPcmllbnRhdGlvbiByZWxhdGVk
IGZ1bmN0aW9ucworICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEdlb2xvY2F0aW9uIHJlbGF0ZWQg
ZnVuY3Rpb25zLgorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNl
dE1vY2tHZW9sb2NhdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKworICAgIC8vIEVtcHR5IHN0dWIgbWV0aG9kIHRvIGtlZXAgcGFyaXR5IHdpdGggb2JqZWN0
IG1vZGVsIGV4cG9zZWQgYnkgZ2xvYmFsIFRlc3RSdW5uZXIuCisgICAgdm9pZCBhYm9ydE1vZGFs
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFNwZWVjaCBp
bnB1dCByZWxhdGVkIGZ1bmN0aW9ucy4KKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorICAgIHZv
aWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyNlbmRpZgorI2lmIEVOQUJMRShTQ1JJUFRFRF9T
UEVFQ0gpCisgICAgdm9pZCBhZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0TW9ja1NwZWVjaFJlY29n
bml0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgd2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisjZW5kaWYKKyAgICB2b2lkIHN0YXJ0U3BlZWNoSW5wdXQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBsYXllclRyZWVBc1Rl
eHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpOworCisg
ICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdz
LCBDcHBWYXJpYW50KiByZXN1bHQpOworCisgICAgdm9pZCBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZmluZFN0cmlu
Zyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHNldE1p
bmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1l
bnQgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBib29sZWFuLgorICAgIC8vIEZvcndh
cmRzIHRoZSBzZXRBdXRvZmlsbGVkKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KKyAgICB2b2lkIHNl
dEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gaW5wdXQgZWxlbWVudCBhbmQg
dGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIHN0cmluZyB2YWx1ZS4KKyAgICAvLyBGb3J3YXJk
cyB0aGUgc2V0VmFsdWVGb3JVc2VyKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KKyAgICB2b2lkIHNl
dFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBMb2NhbFN0b3JhZ2Ugb3JpZ2luLXJlbGF0ZWQKKyAgICB2b2lkIGRlbGV0ZUFsbExvY2Fs
U3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBv
cmlnaW5zV2l0aExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgbG9jYWxTdG9yYWdlRGlza1VzYWdlRm9y
T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG9i
c2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBXZWJQZXJtaXNzaW9uQ2xpZW50IHJlbGF0
ZWQuCisgICAgdm9pZCBzZXRJbWFnZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFNjcmlwdHNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFN0b3JhZ2VBbGxvd2VkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFBsdWdpbnNBbGxvd2Vk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGR1bXBQZXJt
aXNzaW9uQ2xpZW50Q2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKworICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHBsdWdpbnMuCisgICAgdm9pZCBzZXRQbHVn
aW5zRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAv
LyBTd2l0Y2ggdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBhZ2UuCisgICAgdm9pZCBzZXRQYWdlVmlz
aWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBy
ZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIC8vIENoYW5nZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZm9jdXNlZCBlbGVtZW50Lgor
ICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKKyAgICB2b2lkIHNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQg
ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIHNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHNlbGVjdGlvbkFzTWFya3VwKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFN3aXRjaCB0aGUgbGluayBkZXRlY3Rp
b24uCisgICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKTsKKwor
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgdm9pZCBkaWRMb3NlUG9pbnRlckxvY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0UG9pbnRlckxv
Y2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyNlbmRpZgorCisgICAgdm9pZCB3b3Jr
ZXJUaHJlYWRDb3VudChDcHBWYXJpYW50Kik7CisKKyAgICAvLyBFeHBlY3RzIG9uZSBzdHJpbmcg
YXJndW1lbnQgZm9yIHNlbmRpbmcgc3VjY2Vzc2Z1bCByZXN1bHQsIHplcm8KKyAgICAvLyBhcmd1
bWVudHMgZm9yIHNlbmRpbmcgYSBmYWlsdXJlIHJlc3VsdC4KKyAgICB2b2lkIHNlbmRXZWJJbnRl
bnRSZXNwb25zZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAv
LyBDYXVzZSB0aGUgd2ViIGludGVudCB0byBiZSBkZWxpdmVyZWQgdG8gdGhpcyBjb250ZXh0Lgor
ICAgIHZvaWQgZGVsaXZlcldlYkludGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKKyAgICAvLyBFbmFibGVzIG9yIGRpc2FibGVzIHN1YnBpeGVsIHBvc2l0aW9uaW5n
IChpLmUuIGZyYWN0aW9uYWwgWCBwb3NpdGlvbnMgZm9yCisgICAgLy8gZ2x5cGhzKSBpbiB0ZXh0
IHJlbmRlcmluZyBvbiBMaW51eC4gU2luY2UgdGhpcyBtZXRob2QgY2hhbmdlcyBnbG9iYWwKKyAg
ICAvLyBzZXR0aW5ncywgdGVzdHMgdGhhdCBjYWxsIGl0IG11c3QgdXNlIHRoZWlyIG93biBjdXN0
b20gZm9udCBmYW1pbHkgZm9yCisgICAgLy8gYWxsIHRleHQgdGhhdCB0aGV5IHJlbmRlci4gSWYg
bm90LCBhbiBhbHJlYWR5LWNhY2hlZCBzdHlsZSB3aWxsIGJlIHVzZWQsCisgICAgLy8gcmVzdWx0
aW5nIGluIHRoZSBjaGFuZ2VkIHNldHRpbmcgYmVpbmcgaWdub3JlZC4KKyAgICB2b2lkIHNldFRl
eHRTdWJwaXhlbFBvc2l0aW9uaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKworICAgIC8vIFVzZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgIHZv
aWQgc2V0QmFja2luZ1NjYWxlRmFjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKworICAgIC8vIFJldHJpZXZlcyB0aGUgdGV4dCBzdXJyb3VuZGluZyBhIHBvc2l0aW9u
IGluIGEgdGV4dCBub2RlLgorICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJl
IGEgdGV4dCBub2RlLCB0aGUgc2Vjb25kIGFuZCB0aGlyZCB0byBiZQorICAgIC8vIHBvaW50IGNv
b3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBub2RlIGFuZCB0aGUgZm91cnRoIHRoZSBtYXhpbXVt
IHRleHQKKyAgICAvLyBsZW5ndGggdG8gcmV0cmlldmUuCisgICAgdm9pZCB0ZXh0U3Vycm91bmRp
bmdOb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworcHVibGljOgor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgbm90IGV4cG9zZWQgdG8gSmF2YVNjcmlw
dC4KKyAgICB2b2lkIHNldFdvcmtRdWV1ZUZyb3plbihib29sIGZyb3plbikgeyBtX3dvcmtRdWV1
ZS5zZXRGcm96ZW4oZnJvemVuKTsgfQorCisgICAgYm9vbCBzaG91bGREdW1wQXNBdWRpbygpIGNv
bnN0IHsgcmV0dXJuIG1fZHVtcEFzQXVkaW87IH0gCisgICAgdm9pZCBzZXRTaG91bGREdW1wQXNB
dWRpbyhib29sIGR1bXBBc0F1ZGlvKSB7IG1fZHVtcEFzQXVkaW8gPSBkdW1wQXNBdWRpbzsgfSAK
KyAgICBib29sIHNob3VsZER1bXBBc1RleHQoKSB7IHJldHVybiBtX2R1bXBBc1RleHQ7IH0KKyAg
ICB2b2lkIHNldFNob3VsZER1bXBBc1RleHQoYm9vbCB2YWx1ZSkgeyBtX2R1bXBBc1RleHQgPSB2
YWx1ZTsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSB7IHJldHVybiBt
X2R1bXBFZGl0aW5nQ2FsbGJhY2tzOyB9CisgICAgYm9vbCBzaG91bGREdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzOyB9CisgICAgdm9pZCBz
ZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGJvb2wgdmFsdWUpIHsgbV9kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzID0gdmFsdWU7IH0KKyAgICBib29sIHNob3VsZER1bXBQcm9ncmVzc0Zpbmlz
aGVkQ2FsbGJhY2soKSB7IHJldHVybiBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7IH0K
KyAgICB2b2lkIHNldFNob3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soYm9vbCB2YWx1
ZSkgeyBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2sgPSB2YWx1ZTsgfQorICAgIGJvb2wg
c2hvdWxkRHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSB7IHJldHVybiBtX2R1
bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzOyB9CisgICAgdm9pZCBzZXRTaG91bGRE
dW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhib29sIHZhbHVlKSB7IG1fZHVtcFVz
ZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSB2YWx1ZTsgfQorICAgIGJvb2wgc2hvdWxk
RHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpIHtyZXR1cm4gbV9kdW1wUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzOyB9CisgICAgdm9pZCBzZXRTaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBl
cyhib29sIHZhbHVlKSB7IG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMgPSB2YWx1ZTsg
fQorICAgIGJvb2wgc2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSB7cmV0dXJu
IG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXM7IH0KKyAgICBib29sIHNob3VsZER1bXBT
dGF0dXNDYWxsYmFja3MoKSB7IHJldHVybiBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzOyB9Cisg
ICAgYm9vbCBzaG91bGREdW1wU2VsZWN0aW9uUmVjdCgpIHsgcmV0dXJuIG1fZHVtcFNlbGVjdGlv
blJlY3Q7IH0KKyAgICBib29sIHNob3VsZER1bXBCYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBt
X2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KKyAgICBib29sIHNob3VsZER1bXBUaXRsZUNoYW5nZXMo
KSB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0KKyAgICBib29sIHNob3VsZER1bXBQZXJt
aXNzaW9uQ2xpZW50Q2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wUGVybWlzc2lvbkNsaWVudENh
bGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMo
KSB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zOyB9CisgICAgYm9vbCBz
aG91bGREdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lc0Fz
VGV4dDsgfQorICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoKSB7IHJldHVybiBt
X2dlbmVyYXRlUGl4ZWxSZXN1bHRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRHZW5lcmF0ZVBpeGVs
UmVzdWx0cyhib29sIHZhbHVlKSB7IG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSB2YWx1ZTsgfQor
ICAgIGJvb2wgc2hvdWxkRHVtcENyZWF0ZVZpZXcoKSB7IHJldHVybiBtX2R1bXBDcmVhdGVWaWV3
OyB9CisgICAgYm9vbCBhY2NlcHRzRWRpdGluZygpIHsgcmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7
IH0KKyAgICBib29sIGNhbk9wZW5XaW5kb3dzKCkgeyByZXR1cm4gbV9jYW5PcGVuV2luZG93czsg
fQorICAgIGJvb2wgc2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZCgpIHsgcmV0dXJuIG1fc2hvdWxk
QWRkRmlsZVRvUGFzdGVib2FyZDsgfQorICAgIGJvb2wgc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fk
cygpIHsgcmV0dXJuIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkczsgfQorICAgIGJvb2wgZGVm
ZXJNYWluUmVzb3VyY2VEYXRhTG9hZCgpIHsgcmV0dXJuIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRh
TG9hZDsgfQorICAgIHZvaWQgc2V0U2hvd0RlYnVnTGF5ZXJUcmVlKGJvb2wgdmFsdWUpIHsgbV9z
aG93RGVidWdMYXllclRyZWUgPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0VGl0bGVUZXh0RGlyZWN0
aW9uKFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXIpCisgICAgeworICAgICAgICBtX3RpdGxl
VGV4dERpcmVjdGlvbi5zZXQoZGlyID09IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxlZnRUb1Jp
Z2h0ID8gImx0ciIgOiAicnRsIik7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRJbnRlcmNlcHRQ
b3N0TWVzc2FnZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbnRlcmNlcHRQb3N0TWVzc2Fn
ZS5pc0Jvb2woKSAmJiBtX2ludGVyY2VwdFBvc3RNZXNzYWdlLnRvQm9vbGVhbigpOworICAgIH0K
KworICAgIHZvaWQgc2V0SXNQcmludGluZyhib29sIHZhbHVlKSB7IG1faXNQcmludGluZyA9IHZh
bHVlOyB9CisgICAgYm9vbCBpc1ByaW50aW5nKCkgeyByZXR1cm4gbV9pc1ByaW50aW5nOyB9CisK
KyAgICBib29sIHRlc3RSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXN0UmVwYWludDsgfQor
ICAgIGJvb2wgc3dlZXBIb3Jpem9udGFsbHkoKSBjb25zdCB7IHJldHVybiBtX3N3ZWVwSG9yaXpv
bnRhbGx5OyB9CisKKyAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgYm9vbCBoYXNDdXN0b21GdWxs
U2NyZWVuQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0N1c3RvbUZ1bGxTY3JlZW5CZWhh
dmlvcjsgfQorCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSB3ZWJ2aWV3IGRlbGVnYXRlIHdoZW4gdGhl
IHRvcGxldmVsIGZyYW1lIGxvYWQgaXMgZG9uZS4KKyAgICB2b2lkIGxvY2F0aW9uQ2hhbmdlRG9u
ZSgpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSB3ZWJ2aWV3IGRlbGVnYXRlIHdoZW4gdGhlIHBv
bGljeSBkZWxlZ2F0ZSBydW5zIGlmIHRoZQorICAgIC8vIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSB3
YXMgY2FsbGVkLgorICAgIHZvaWQgcG9saWN5RGVsZWdhdGVEb25lKCk7CisKKyAgICAvLyBSZWlu
aXRpYWxpemVzIGFsbCBzdGF0aWMgdmFsdWVzLiBUaGUgcmVzZXQoKSBtZXRob2Qgc2hvdWxkIGJl
IGNhbGxlZAorICAgIC8vIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCB0ZXN0IChjdXJyZW50bHkg
ZnJvbSBUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KS4KKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICAv
LyBBIHNpbmdsZSBpdGVtIGluIHRoZSB3b3JrIHF1ZXVlLgorICAgIGNsYXNzIFdvcmtJdGVtIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfldvcmtJdGVtKCkgeyB9CisKKyAgICAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RhcnRlZCBhIGxvYWQuCisgICAgICAgIHZpcnR1YWwg
Ym9vbCBydW4oVGVzdFJ1bm5lciopID0gMDsKKyAgICB9OworCisgICAgVGFza0xpc3QqIHRhc2tM
aXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KKworICAgIGJvb2wgc2hvdWxkU3RheU9uUGFn
ZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlP
blBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFdvcmtJdGVtOworICAgIGZyaWVuZCBjbGFzcyBXb3JrUXVldWU7CisKKyAgICAvLyBI
ZWxwZXIgY2xhc3MgZm9yIG1hbmFnaW5nIGV2ZW50cyBxdWV1ZWQgYnkgbWV0aG9kcyBsaWtlIHF1
ZXVlTG9hZCBvcgorICAgIC8vIHF1ZXVlU2NyaXB0LgorICAgIGNsYXNzIFdvcmtRdWV1ZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBXb3JrUXVldWUoVGVzdFJ1bm5lciogY29udHJvbGxlcikgOiBt
X2Zyb3plbihmYWxzZSksIG1fY29udHJvbGxlcihjb250cm9sbGVyKSB7IH0KKyAgICAgICAgdmly
dHVhbCB+V29ya1F1ZXVlKCk7CisgICAgICAgIHZvaWQgcHJvY2Vzc1dvcmtTb29uKCk7CisKKyAg
ICAgICAgLy8gUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjbGFzcyBiZXR3ZWVuIHRlc3RzLgorICAg
ICAgICB2b2lkIHJlc2V0KCk7CisKKyAgICAgICAgdm9pZCBhZGRXb3JrKFdvcmtJdGVtKik7CisK
KyAgICAgICAgdm9pZCBzZXRGcm96ZW4oYm9vbCBmcm96ZW4pIHsgbV9mcm96ZW4gPSBmcm96ZW47
IH0KKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9xdWV1ZS5pc0VtcHR5KCk7IH0K
KyAgICAgICAgVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgcHJvY2Vzc1dvcmsoKTsKKyAgICAgICAgY2xhc3Mg
V29ya1F1ZXVlVGFzazogcHVibGljIE1ldGhvZFRhc2s8V29ya1F1ZXVlPiB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIFdvcmtRdWV1ZVRhc2soV29ya1F1ZXVlKiBvYmplY3QpOiBNZXRo
b2RUYXNrPFdvcmtRdWV1ZT4ob2JqZWN0KSB7IH0KKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBy
dW5JZlZhbGlkKCkgeyBtX29iamVjdC0+cHJvY2Vzc1dvcmsoKTsgfQorICAgICAgICB9OworCisg
ICAgICAgIFRhc2tMaXN0IG1fdGFza0xpc3Q7CisgICAgICAgIERlcXVlPFdvcmtJdGVtKj4gbV9x
dWV1ZTsKKyAgICAgICAgYm9vbCBtX2Zyb3plbjsKKyAgICAgICAgVGVzdFJ1bm5lciogbV9jb250
cm9sbGVyOworICAgIH07CisKKyAgICAvLyBTdXBwb3J0IGZvciBvdmVycmlkZVByZWZlcmVuY2Uu
CisgICAgYm9vbCBjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmKTsKKyAgICBpbnQz
Ml90IGNwcFZhcmlhbnRUb0ludDMyKGNvbnN0IENwcFZhcmlhbnQmKTsKKyAgICBXZWJLaXQ6Oldl
YlN0cmluZyBjcHBWYXJpYW50VG9XZWJTdHJpbmcoY29uc3QgQ3BwVmFyaWFudCYpOworICAgIFZl
Y3RvcjxXZWJLaXQ6OldlYlN0cmluZz4gY3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkoY29uc3Qg
Q3BwVmFyaWFudCYpOworCisgICAgdm9pZCBsb2dFcnJvclRvQ29uc29sZShjb25zdCBzdGQ6OnN0
cmluZyYpOworICAgIHZvaWQgY29tcGxldGVOb3RpZnlEb25lKGJvb2wgaXNUaW1lb3V0KTsKKyAg
ICBjbGFzcyBOb3RpZnlEb25lVGltZWRPdXRUYXNrOiBwdWJsaWMgTWV0aG9kVGFzazxUZXN0UnVu
bmVyPiB7CisgICAgcHVibGljOgorICAgICAgICBOb3RpZnlEb25lVGltZWRPdXRUYXNrKFRlc3RS
dW5uZXIqIG9iamVjdCk6IE1ldGhvZFRhc2s8VGVzdFJ1bm5lcj4ob2JqZWN0KSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5jb21wbGV0ZU5vdGlmeURv
bmUodHJ1ZSk7IH0KKyAgICB9OworCisKKyAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVsZW1lbnRJZCk7CisgICAgYm9vbCBw
YXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBl
bGVtZW50SWQpOworICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7CisgICAgaW50IG51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucygpOworCisgICAgVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOworICAgIFdlYktpdDo6
V2ViVmlldyogbV93ZWJWaWV3OworCisgICAgLy8gVXNlZCBmb3IgdGVzdCB0aW1lb3V0cy4KKyAg
ICBUYXNrTGlzdCBtX3Rhc2tMaXN0OworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwg
d2lsbCBwcm9kdWNlIGEgcGxhaW4gdGV4dCBkdW1wIHJhdGhlciB0aGFuIGEKKyAgICAvLyB0ZXh0
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZW5kZXJlci4KKyAgICBib29sIG1fZHVtcEFzVGV4dDsK
KworICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgYmFzZTY0IGVu
Y29kZWQgV0FWRSBmaWxlLgorICAgIGJvb2wgbV9kdW1wQXNBdWRpbzsKKworICAgIC8vIElmIHRy
dWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgd3JpdGUgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBlYWNo
IGVkaXRpbmcKKyAgICAvLyBjb21tYW5kLgorICAgIGJvb2wgbV9kdW1wRWRpdGluZ0NhbGxiYWNr
czsKKworICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgZHJhdyB0aGUgYm91bmRz
IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiByZWN0CisgICAgLy8gdGFraW5nIHBvc3NpYmxlIHRy
YW5zZm9ybXMgb2YgdGhlIHNlbGVjdGlvbiByZWN0IGludG8gYWNjb3VudC4KKyAgICBib29sIG1f
ZHVtcFNlbGVjdGlvblJlY3Q7CisKKyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxs
IG91dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZm9yIGVhY2ggZnJhbWUKKyAgICAvLyBsb2FkIGNh
bGxiYWNrLgorICAgIGJvb2wgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzOworCisgICAgLy8gSWYg
dHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciB0
aGUgcHJvZ3Jlc3MKKyAgICAvLyBmaW5pc2hlZCBjYWxsYmFjay4KKyAgICBib29sIG1fZHVtcFBy
b2dyZXNzRmluaXNoZWRDYWxsYmFjazsKKworICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxs
IHdpbGwgb3V0cHV0IGEgbGluZSBvZiB0aGUgdXNlciBnZXN0dXJlIHN0YXR1cworICAgIC8vIHRl
eHQgZm9yIHNvbWUgZnJhbWUgbG9hZCBjYWxsYmFja3MuCisgICAgYm9vbCBtX2R1bXBVc2VyR2Vz
dHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzOworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hl
bGwgd2lsbCBvdXRwdXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBlYWNoIHJlc291cmNlCisgICAg
Ly8gbG9hZCBjYWxsYmFjay4KKyAgICBib29sIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsK
KyAgICAKKyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCB0aGUgTUlN
RSB0eXBlIGZvciBlYWNoIHJlc291cmNlIHRoYXQgCisgICAgLy8gd2FzIGxvYWRlZC4KKyAgICBi
b29sIG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXM7CisKKyAgICAvLyBJZiB0cnVlLCB0
aGUgdGVzdF9zaGVsbCB3aWxsIHByb2R1Y2UgYSBkdW1wIG9mIHRoZSBiYWNrIGZvcndhcmQgbGlz
dCBhcworICAgIC8vIHdlbGwuCisgICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7CisKKyAg
ICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHByaW50IG91dCB0aGUgY2hpbGQgZnJh
bWUgc2Nyb2xsIG9mZnNldHMgYXMKKyAgICAvLyB3ZWxsLgorICAgIGJvb2wgbV9kdW1wQ2hpbGRG
cmFtZVNjcm9sbFBvc2l0aW9uczsKKworICAgIC8vIElmIHRydWUgYW5kIGlmIGR1bXBfYXNfdGV4
dF8gaXMgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCByZWN1cnNpdmVseQorICAgIC8vIGR1bXAg
YWxsIGZyYW1lcyBhcyBwbGFpbiB0ZXh0LgorICAgIGJvb2wgbV9kdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQ7CisKKyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIGR1bXAgYWxsIGNoYW5n
ZXMgdG8gd2luZG93LnN0YXR1cy4KKyAgICBib29sIG1fZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXM7
CisKKyAgICAvLyBJZiB0cnVlLCBvdXRwdXQgYSBtZXNzYWdlIHdoZW4gdGhlIHBhZ2UgdGl0bGUg
aXMgY2hhbmdlZC4KKyAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKKworICAgIC8vIElmIHRy
dWUsIG91dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZWFjaCB0aW1lIGEgcGVybWlzc2lvbiBjbGll
bnQKKyAgICAvLyBjYWxsYmFjayBpcyBpbnZva2VkLiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRl
ZCBmb3IgYWxsb3dJbWFnZS4KKyAgICBib29sIG1fZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFj
a3M7CisKKyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIGdlbmVyYXRlIHBpeGVs
IHJlc3VsdHMgaW4gZHVtcEFzVGV4dCBtb2RlCisgICAgYm9vbCBtX2dlbmVyYXRlUGl4ZWxSZXN1
bHRzOworCisgICAgLy8gSWYgdHJ1ZSwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBlYWNoIHRp
bWUgV2ViVmlld0NsaWVudDo6Y3JlYXRlVmlldworICAgIC8vIGlzIGludm9rZWQuCisgICAgYm9v
bCBtX2R1bXBDcmVhdGVWaWV3OworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIGVsZW1lbnQgd2lsbCBi
ZSB0cmVhdGVkIGFzIGVkaXRhYmxlLiBUaGlzIHZhbHVlIGlzIHJldHVybmVkCisgICAgLy8gZnJv
bSB2YXJpb3VzIGVkaXRpbmcgY2FsbGJhY2tzIHRoYXQgYXJlIGNhbGxlZCBqdXN0IGJlZm9yZSBl
ZGl0IG9wZXJhdGlvbnMKKyAgICAvLyBhcmUgYWxsb3dlZC4KKyAgICBib29sIG1fYWNjZXB0c0Vk
aXRpbmc7CisKKyAgICAvLyBJZiB0cnVlLCBuZXcgd2luZG93cyBjYW4gYmUgb3BlbmVkIHZpYSBq
YXZhc2NyaXB0IG9yIGJ5IHBsdWdpbnMuIEJ5CisgICAgLy8gZGVmYXVsdCwgc2V0IHRvIGZhbHNl
IGFuZCBjYW4gYmUgdG9nZ2xlZCB0byB0cnVlIHVzaW5nCisgICAgLy8gc2V0Q2FuT3BlbldpbmRv
d3MoKS4KKyAgICBib29sIG1fY2FuT3BlbldpbmRvd3M7CisKKyAgICAvLyBXaGVuIHJlc2V0IGlz
IGNhbGxlZCwgZ28gdGhyb3VnaCBhbmQgY2xvc2UgYWxsIGJ1dCB0aGUgbWFpbiB0ZXN0IHNoZWxs
CisgICAgLy8gd2luZG93LiBCeSBkZWZhdWx0LCBzZXQgdG8gdHJ1ZSBidXQgdG9nZ2xlZCB0byBm
YWxzZSB1c2luZworICAgIC8vIHNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSgp
LgorICAgIGJvb2wgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3M7CisKKyAgICAvLyBJZiB0cnVlLCBw
aXhlbCBkdW1wIHdpbGwgYmUgcHJvZHVjZWQgYXMgYSBzZXJpZXMgb2YgMXB4LXRhbGwsIHZpZXct
d2lkZQorICAgIC8vIGluZGl2aWR1YWwgcGFpbnRzIG92ZXIgdGhlIGhlaWdodCBvZiB0aGUgdmll
dy4KKyAgICBib29sIG1fdGVzdFJlcGFpbnQ7CisgICAgLy8gSWYgdHJ1ZSBhbmQgdGVzdF9yZXBh
aW50XyBpcyB0cnVlIGFzIHdlbGwsIHBpeGVsIGR1bXAgd2lsbCBiZSBwcm9kdWNlZCBhcworICAg
IC8vIGEgc2VyaWVzIG9mIDFweC13aWRlLCB2aWV3LXRhbGwgcGFpbnRzIGFjcm9zcyB0aGUgd2lk
dGggb2YgdGhlIHZpZXcuCisgICAgYm9vbCBtX3N3ZWVwSG9yaXpvbnRhbGx5OworCisgICAgLy8g
SWYgdHJ1ZSBhbmQgYSBkcmFnIHN0YXJ0cywgYWRkcyBhIGZpbGUgdG8gdGhlIGRyYWcmZHJvcCBj
bGlwYm9hcmQuCisgICAgYm9vbCBtX3Nob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQ7CisKKyAgICAv
LyBJZiB0cnVlLCBzdG9wcyBwcm92aXNpb25hbCBmcmFtZSBsb2FkcyBkdXJpbmcgdGhlCisgICAg
Ly8gRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFjay4KKyAgICBib29sIG1f
c3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkczsKKworICAgIC8vIElmIHRydWUsIGRvbid0IGR1bXAg
b3V0cHV0IHVudGlsIG5vdGlmeURvbmUgaXMgY2FsbGVkLgorICAgIGJvb2wgbV93YWl0VW50aWxE
b25lOworCisgICAgLy8gSWYgZmFsc2UsIGFsbCBuZXcgcmVxdWVzdHMgd2lsbCBub3QgZGVmZXIg
dGhlIG1haW4gcmVzb3VyY2UgZGF0YSBsb2FkLgorICAgIGJvb2wgbV9kZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkOworCisgICAgLy8gSWYgdHJ1ZSwgd2Ugd2lsbCBzaG93IGV4dGVuZGVkIGluZm9y
bWF0aW9uIGluIHRoZSBncmFwaGljcyBsYXllciB0cmVlLgorICAgIGJvb2wgbV9zaG93RGVidWdM
YXllclRyZWU7CisKKyAgICAvLyBJZiB0cnVlLCBsYXlvdXQgaXMgdG8gdGFyZ2V0IHByaW50ZWQg
cGFnZXMuCisgICAgYm9vbCBtX2lzUHJpbnRpbmc7CisKKyAgICBXb3JrUXVldWUgbV93b3JrUXVl
dWU7CisKKyAgICBDcHBWYXJpYW50IG1fZ2xvYmFsRmxhZzsKKworICAgIC8vIEJvdW5kIHZhcmlh
YmxlIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgdG9wIFVSTHMgdmlzaXRlZC4KKyAgICBDcHBWYXJp
YW50IG1fd2ViSGlzdG9yeUl0ZW1Db3VudDsKKworICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRyYWNr
aW5nIHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgPHRpdGxlPiB0YWcuCisgICAgQ3BwVmFyaWFu
dCBtX3RpdGxlVGV4dERpcmVjdGlvbjsKKworICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRvIHJldHVy
biB0aGUgbmFtZSBvZiB0aGlzIHBsYXRmb3JtIChjaHJvbWl1bSkuCisgICAgQ3BwVmFyaWFudCBt
X3BsYXRmb3JtTmFtZTsKKworICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRvIHNldCB3aGV0aGVyIHBv
c3RNZXNzYWdlcyBzaG91bGQgYmUgaW50ZXJjZXB0ZWQgb3Igbm90CisgICAgQ3BwVmFyaWFudCBt
X2ludGVyY2VwdFBvc3RNZXNzYWdlOworCisgICAgV2ViS2l0OjpXZWJVUkwgbV91c2VyU3R5bGVT
aGVldExvY2F0aW9uOworCisgICAgLy8gV0FWIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGhlcmUuCisg
ICAgV2ViS2l0OjpXZWJBcnJheUJ1ZmZlclZpZXcgbV9hdWRpb0RhdGE7CisKKyAgICAvLyBNb2Nr
IG9iamVjdCBmb3IgdGVzdGluZyBkZWxpdmVyaW5nIHdlYiBpbnRlbnRzLgorICAgIE93blB0cjxX
ZWJLaXQ6OldlYkRlbGl2ZXJlZEludGVudENsaWVudD4gbV9pbnRlbnRDbGllbnQ7CisKKyAgICBi
b29sIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7CisKKyAgICAv
LyBJZiB0cnVlLCBjYWxscyB0byBXZWJWaWV3SG9zdDo6ZW50ZXIvZXhpdEZ1bGxTY3JlZW5Ob3cg
d2lsbCBub3QgcmVzdWx0IGluIAorICAgIC8vIGNhbGxzIHRvIERvY3VtZW50Ojp3aWxsL2RpZC9F
bnRlci9FeGl0RnVsbFNjcmVlbi4KKyAgICBib29sIG1faGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2
aW9yOwogfTsKIAogI2VuZGlmIC8vIFRlc3RSdW5uZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKaW5kZXggNGZmNDkyMWQxMGZlNmMxYTc0YTA5MzhkNWZl
ZjkzYjE2OGY3NmM4Mi4uMTk3MDIwYzRkNWVjMzIyNTk0M2E0MzRlYmM1OTU5NDNmYjMxZTI1YSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCkBAIC05Miw3
ICs5Miw3IEBAIGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVu
dCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgdm9pZCBzZXRMb2dDb25zb2xl
T3V0cHV0KGJvb2wpOwogICAgIHZvaWQgd2FpdEZvclBvbGljeURlbGVnYXRlKCk7CiAgICAgdm9p
ZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sLCBib29sKTsKLSAgICBXZWJLaXQ6OldlYkZy
YW1lKiB0b3BMb2FkaW5nRnJhbWUoKSB7IHJldHVybiBtX3RvcExvYWRpbmdGcmFtZTsgfQorICAg
IHZpcnR1YWwgV2ViS2l0OjpXZWJGcmFtZSogdG9wTG9hZGluZ0ZyYW1lKCkgT1ZFUlJJREUgeyBy
ZXR1cm4gbV90b3BMb2FkaW5nRnJhbWU7IH0KICAgICB2b2lkIHNldEJsb2NrUmVkaXJlY3RzKGJv
b2wgYmxvY2spIHsgbV9ibG9ja3NSZWRpcmVjdHMgPSBibG9jazsgfQogICAgIHZvaWQgc2V0UmVx
dWVzdFJldHVybk51bGwoYm9vbCByZXR1cm5OdWxsKSB7IG1fcmVxdWVzdFJldHVybk51bGwgPSBy
ZXR1cm5OdWxsOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kKGNvbnN0IHN0ZDo6
c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIE9WRVJSSURFOwpAQCAtMTA2
LDcgKzEwNiw3IEBAIGNsYXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViVmlld0Ns
aWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsCiAgICAgU2tDYW52YXMqIGNhbnZh
cygpOwogICAgIHZvaWQgZGlzcGxheVJlcGFpbnRNYXNrKCk7CiAKLSAgICB2b2lkIGxvYWRVUkxG
b3JGcmFtZShjb25zdCBXZWJLaXQ6OldlYlVSTCYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBm
cmFtZU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUoY29uc3QgV2ViS2l0
OjpXZWJVUkwmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZnJhbWVOYW1lKSBPVkVSUklERTsK
ICAgICBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb25Db250cm9sbGVyKCkgeyBy
ZXR1cm4gbV9uYXZpZ2F0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRDbGVh
ckhlYWRlcihjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVyKSB7IG1fY2xlYXJIZWFkZXJzLmFkZCho
ZWFkZXIpOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>