<?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>130138</bug_id>
          
          <creation_ts>2014-03-12 10:15:29 -0700</creation_ts>
          <short_desc>[Mac] Remove use of QTKit</short_desc>
          <delta_ts>2014-03-17 13:37:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>989690</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-12 10:15:29 -0700</bug_when>
    <thetext>Remove use and dependencies on QTKit now that we are using AVFoundation for media playback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989691</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-12 10:16:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/14265204&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989719</commentid>
    <comment_count>2</comment_count>
      <attachid>226532</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-12 10:59:15 -0700</bug_when>
    <thetext>Created attachment 226532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989733</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-12 11:10:35 -0700</bug_when>
    <thetext>Locally, after this patch, I see two failures that seem to be due to color space on my development system. Watching EWS to see how things fare on a valid test system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989771</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-12 11:51:38 -0700</bug_when>
    <thetext>While this change works, we want to keep QTKit support on the Mac for the time being.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226532</attachid>
            <date>2014-03-12 10:59:15 -0700</date>
            <delta_ts>2014-03-12 11:51:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130138-20140312105852.patch</filename>
            <type>text/plain</type>
            <size>89889</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTAzLTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFJlbW92ZSB1c2Ug
b2YgUVRLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDEzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZ1bmN0aW9uYWxpdHkgY292ZXJlZCBieSBleGlzdGluZyBtZWRpYSB0ZXN0cy4KKworICAgICAg
ICAqIENvbmZpZ3VyYXRpb25zL1dlYkNvcmUueGNjb25maWc6IFJlbW92ZSByZWZlcmVuY2UgdG8g
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRNZWRpYUVuZ2luZXMpOiBS
ZW1vdmUgcmVmZXJlbmNlcyB0byBNZWRpYVBsYXllclByaXZhdGVRVEtpdC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOiBSZW1vdmUgUXVpY2tUaW1lLCBDaHJvbWl1
bSwgYW5kIFFUIHBsYXllciBpbmZvcm1hdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW06IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW06Cisg
ICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50Ol0p
OiBPbmx5IHdvcnJ5IGFib3V0IHRoZSBBVkZvdW5kYXRpb24gY2FzZS4KKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciB1cGRhdGVQb3dlckFzc2VydGlvbnNdKTogUmVtb3Zl
IFF1aWNrVGltZS1zcGVjaWZpYyBjb2RlLgorCiAyMDE0LTAzLTEyICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIENyYXNoIHdoZW4gcnVubmluZyBtZWRp
YS9mYWxsYmFjay5odG1sIHRlc3QgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpz
Y2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ29u
ZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Db25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCShyZXZpc2lvbiAxNjU0NzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsNiArMTEyLDYgQEAgSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJ
Ul9Qcm9kdQogSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX2VuZ2luZWVyaW5nID0gJChC
VUlMVF9QUk9EVUNUU19ESVIpL0phdmFTY3JpcHRDb3JlLmZyYW1ld29yay9Qcml2YXRlSGVhZGVy
czsKIAogRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVMgPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxF
X05BTUVTXyQoUExBVEZPUk1fTkFNRSkpOwotRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfaXBo
b25lb3MgPSAqLnRpZmYgKkN1cnNvci5wbmcgQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbSBBWE9i
amVjdENhY2hlTWFjLm1tIENsaXBib2FyZE1hYy5tbSBDb2xvck1hYy5tbSBDdXJzb3IuY3BwIEN1
cnNvck1hYy5tbSBFZGl0b3JNYWMubW0gRXZlbnRIYW5kbGVyTWFjLm1tIEV2ZW50TG9vcE1hYy5t
bSBHZW9sb2NhdGlvblNlcnZpY2VNYWMubW0gR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAg
SWNvbkRhdGFiYXNlLmNwcCBJY29uTWFjLm1tIEtpbGxSaW5nTWFjLm1tIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dC5tbSBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFj
LmNwcCBQYXN0ZWJvYXJkTWFjLm1tIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tIFBsYXRmb3Jt
TW91c2VFdmVudE1hYy5tbSBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gUGxhdGZvcm1TY3JlZW5N
YWMubW0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5tbSBQbHVnaW5NYWluVGhyZWFkU2No
ZWR1bGVyLmNwcCBSdW5Mb29wTWFjLm1tIFNTTEtleUdlbmVyYXRvck1hYy5jcHAgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMubW0gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlTWFjLm1tIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tIFNjcm9sbFZpZXdNYWMubW0gU2Nyb2xsYmFyVGhl
bWVNYWMubW0gU2hhcmVkVGltZXJNYWMubW0gU291bmRNYWMubW0gU3lzdGVtVGltZU1hYy5jcHAg
VGhlbWVNYWMubW0gVGhyZWFkQ2hlY2subW0gVXNlckFnZW50TWFjLm1tIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0gV2ViQ29yZVVS
TFJlc3BvbnNlLm1tIFdlYkNvcmVWaWV3Lm0gV2ViRm9udENhY2hlLm1tIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5t
bSBXZWJXaW5kb3dBbmltYXRpb24ubW0gV2lkZ2V0TWFjLm1tIG1hYy9MYXllclBvb2wubW0gRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFjLmNwcDsKK0VYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTX2lw
aG9uZW9zID0gKi50aWZmICpDdXJzb3IucG5nIEFjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0gQVhP
YmplY3RDYWNoZU1hYy5tbSBDbGlwYm9hcmRNYWMubW0gQ29sb3JNYWMubW0gQ3Vyc29yLmNwcCBD
dXJzb3JNYWMubW0gRWRpdG9yTWFjLm1tIEV2ZW50SGFuZGxlck1hYy5tbSBFdmVudExvb3BNYWMu
bW0gR2VvbG9jYXRpb25TZXJ2aWNlTWFjLm1tIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3Bw
IEljb25EYXRhYmFzZS5jcHAgSWNvbk1hYy5tbSBLaWxsUmluZ01hYy5tbSBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQubW0gTUlNRVR5cGVSZWdpc3RyeU1hYy5tbSBOU1Njcm9sbGVySW1wRGV0
YWlscy5tbSBOZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHAgUGFzdGVib2FyZE1hYy5tbSBQbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbSBQbGF0Zm9ybU1vdXNlRXZlbnRNYWMubW0gUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tIFBsYXRmb3JtU2NyZWVuTWFjLm1tIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2l6ZXJNYWMubW0gUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAgUnVuTG9vcE1hYy5tbSBT
U0xLZXlHZW5lcmF0b3JNYWMuY3BwIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZU1hYy5tbSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5t
bSBTY3JvbGxWaWV3TWFjLm1tIFNjcm9sbGJhclRoZW1lTWFjLm1tIFNoYXJlZFRpbWVyTWFjLm1t
IFNvdW5kTWFjLm1tIFN5c3RlbVRpbWVNYWMuY3BwIFRoZW1lTWFjLm1tIFRocmVhZENoZWNrLm1t
IFVzZXJBZ2VudE1hYy5tbSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLm1tIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBXZWJDb3JlVmlldy5t
IFdlYkZvbnRDYWNoZS5tbSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gV2ViV2luZG93QW5pbWF0aW9uLm1tIFdp
ZGdldE1hYy5tbSBtYWMvTGF5ZXJQb29sLm1tIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5jcHA7
CiBFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19pcGhvbmVzaW11bGF0b3IgPSAkKEVYQ0xVREVE
X1NPVVJDRV9GSUxFX05BTUVTX2lwaG9uZW9zKTsKIEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVT
X21hY29zeCA9ICpJT1MuaCAqSU9TLmNwcCAqSU9TLm1tIEpTVG91Y2gqIEpTR2VzdHVyZSogRE9N
R2VzdHVyZSogRE9NVG91Y2gqIEtpbGxSaW5nTm9uZS5jcHAgV0FLQXBwS2l0U3R1YnMuaCBXQUtD
bGlwVmlldy5oIFdBS1Jlc3BvbmRlci5oIFdBS1Njcm9sbFZpZXcuaCBXQUtWaWV3LmggV0FLVmll
d1ByaXZhdGUuaCBXQUtXaW5kb3cuaCBXS0NvbnRlbnRPYnNlcnZhdGlvbi5oIFdLR3JhcGhpY3Mu
aCBXS1R5cGVzLmggV0tVdGlsaXRpZXMuaCBXS1ZpZXcuaCBXS1ZpZXdQcml2YXRlLmggV2ViQ29y
ZVRocmVhZC5oIFdlYkNvcmVUaHJlYWRNZXNzYWdlLmggV2ViQ29yZVRocmVhZFJ1bi5oIFdlYkNv
cmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuaDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NTQ3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNTk2MCw4ICs1OTYwLDYgQEAKIAkJRTQ0NjEzQjYwQ0Q2MzQ0RTAwRkFEQTc1IC8q
IFZvaWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ0NjEzQjQwQ0Q2MzQ0RTAwRkFEQTc1IC8qIFZvaWRDYWxsYmFjay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NDYxM0UzMENENjgx
OUYwMEZBREE3NSAvKiBNZWRpYVBsYXllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MUUwQzBDQkY5MEJEMDBBRjJFQ0UgLyogTWVkaWFQbGF5
ZXIuY3BwICovOyB9OwogCQlFNDQ2MTNFNDBDRDY4MUEyMDBGQURBNzUgLyogTWVkaWFQbGF5ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTBE
MENCRjkwQkQwMEFGMkVDRSAvKiBNZWRpYVBsYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUU0NDYxM0U1MENENjgxQTYwMEZBREE3NSAvKiBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0QjQxRTExMENCRjkwRUYwMEFGMkVDRSAvKiBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5tbSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby1kZXBy
ZWNhdGVkLWRlY2xhcmF0aW9ucyI7IH07IH07Ci0JCUU0NDYxM0U2MENENjgxQTkwMEZBREE3NSAv
KiBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMTAwQ0JGOTBFRjAwQUYyRUNFIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0LmggKi87IH07CiAJCUU0NDYxM0VCMENENjgxQjQwMEZBREE3NSAvKiBQcm9n
cmVzc0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QjQxRTAxMENCRjhFQUEwMEFGMkVDRSAvKiBQcm9ncmVzc0V2ZW50LmNwcCAqLzsgfTsK
IAkJRTQ0NjEzRUMwQ0Q2ODFCNTAwRkFEQTc1IC8qIFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTAyMENCRjhFQUEwMEFG
MkVDRSAvKiBQcm9ncmVzc0V2ZW50LmggKi87IH07CiAJCUU0NDYxM0VEMENENjgxQkEwMEZBREE3
NSAvKiBKU1Byb2dyZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRCNDIzODUwQ0JGQjczQzAwQUYyRUNFIC8qIEpTUHJvZ3Jlc3NFdmVu
dC5jcHAgKi87IH07CkBAIC0xMzM2NCw4ICsxMzM2Miw2IEBACiAJCUU0QjQxRTAzMENCRjhFQUEw
MEFGMkVDRSAvKiBQcm9ncmVzc0V2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQcm9n
cmVzc0V2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMEMwQ0JG
OTBCRDAwQUYyRUNFIC8qIE1lZGlhUGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1lZGlhUGxheWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlhUGxheWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUU0QjQxRTEwMENCRjkwRUYwMEFGMkVDRSAvKiBNZWRpYVBsYXllclByaXZhdGVR
VEtpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclByaXZh
dGVRVEtpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEI0MUUxMTBDQkY5MEVG
MDBBRjJFQ0UgLyogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMzMwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRl
clZpZGVvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclZp
ZGVvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMzQwQ0JGQjYwOTAw
QUYyRUNFIC8qIFJlbmRlclZpZGVvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlclZpZGVvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQyMzcxMENC
RkI2RTAwMEFGMkVDRSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFNvdXJjZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTk4NjIsOCArMTk4NTgsNiBAQAogCQkJCUIyNzUzNTRGMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludE1hYy5tbSAqLywKIAkJCQlCMjc1MzU1MDBCMDUzODE0
MDAyQ0U2NEYgLyogSW50UmVjdE1hYy5tbSAqLywKIAkJCQlCMjc1MzU1MTBCMDUzODE0MDAyQ0U2
NEYgLyogSW50U2l6ZU1hYy5tbSAqLywKLQkJCQlFNEI0MUUxMDBDQkY5MEVGMDBBRjJFQ0UgLyog
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaCAqLywKLQkJCQlFNEI0MUUxMTBDQkY5MEVGMDBBRjJF
Q0UgLyogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0gKi8sCiAJCQkJMDczNUVFNjkwRjQwQzVF
NDAwNEEyNjA0IC8qIE1lZGlhUGxheWVyUHJveHkuaCAqLywKIAkJCQkyRDZFNDY4MjE3RDY2MEY1
MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLywKIAkJCQkxNjNFODhGNTExOEEz
OUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgKi8sCkBAIC0yNDc0MSw3
ICsyNDczNSw2IEBACiAJCQkJREY5QUZENzIxM0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3NDMwMEE2MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0NDYxM0U2MENENjgxQTkwMEZBREE3
NSAvKiBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDczNUVF
NkEwRjQwQzVFNDAwNEEyNjA0IC8qIE1lZGlhUGxheWVyUHJveHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTRFMTk1OTJBMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk0RTE5NTkyQzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODIwNSw3ICsyODE5OCw2IEBACiAJCQkJREY5QUZENzMxM0ZD
MzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gaW4g
U291cmNlcyAqLywKIAkJCQkwNzQzMDBBNTBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1
IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICov
LAotCQkJCUU0NDYxM0U1MENENjgxQTYwMEZBREE3NSAvKiBNZWRpYVBsYXllclByaXZhdGVRVEtp
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTRFMTk1OTI5MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRp
YVF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRFMTk1OTJCMEEzOURBQ0MwMDIyMEZFNSAv
KiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRFMTk1OTJEMEEz
OURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAko
cmV2aXNpb24gMTY1NDc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw2IEBACiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZUlPUy5oIgotI2Vsc2UKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIgogI2Vu
ZGlmCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLmgiCkBAIC0yMjYsMTEgKzIyNCw2IEBAIHN0YXRpYyBWZWN0b3I8TWVk
aWFQbGF5ZXJGYWN0b3J5Kj4mIGluc3QKICAgICB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBpZiAoU2V0dGluZ3M6OmlzUVRLaXRFbmFibGVkKCkpCi0gICAgICAgIE1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0OjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKLSNl
bmRpZgotCiAjaWYgZGVmaW5lZChQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lKQogICAgIFBs
YXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFF
bmdpbmUpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDE2NTQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2
MSw4IEBACiAKIE9CSkNfQ0xBU1MgQVZBc3NldDsKIE9CSkNfQ0xBU1MgQVZQbGF5ZXI7Ci1PQkpD
X0NMQVNTIFFUTW92aWU7CiAKIGNsYXNzIEFWQ0ZQbGF5ZXI7Ci1jbGFzcyBRVE1vdmllR1dvcmxk
OwotY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODUsMjIgKzgyLDEyIEBAIGNsYXNzIFRleHRUcmFja1JlcHJlc2VudGF0aW9uOwogc3RydWN0
IFBsYXRmb3JtTWVkaWEgewogICAgIGVudW0gewogICAgICAgICBOb25lLAotICAgICAgICBRVE1v
dmllVHlwZSwKLSAgICAgICAgUVRNb3ZpZUdXb3JsZFR5cGUsCi0gICAgICAgIFFUTW92aWVWaXN1
YWxDb250ZXh0VHlwZSwKLSAgICAgICAgQ2hyb21pdW1NZWRpYVBsYXllclR5cGUsCi0gICAgICAg
IFF0TWVkaWFQbGF5ZXJUeXBlLAogICAgICAgICBBVkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGUs
CiAgICAgICAgIEFWRm91bmRhdGlvbkNGTWVkaWFQbGF5ZXJUeXBlLAogICAgICAgICBBVkZvdW5k
YXRpb25Bc3NldFR5cGUsCiAgICAgfSB0eXBlOwogCiAgICAgdW5pb24gewotICAgICAgICBRVE1v
dmllKiBxdE1vdmllOwotICAgICAgICBRVE1vdmllR1dvcmxkKiBxdE1vdmllR1dvcmxkOwotICAg
ICAgICBRVE1vdmllVmlzdWFsQ29udGV4dCogcXRNb3ZpZVZpc3VhbENvbnRleHQ7Ci0gICAgICAg
IE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY2hyb21pdW1NZWRpYVBsYXllcjsKLSAgICAg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBxdE1lZGlhUGxheWVyOwogICAgICAgICBB
VlBsYXllciogYXZmTWVkaWFQbGF5ZXI7CiAgICAgICAgIEFWQ0ZQbGF5ZXIqIGF2Y2ZNZWRpYVBs
YXllcjsKICAgICAgICAgQVZBc3NldCogYXZmQXNzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQuaAkocmV2aXNpb24gMTY1NDc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0X2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXRfaAotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZmRlZiBfX09CSkNfXwotI2ltcG9ydCA8UVRLaXQvUVRU
aW1lLmg+Ci0jZWxzZQotY2xhc3MgUVRUaW1lOwotI2VuZGlmCi0KLU9CSkNfQ0xBU1MgTlNEaWN0
aW9uYXJ5OwotT0JKQ19DTEFTUyBOU011dGFibGVEaWN0aW9uYXJ5OwotT0JKQ19DTEFTUyBRVE1v
dmllOwotT0JKQ19DTEFTUyBRVE1vdmllVmlldzsKLU9CSkNfQ0xBU1MgUVRNb3ZpZUxheWVyOwot
T0JKQ19DTEFTUyBRVFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5OwotT0JKQ19DTEFTUyBXZWJDb3Jl
TW92aWVPYnNlcnZlcjsKLQotI2lmbmRlZiBEUkFXX0ZSQU1FX1JBVEUKLSNkZWZpbmUgRFJBV19G
UkFNRV9SQVRFIDAKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdCA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UgewotcHVibGljOgotICAgIH5NZWRpYVBsYXllclByaXZhdGVRVEtpdCgpOwotICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotCi0gICAg
dm9pZCByZXBhaW50KCk7Ci0gICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBs
b2FkZWRSYW5nZXNDaGFuZ2VkKCk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCgpOwotICAgIHZvaWQg
c2l6ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBkaWRFbmQo
KTsKLSAgICB2b2lkIGxheWVySG9zdENoYW5nZWQoUGxhdGZvcm1MYXllciogcm9vdExheWVyKTsK
LQotcHJpdmF0ZToKLSAgICBNZWRpYVBsYXllclByaXZhdGVRVEtpdChNZWRpYVBsYXllciopOwot
Ci0gICAgLy8gZW5naW5lIHN1cHBvcnQKLSAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOwotICAgIHN0YXRpYyB2b2lk
IGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwotICAgIHN0YXRpYyBN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1
cHBvcnRQYXJhbWV0ZXJzJik7Ci0KLSAgICBzdGF0aWMgdm9pZCBnZXRTaXRlc0luTWVkaWFDYWNo
ZShWZWN0b3I8U3RyaW5nPiYpOwotICAgIHN0YXRpYyB2b2lkIGNsZWFyTWVkaWFDYWNoZSgpOwot
ICAgIHN0YXRpYyB2b2lkIGNsZWFyTWVkaWFDYWNoZUZvclNpdGUoY29uc3QgU3RyaW5nJik7Ci0g
ICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQotICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZv
cm1NZWRpYSgpIGNvbnN0OwotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dDsKLQotICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKLSAgICBib29sIGhhc1ZpZGVv
KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2Nhbm5pbmcoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYg
dXJsKTsKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNv
bnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopOwotI2VuZGlmCi0gICAgdm9p
ZCBjYW5jZWxMb2FkKCk7Ci0gICAgdm9pZCBsb2FkSW50ZXJuYWwoY29uc3QgU3RyaW5nJiB1cmwp
OwotICAgIHZvaWQgcmVzdW1lTG9hZCgpOwotICAgIAotICAgIHZvaWQgcGxheSgpOwotICAgIHZv
aWQgcGF1c2UoKTsgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9QbGF5KCk7Ci0gICAgCi0gICAgYm9v
bCBwYXVzZWQoKSBjb25zdDsKLSAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKLSAgICAKLSAgICBm
bG9hdCBkdXJhdGlvbigpIGNvbnN0OwotICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZWVrKGZsb2F0IHRpbWUpOwotICAgIAotICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7
Ci0gICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOwotICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2go
Ym9vbCk7Ci0KLSAgICBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCk7Ci0KLSAgICB2b2lkIHNldFByZWxvYWQoTWVk
aWFQbGF5ZXI6OlByZWxvYWQpOwotCi0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3
b3JrU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtTdGF0ZTsgfQotICAgIE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3RhdGU7
IH0KLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJl
ZCgpIGNvbnN0OwotICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0OwotICAgIGJvb2wg
ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNv
bnN0OwotICAgIAotICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKLSAgICB2b2lkIHNldFNpemUo
Y29uc3QgSW50U2l6ZSYpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYXNBdmFpbGFibGVWaWRl
b0ZyYW1lKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvclJl
bmRlcmluZygpOwotCi0gICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29u
c3Q7Ci0gICAgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwotCi0gICAg
Ym9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0OwotICAgIE1lZGlhUGxheWVyOjpN
b3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdDsKLQotICAgIHZvaWQgY3JlYXRlUVRN
b3ZpZShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBjcmVhdGVRVE1vdmllKE5TVVJMICos
IE5TRGljdGlvbmFyeSAqbW92aWVBdHRyaWJ1dGVzKTsKLQotICAgIGVudW0gTWVkaWFSZW5kZXJp
bmdNb2RlIHsgTWVkaWFSZW5kZXJpbmdOb25lLCBNZWRpYVJlbmRlcmluZ01vdmllVmlldywgTWVk
aWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyLCBNZWRpYVJlbmRlcmluZ01vdmllTGF5ZXIgfTsK
LSAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudFJlbmRlcmluZ01vZGUoKSBjb25zdDsKLSAg
ICBNZWRpYVJlbmRlcmluZ01vZGUgcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgc2V0VXBWaWRlb1JlbmRlcmluZygpOwotICAgIHZvaWQgdGVhckRvd25WaWRl
b1JlbmRlcmluZygpOwotICAgIGJvb2wgaGFzU2V0VXBWaWRlb1JlbmRlcmluZygpIGNvbnN0Owot
ICAgIAotICAgIHZvaWQgY3JlYXRlUVRNb3ZpZVZpZXcoKTsKLSAgICB2b2lkIGRldGFjaFFUTW92
aWVWaWV3KCk7Ci0gICAgCi0gICAgZW51bSBRVFZpZGVvUmVuZGVyZXJNb2RlIHsgUVRWaWRlb1Jl
bmRlcmVyTW9kZURlZmF1bHQsIFFUVmlkZW9SZW5kZXJlck1vZGVMaXN0ZW5zRm9yTmV3SW1hZ2Vz
IH07Ci0gICAgdm9pZCBjcmVhdGVRVFZpZGVvUmVuZGVyZXIoUVRWaWRlb1JlbmRlcmVyTW9kZSBy
ZW5kZXJlck1vZGUpOwotICAgIHZvaWQgZGVzdHJveVFUVmlkZW9SZW5kZXJlcigpOwotICAgIAot
ICAgIHZvaWQgY3JlYXRlUVRNb3ZpZUxheWVyKCk7Ci0gICAgdm9pZCBkZXN0cm95UVRNb3ZpZUxh
eWVyKCk7Ci0KLSAgICBRVFRpbWUgY3JlYXRlUVRUaW1lKGZsb2F0IHRpbWUpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7Ci0gICAgdm9pZCBkb1NlZWsoKTsKLSAgICB2b2lk
IGNhbmNlbFNlZWsoKTsKLSAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0PiYpOwotICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKLSAgICB2
b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcygpOwotICAgIAotICAgIHZvaWQgc2F3VW5zdXBw
b3J0ZWRUcmFja3MoKTsKLSAgICB2b2lkIGNhY2hlTW92aWVTY2FsZSgpOwotICAgIGJvb2wgbWV0
YURhdGFBdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3F0TW92aWUgJiYgbV9yZWFkeVN0YXRl
ID49IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7IH0KLQotICAgIGJvb2wgaXNSZWFkeUZvclZp
ZGVvU2V0dXAoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIGZsb2F0IG1lZGlhVGltZUZvclRp
bWVWYWx1ZShmbG9hdCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBtYXhpbXVtRHVyYXRp
b25Ub0NhY2hlTWVkaWFUaW1lKCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgdmlydHVhbCB2
b2lkIHNldFByaXZhdGVCcm93c2luZ01vZGUoYm9vbCk7Ci0gICAgCi0gICAgTlNNdXRhYmxlRGlj
dGlvbmFyeSogY29tbW9uTW92aWVBdHRyaWJ1dGVzKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBl
bmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuICJRVEtpdCI7IH0KLQotICAgIE1lZGlh
UGxheWVyKiBtX3BsYXllcjsKLSAgICBSZXRhaW5QdHI8UVRNb3ZpZT4gbV9xdE1vdmllOwotICAg
IFJldGFpblB0cjxRVE1vdmllVmlldz4gbV9xdE1vdmllVmlldzsKLSAgICBSZXRhaW5QdHI8UVRW
aWRlb1JlbmRlcmVyV2ViS2l0T25seT4gbV9xdFZpZGVvUmVuZGVyZXI7Ci0gICAgUmV0YWluUHRy
PFdlYkNvcmVNb3ZpZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKLSAgICBTdHJpbmcgbV9tb3Zp
ZVVSTDsKLSAgICBmbG9hdCBtX3NlZWtUbzsKLSAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVR
VEtpdD4gbV9zZWVrVGltZXI7Ci0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdv
cmtTdGF0ZTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Ci0gICAg
SW50UmVjdCBtX3JlY3Q7Ci0gICAgRmxvYXRTaXplIG1fc2NhbGVGYWN0b3I7Ci0gICAgdW5zaWdu
ZWQgbV9lbmFibGVkVHJhY2tDb3VudDsKLSAgICB1bnNpZ25lZCBtX3RvdGFsVHJhY2tDb3VudDsK
LSAgICBmbG9hdCBtX3JlcG9ydGVkRHVyYXRpb247Ci0gICAgZmxvYXQgbV9jYWNoZWREdXJhdGlv
bjsKLSAgICBmbG9hdCBtX3RpbWVUb1Jlc3RvcmU7Ci0gICAgUmV0YWluUHRyPFFUTW92aWVMYXll
cj4gbV9xdFZpZGVvTGF5ZXI7Ci0gICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQgbV9wcmVsb2FkOwot
ICAgIGJvb2wgbV9zdGFydGVkUGxheWluZzsKLSAgICBib29sIG1faXNTdHJlYW1pbmc7Ci0gICAg
Ym9vbCBtX3Zpc2libGU7Ci0gICAgYm9vbCBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzOwotICAgIGJv
b2wgbV92aWRlb0ZyYW1lSGFzRHJhd247Ci0gICAgYm9vbCBtX2lzQWxsb3dlZFRvUmVuZGVyOwot
ICAgIGJvb2wgbV9wcml2YXRlQnJvd3Npbmc7Ci0gICAgbXV0YWJsZSBmbG9hdCBtX21heFRpbWVM
b2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7Ci0jaWYgRFJBV19GUkFNRV9SQVRFCi0gICAg
aW50ICBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmc7Ci0gICAgZG91YmxlIG1fdGltZVN0YXJ0ZWRQ
bGF5aW5nOwotICAgIGRvdWJsZSBtX3RpbWVTdG9wcGVkUGxheWluZzsKLSNlbmRpZgotICAgIG11
dGFibGUgRmxvYXRTaXplIG1fY2FjaGVkTmF0dXJhbFNpemU7Ci19OwotCi19Ci0KLSNlbmRpZgot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiAxNjU0
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTc3NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoVklERU8pCi0KLSNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgiCi0KLSNpbXBv
cnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbXBv
cnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZVZpZXcuaCIKLSNpbXBvcnQgIkhvc3RXaW5kb3cu
aCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2ltcG9ydCAiVVJMLmgiCi0jaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW1wb3J0ICJQbGF0
Zm9ybUxheWVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVRpbWVSYW5nZXMuaCIKLSNpbXBvcnQgIlNl
Y3VyaXR5T3JpZ2luLmgiCi0jaW1wb3J0ICJTb2Z0TGlua2luZy5oIgotI2ltcG9ydCAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgotI2ltcG9ydCA8UVRLaXQvUVRLaXQuaD4KLSNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgotCi0jaWYgRFJBV19GUkFNRV9SQVRFCi0jaW1wb3J0ICJGb250LmgiCi0j
aW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiUmVuZGVyU3R5bGUuaCIKLSNpbXBvcnQgIlJl
bmRlclZpZXcuaCIKLSNlbmRpZgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKFFUS2l0KQotCi1TT0ZU
X0xJTksoUVRLaXQsIFFUTWFrZVRpbWUsIFFUVGltZSwgKGxvbmcgbG9uZyB0aW1lVmFsdWUsIGxv
bmcgdGltZVNjYWxlKSwgKHRpbWVWYWx1ZSwgdGltZVNjYWxlKSkKLQotU09GVF9MSU5LX0NMQVNT
KFFUS2l0LCBRVE1vdmllKQotU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVE1vdmllVmlldykKLVNP
RlRfTElOS19DTEFTUyhRVEtpdCwgUVRNb3ZpZUxheWVyKQotCi1TT0ZUX0xJTktfUE9JTlRFUihR
VEtpdCwgUVRUcmFja01lZGlhVHlwZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19Q
T0lOVEVSKFFUS2l0LCBRVE1lZGlhVHlwZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElO
S19QT0lOVEVSKFFUS2l0LCBRVE1lZGlhVHlwZUJhc2UsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktf
UE9JTlRFUihRVEtpdCwgUVRNZWRpYVR5cGVNUEVHLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BP
SU5URVIoUVRLaXQsIFFUTWVkaWFUeXBlU291bmQsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9J
TlRFUihRVEtpdCwgUVRNZWRpYVR5cGVUZXh0LCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5U
RVIoUVRLaXQsIFFUTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRF
UihRVEtpdCwgUVRNb3ZpZUFza1VucmVzb2x2ZWREYXRhUmVmc0F0dHJpYnV0ZSwgTlNTdHJpbmcg
KikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1vdmllTG9vcHNBdHRyaWJ1dGUsIE5TU3Ry
aW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZURhdGFBdHRyaWJ1dGUsIE5T
U3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZURhdGFTaXplQXR0cmli
dXRlLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVEaWRFbmRO
b3RpZmljYXRpb24sIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3Zp
ZUhhc1ZpZGVvQXR0cmlidXRlLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQs
IFFUTW92aWVIYXNBdWRpb0F0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVS
KFFUS2l0LCBRVE1vdmllSXNBY3RpdmVBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktf
UE9JTlRFUihRVEtpdCwgUVRNb3ZpZUxvYWRTdGF0ZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNP
RlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1vdmllTG9hZFN0YXRlRGlkQ2hhbmdlTm90aWZpY2F0
aW9uLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVOYXR1cmFs
U2l6ZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1v
dmllQ3VycmVudFNpemVBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihR
VEtpdCwgUVRNb3ZpZVByZXZlbnRFeHRlcm5hbFVSTExpbmtzQXR0cmlidXRlLCBOU1N0cmluZyAq
KQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVSYXRlQ2hhbmdlc1ByZXNlcnZlUGl0
Y2hBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3Zp
ZVJhdGVEaWRDaGFuZ2VOb3RpZmljYXRpb24sIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRF
UihRVEtpdCwgUVRNb3ZpZVNpemVEaWRDaGFuZ2VOb3RpZmljYXRpb24sIE5TU3RyaW5nICopCi1T
T0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZVRpbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24s
IE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZVRpbWVTY2FsZUF0
dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1vdmllVVJM
QXR0cmlidXRlLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVW
b2x1bWVEaWRDaGFuZ2VOb3RpZmljYXRpb24sIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRF
UihRVEtpdCwgUVRTZWN1cml0eVBvbGljeU5vQ3Jvc3NTaXRlQXR0cmlidXRlLCBOU1N0cmluZyAq
KQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHlOZXdJ
bWFnZUF2YWlsYWJsZU5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVS
KFFUS2l0LCBRVE1vdmllQXBlcnR1cmVNb2RlQ2xlYW4sIE5TU3RyaW5nICopCi1TT0ZUX0xJTktf
UE9JTlRFUihRVEtpdCwgUVRNb3ZpZUFwZXJ0dXJlTW9kZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikK
LQotU09GVF9MSU5LX1BPSU5URVJfT1BUSU9OQUwoUVRLaXQsIFFUU2VjdXJpdHlQb2xpY3lOb0xv
Y2FsVG9SZW1vdGVTaXRlQXR0cmlidXRlLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVJf
T1BUSU9OQUwoUVRLaXQsIFFUU2VjdXJpdHlQb2xpY3lOb1JlbW90ZVRvTG9jYWxTaXRlQXR0cmli
dXRlLCBOU1N0cmluZyAqKQotCi0jZGVmaW5lIFFUTW92aWUgZ2V0UVRNb3ZpZUNsYXNzKCkKLSNk
ZWZpbmUgUVRNb3ZpZVZpZXcgZ2V0UVRNb3ZpZVZpZXdDbGFzcygpCi0jZGVmaW5lIFFUTW92aWVM
YXllciBnZXRRVE1vdmllTGF5ZXJDbGFzcygpCi0KLSNkZWZpbmUgUVRUcmFja01lZGlhVHlwZUF0
dHJpYnV0ZSBnZXRRVFRyYWNrTWVkaWFUeXBlQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRNZWRpYVR5
cGVBdHRyaWJ1dGUgZ2V0UVRNZWRpYVR5cGVBdHRyaWJ1dGUoKQotI2RlZmluZSBRVE1lZGlhVHlw
ZUJhc2UgZ2V0UVRNZWRpYVR5cGVCYXNlKCkKLSNkZWZpbmUgUVRNZWRpYVR5cGVNUEVHIGdldFFU
TWVkaWFUeXBlTVBFRygpCi0jZGVmaW5lIFFUTWVkaWFUeXBlU291bmQgZ2V0UVRNZWRpYVR5cGVT
b3VuZCgpCi0jZGVmaW5lIFFUTWVkaWFUeXBlVGV4dCBnZXRRVE1lZGlhVHlwZVRleHQoKQotI2Rl
ZmluZSBRVE1lZGlhVHlwZVZpZGVvIGdldFFUTWVkaWFUeXBlVmlkZW8oKQotI2RlZmluZSBRVE1v
dmllQXNrVW5yZXNvbHZlZERhdGFSZWZzQXR0cmlidXRlIGdldFFUTW92aWVBc2tVbnJlc29sdmVk
RGF0YVJlZnNBdHRyaWJ1dGUoKQotI2RlZmluZSBRVE1vdmllTG9vcHNBdHRyaWJ1dGUgZ2V0UVRN
b3ZpZUxvb3BzQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRNb3ZpZURhdGFBdHRyaWJ1dGUgZ2V0UVRN
b3ZpZURhdGFBdHRyaWJ1dGUoKQotI2RlZmluZSBRVE1vdmllRGF0YVNpemVBdHRyaWJ1dGUgZ2V0
UVRNb3ZpZURhdGFTaXplQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRNb3ZpZURpZEVuZE5vdGlmaWNh
dGlvbiBnZXRRVE1vdmllRGlkRW5kTm90aWZpY2F0aW9uKCkKLSNkZWZpbmUgUVRNb3ZpZUhhc1Zp
ZGVvQXR0cmlidXRlIGdldFFUTW92aWVIYXNWaWRlb0F0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUTW92
aWVIYXNBdWRpb0F0dHJpYnV0ZSBnZXRRVE1vdmllSGFzQXVkaW9BdHRyaWJ1dGUoKQotI2RlZmlu
ZSBRVE1vdmllSXNBY3RpdmVBdHRyaWJ1dGUgZ2V0UVRNb3ZpZUlzQWN0aXZlQXR0cmlidXRlKCkK
LSNkZWZpbmUgUVRNb3ZpZUxvYWRTdGF0ZUF0dHJpYnV0ZSBnZXRRVE1vdmllTG9hZFN0YXRlQXR0
cmlidXRlKCkKLSNkZWZpbmUgUVRNb3ZpZUxvYWRTdGF0ZURpZENoYW5nZU5vdGlmaWNhdGlvbiBn
ZXRRVE1vdmllTG9hZFN0YXRlRGlkQ2hhbmdlTm90aWZpY2F0aW9uKCkKLSNkZWZpbmUgUVRNb3Zp
ZU5hdHVyYWxTaXplQXR0cmlidXRlIGdldFFUTW92aWVOYXR1cmFsU2l6ZUF0dHJpYnV0ZSgpCi0j
ZGVmaW5lIFFUTW92aWVDdXJyZW50U2l6ZUF0dHJpYnV0ZSBnZXRRVE1vdmllQ3VycmVudFNpemVB
dHRyaWJ1dGUoKQotI2RlZmluZSBRVE1vdmllUHJldmVudEV4dGVybmFsVVJMTGlua3NBdHRyaWJ1
dGUgZ2V0UVRNb3ZpZVByZXZlbnRFeHRlcm5hbFVSTExpbmtzQXR0cmlidXRlKCkKLSNkZWZpbmUg
UVRNb3ZpZVJhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaEF0dHJpYnV0ZSBnZXRRVE1vdmllUmF0ZUNo
YW5nZXNQcmVzZXJ2ZVBpdGNoQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRNb3ZpZVJhdGVEaWRDaGFu
Z2VOb3RpZmljYXRpb24gZ2V0UVRNb3ZpZVJhdGVEaWRDaGFuZ2VOb3RpZmljYXRpb24oKQotI2Rl
ZmluZSBRVE1vdmllU2l6ZURpZENoYW5nZU5vdGlmaWNhdGlvbiBnZXRRVE1vdmllU2l6ZURpZENo
YW5nZU5vdGlmaWNhdGlvbigpCi0jZGVmaW5lIFFUTW92aWVUaW1lRGlkQ2hhbmdlTm90aWZpY2F0
aW9uIGdldFFUTW92aWVUaW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uKCkKLSNkZWZpbmUgUVRNb3Zp
ZVRpbWVTY2FsZUF0dHJpYnV0ZSBnZXRRVE1vdmllVGltZVNjYWxlQXR0cmlidXRlKCkKLSNkZWZp
bmUgUVRNb3ZpZVVSTEF0dHJpYnV0ZSBnZXRRVE1vdmllVVJMQXR0cmlidXRlKCkKLSNkZWZpbmUg
UVRNb3ZpZVZvbHVtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBnZXRRVE1vdmllVm9sdW1lRGlkQ2hh
bmdlTm90aWZpY2F0aW9uKCkKLSNkZWZpbmUgUVRTZWN1cml0eVBvbGljeU5vQ3Jvc3NTaXRlQXR0
cmlidXRlIGdldFFUU2VjdXJpdHlQb2xpY3lOb0Nyb3NzU2l0ZUF0dHJpYnV0ZSgpCi0jZGVmaW5l
IFFUU2VjdXJpdHlQb2xpY3lOb0xvY2FsVG9SZW1vdGVTaXRlQXR0cmlidXRlIGdldFFUU2VjdXJp
dHlQb2xpY3lOb0xvY2FsVG9SZW1vdGVTaXRlQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRTZWN1cml0
eVBvbGljeU5vUmVtb3RlVG9Mb2NhbFNpdGVBdHRyaWJ1dGUgZ2V0UVRTZWN1cml0eVBvbGljeU5v
UmVtb3RlVG9Mb2NhbFNpdGVBdHRyaWJ1dGUoKQotI2RlZmluZSBRVFZpZGVvUmVuZGVyZXJXZWJL
aXRPbmx5TmV3SW1hZ2VBdmFpbGFibGVOb3RpZmljYXRpb24gZ2V0UVRWaWRlb1JlbmRlcmVyV2Vi
S2l0T25seU5ld0ltYWdlQXZhaWxhYmxlTm90aWZpY2F0aW9uKCkKLSNkZWZpbmUgUVRNb3ZpZUFw
ZXJ0dXJlTW9kZUNsZWFuIGdldFFUTW92aWVBcGVydHVyZU1vZGVDbGVhbigpCi0jZGVmaW5lIFFU
TW92aWVBcGVydHVyZU1vZGVBdHRyaWJ1dGUgZ2V0UVRNb3ZpZUFwZXJ0dXJlTW9kZUF0dHJpYnV0
ZSgpCi0KLS8vIE9sZGVyIHZlcnNpb25zIG9mIHRoZSBRVEtpdCBoZWFkZXIgZG9uJ3QgaGF2ZSB0
aGVzZSBjb25zdGFudHMuCi0jaWYgIWRlZmluZWQgUVRLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCB8
fCBRVEtJVF9WRVJTSU9OX01BWF9BTExPV0VEIDw9IFFUS0lUX1ZFUlNJT05fN18wCi1lbnVtIHsK
LSAgICBRVE1vdmllTG9hZFN0YXRlRXJyb3IgPSAtMUwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUxv
YWRlZCAgPSAyMDAwTCwKLSAgICBRVE1vdmllTG9hZFN0YXRlUGxheWFibGUgPSAxMDAwMEwsCi0g
ICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sgPSAyMDAwMEwsCi0gICAgUVRNb3ZpZUxv
YWRTdGF0ZUNvbXBsZXRlID0gMTAwMDAwTAotfTsKLSNlbmRpZgotCi1AaW50ZXJmYWNlIEZha2VR
VE1vdmllVmlldyA6IE5TT2JqZWN0Ci0tIChXZWJDb3JlTW92aWVPYnNlcnZlciAqKWRlbGVnYXRl
OwotQGVuZAotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXZWJDb3Jl
TW92aWVPYnNlcnZlciA6IE5TT2JqZWN0Ci17Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQq
IG1fY2FsbGJhY2s7Ci0gICAgTlNWaWV3KiBtX3ZpZXc7Ci0gICAgQk9PTCBtX2RlbGF5Q2FsbGJh
Y2tzOwotfQotLShpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclByaXZhdGVRVEtpdCop
Y2FsbGJhY2s7Ci0tKHZvaWQpZGlzY29ubmVjdDsKLS0odm9pZClzZXRWaWV3OihOU1ZpZXcqKXZp
ZXc7Ci0tKHZvaWQpcmVwYWludDsKLS0odm9pZClzZXREZWxheUNhbGxiYWNrczooQk9PTClzaG91
bGREZWxheTsKLS0odm9pZClsb2FkU3RhdGVDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbjsKLS0odm9pZClyYXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b247Ci0tKHZvaWQpc2l6ZUNoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOwot
LSh2b2lkKXRpbWVDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKLS0odm9p
ZClkaWRFbmQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOwotLSh2b2lkKWxheWVySG9z
dENoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOwotQGVuZAotCi1AcHJvdG9j
b2wgV2ViS2l0VmlkZW9SZW5kZXJpbmdEZXRhaWxzCi0tKHZvaWQpc2V0TW92aWU6KGlkKW1vdmll
OwotLSh2b2lkKWRyYXdJblJlY3Q6KE5TUmVjdClyZWN0OwotQGVuZAotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCi17IAotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQocGxheWVyKSk7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFF
bmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQotewotICAgIGlmIChpc0F2YWlsYWJsZSgpKQotICAg
ICAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCBn
ZXRTaXRlc0luTWVkaWFDYWNoZSwgY2xlYXJNZWRpYUNhY2hlLCBjbGVhck1lZGlhQ2FjaGVGb3JT
aXRlLCAwKTsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0KE1lZGlhUGxheWVyKiBwbGF5ZXIpCi0gICAgOiBtX3BsYXllcihwbGF5ZXIpCi0gICAg
LCBtX29iamNPYnNlcnZlcihhZG9wdE5TKFtbV2ViQ29yZU1vdmllT2JzZXJ2ZXIgYWxsb2NdIGlu
aXRXaXRoQ2FsbGJhY2s6dGhpc10pKQotICAgICwgbV9zZWVrVG8oLTEpCi0gICAgLCBtX3NlZWtU
aW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWtUaW1lckZpcmVkKQotICAg
ICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9yZWFkeVN0YXRl
KE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKLSAgICAsIG1fcmVjdCgpCi0gICAgLCBtX3NjYWxl
RmFjdG9yKDEsIDEpCi0gICAgLCBtX2VuYWJsZWRUcmFja0NvdW50KDApCi0gICAgLCBtX3RvdGFs
VHJhY2tDb3VudCgwKQotICAgICwgbV9yZXBvcnRlZER1cmF0aW9uKC0xKQotICAgICwgbV9jYWNo
ZWREdXJhdGlvbigtMSkKLSAgICAsIG1fdGltZVRvUmVzdG9yZSgtMSkKLSAgICAsIG1fcHJlbG9h
ZChNZWRpYVBsYXllcjo6QXV0bykKLSAgICAsIG1fc3RhcnRlZFBsYXlpbmcoZmFsc2UpCi0gICAg
LCBtX2lzU3RyZWFtaW5nKGZhbHNlKQotICAgICwgbV92aXNpYmxlKGZhbHNlKQotICAgICwgbV9o
YXNVbnN1cHBvcnRlZFRyYWNrcyhmYWxzZSkKLSAgICAsIG1fdmlkZW9GcmFtZUhhc0RyYXduKGZh
bHNlKQotICAgICwgbV9pc0FsbG93ZWRUb1JlbmRlcihmYWxzZSkKLSAgICAsIG1fcHJpdmF0ZUJy
b3dzaW5nKGZhbHNlKQotICAgICwgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dy
ZXNzKDApCi0jaWYgRFJBV19GUkFNRV9SQVRFCi0gICAgLCBtX2ZyYW1lQ291bnRXaGlsZVBsYXlp
bmcoMCkKLSAgICAsIG1fdGltZVN0YXJ0ZWRQbGF5aW5nKDApCi0gICAgLCBtX3RpbWVTdG9wcGVk
UGxheWluZygwKQotI2VuZGlmCi17Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp+TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0Ojp+TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQoJXApIiwgdGhpcyk7Ci0gICAgdGVh
ckRvd25WaWRlb1JlbmRlcmluZygpOwotCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07Ci0gICAgW21f
b2JqY09ic2VydmVyLmdldCgpIGRpc2Nvbm5lY3RdOwotfQotCi1OU011dGFibGVEaWN0aW9uYXJ5
ICpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y29tbW9uTW92aWVBdHRyaWJ1dGVzKCkgCi17Ci0g
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqbW92aWVBdHRyaWJ1dGVzID0gW05TTXV0YWJsZURpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDptX3BsYXllci0+cHJlc2VydmVzUGl0Y2goKV0sIFFUTW92aWVSYXRl
Q2hhbmdlc1ByZXNlcnZlUGl0Y2hBdHRyaWJ1dGUsCi0gICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXSwgUVRNb3ZpZVByZXZlbnRFeHRlcm5hbFVSTExpbmtzQXR0cmlidXRl
LAotICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgUVRNb3ZpZUFza1Vu
cmVzb2x2ZWREYXRhUmVmc0F0dHJpYnV0ZSwKLSAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpOT10sIFFUTW92aWVMb29wc0F0dHJpYnV0ZSwKLSAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDohbV9wcml2YXRlQnJvd3NpbmddLCBAIlFUTW92aWVBbGxvd1BlcnNp
c3RlbnRDYWNoZUF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBRVE1vdmllQXBlcnR1cmVNb2RlQ2xl
YW4sIFFUTW92aWVBcGVydHVyZU1vZGVBdHRyaWJ1dGUsCi0gICAgICAgICAgICBuaWxdOwotCi0g
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIFFUU2VjdXJpdHlQb2xpY3lOb1JlbW90ZVRvTG9jYWxTaXRl
QXR0cmlidXRlIGlzIGRlZmluZWQsIHdoaWNoIHdhcyBhZGRlZCBpbiBRVEtpdCA3LjYuMy4KLSAg
ICAvLyBJZiBub3QsIGp1c3Qgc2V0IE5vQ3Jvc3NTaXRlID0gWUVTLCB3aGljaCBkb2VzIHRoZSBz
YW1lIHRoaW5nIGFzIE5vUmVtb3RlVG9Mb2NhbCA9IFlFUyBhbmQgCi0gICAgLy8gTm9Mb2NhbFRv
UmVtb3RlID0gWUVTIGluIFFUS2l0IDwgNy42LjMuCi0gICAgaWYgKFFUU2VjdXJpdHlQb2xpY3lO
b1JlbW90ZVRvTG9jYWxTaXRlQXR0cmlidXRlKSB7Ci0gICAgICAgIFttb3ZpZUF0dHJpYnV0ZXMg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBmb3JLZXk6UVRTZWN1cml0eVBv
bGljeU5vQ3Jvc3NTaXRlQXR0cmlidXRlXTsKLSAgICAgICAgW21vdmllQXR0cmlidXRlcyBzZXRW
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6UVRTZWN1cml0eVBvbGlj
eU5vUmVtb3RlVG9Mb2NhbFNpdGVBdHRyaWJ1dGVdOwotICAgICAgICBbbW92aWVBdHRyaWJ1dGVz
IHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpRVFNlY3VyaXR5
UG9saWN5Tm9Mb2NhbFRvUmVtb3RlU2l0ZUF0dHJpYnV0ZV07Ci0gICAgfSBlbHNlCi0gICAgICAg
IFttb3ZpZUF0dHJpYnV0ZXMgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10g
Zm9yS2V5OlFUU2VjdXJpdHlQb2xpY3lOb0Nyb3NzU2l0ZUF0dHJpYnV0ZV07Ci0KLSAgICBpZiAo
bV9wcmVsb2FkIDwgTWVkaWFQbGF5ZXI6OkF1dG8pCi0gICAgICAgIFttb3ZpZUF0dHJpYnV0ZXMg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OkAiUVRNb3ZpZUxp
bWl0UmVhZEFoZWFkQXR0cmlidXRlIl07Ci0KLSAgICByZXR1cm4gbW92aWVBdHRyaWJ1dGVzOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVE1vdmllKGNvbnN0IFN0
cmluZyYgdXJsKQotewotICAgIFVSTCBrVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsKLSAgICBO
U1VSTCAqY29jb2FVUkwgPSBrVVJMOwotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKm1vdmllQXR0
cmlidXRlcyA9IGNvbW1vbk1vdmllQXR0cmlidXRlcygpOyAgICAKLSAgICBbbW92aWVBdHRyaWJ1
dGVzIHNldFZhbHVlOmNvY29hVVJMIGZvcktleTpRVE1vdmllVVJMQXR0cmlidXRlXTsKLQotICAg
IENGRGljdGlvbmFyeVJlZiBwcm94eVNldHRpbmdzID0gQ0ZOZXR3b3JrQ29weVN5c3RlbVByb3h5
U2V0dGluZ3MoKTsKLSAgICBDRkFycmF5UmVmIHByb3hpZXNGb3JVUkwgPSBDRk5ldHdvcmtDb3B5
UHJveGllc0ZvclVSTCgoQ0ZVUkxSZWYpY29jb2FVUkwsIHByb3h5U2V0dGluZ3MpOwotICAgIEJP
T0wgd2lsbFVzZVByb3h5ID0gWUVTOwotICAgIAotICAgIGlmICghcHJveGllc0ZvclVSTCB8fCAh
Q0ZBcnJheUdldENvdW50KHByb3hpZXNGb3JVUkwpKQotICAgICAgICB3aWxsVXNlUHJveHkgPSBO
TzsKLSAgICAKLSAgICBpZiAoQ0ZBcnJheUdldENvdW50KHByb3hpZXNGb3JVUkwpID09IDEpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5ID0gKENGRGljdGlvbmFyeVJlZilDRkFycmF5
R2V0VmFsdWVBdEluZGV4KHByb3hpZXNGb3JVUkwsIDApOwotICAgICAgICBBU1NFUlQoQ0ZHZXRU
eXBlSUQocHJveHkpID09IENGRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIENGU3RyaW5nUmVmIHByb3h5VHlwZSA9IChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShwcm94eSwga0NGUHJveHlUeXBlS2V5KTsKLSAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlE
KHByb3h5VHlwZSkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoQ0ZTdHJpbmdDb21wYXJlKHByb3h5VHlwZSwga0NGUHJveHlUeXBlTm9uZSwgMCkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pCi0gICAgICAgICAgICB3aWxsVXNlUHJveHkgPSBOTzsKLSAgICB9Ci0K
LSAgICBpZiAoIXdpbGxVc2VQcm94eSAmJiAha1VSTC5wcm90b2NvbElzRGF0YSgpKSB7Ci0gICAg
ICAgIC8vIE9ubHkgcGFzcyB0aGUgUVRNb3ZpZU9wZW5Gb3JQbGF5YmFja0F0dHJpYnV0ZSBmbGFn
IGlmIHRoZXJlIGFyZSBubyBwcm94eSBzZXJ2ZXJzLCBkdWUKLSAgICAgICAgLy8gdG8gcmRhcjov
L3Byb2JsZW0vNzUzMTc3Niwgb3IgaWYgbm90IGxvYWRpbmcgYSBkYXRhOi8vIHVybCBkdWUgdG8g
cmRhcjovL3Byb2JsZW0vODEwMzgwMS4KLSAgICAgICAgW21vdmllQXR0cmlidXRlcyBzZXRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OkAiUVRNb3ZpZU9wZW5Gb3JQ
bGF5YmFja0F0dHJpYnV0ZSJdOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJveGllc0ZvclVSTCkK
LSAgICAgICAgQ0ZSZWxlYXNlKHByb3hpZXNGb3JVUkwpOwotICAgIGlmIChwcm94eVNldHRpbmdz
KQotICAgICAgICBDRlJlbGVhc2UocHJveHlTZXR0aW5ncyk7Ci0KLSAgICBjcmVhdGVRVE1vdmll
KGNvY29hVVJMLCBtb3ZpZUF0dHJpYnV0ZXMpOwotfQotCi1zdGF0aWMgdm9pZCBkaXNhYmxlQ29t
cG9uZW50c09uY2UoKQotewotICAgIHN0YXRpYyBib29sIHNDb21wb25lbnRzRGlzYWJsZWQgPSBm
YWxzZTsKLSAgICBpZiAoc0NvbXBvbmVudHNEaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IHNDb21wb25lbnRzRGlzYWJsZWQgPSB0cnVlOwotCi0gICAgLy8gZWF0L1BERiBhbmQgZ3JpcC9Q
REYgY29tcG9uZW50cyBtdXN0IGJlIGRpc2FibGVkIHR3aWNlIHNpbmNlIHRoZXkgYXJlIHJlZ2lz
dGVyZWQgdHdpY2UKLSAgICAvLyB3aXRoIGRpZmZlcmVudCBmbGFncy4gIEhvd2V2ZXIsIHRoZXJl
IGlzIGN1cnJlbnRseSBhIGJ1ZyBpbiA2NC1iaXQgUVRLaXQgKDxyZGFyOi8vcHJvYmxlbS84Mzc4
MjM3PikKLSAgICAvLyB3aGljaCBjYXVzZXMgc3Vic2VxdWVudCBkaXNhYmxlIGNvbXBvbmVudCBy
ZXF1ZXN0cyBvZiBleGFjdGx5IHRoZSBzYW1lIHR5cGUgdG8gYmUgaWdub3JlZCBpZgotICAgIC8v
IFFUS2l0U2VydmVyIGhhcyBub3QgeWV0IHN0YXJ0ZWQuICBBcyBhIHJlc3VsdCwgd2UgbXVzdCBw
YXNzIGluIGV4YWN0bHkgdGhlIGZsYWdzIHdlIHdhbnQgdG8KLSAgICAvLyBkaXNhYmxlIHBlciBj
b21wb25lbnQuICBBcyBhIGZhaWxzYWZlLCBpZiBpbiB0aGUgZnV0dXJlIHRoZXNlIGZsYWdzIGNo
YW5nZSwgd2Ugd2lsbCBkaXNhYmxlIHRoZQotICAgIC8vIFBERiBjb21wb25lbnRzIGZvciBhIHRo
aXJkIHRpbWUgd2l0aCBhIHdpbGRjYXJkIGZsYWdzIGZpZWxkOgotICAgIHVpbnQzMl90IGNvbXBv
bmVudHNUb0Rpc2FibGVbMTFdWzVdID0gewotICAgICAgICB7J2VhdCAnLCAnVEVYVCcsICd0ZXh0
JywgMCwgMH0sCi0gICAgICAgIHsnZWF0ICcsICdUWFQgJywgJ3RleHQnLCAwLCAwfSwgICAgCi0g
ICAgICAgIHsnZWF0ICcsICd1dHh0JywgJ3RleHQnLCAwLCAwfSwgIAotICAgICAgICB7J2VhdCAn
LCAnVEVYVCcsICd0eDNnJywgMCwgMH0sICAKLSAgICAgICAgeydlYXQgJywgJ1BERiAnLCAndmlk
ZScsIDB4NDQ4MDIsIDB9LAotICAgICAgICB7J2VhdCAnLCAnUERGICcsICd2aWRlJywgMHg0NTgw
MiwgMH0sCi0gICAgICAgIHsnZWF0ICcsICdQREYgJywgJ3ZpZGUnLCAwLCAwfSwgIAotICAgICAg
ICB7J2dyaXAnLCAnUERGICcsICdhcHBsJywgMHg4NDRhMDAsIDB9LAotICAgICAgICB7J2dyaXAn
LCAnUERGICcsICdhcHBsJywgMHg4NDVhMDAsIDB9LAotICAgICAgICB7J2dyaXAnLCAnUERGICcs
ICdhcHBsJywgMCwgMH0sICAKLSAgICAgICAgeydpbWRjJywgJ3BkZiAnLCAnYXBwbCcsIDAsIDB9
LCAgCi0gICAgfTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdU
SChjb21wb25lbnRzVG9EaXNhYmxlKTsgKytpKSAKLSAgICAgICAgd2tRVE1vdmllRGlzYWJsZUNv
bXBvbmVudChjb21wb25lbnRzVG9EaXNhYmxlW2ldKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6Y3JlYXRlUVRNb3ZpZShOU1VSTCAqdXJsLCBOU0RpY3Rpb25hcnkgKm1vdmll
QXR0cmlidXRlcykKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y3JlYXRlUVRNb3ZpZSglcCkgIiwgdGhpcyk7Ci0gICAgZGlzYWJsZUNvbXBvbmVudHNPbmNlKCk7
Ci0KLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2Vy
dmVyOm1fb2JqY09ic2VydmVyLmdldCgpXTsKLSAgICAKLSAgICBib29sIHJlY3JlYXRpbmcgPSBm
YWxzZTsKLSAgICBpZiAobV9xdE1vdmllKSB7Ci0gICAgICAgIHJlY3JlYXRpbmcgPSB0cnVlOwot
ICAgICAgICBkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCk7Ci0gICAgICAgIG1fcXRNb3ZpZSA9IDA7
Ci0gICAgfQotICAgIAotICAgIC8vIERpc2FibGUgcnRzcCBzdHJlYW1zIGZvciBub3csIDxyZGFy
Oi8vcHJvYmxlbS81NjkzOTY3PgotICAgIGlmIChwcm90b2NvbElzKFt1cmwgc2NoZW1lXSwgInJ0
c3AiKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwot
ICAgIG1fcXRNb3ZpZSA9IGFkb3B0TlMoW1tRVE1vdmllIGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0
ZXM6bW92aWVBdHRyaWJ1dGVzIGVycm9yOiZlcnJvcl0pOwotICAgIAotICAgIGlmICghbV9xdE1v
dmllKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW21fcXRNb3ZpZS5nZXQoKSBzZXRWb2x1
bWU6bV9wbGF5ZXItPnZvbHVtZSgpXTsKLQotICAgIGlmIChyZWNyZWF0aW5nICYmIGhhc1ZpZGVv
KCkpCi0gICAgICAgIGNyZWF0ZVFUVmlkZW9SZW5kZXJlcihRVFZpZGVvUmVuZGVyZXJNb2RlTGlz
dGVuc0Zvck5ld0ltYWdlcyk7Ci0gICAgCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRT
dGF0ZUNoYW5nZWQ6KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lOlFUTW92aWVMb2FkU3RhdGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDptX3F0TW92
aWUuZ2V0KCldOwotCi0gICAgLy8gSW4gdXBkYXRlU3RhdGUoKSwgd2UgdHJhY2sgd2hlbiBtYXhU
aW1lTG9hZGVkKCkgPT0gZHVyYXRpb24oKS4KLSAgICAvLyBJbiBuZXdlciB2ZXJzaW9uIG9mIFF1
aWNrVGltZSwgYSBub3RpZmljYXRpb24gaXMgZW1pdHRlZCB3aGVuIG1heFRpbWVMb2FkZWQgY2hh
bmdlcy4KLSAgICAvLyBJbiBvbGRlciB2ZXJzaW9uIG9mIFF1aWNrVGltZSwgUVRNb3ZpZUxvYWRT
dGF0ZURpZENoYW5nZU5vdGlmaWNhdGlvbiBiZSBmaXJlZC4KLSAgICBpZiAoTlNTdHJpbmcgKm1h
eFRpbWVMb2FkZWRDaGFuZ2VOb3RpZmljYXRpb24gPSB3a1FUTW92aWVNYXhUaW1lTG9hZGVkQ2hh
bmdlTm90aWZpY2F0aW9uKCkpIHsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3Rvcihs
b2FkZWRSYW5nZXNDaGFuZ2VkOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTptYXhUaW1lTG9hZGVkQ2hhbmdlTm90aWZpY2F0aW9uCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6
bV9xdE1vdmllLmdldCgpXTsgICAgICAgIAotICAgIH0KLQotICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxl
Y3RvcihyYXRlQ2hhbmdlZDopIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZVJhdGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDptX3F0TW92
aWUuZ2V0KCldOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRk
T2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3RvcihzaXplQ2hhbmdlZDopIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3Zp
ZVNpemVEaWRDaGFuZ2VOb3RpZmljYXRpb24gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdDptX3F0TW92aWUuZ2V0KCldOwotICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIu
Z2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dG9yOkBzZWxlY3Rvcih0aW1lQ2hhbmdlZDopIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZVRpbWVEaWRDaGFuZ2VOb3RpZmljYXRp
b24gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVj
dDptX3F0TW92aWUuZ2V0KCldOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRFbmQ6KSAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlFU
TW92aWVEaWRFbmROb3RpZmljYXRpb24gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdDptX3F0TW92aWUuZ2V0KCldOwotfQotCi1zdGF0aWMgdm9p
ZCBtYWluVGhyZWFkU2V0TmVlZHNEaXNwbGF5KGlkIHNlbGYsIFNFTCkKLXsKLSAgICBpZCB2aWV3
ID0gW3NlbGYgc3VwZXJ2aWV3XTsKLSAgICBBU1NFUlQoIXZpZXcgfHwgW3ZpZXcgaXNLaW5kT2ZD
bGFzczpbUVRNb3ZpZVZpZXcgY2xhc3NdXSk7Ci0gICAgaWYgKCF2aWV3IHx8ICFbdmlldyBpc0tp
bmRPZkNsYXNzOltRVE1vdmllVmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm47Ci0KLSAgICBG
YWtlUVRNb3ZpZVZpZXcgKm1vdmllVmlldyA9IHN0YXRpY19jYXN0PEZha2VRVE1vdmllVmlldyAq
Pih2aWV3KTsKLSAgICBXZWJDb3JlTW92aWVPYnNlcnZlciogZGVsZWdhdGUgPSBbbW92aWVWaWV3
IGRlbGVnYXRlXTsKLSAgICBBU1NFUlQoIWRlbGVnYXRlIHx8IFtkZWxlZ2F0ZSBpc0tpbmRPZkNs
YXNzOltXZWJDb3JlTW92aWVPYnNlcnZlciBjbGFzc11dKTsKLSAgICBpZiAoIWRlbGVnYXRlIHx8
ICFbZGVsZWdhdGUgaXNLaW5kT2ZDbGFzczpbV2ViQ29yZU1vdmllT2JzZXJ2ZXIgY2xhc3NdXSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW2RlbGVnYXRlIHJlcGFpbnRdOwotfQotCi1zdGF0aWMg
Q2xhc3MgUVRWaWRlb1JlbmRlcmVyQ2xhc3MoKQotewotICAgICBzdGF0aWMgQ2xhc3MgUVRWaWRl
b1JlbmRlcmVyV2ViS2l0T25seUNsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJRVFZpZGVvUmVu
ZGVyZXJXZWJLaXRPbmx5Iik7Ci0gICAgIHJldHVybiBRVFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5
Q2xhc3M7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZVFUTW92aWVW
aWV3KCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRl
UVRNb3ZpZVZpZXcoJXApIiwgdGhpcyk7Ci0gICAgZGV0YWNoUVRNb3ZpZVZpZXcoKTsKLQotICAg
IHN0YXRpYyBib29sIGFkZGVkQ3VzdG9tTWV0aG9kcyA9IGZhbHNlOwotICAgIGlmICghbV9wbGF5
ZXItPmluTWVkaWFEb2N1bWVudCgpICYmICFhZGRlZEN1c3RvbU1ldGhvZHMpIHsKLSAgICAgICAg
Q2xhc3MgUVRNb3ZpZUNvbnRlbnRWaWV3Q2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIlFUTW92
aWVDb250ZW50VmlldyIpOwotICAgICAgICBBU1NFUlQoUVRNb3ZpZUNvbnRlbnRWaWV3Q2xhc3Mp
OwotCi0gICAgICAgIE1ldGhvZCBtYWluVGhyZWFkU2V0TmVlZHNEaXNwbGF5TWV0aG9kID0gY2xh
c3NfZ2V0SW5zdGFuY2VNZXRob2QoUVRNb3ZpZUNvbnRlbnRWaWV3Q2xhc3MsIEBzZWxlY3Rvcihf
bWFpblRocmVhZFNldE5lZWRzRGlzcGxheSkpOwotICAgICAgICBBU1NFUlQobWFpblRocmVhZFNl
dE5lZWRzRGlzcGxheU1ldGhvZCk7Ci0KLSAgICAgICAgbWV0aG9kX3NldEltcGxlbWVudGF0aW9u
KG1haW5UaHJlYWRTZXROZWVkc0Rpc3BsYXlNZXRob2QsIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPiht
YWluVGhyZWFkU2V0TmVlZHNEaXNwbGF5KSk7Ci0gICAgICAgIGFkZGVkQ3VzdG9tTWV0aG9kcyA9
IHRydWU7Ci0gICAgfQotCi0gICAgLy8gZGVsYXkgY2FsbGJhY2tzIGFzIHdlICp3aWxsKiBnZXQg
bm90aWZpY2F0aW9ucyBkdXJpbmcgc2V0dXAKLSAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0
RGVsYXlDYWxsYmFja3M6WUVTXTsKLQotICAgIG1fcXRNb3ZpZVZpZXcgPSBhZG9wdE5TKFtbUVRN
b3ZpZVZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICBzZXRTaXplKG1fcGxheWVyLT5zaXplKCkpOwot
ICAgIE5TVmlldyogcGFyZW50VmlldyA9IDA7Ci0gICAgcGFyZW50VmlldyA9IG1fcGxheWVyLT5m
cmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCk7Ci0gICAgW3BhcmVudFZpZXcgYWRkU3Vidmlldzpt
X3F0TW92aWVWaWV3LmdldCgpXTsKLSAgICBbbV9xdE1vdmllVmlldy5nZXQoKSBzZXREZWxlZ2F0
ZTptX29iamNPYnNlcnZlci5nZXQoKV07Ci0gICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldFZp
ZXc6bV9xdE1vdmllVmlldy5nZXQoKV07Ci0gICAgW21fcXRNb3ZpZVZpZXcuZ2V0KCkgc2V0TW92
aWU6bV9xdE1vdmllLmdldCgpXTsKLSAgICBbbV9xdE1vdmllVmlldy5nZXQoKSBzZXRDb250cm9s
bGVyVmlzaWJsZTpOT107Ci0gICAgW21fcXRNb3ZpZVZpZXcuZ2V0KCkgc2V0UHJlc2VydmVzQXNw
ZWN0UmF0aW86Tk9dOwotICAgIC8vIHRoZSBhcmVhIG5vdCBjb3ZlcmVkIGJ5IHZpZGVvIHNob3Vs
ZCBiZSB0cmFuc3BhcmVudAotICAgIFttX3F0TW92aWVWaWV3LmdldCgpIHNldEZpbGxDb2xvcjpb
TlNDb2xvciBjbGVhckNvbG9yXV07Ci0KLSAgICAvLyBJZiB3ZSdyZSBpbiBhIG1lZGlhIGRvY3Vt
ZW50LCBhbGxvdyBRVE1vdmllVmlldyB0byByZW5kZXIgaW4gaXRzIGRlZmF1bHQgbW9kZTsKLSAg
ICAvLyBvdGhlcndpc2UgdGVsbCBpdCB0byBkcmF3IHN5bmNocm9ub3VzbHkuCi0gICAgLy8gTm90
ZSB0aGF0IHdlIGV4cGVjdCBtYWluVGhyZWFkU2V0TmVlZHNEaXNwbGF5IHRvIGJlIGludm9rZWQg
b25seSB3aGVuIHN5bmNocm9ub3VzIGRyYXdpbmcgaXMgcmVxdWVzdGVkLgotICAgIGlmICghbV9w
bGF5ZXItPmluTWVkaWFEb2N1bWVudCgpKQotICAgICAgICB3a1FUTW92aWVWaWV3U2V0RHJhd1N5
bmNocm9ub3VzbHkobV9xdE1vdmllVmlldy5nZXQoKSwgWUVTKTsKLQotICAgIFttX29iamNPYnNl
cnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpOT107Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6OmRldGFjaFFUTW92aWVWaWV3KCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6ZGV0YWNoUVRNb3ZpZVZpZXcoJXApIiwgdGhpcyk7Ci0gICAg
aWYgKG1fcXRNb3ZpZVZpZXcpIHsKLSAgICAgICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldFZp
ZXc6bmlsXTsKLSAgICAgICAgW21fcXRNb3ZpZVZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsK
LSAgICAgICAgW21fcXRNb3ZpZVZpZXcuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAg
ICAgIG1fcXRNb3ZpZVZpZXcgPSBuaWw7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIoUVRWaWRlb1JlbmRlcmVyTW9kZSByZW5k
ZXJlck1vZGUpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNy
ZWF0ZVFUVmlkZW9SZW5kZXJlciglcCkiLCB0aGlzKTsKLSAgICBkZXN0cm95UVRWaWRlb1JlbmRl
cmVyKCk7Ci0KLSAgICBtX3F0VmlkZW9SZW5kZXJlciA9IGFkb3B0TlMoW1tRVFZpZGVvUmVuZGVy
ZXJDbGFzcygpIGFsbG9jXSBpbml0XSk7Ci0gICAgaWYgKCFtX3F0VmlkZW9SZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIGFzc29jaWF0ZSBvdXIgbW92aWUgd2l0aCBvdXIg
aW5zdGFuY2Ugb2YgUVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seQotICAgIFsoaWQ8V2ViS2l0Vmlk
ZW9SZW5kZXJpbmdEZXRhaWxzPiltX3F0VmlkZW9SZW5kZXJlci5nZXQoKSBzZXRNb3ZpZTptX3F0
TW92aWUuZ2V0KCldOwotCi0gICAgaWYgKHJlbmRlcmVyTW9kZSA9PSBRVFZpZGVvUmVuZGVyZXJN
b2RlTGlzdGVuc0Zvck5ld0ltYWdlcykgewotICAgICAgICAvLyBsaXN0ZW4gdG8gUVRWaWRlb1Jl
bmRlcmVyV2ViS2l0T25seSdzIFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHlOZXdJbWFnZURpZEJl
Y29tZUF2YWlsYWJsZU5vdGlmaWNhdGlvbgotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVj
dG9yKG5ld0ltYWdlQXZhaWxhYmxlOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTpRVFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5TmV3SW1h
Z2VBdmFpbGFibGVOb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdDptX3F0VmlkZW9SZW5kZXJlci5nZXQoKV07Ci0gICAg
fQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkZXN0cm95UVRWaWRlb1JlbmRl
cmVyKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZGVzdHJv
eVFUVmlkZW9SZW5kZXJlciglcCkiLCB0aGlzKTsKLSAgICBpZiAoIW1fcXRWaWRlb1JlbmRlcmVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBzdG9wIG9ic2VydmluZyB0aGUgcmVuZGVyZXIn
cyBub3RpZmljYXRpb25zIGJlZm9yZSB3ZSB0b3NzIGl0Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6
UVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seU5ld0ltYWdlQXZhaWxhYmxlTm90aWZpY2F0aW9uCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpt
X3F0VmlkZW9SZW5kZXJlci5nZXQoKV07Ci0KLSAgICAvLyBkaXNhc3NvY2lhdGUgb3VyIG1vdmll
IGZyb20gb3VyIGluc3RhbmNlIG9mIFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHkKLSAgICBbKGlk
PFdlYktpdFZpZGVvUmVuZGVyaW5nRGV0YWlscz4pbV9xdFZpZGVvUmVuZGVyZXIuZ2V0KCkgc2V0
TW92aWU6bmlsXTsgICAgCi0KLSAgICBtX3F0VmlkZW9SZW5kZXJlciA9IG5pbDsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRNb3ZpZUxheWVyKCkKLXsKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRNb3ZpZUxheWVyKCVw
KSIsIHRoaXMpOwotICAgIGlmICghbV9xdE1vdmllKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKTsKLSAgICAKLSAgICBpZiAoIW1f
cXRWaWRlb0xheWVyKSB7Ci0gICAgICAgIG1fcXRWaWRlb0xheWVyID0gYWRvcHROUyhbW1FUTW92
aWVMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBpZiAoIW1fcXRWaWRlb0xheWVyKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFttX3F0VmlkZW9MYXllci5nZXQoKSBzZXRNb3Zp
ZTptX3F0TW92aWUuZ2V0KCldOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgWyhDQUxheWVyICop
bV9xdFZpZGVvTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIlZpZGVvIGxheWVyIl07Ci0jZW5kaWYKLSAg
ICAgICAgLy8gVGhlIGxheWVyIHdpbGwgZ2V0IGhvb2tlZCB1cCB2aWEgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbigpLgotICAgIH0KLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZGVzdHJveVFUTW92aWVMYXllcigpCi17Ci0gICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRlc3Ryb3lRVE1vdmllTGF5ZXIo
JXApIiwgdGhpcyk7Ci0gICAgaWYgKCFtX3F0VmlkZW9MYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gZGlzYXNzb2NpYXRlIG91ciBtb3ZpZSBmcm9tIG91ciBpbnN0YW5jZSBvZiBRVE1v
dmllTGF5ZXIKLSAgICBbbV9xdFZpZGVvTGF5ZXIuZ2V0KCkgc2V0TW92aWU6bmlsXTsgICAgCi0g
ICAgbV9xdFZpZGVvTGF5ZXIgPSBuaWw7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpN
ZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmN1cnJlbnRSZW5kZXJp
bmdNb2RlKCkgY29uc3QKLXsKLSAgICBpZiAobV9xdE1vdmllVmlldykKLSAgICAgICAgcmV0dXJu
IE1lZGlhUmVuZGVyaW5nTW92aWVWaWV3OwotICAgIAotICAgIGlmIChtX3F0VmlkZW9MYXllcikK
LSAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTW92aWVMYXllcjsKLQotICAgIGlmIChtX3F0
VmlkZW9SZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nU29mdHdhcmVSZW5k
ZXJlcjsKLSAgICAKLSAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdOb25lOwotfQotCi1NZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6TWVkaWFSZW5kZXJpbmdNb2RlIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpwcmVmZXJyZWRSZW5kZXJpbmdNb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxheWVy
LT5mcmFtZVZpZXcoKSB8fCAhbV9xdE1vdmllKQotICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJp
bmdOb25lOwotCi0gICAgaWYgKHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiBtX3Bs
YXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkKG1fcGxheWVyKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUmVuZGVyaW5nTW92aWVMYXll
cjsKLQotICAgIGlmICghUVRWaWRlb1JlbmRlcmVyQ2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIE1l
ZGlhUmVuZGVyaW5nTW92aWVWaWV3OwotICAgIAotICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ1Nv
ZnR3YXJlUmVuZGVyZXI7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVw
VmlkZW9SZW5kZXJpbmcoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpzZXRVcFZpZGVvUmVuZGVyaW5nKCVwKSIsIHRoaXMpOwotICAgIGlmICghaXNSZWFkeUZv
clZpZGVvU2V0dXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVkaWFSZW5kZXJpbmdNb2Rl
IGN1cnJlbnRNb2RlID0gY3VycmVudFJlbmRlcmluZ01vZGUoKTsKLSAgICBNZWRpYVJlbmRlcmlu
Z01vZGUgcHJlZmVycmVkTW9kZSA9IHByZWZlcnJlZFJlbmRlcmluZ01vZGUoKTsKLSAgICBpZiAo
Y3VycmVudE1vZGUgPT0gcHJlZmVycmVkTW9kZSAmJiBjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRl
cmluZ05vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjdXJyZW50TW9kZSAhPSBNZWRp
YVJlbmRlcmluZ05vbmUpICAKLSAgICAgICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwotCi0g
ICAgc3dpdGNoIChwcmVmZXJyZWRNb2RlKSB7Ci0gICAgY2FzZSBNZWRpYVJlbmRlcmluZ01vdmll
VmlldzoKLSAgICAgICAgY3JlYXRlUVRNb3ZpZVZpZXcoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBNZWRpYVJlbmRlcmluZ05vbmU6Ci0gICAgY2FzZSBNZWRpYVJlbmRlcmluZ1NvZnR3YXJl
UmVuZGVyZXI6Ci0gICAgICAgIGNyZWF0ZVFUVmlkZW9SZW5kZXJlcihRVFZpZGVvUmVuZGVyZXJN
b2RlTGlzdGVuc0Zvck5ld0ltYWdlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFS
ZW5kZXJpbmdNb3ZpZUxheWVyOgotICAgICAgICBjcmVhdGVRVE1vdmllTGF5ZXIoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gSWYgdXNpbmcgYSBtb3ZpZSBsYXllciwgaW5mb3Jt
IHRoZSBjbGllbnQgc28gdGhlIGNvbXBvc2l0aW5nIHRyZWUgaXMgdXBkYXRlZC4KLSAgICBpZiAo
Y3VycmVudE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyIHx8IHByZWZlcnJlZE1vZGUg
PT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyKQotICAgICAgICBtX3BsYXllci0+bWVkaWFQbGF5
ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmco
KQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0ZWFyRG93blZp
ZGVvUmVuZGVyaW5nKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3F0TW92aWVWaWV3KQotICAgICAg
ICBkZXRhY2hRVE1vdmllVmlldygpOwotICAgIGlmIChtX3F0VmlkZW9SZW5kZXJlcikKLSAgICAg
ICAgZGVzdHJveVFUVmlkZW9SZW5kZXJlcigpOwotICAgIGlmIChtX3F0VmlkZW9MYXllcikKLSAg
ICAgICAgZGVzdHJveVFUTW92aWVMYXllcigpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9x
dE1vdmllVmlldwotICAgICAgICB8fCBtX3F0VmlkZW9MYXllcgotICAgICAgICB8fCBtX3F0Vmlk
ZW9SZW5kZXJlcjsKLX0KLQotUVRUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVR
VFRpbWUoZmxvYXQgdGltZSkgY29uc3QKLXsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkp
Ci0gICAgICAgIHJldHVybiBRVE1ha2VUaW1lKDAsIDYwMCk7Ci0gICAgbG9uZyB0aW1lU2NhbGUg
PSBbW21fcXRNb3ZpZS5nZXQoKSBhdHRyaWJ1dGVGb3JLZXk6UVRNb3ZpZVRpbWVTY2FsZUF0dHJp
YnV0ZV0gbG9uZ1ZhbHVlXTsKLSAgICByZXR1cm4gUVRNYWtlVGltZShscm91bmRmKHRpbWUgKiB0
aW1lU2NhbGUpLCB0aW1lU2NhbGUpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpyZXN1bWVMb2FkKCkKLXsKLSAgICBpZiAoIW1fbW92aWVVUkwuaXNOdWxsKCkpCi0gICAgICAg
IGxvYWRJbnRlcm5hbChtX21vdmllVVJMKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6bG9hZCglcCkiLCB0aGlzKTsKLSAgICBtX21vdmllVVJMID0gdXJs
OwotCi0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IHN1cHBvc2VkIHRvIGxvYWQgYW55IGRh
dGEgcmV0dXJuIGltbWVkaWF0ZWx5LgotICAgIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6
Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxvYWRJbnRlcm5hbCh1cmwpOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkSW50ZXJuYWwoY29uc3QgU3RyaW5nJiB1
cmwpCi17Ci0gICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7
Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgICAg
IG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotICAgIGlmIChtX3JlYWR5
U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3Rh
dGVDaGFuZ2VkKCk7Ci0gICAgfQotICAgIGNhbmNlbFNlZWsoKTsKLSAgICBtX3ZpZGVvRnJhbWVI
YXNEcmF3biA9IGZhbHNlOwotICAgIAotICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxh
eUNhbGxiYWNrczpZRVNdOwotCi0gICAgY3JlYXRlUVRNb3ZpZSh1cmwpOwotCi0gICAgW21fb2Jq
Y09ic2VydmVyLmdldCgpIGxvYWRTdGF0ZUNoYW5nZWQ6bmlsXTsKLSAgICBbbV9vYmpjT2JzZXJ2
ZXIuZ2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6Tk9dOwotfQotCi0jaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWQoY29uc3QgU3RyaW5nJiwg
TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KikKLXsKLSAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpGb3JtYXRFcnJvcjsKLSAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgp
OwotfQotI2VuZGlmCi0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cHJlcGFyZVRv
UGxheSgpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnByZXBh
cmVUb1BsYXkoJXApIiwgdGhpcyk7Ci0gICAgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6QXV0byk7
Ci19Ci0KLVBsYXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBsYXRmb3JtTWVk
aWEoKSBjb25zdAotewotICAgIFBsYXRmb3JtTWVkaWEgcG07Ci0gICAgcG0udHlwZSA9IFBsYXRm
b3JtTWVkaWE6OlFUTW92aWVUeXBlOwotICAgIHBtLm1lZGlhLnF0TW92aWUgPSBtX3F0TW92aWUu
Z2V0KCk7Ci0gICAgcmV0dXJuIHBtOwotfQotCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcXRWaWRl
b0xheWVyLmdldCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwbGF5KCkK
LXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGxheSglcCkiLCB0
aGlzKTsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX3N0YXJ0ZWRQbGF5aW5nID0gdHJ1ZTsKLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICBtX2Zy
YW1lQ291bnRXaGlsZVBsYXlpbmcgPSAwOwotI2VuZGlmCi0gICAgW21fb2JqY09ic2VydmVyLmdl
dCgpIHNldERlbGF5Q2FsbGJhY2tzOllFU107Ci0gICAgW21fcXRNb3ZpZS5nZXQoKSBzZXRSYXRl
Om1fcGxheWVyLT5yYXRlKCldOwotICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNh
bGxiYWNrczpOT107Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBhdXNlKCkK
LXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGF1c2UoJXApIiwg
dGhpcyk7Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9zdGFydGVkUGxheWluZyA9IGZhbHNlOwotI2lmIERSQVdfRlJBTUVfUkFURQotICAgIG1f
dGltZVN0b3BwZWRQbGF5aW5nID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURh
dGVdOwotI2VuZGlmCi0gICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tz
OllFU107Ci0gICAgW21fcXRNb3ZpZS5nZXQoKSBzdG9wXTsKLSAgICBbbV9vYmpjT2JzZXJ2ZXIu
Z2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6Tk9dOwotfQotCi1mbG9hdCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9jYWNoZWREdXJhdGlvbiAhPSBNZWRp
YVBsYXllcjo6aW52YWxpZFRpbWUoKSkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247
Ci0KLSAgICBRVFRpbWUgdGltZSA9IFttX3F0TW92aWUuZ2V0KCkgZHVyYXRpb25dOwotICAgIGlm
ICh0aW1lLmZsYWdzID09IGtRVFRpbWVJc0luZGVmaW5pdGUpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHRpbWUudGltZVZhbHVlKSAvIHRpbWUudGltZVNjYWxlOwotfQotCi1mbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3VycmVudFRpbWUoKSBjb25zdAotewotICAgIGlmICgh
bWV0YURhdGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUVRUaW1lIHRpbWUg
PSBbbV9xdE1vdmllLmdldCgpIGN1cnJlbnRUaW1lXTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHRpbWUudGltZVZhbHVlKSAvIHRpbWUudGltZVNjYWxlOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVrKGZsb2F0IHRpbWUpCi17Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWsoJXApIC0gdGltZSAlZiIsIHRoaXMsIHRpbWUp
OwotICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgYXJlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBv
ZiBhIHNlZWsgdG8gdGhlIHNhbWUgdGltZS4KLSAgICBpZiAodGltZSA9PSBtX3NlZWtUbykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2FuY2VsU2VlaygpOwotICAgIAotICAgIGlmICghbWV0YURh
dGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICh0aW1lID4gZHVy
YXRpb24oKSkKLSAgICAgICAgdGltZSA9IGR1cmF0aW9uKCk7Ci0KLSAgICBtX3NlZWtUbyA9IHRp
bWU7Ci0gICAgaWYgKG1heFRpbWVTZWVrYWJsZSgpID49IG1fc2Vla1RvKQotICAgICAgICBkb1Nl
ZWsoKTsKLSAgICBlbHNlIAotICAgICAgICBtX3NlZWtUaW1lci5zdGFydCgwLCAwLjVmKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZG9TZWVrKCkgCi17Ci0gICAgUVRUaW1l
IHF0dGltZSA9IGNyZWF0ZVFUVGltZShtX3NlZWtUbyk7Ci0gICAgLy8gc2V0Q3VycmVudFRpbWUg
Z2VuZXJhdGVzIHNldmVyYWwgZXZlbnQgY2FsbGJhY2tzLCB1cGRhdGUgYWZ0ZXJ3YXJkcwotICAg
IFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpZRVNdOwotICAgIGZsb2F0
IG9sZFJhdGUgPSBbbV9xdE1vdmllLmdldCgpIHJhdGVdOwotCi0gICAgaWYgKG9sZFJhdGUpCi0g
ICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0UmF0ZTowXTsKLSAgICBbbV9xdE1vdmllLmdldCgp
IHNldEN1cnJlbnRUaW1lOnF0dGltZV07Ci0KLSAgICAvLyByZXN0b3JlIHBsYXliYWNrIG9ubHkg
aWYgbm90IGF0IGVuZCwgb3RoZXJ3aXNlIFFUTW92aWUgd2lsbCBsb29wCi0gICAgZmxvYXQgdGlt
ZUFmdGVyU2VlayA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgaWYgKG9sZFJhdGUgJiYgdGltZUFmdGVy
U2VlayA8IGR1cmF0aW9uKCkpCi0gICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0UmF0ZTpvbGRS
YXRlXTsKLQotICAgIGNhbmNlbFNlZWsoKTsKLSAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0
RGVsYXlDYWxsYmFja3M6Tk9dOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpj
YW5jZWxTZWVrKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y2FuY2VsU2VlayglcCkiLCB0aGlzKTsKLSAgICBtX3NlZWtUbyA9IC0xOwotICAgIG1fc2Vla1Rp
bWVyLnN0b3AoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vla1RpbWVy
RmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ+JikKLXsgICAgICAgIAotICAgIGlm
ICghbWV0YURhdGFBdmFpbGFibGUoKXx8ICFzZWVraW5nKCkgfHwgY3VycmVudFRpbWUoKSA9PSBt
X3NlZWtUbykgewotICAgICAgICBjYW5jZWxTZWVrKCk7Ci0gICAgICAgIHVwZGF0ZVN0YXRlcygp
OwotICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsgCi0gICAgICAgIHJldHVybjsKLSAg
ICB9IAotCi0gICAgaWYgKG1heFRpbWVTZWVrYWJsZSgpID49IG1fc2Vla1RvKQotICAgICAgICBk
b1NlZWsoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBz
dGF0ZSA9IG5ldHdvcmtTdGF0ZSgpOwotICAgICAgICBpZiAoc3RhdGUgPT0gTWVkaWFQbGF5ZXI6
OkVtcHR5IHx8IHN0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpIHsKLSAgICAgICAgICAgIGNh
bmNlbFNlZWsoKTsKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwotICAgICAgICAgICAgbV9w
bGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnBhdXNlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0YUF2
YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gW21fcXRNb3ZpZS5n
ZXQoKSByYXRlXSA9PSAwOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVr
aW5nKCkgY29uc3QKLXsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9zZWVrVG8gPj0gMDsKLX0KLQotSW50U2l6ZSBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6bmF0dXJhbFNpemUoKSBjb25zdAotewotICAgIGlmICghbWV0
YURhdGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIC8vIElu
IHNwaXRlIG9mIHRoZSBuYW1lIG9mIHRoaXMgbWV0aG9kLCByZXR1cm4gUVRNb3ZpZU5hdHVyYWxT
aXplQXR0cmlidXRlIHRyYW5zZm9ybWVkIGJ5IHRoZSAKLSAgICAvLyBpbml0aWFsIG1vdmllIHNj
YWxlIGJlY2F1c2UgdGhlIHNwZWMgc2F5cyBpbnRyaW5zaWMgc2l6ZSBpczoKLSAgICAvLwotICAg
IC8vICAgIC4uLiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcmVzb3VyY2UgaW4gQ1NTIHBpeGVscyBh
ZnRlciB0YWtpbmcgaW50byBhY2NvdW50IHRoZSByZXNvdXJjZSdzIAotICAgIC8vICAgIGRpbWVu
c2lvbnMsIGFzcGVjdCByYXRpbywgY2xlYW4gYXBlcnR1cmUsIHJlc29sdXRpb24sIGFuZCBzbyBm
b3J0aCwgYXMgZGVmaW5lZCBmb3IgdGhlIAotICAgIC8vICAgIGZvcm1hdCB1c2VkIGJ5IHRoZSBy
ZXNvdXJjZQotICAgIAotICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZShbW21fcXRNb3ZpZS5nZXQo
KSBhdHRyaWJ1dGVGb3JLZXk6UVRNb3ZpZU5hdHVyYWxTaXplQXR0cmlidXRlXSBzaXplVmFsdWVd
KTsKLSAgICBpZiAobmF0dXJhbFNpemUuaXNFbXB0eSgpICYmIG1faXNTdHJlYW1pbmcpIHsKLSAg
ICAgICAgLy8gSFRUUCBMaXZlIFN0cmVhbXMgd2lsbCBvY2Nhc2lvbmFsbHkgcmV0dXJuIHswLDB9
IG5hdHVyYWwgc2l6ZXMgd2hpbGUgc2NydWJiaW5nLgotICAgICAgICAvLyBXb3JrIGFyb3VuZCB0
aGlzIHByb2JsZW0gKDxyZGFyOi8vcHJvYmxlbS85MDc4NTYzPikgYnkgcmV0dXJuaW5nIHRoZSBs
YXN0IHZhbGlkIAotICAgICAgICAvLyBjYWNoZWQgbmF0dXJhbCBzaXplOgotICAgICAgICBuYXR1
cmFsU2l6ZSA9IG1fY2FjaGVkTmF0dXJhbFNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
VW5mb3J0dW5hdGVseSwgZHVlIHRvIGFub3RoZXIgUVRLaXQgYnVnICg8cmRhcjovL3Byb2JsZW0v
OTA4MjA3MT4pIHdlIHdvbid0IGdldCBhIHNpemVDaGFuZ2VkCi0gICAgICAgIC8vIGV2ZW50IHdo
ZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBtdXN0IGNhY2hlIHRoZSBsYXN0IHZhbGlkIG5hdHVyYWxT
aXplIGhlcmU6Ci0gICAgICAgIG1fY2FjaGVkTmF0dXJhbFNpemUgPSBuYXR1cmFsU2l6ZTsKLSAg
ICB9Ci0gICAgICAgIAotICAgIHJldHVybiBJbnRTaXplKG5hdHVyYWxTaXplLndpZHRoKCkgKiBt
X3NjYWxlRmFjdG9yLndpZHRoKCksIG5hdHVyYWxTaXplLmhlaWdodCgpICogbV9zY2FsZUZhY3Rv
ci5oZWlnaHQoKSk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Omhhc1ZpZGVv
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gW1ttX3F0TW92aWUuZ2V0KCkgYXR0cmlidXRlRm9yS2V5OlFU
TW92aWVIYXNWaWRlb0F0dHJpYnV0ZV0gYm9vbFZhbHVlXTsKLX0KLQotYm9vbCBNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6aGFzQXVkaW8oKSBjb25zdAotewotICAgIGlmICghbV9xdE1vdmllKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIFtbbV9xdE1vdmllLmdldCgpIGF0dHJp
YnV0ZUZvcktleTpRVE1vdmllSGFzQXVkaW9BdHRyaWJ1dGVdIGJvb2xWYWx1ZV07Ci19Ci0KLWJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNl
dFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnNldFZvbHVtZSglcCkgLSB2b2x1bWUgJWYiLCB0aGlzLCB2b2x1bWUpOwotICAg
IGlmIChtX3F0TW92aWUpCi0gICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0Vm9sdW1lOnZvbHVt
ZV07ICAKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6aGFzQ2xvc2VkQ2FwdGlv
bnMoKSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB3a1FUTW92aWVIYXNDbG9zZWRDYXB0aW9ucyhtX3F0TW92
aWUuZ2V0KCkpOyAgCi19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldENsb3Nl
ZENhcHRpb25zVmlzaWJsZShib29sIGNsb3NlZENhcHRpb25zVmlzaWJsZSkKLXsKLSAgICBpZiAo
bWV0YURhdGFBdmFpbGFibGUoKSkgewotICAgICAgICB3a1FUTW92aWVTZXRTaG93Q2xvc2VkQ2Fw
dGlvbnMobV9xdE1vdmllLmdldCgpLCBjbG9zZWRDYXB0aW9uc1Zpc2libGUpOwotCi0gICAgICAg
IGlmIChjbG9zZWRDYXB0aW9uc1Zpc2libGUgJiYgbV9xdFZpZGVvTGF5ZXIpIHsKLSAgICAgICAg
ICAgIC8vIENhcHRpb25zIHdpbGwgYmUgcmVuZGVyZWQgdXBzaWRlIGRvd24gdW5sZXNzIHdlIGZs
YWcgdGhlIG1vdmllIGFzIGZsaXBwZWQgKGFnYWluKS4gU2VlIDxyZGFyOi8vNzQwODQ0MD4uCi0g
ICAgICAgICAgICBbbV9xdFZpZGVvTGF5ZXIuZ2V0KCkgc2V0R2VvbWV0cnlGbGlwcGVkOllFU107
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNl
dFJhdGUoZmxvYXQgcmF0ZSkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6c2V0UmF0ZSglcCkgLSByYXRlICVmIiwgdGhpcywgcmF0ZSk7Ci0gICAgaWYgKG1fcXRN
b3ZpZSkKLSAgICAgICAgW21fcXRNb3ZpZS5nZXQoKSBzZXRSYXRlOnJhdGVdOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZl
c1BpdGNoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRQ
cmVzZXJ2ZXNQaXRjaCglcCkgLSBwcmVzZXJ2ZXNQaXRjaCAlZCIsIHRoaXMsIChpbnQpcHJlc2Vy
dmVzUGl0Y2gpOwotICAgIGlmICghbV9xdE1vdmllKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBRVE1vdmllUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNoQXR0cmlidXRlIGNhbm5vdCBiZSBjaGFu
Z2VkIGR5bmFtaWNhbGx5IGFmdGVyIFFUTW92aWUgY3JlYXRpb24uCi0gICAgLy8gSWYgdGhlIHBh
c3NlZCBpbiB2YWx1ZSBpcyBkaWZmZXJlbnQgdGhhbiB3aGF0IGFscmVhZHkgZXhpc3RzLCB3ZSBu
ZWVkIHRvIHJlY3JlYXRlIHRoZSBRVE1vdmllIGZvciBpdCB0byB0YWtlIGVmZmVjdC4KLSAgICBp
ZiAoW1ttX3F0TW92aWUuZ2V0KCkgYXR0cmlidXRlRm9yS2V5OlFUTW92aWVSYXRlQ2hhbmdlc1By
ZXNlcnZlUGl0Y2hBdHRyaWJ1dGVdIGJvb2xWYWx1ZV0gPT0gcHJlc2VydmVzUGl0Y2gpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IG1vdmllQXR0cmlidXRl
cyA9IGFkb3B0TlMoW1ttX3F0TW92aWUuZ2V0KCkgbW92aWVBdHRyaWJ1dGVzXSBtdXRhYmxlQ29w
eV0pOwotICAgIEFTU0VSVChtb3ZpZUF0dHJpYnV0ZXMpOwotICAgIFttb3ZpZUF0dHJpYnV0ZXMu
Z2V0KCkgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOnByZXNlcnZlc1BpdGNoXSBm
b3JLZXk6UVRNb3ZpZVJhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaEF0dHJpYnV0ZV07Ci0gICAgbV90
aW1lVG9SZXN0b3JlID0gY3VycmVudFRpbWUoKTsKLQotICAgIGNyZWF0ZVFUTW92aWUoW21vdmll
QXR0cmlidXRlcy5nZXQoKSB2YWx1ZUZvcktleTpRVE1vdmllVVJMQXR0cmlidXRlXSwgbW92aWVB
dHRyaWJ1dGVzLmdldCgpKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdl
cz4gTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmJ1ZmZlcmVkKCkgY29uc3QKLXsKLSAgICBhdXRv
IHRpbWVSYW5nZXMgPSBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotICAgIGZsb2F0IGxv
YWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKLSAgICBpZiAobG9hZGVkID4gMCkKLSAgICAgICAgdGlt
ZVJhbmdlcy0+YWRkKDAsIGxvYWRlZCk7Ci0gICAgcmV0dXJuIHRpbWVSYW5nZXM7Ci19Ci0KLWZs
b2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAotewot
ICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv
LyBpbmZpbml0ZSBkdXJhdGlvbiBtZWFucyBsaXZlIHN0cmVhbQotICAgIGlmIChzdGQ6OmlzaW5m
KGR1cmF0aW9uKCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB3a1FUTW92aWVN
YXhUaW1lU2Vla2FibGUobV9xdE1vdmllLmdldCgpKTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6Om1heFRpbWVMb2FkZWQoKSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFB
dmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHdrUVRNb3ZpZU1heFRp
bWVMb2FkZWQobV9xdE1vdmllLmdldCgpKTsgCi19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFkdXJhdGlvbigp
IHx8ICF0b3RhbEJ5dGVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmbG9hdCBjdXJy
ZW50TWF4VGltZUxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKLSAgICBib29sIGRpZExvYWRpbmdQ
cm9ncmVzcyA9IGN1cnJlbnRNYXhUaW1lTG9hZGVkICE9IG1fbWF4VGltZUxvYWRlZEF0TGFzdERp
ZExvYWRpbmdQcm9ncmVzczsKLSAgICBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJv
Z3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZDsKLSAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dy
ZXNzOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6dG90YWxCeXRlcygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gW1ttX3F0TW92aWUuZ2V0KCkgYXR0cmlidXRlRm9yS2V5OlFUTW92aWVE
YXRhU2l6ZUF0dHJpYnV0ZV0gaW50VmFsdWVdOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpjYW5jZWxMb2FkKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6Y2FuY2VsTG9hZCglcCkiLCB0aGlzKTsKLSAgICAvLyBGSVhNRTogSXMgdGhlcmUg
YSBiZXR0ZXIgd2F5IHRvIGNoZWNrIGZvciB0aGlzPwotICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8
IE1lZGlhUGxheWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVyOjpM
b2FkZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB0ZWFyRG93blZpZGVvUmVuZGVyaW5n
KCk7Ci0gICAgbV9xdE1vdmllID0gbmlsOwotICAgIAotICAgIHVwZGF0ZVN0YXRlcygpOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjYWNoZU1vdmllU2NhbGUoKQotewotICAg
IE5TU2l6ZSBpbml0aWFsU2l6ZSA9IE5TWmVyb1NpemU7Ci0gICAgTlNTaXplIG5hdHVyYWxTaXpl
ID0gW1ttX3F0TW92aWUuZ2V0KCkgYXR0cmlidXRlRm9yS2V5OlFUTW92aWVOYXR1cmFsU2l6ZUF0
dHJpYnV0ZV0gc2l6ZVZhbHVlXTsKLQotICAgIC8vIFFUTW92aWVDdXJyZW50U2l6ZUF0dHJpYnV0
ZSBpcyBub3QgYWxsb3dlZCB3aXRoIGluc3RhbmNlcyBvZiBRVE1vdmllIHRoYXQgaGF2ZSBiZWVu
IAotICAgIC8vIG9wZW5lZCB3aXRoIFFUTW92aWVPcGVuRm9yUGxheWJhY2tBdHRyaWJ1dGUsIHNv
IGFzayBmb3IgdGhlIGRpc3BsYXkgdHJhbnNmb3JtIGF0dHJpYnV0ZSBpbnN0ZWFkLgotICAgIE5T
QWZmaW5lVHJhbnNmb3JtICpkaXNwbGF5VHJhbnNmb3JtID0gW21fcXRNb3ZpZS5nZXQoKSBhdHRy
aWJ1dGVGb3JLZXk6QCJRVE1vdmllUHJlZmVycmVkVHJhbnNmb3JtQXR0cmlidXRlIl07Ci0gICAg
aWYgKGRpc3BsYXlUcmFuc2Zvcm0pCi0gICAgICAgIGluaXRpYWxTaXplID0gW2Rpc3BsYXlUcmFu
c2Zvcm0gdHJhbnNmb3JtU2l6ZTpuYXR1cmFsU2l6ZV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlu
aXRpYWxTaXplLndpZHRoID0gbmF0dXJhbFNpemUud2lkdGg7Ci0gICAgICAgIGluaXRpYWxTaXpl
LmhlaWdodCA9IG5hdHVyYWxTaXplLmhlaWdodDsKLSAgICB9Ci0KLSAgICBpZiAobmF0dXJhbFNp
emUud2lkdGgpCi0gICAgICAgIG1fc2NhbGVGYWN0b3Iuc2V0V2lkdGgoaW5pdGlhbFNpemUud2lk
dGggLyBuYXR1cmFsU2l6ZS53aWR0aCk7Ci0gICAgaWYgKG5hdHVyYWxTaXplLmhlaWdodCkKLSAg
ICAgICAgbV9zY2FsZUZhY3Rvci5zZXRIZWlnaHQoaW5pdGlhbFNpemUuaGVpZ2h0IC8gbmF0dXJh
bFNpemUuaGVpZ2h0KTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6aXNSZWFk
eUZvclZpZGVvU2V0dXAoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlYWR5U3RhdGUgPj0gTWVk
aWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3BsYXllci0+dmlzaWJsZSgpOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkKLXsKLSAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cHJlcGFyZUZvclJlbmRlcmluZygl
cCkiLCB0aGlzKTsKLSAgICBpZiAobV9pc0FsbG93ZWRUb1JlbmRlcikKLSAgICAgICAgcmV0dXJu
OwotICAgIG1faXNBbGxvd2VkVG9SZW5kZXIgPSB0cnVlOwotCi0gICAgaWYgKCFoYXNTZXRVcFZp
ZGVvUmVuZGVyaW5nKCkpCi0gICAgICAgIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKLQotICAgIC8v
IElmIHVzaW5nIGEgbW92aWUgbGF5ZXIsIGluZm9ybSB0aGUgY2xpZW50IHNvIHRoZSBjb21wb3Np
dGluZyB0cmVlIGlzIHVwZGF0ZWQuIFRoaXMgaXMgY3J1Y2lhbCBpZiB0aGUgbW92aWUKLSAgICAv
LyBoYXMgYSBwb3N0ZXIsIGFzIGl0IHdpbGwgbW9zdCBsaWtlbHkgbm90IGhhdmUgYSBsYXllciBh
bmQgd2Ugd2lsbCBub3cgYmUgcmVuZGVyaW5nIGZyYW1lcyB0byB0aGUgbW92aWUgbGF5ZXIuCi0g
ICAgaWYgKGN1cnJlbnRSZW5kZXJpbmdNb2RlKCkgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVy
IHx8IHByZWZlcnJlZFJlbmRlcmluZ01vZGUoKSA9PSBNZWRpYVJlbmRlcmluZ01vdmllTGF5ZXIp
Ci0gICAgICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllclJlbmRl
cmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6dXBkYXRlU3RhdGVzKCkKLXsKLSAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9s
ZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7Ci0KLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6dXBkYXRlU3RhdGVzKCVwKSAtIGVudGVyaW5nIHdpdGggbmV0
d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUgPSAlaSIsIHRoaXMsIHN0YXRpY19jYXN0PGludD4o
bV9uZXR3b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSkpOwotCi0gICAg
Ci0gICAgbG9uZyBsb2FkU3RhdGUgPSBtX3F0TW92aWUgPyBbW21fcXRNb3ZpZS5nZXQoKSBhdHRy
aWJ1dGVGb3JLZXk6UVRNb3ZpZUxvYWRTdGF0ZUF0dHJpYnV0ZV0gbG9uZ1ZhbHVlXSA6IHN0YXRp
Y19jYXN0PGxvbmc+KFFUTW92aWVMb2FkU3RhdGVFcnJvcik7Ci0KLSAgICBpZiAobG9hZFN0YXRl
ID49IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgJiYgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6
OkhhdmVNZXRhZGF0YSkgewotICAgICAgICBkaXNhYmxlVW5zdXBwb3J0ZWRUcmFja3MoKTsKLSAg
ICAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaWYg
KCFtX2VuYWJsZWRUcmFja0NvdW50IHx8IG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGlzIGhhcyBhIHR5cGUgb2YgbWVkaWEgdGhhdCB3ZSBkbyBub3QgaGFu
ZGxlIGRpcmVjdGx5IHdpdGggYSA8dmlkZW8+IAotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQs
IGVnLiBhIHJ0c3AgdHJhY2sgb3IgUXVpY2tUaW1lIFZSLiBUZWxsIHRoZSBNZWRpYVBsYXllckNs
aWVudAotICAgICAgICAgICAgICAgIC8vIHRoYXQgd2Ugbm90aWNlZC4KLSAgICAgICAgICAgICAg
ICBzYXdVbnN1cHBvcnRlZFRyYWNrcygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghbV9lbmFibGVkVHJhY2tDb3VudCkKLSAgICAg
ICAgICAgIGxvYWRTdGF0ZSA9IFFUTW92aWVMb2FkU3RhdGVFcnJvcjsKLQotICAgICAgICBpZiAo
bG9hZFN0YXRlICE9IFFUTW92aWVMb2FkU3RhdGVFcnJvcikgewotICAgICAgICAgICAgd2tRVE1v
dmllU2VsZWN0UHJlZmVycmVkQWx0ZXJuYXRlcyhtX3F0TW92aWUuZ2V0KCkpOwotICAgICAgICAg
ICAgY2FjaGVNb3ZpZVNjYWxlKCk7Ci0gICAgICAgICAgICBNZWRpYVBsYXllcjo6TW92aWVMb2Fk
VHlwZSBtb3ZpZVR5cGUgPSBtb3ZpZUxvYWRUeXBlKCk7Ci0gICAgICAgICAgICBtX2lzU3RyZWFt
aW5nID0gbW92aWVUeXBlID09IE1lZGlhUGxheWVyOjpTdG9yZWRTdHJlYW0gfHwgbW92aWVUeXBl
ID09IE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IC8vIElmIHRoaXMgbW92aWUgaXMgcmVsb2FkaW5nIGFuZCB3ZSBtZWFuIHRvIHJlc3RvcmUgdGhl
IGN1cnJlbnQgdGltZS9yYXRlLCB0aGlzIG1pZ2h0IGJlIHRoZSByaWdodCB0aW1lIHRvIGRvIGl0
LgotICAgIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCAmJiBvbGROZXR3
b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGVkICYmIG1fdGltZVRvUmVzdG9yZSAhPSBNZWRp
YVBsYXllcjo6aW52YWxpZFRpbWUoKSkgewotICAgICAgICBRVFRpbWUgcXR0aW1lID0gY3JlYXRl
UVRUaW1lKG1fdGltZVRvUmVzdG9yZSk7Ci0gICAgICAgIG1fdGltZVRvUmVzdG9yZSA9IE1lZGlh
UGxheWVyOjppbnZhbGlkVGltZSgpOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIERpc2FibGUg
ZXZlbnQgY2FsbGJhY2tzIGZyb20gc2V0Q3VycmVudFRpbWUgZm9yIHJlc3RvcmluZyB0aW1lIGlu
IGEgcmVjcmVhdGVkIHZpZGVvCi0gICAgICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxh
eUNhbGxiYWNrczpZRVNdOwotICAgICAgICBbbV9xdE1vdmllLmdldCgpIHNldEN1cnJlbnRUaW1l
OnF0dGltZV07Ci0gICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0UmF0ZTptX3BsYXllci0+cmF0
ZSgpXTsKLSAgICAgICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOk5P
XTsKLSAgICB9Ci0KLSAgICBCT09MIGNvbXBsZXRlbHlMb2FkZWQgPSAhbV9pc1N0cmVhbWluZyAm
JiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVDb21wbGV0ZSk7Ci0KLSAgICAvLyBOb3Rl
OiBRVCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgZnVsbHkgbG9hZGVkIHdpdGggUVRNb3ZpZUxvYWRT
dGF0ZUNvbXBsZXRlLgotICAgIC8vIEhvd2V2ZXIgbmV3ZXIgdmVyc2lvbnMgb2YgUVQgZG8gbm90
LCBzbyB3ZSBjaGVjayBtYXhUaW1lTG9hZGVkIGFnYWluc3QgZHVyYXRpb24uCi0gICAgaWYgKCFj
b21wbGV0ZWx5TG9hZGVkICYmICFtX2lzU3RyZWFtaW5nICYmIG1ldGFEYXRhQXZhaWxhYmxlKCkp
Ci0gICAgICAgIGNvbXBsZXRlbHlMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCkgPT0gZHVyYXRpb24o
KTsKLQotICAgIGlmIChjb21wbGV0ZWx5TG9hZGVkKSB7Ci0gICAgICAgIC8vICJMb2FkZWQiIGlz
IHJlc2VydmVkIGZvciBmdWxseSBidWZmZXJlZCBtb3ZpZXMsIG5ldmVyIHRoZSBjYXNlIHdoZW4g
c3RyZWFtaW5nCi0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsK
LSAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAg
IH0gZWxzZSBpZiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVQbGF5dGhyb3VnaE9LKSB7
Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICB9IGVsc2Ug
aWYgKGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlUGxheWFibGUpIHsKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgbWlnaHQgbm90IHdvcmsgY29ycmVjdGx5IGluIHN0cmVhbWluZyBjYXNlLCA8
cmRhcjovL3Byb2JsZW0vNTY5Mzk2Nz4KLSAgICAgICAgbV9yZWFkeVN0YXRlID0gY3VycmVudFRp
bWUoKSA8IG1heFRpbWVMb2FkZWQoKSA/IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YSA6IE1l
ZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgfSBlbHNlIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxv
YWRTdGF0ZUxvYWRlZCkgewotICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU1ldGFkYXRhOwotICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5n
OwotICAgIH0gZWxzZSBpZiAobG9hZFN0YXRlID4gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yKSB7Ci0g
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBMb2FkaW5nIG9yIGRlY29kaW5nIGZhaWxlZC4KLQotICAgICAgICBpZiAobV9wbGF5
ZXItPmluTWVkaWFEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3
cm9uZyBpbiB0aGUgbG9hZGluZyBvZiBtZWRpYSB3aXRoaW4gYSBzdGFuZGFsb25lIGZpbGUuIAot
ICAgICAgICAgICAgLy8gVGhpcyBjYW4gb2NjdXIgd2l0aCBjaGFpbmVkIHJlZm1vdmllcyBwb2lu
dGluZyB0byBzdHJlYW1lZCBtZWRpYS4KLSAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tz
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBsb2Fk
ZWQgPSBtYXhUaW1lTG9hZGVkKCk7Ci0gICAgICAgIGlmICghbG9hZGVkKQotICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotCi0gICAgICAgIGlmICgh
bV9lbmFibGVkVHJhY2tDb3VudCkKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkZvcm1hdEVycm9yOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGxvYWQvbmV0d29yayBlcnJvcnMgYW5k
IGRlY29kZSBlcnJvcnMgPHJkYXI6Ly9wcm9ibGVtLzU2MDU2OTI+Ci0gICAgICAgICAgICBpZiAo
bG9hZGVkID4gMCkKLSAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpEZWNvZGVFcnJvcjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoaXNSZWFkeUZvclZpZGVvU2V0dXAoKSAmJiAhaGFzU2V0VXBWaWRlb1JlbmRlcmluZygp
KQotICAgICAgICBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7Ci0KLSAgICBpZiAoc2Vla2luZygpKQot
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YSA/IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgOiBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmc7Ci0KLSAgICAvLyBTdHJlYW1pbmcgbW92aWVzIGRvbid0IHVzZSB0aGUgbmV0d29yayB3
aGVuIHBhdXNlZC4KLSAgICBpZiAobV9pc1N0cmVhbWluZyAmJiBtX3JlYWR5U3RhdGUgPj0gTWVk
aWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX25ldHdvcmtTdGF0ZSA+PSBNZWRpYVBsYXllcjo6
TG9hZGluZyAmJiBbbV9xdE1vdmllLmdldCgpIHJhdGVdID09IDApCi0gICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7Ci0KLSAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0g
b2xkTmV0d29ya1N0YXRlKQotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgp
OwotCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKQotICAgICAgICBtX3Bs
YXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLQotICAgIGlmIChsb2FkU3RhdGUgPj0gUVRNb3Zp
ZUxvYWRTdGF0ZUxvYWRlZCkgewotICAgICAgICBmbG9hdCBkdXIgPSBkdXJhdGlvbigpOwotICAg
ICAgICBpZiAoZHVyICE9IG1fcmVwb3J0ZWREdXJhdGlvbikgewotICAgICAgICAgICAgaWYgKG1f
cmVwb3J0ZWREdXJhdGlvbiAhPSBNZWRpYVBsYXllcjo6aW52YWxpZFRpbWUoKSkKLSAgICAgICAg
ICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgICAgICBtX3JlcG9y
dGVkRHVyYXRpb24gPSBkdXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6dXBkYXRlU3RhdGVzKCVwKSAtIGV4aXRpbmcgd2l0aCBu
ZXR3b3JrU3RhdGUgPSAlaSwgcmVhZHlTdGF0ZSA9ICVpIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50
PihtX25ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obV9yZWFkeVN0YXRlKSk7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRTdGF0ZUNoYW5nZWQoKQotewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkU3RhdGVDaGFuZ2VkKCVw
KSAtIGxvYWRTdGF0ZSA9ICVsaSIsIHRoaXMsIFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZv
cktleTpRVE1vdmllTG9hZFN0YXRlQXR0cmlidXRlXSBsb25nVmFsdWVdKTsKLQotICAgIGlmICgh
bV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAgICAgICAgdXBkYXRlU3RhdGVzKCk7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRlZFJhbmdlc0NoYW5nZWQoKQotewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkZWRSYW5nZXNDaGFuZ2Vk
KCVwKSAtIGxvYWRTdGF0ZSA9ICVsaSIsIHRoaXMsIFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0
ZUZvcktleTpRVE1vdmllTG9hZFN0YXRlQXR0cmlidXRlXSBsb25nVmFsdWVdKTsKLQotICAgIGlm
ICghbV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAgICAgICAgdXBkYXRlU3RhdGVzKCk7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJhdGVDaGFuZ2VkKCkKLXsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmF0ZUNoYW5nZWQoJXApIC0gcmF0ZSA9
ICVsaSIsIHRoaXMsIFttX3F0TW92aWUuZ2V0KCkgcmF0ZV0pOwotICAgIGlmIChtX2hhc1Vuc3Vw
cG9ydGVkVHJhY2tzKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVTdGF0ZXMoKTsKLSAg
ICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6c2l6ZUNoYW5nZWQoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpzaXplQ2hhbmdlZCglcCkiLCB0aGlzKTsKLSAgICBpZiAoIW1faGFzVW5zdXBwb3J0
ZWRUcmFja3MpCi0gICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0aW1lQ2hhbmdlZCgpCi17Ci0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRpbWVDaGFuZ2VkKCVwKSIsIHRoaXMpOwotICAgIGlm
IChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJdCBt
YXkgbm90IGJlIHBvc3NpYmxlIHRvIHNlZWsgdG8gYSBzcGVjaWZpYyB0aW1lIGluIGEgc3RyZWFt
ZWQgbW92aWUuIFdoZW4gc2Vla2luZyBpbiBhIAotICAgIC8vIHN0cmVhbSBRdWlja1RpbWUgc2V0
cyB0aGUgbW92aWUgdGltZSB0byBjbG9zZXN0IHRpbWUgcG9zc2libGUgYW5kIHBvc3RzIGEgdGlt
ZWNoYW5nZWQgCi0gICAgLy8gbm90aWZpY2F0aW9uLiBVcGRhdGUgbV9zZWVrVG8gc28gd2UgY2Fu
IGRldGVjdCB3aGVuIHRoZSBzZWVrIGNvbXBsZXRlcy4KLSAgICBpZiAobV9zZWVrVG8gIT0gLTEp
Ci0gICAgICAgIG1fc2Vla1RvID0gY3VycmVudFRpbWUoKTsKLQotICAgIG1fdGltZVRvUmVzdG9y
ZSA9IE1lZGlhUGxheWVyOjppbnZhbGlkVGltZSgpOwotICAgIHVwZGF0ZVN0YXRlcygpOwotICAg
IG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpkaWRFbmQoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpkaWRFbmQoJXApIiwgdGhpcyk7Ci0gICAgaWYgKG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKLSNpZiBEUkFX
X0ZSQU1FX1JBVEUKLSAgICBtX3RpbWVTdG9wcGVkUGxheWluZyA9IFtOU0RhdGUgdGltZUludGVy
dmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSNlbmRpZgotCi0gICAgLy8gSGFuZyBvbnRvIHRoZSBj
dXJyZW50IHRpbWUgYW5kIHVzZSBpdCBhcyBkdXJhdGlvbiBmcm9tIG5vdyBvbiBzaW5jZSBRdWlj
a1RpbWUgaXMgdGVsbGluZyB1cyB3ZQotICAgIC8vIGFyZSBhdCB0aGUgZW5kLiBEbyB0aGlzIGJl
Y2F1c2UgUXVpY2tUaW1lIHNvbWV0aW1lcyByZXBvcnRzIG9uZSB0aW1lIGZvciBkdXJhdGlvbiBh
bmQgc3RvcHMKLSAgICAvLyBwbGF5YmFjayBhdCBhbm90aGVyIHRpbWUsIHdoaWNoIGNhdXNlcyBw
cm9ibGVtcyBpbiBIVE1MTWVkaWFFbGVtZW50LiBRVEtpdCdzICdlbmRlZCcgZXZlbnQgCi0gICAg
Ly8gZmlyZXMgd2hlbiBwbGF5aW5nIGluIHJldmVyc2Ugc28gZG9uJ3QgdXBkYXRlIGR1cmF0aW9u
IHdoZW4gYXQgdGltZSB6ZXJvIQotICAgIGZsb2F0IG5vdyA9IGN1cnJlbnRUaW1lKCk7Ci0gICAg
aWYgKG5vdyA+IDApCi0gICAgICAgIG1fY2FjaGVkRHVyYXRpb24gPSBub3c7Ci0KLSAgICB1cGRh
dGVTdGF0ZXMoKTsKLSAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6bGF5ZXJIb3N0Q2hhbmdlZChQbGF0Zm9ybUxheWVyKiByb290
TGF5ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHJvb3RMYXllcik7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYpIAoteyAKLSAgICAvLyBE
b24ndCByZXNpemUgdGhlIHZpZXcgbm93IGJlY2F1c2UgW3ZpZXcgc2V0RnJhbWVdIGFsc28gcmVz
aXplcyB0aGUgbW92aWUgaXRzZWxmLCBhbmQgYmVjYXVzZQotICAgIC8vIHRoZSByZW5kZXJlciBj
YWxscyB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IHdoZW4gd2UgcmVwb3J0IGEgc2l6ZSBjaGFu
Z2UgKFFUTW92aWVTaXplRGlkQ2hhbmdlTm90aWZpY2F0aW9uKQotICAgIC8vIHdlIGNhbiBnZXQg
aW50byBhIGZlZWRiYWNrIGxvb3Agb2JzZXJ2aW5nIHRoZSBzaXplIGNoYW5nZSBhbmQgcmVzZXR0
aW5nIHRoZSBzaXplLCBhbmQgdGhpcyBjYW4gY2F1c2UKLSAgICAvLyBRdWlja1RpbWUgdG8gbWlz
cyByZXNldHRpbmcgYSBtb3ZpZSdzIHNpemUgd2hlbiB0aGUgbWVkaWEgc2l6ZSBjaGFuZ2VzIChh
cyBoYXBwZW5zIHdpdGggYW4gcnRzcCBtb3ZpZQotICAgIC8vIG9uY2UgdGhlIHJ0c3Agc2VydmVy
IHNlbmRzIHRoZSB0cmFjayBzaXplcykuIEluc3RlYWQgd2UgcmVtZW1iZXIgdGhlIHNpemUgcGFz
c2VkIHRvIHBhaW50KCkgYW5kIHJlc2l6ZQotICAgIC8vIHRoZSB2aWV3IHdoZW4gaXQgY2hhbmdl
cy4KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjMzNjA5Mj4gUkVHUkVTU0lPTjogcnRzcCBtb3Zp
ZSBkb2VzIG5vdCByZXNpemUgY29ycmVjdGx5Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OnNldFZpc2libGUoYm9vbCBiKQotewotICAgIGlmIChtX3Zpc2libGUgIT0gYikgewot
ICAgICAgICBtX3Zpc2libGUgPSBiOwotICAgICAgICBpZiAoYikKLSAgICAgICAgICAgIHNldFVw
VmlkZW9SZW5kZXJpbmcoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVhckRvd25WaWRl
b1JlbmRlcmluZygpOwotICAgIH0KLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0Ci17Ci0gICAgLy8gV2hlbiB1c2luZyBhIFFU
TW92aWVMYXllciByZXR1cm4gdHJ1ZSBhcyBzb29uIGFzIHRoZSBtb3ZpZSByZWFjaGVzIFFUTW92
aWVMb2FkU3RhdGVQbGF5YWJsZSAKLSAgICAvLyBiZWNhdXNlIGFsdGhvdWdoIHdlIGRvbid0ICpr
bm93KiB3aGVuIHRoZSBmaXJzdCBmcmFtZSBoYXMgZGVjb2RlZCwgYnkgdGhlIHRpbWUgd2UgZ2V0
IGFuZCAKLSAgICAvLyBwcm9jZXNzIHRoZSBub3RpZmljYXRpb24gYSBmcmFtZSBzaG91bGQgaGF2
ZSBwcm9wYWdhdGVkIHRoZSBWaXN1YWxDb250ZXh0IGFuZCBiZWVuIHNldCBvbgotICAgIC8vIHRo
ZSBsYXllci4KLSAgICBpZiAoY3VycmVudFJlbmRlcmluZ01vZGUoKSA9PSBNZWRpYVJlbmRlcmlu
Z01vdmllTGF5ZXIpCi0gICAgICAgIHJldHVybiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6
OkhhdmVDdXJyZW50RGF0YTsKLQotICAgIC8vIFdoZW4gdXNpbmcgdGhlIHNvZnR3YXJlIHJlbmRl
cmVyIFF1aWNrVGltZSBzaWduYWxzIHRoYXQgYSBmcmFtZSBpcyBhdmFpbGFibGUgc28gd2UgbWln
aHQgYXMgd2VsbAotICAgIC8vIHdhaXQgdW50aWwgd2Uga25vdyB0aGF0IGEgZnJhbWUgaGFzIGJl
ZW4gZHJhd24uCi0gICAgcmV0dXJuIG1fdmlkZW9GcmFtZUhhc0RyYXduOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZXBhaW50KCkKLXsKLSAgICBpZiAobV9oYXNVbnN1cHBv
cnRlZFRyYWNrcykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRFJBV19GUkFNRV9SQVRFCi0gICAg
aWYgKG1fc3RhcnRlZFBsYXlpbmcpIHsKLSAgICAgICAgbV9mcmFtZUNvdW50V2hpbGVQbGF5aW5n
Kys7Ci0gICAgICAgIC8vIHRvIGVsaW1pbmF0ZSBwcmVyb2xsIGNvc3RzIGZyb20gb3VyIGNhbGN1
bGF0aW9uLAotICAgICAgICAvLyBvdXIgZnJhbWUgcmF0ZSBjYWxjdWxhdGlvbiBleGNsdWRlcyB0
aGUgZmlyc3QgZnJhbWUgZHJhd24gYWZ0ZXIgcGxheWJhY2sgc3RhcnRzCi0gICAgICAgIGlmICgx
PT1tX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcpCi0gICAgICAgICAgICBtX3RpbWVTdGFydGVkUGxh
eWluZyA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICB9Ci0j
ZW5kaWYKLSAgICBtX3ZpZGVvRnJhbWVIYXNEcmF3biA9IHRydWU7Ci0gICAgbV9wbGF5ZXItPnJl
cGFpbnQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGFpbnRDdXJyZW50
RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIGlkIHF0VmlkZW9SZW5kZXJlciA9IG1fcXRWaWRlb1JlbmRlcmVyLmdldCgpOwot
ICAgIGlmICghcXRWaWRlb1JlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJpbmdNb2RlKCkgPT0gTWVk
aWFSZW5kZXJpbmdNb3ZpZUxheWVyKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGJlaW5nIHRvbGQgdG8g
cmVuZGVyIGludG8gYSBjb250ZXh0LCBidXQgd2UgYWxyZWFkeSBoYXZlIHRoZQotICAgICAgICAv
LyBNb3ZpZUxheWVyIGdvaW5nLiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJ3ZlIGJlZW4gY2FsbGVk
IGZyb20gPGNhbnZhcz4uCi0gICAgICAgIC8vIFNldCB1cCBhIFFUVmlkZW9SZW5kZXJlciB0byB1
c2UsIGJ1dCBvbmUgdGhhdCBkb2Vzbid0IHJlZ2lzdGVyIGZvcgotICAgICAgICAvLyB1cGRhdGUg
Y2FsbGJhY2tzLiBUaGF0IHdheSwgaXQgd29uJ3QgYm90aGVyIHVzIGFza2luZyB0byByZXBhaW50
LgotICAgICAgICBjcmVhdGVRVFZpZGVvUmVuZGVyZXIoUVRWaWRlb1JlbmRlcmVyTW9kZURlZmF1
bHQpOwotICAgICAgICBxdFZpZGVvUmVuZGVyZXIgPSBtX3F0VmlkZW9SZW5kZXJlci5nZXQoKTsK
LSAgICB9Ci0gICAgcGFpbnQoY29udGV4dCwgcik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IG1faGFzVW5zdXBw
b3J0ZWRUcmFja3MpCi0gICAgICAgIHJldHVybjsKLSAgICBOU1ZpZXcgKnZpZXcgPSBtX3F0TW92
aWVWaWV3LmdldCgpOwotICAgIGlkIHF0VmlkZW9SZW5kZXJlciA9IG1fcXRWaWRlb1JlbmRlcmVy
LmdldCgpOwotICAgIGlmICghdmlldyAmJiAhcXRWaWRlb1JlbmRlcmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6WUVTXTsK
LSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgTlNHcmFwaGljc0NvbnRleHQq
IG5ld0NvbnRleHQ7Ci0gICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yKDEuMGYsIC0xLjBmKTsKLSAg
ICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZShyLndpZHRoKCksIHIu
aGVpZ2h0KCkpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
Y29udGV4dCk7Ci0gICAgY29udGV4dC0+dHJhbnNsYXRlKHIueCgpLCByLnkoKSArIHIuaGVpZ2h0
KCkpOwotICAgIGNvbnRleHQtPnNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICBjb250ZXh0LT5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Mb3cpOwotCi0gICAgbmV3Q29u
dGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0
OmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIGZsaXBwZWQ6Tk9dOwotCi0gICAgLy8gZHJhdyB0
aGUgY3VycmVudCB2aWRlbyBmcmFtZQotICAgIGlmIChxdFZpZGVvUmVuZGVyZXIpIHsKLSAgICAg
ICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKLSAgICAgICAgW05TR3Jh
cGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Om5ld0NvbnRleHRdOwotICAgICAgICBbKGlk
PFdlYktpdFZpZGVvUmVuZGVyaW5nRGV0YWlscz4pcXRWaWRlb1JlbmRlcmVyIGRyYXdJblJlY3Q6
cGFpbnRSZWN0XTsKLSAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0
YXRlXTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9yZWN0ICE9IHIpIHsKLSAgICAgICAg
ICAgICBtX3JlY3QgPSByOwotICAgICAgICAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1l
bnQoKSkgewotICAgICAgICAgICAgICAgIC8vIHRoZSBRVE1vdmllVmlldyBuZWVkcyB0byBiZSBw
bGFjZWQgaW4gdGhlIHByb3BlciBsb2NhdGlvbiBmb3IgZG9jdW1lbnQgbW9kZQotICAgICAgICAg
ICAgICAgIFt2aWV3IHNldEZyYW1lOm1fcmVjdF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGUgUVRN
b3ZpZVZpZXcgaW4gYW55IHNwZWNpZmljIGxvY2F0aW9uIHNvIGxldCdzIGp1c3QgZ2V0IGl0IG91
dCBvZiB0aGUgd2F5Ci0gICAgICAgICAgICAgICAgLy8gd2hlcmUgaXQgd29uJ3QgaW50ZXJjZXB0
IGV2ZW50cyBvciB0cnkgdG8gYnJpbmcgdXAgdGhlIGNvbnRleHQgbWVudS4KLSAgICAgICAgICAg
ICAgICBJbnRSZWN0IGZhckF3YXlCdXRDb3JyZWN0U2l6ZShtX3JlY3QpOwotICAgICAgICAgICAg
ICAgIGZhckF3YXlCdXRDb3JyZWN0U2l6ZS5tb3ZlKC0xMDAwMDAwLCAtMTAwMDAwMCk7Ci0gICAg
ICAgICAgICAgICAgW3ZpZXcgc2V0RnJhbWU6ZmFyQXdheUJ1dENvcnJlY3RTaXplXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3BsYXllci0+aW5NZWRpYURvY3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHVzaW5nIGEgUVRNb3ZpZVZpZXcgaW4g
YSBtZWRpYSBkb2N1bWVudCwgdGhlIHZpZXcgbWF5IGdldCBsYXllci1iYWNrZWQuIEFwcEtpdCB3
b24ndCB1cGRhdGUKLSAgICAgICAgICAgIC8vIHRoZSBsYXllciBob3N0aW5nIGNvcnJlY3RseSBp
ZiB3ZSBjYWxsIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OmluQ29udGV4dDosIHNvIHVzZSBk
aXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eToKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZS4g
U2VlIDxyZGFyOi8vcHJvYmxlbS82NzAyODgyPi4KLSAgICAgICAgICAgIFt2aWV3IGRpc3BsYXlS
ZWN0SWdub3JpbmdPcGFjaXR5OnBhaW50UmVjdF07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6cGFpbnRSZWN0IGluQ29udGV4dDpu
ZXdDb250ZXh0XTsKLSAgICB9Ci0KLSNpZiBEUkFXX0ZSQU1FX1JBVEUKLSAgICAvLyBEcmF3IHRo
ZSBmcmFtZSByYXRlIG9ubHkgYWZ0ZXIgaGF2aW5nIHBsYXllZCBtb3JlIHRoYW4gMTAgZnJhbWVz
LgotICAgIGlmIChtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPiAxMCkgewotICAgICAgICBGcmFt
ZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyAmbV9wbGF5ZXItPmZyYW1lVmlldygp
LT5mcmFtZSgpIDogbnVsbHB0cjsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUg
PyBmcmFtZS0+ZG9jdW1lbnQoKSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcmVuZGVyZXIgPSBk
b2N1bWVudCA/IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkgOiBudWxscHRyOwotICAgICAgICBSZW5k
ZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiBudWxs
cHRyOwotICAgICAgICBpZiAoc3R5bGVUb1VzZSkgewotICAgICAgICAgICAgZG91YmxlIGZyYW1l
UmF0ZSA9IChtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgLSAxKSAvICggbV9zdGFydGVkUGxheWlu
ZyA/IChbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0gLSBtX3RpbWVTdGFy
dGVkUGxheWluZykgOgotICAgICAgICAgICAgICAgIChtX3RpbWVTdG9wcGVkUGxheWluZyAtIG1f
dGltZVN0YXJ0ZWRQbGF5aW5nKSApOwotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6
OmZvcm1hdCgiJTEuMmYiLCBmcmFtZVJhdGUpOwotICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVu
KHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGNvbnN0IENv
bG9yIGNvbG9yKDI1NSwgMCwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoMS4wZiwgLTEuMGYpKTsgICAgCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihjb2xvciwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihj
b2xvciwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdUZXh0KHN0eWxlVG9Vc2UtPmZvbnQoKSwgdGV4dFJ1biwgSW50UG9pbnQoMiwgLTMpKTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0g
ICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOk5PXTsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkUmVqZWN0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAg
IC8vIFFUS2l0IHdpbGwgcmV0dXJuIG5vbi12aWRlbyBNSU1FIHR5cGVzIHdoaWNoIGl0IGNsYWlt
cyB0byBzdXBwb3J0LCBidXQgd2hpY2ggd2UKLSAgICAvLyBkbyBub3Qgc3VwcG9ydCBpbiB0aGUg
PHZpZGVvPiBlbGVtZW50LiBEaXNjbGFpbSBhbGwgbm9uIHZpZGVvLyBvciBhdWRpby8gdHlwZXMu
Ci0gICAgcmV0dXJuICF0eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpICYmICF0eXBlLnN0YXJ0c1dp
dGgoImF1ZGlvLyIpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRGaWxlVHlwZXNUb0NhY2hlKE5TQXJy
YXkgKiBmaWxlVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiAmY2FjaGUpCi17Ci0gICAgaW50IGNvdW50
ID0gW2ZpbGVUeXBlcyBjb3VudF07Ci0gICAgZm9yIChpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisr
KSB7Ci0gICAgICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdS
ZWY+KFtmaWxlVHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gdXRpID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9y
VGFnKGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIGV4dCwgTlVMTCkpOwotICAgICAgICBp
ZiAoIXV0aSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IG1pbWUgPSBhZG9wdENGKFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3ModXRp
LmdldCgpLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7Ci0gICAgICAgIGlmIChzaG91bGRSZWplY3RN
SU1FVHlwZShtaW1lLmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
bWltZSkKLSAgICAgICAgICAgIGNhY2hlLmFkZChtaW1lLmdldCgpKTsKLQotICAgICAgICAvLyAt
bW92aWVGaWxlVHlwZXM6IHJldHVybnMgYm90aCBmaWxlIGV4dGVuc2lvbnMgYW5kIE9TVHlwZXMu
IFRoZSBsYXRlciBhcmUgc3Vycm91bmRlZCBieSBzaW5nbGUKLSAgICAgICAgLy8gcXVvdGVzLCBl
Zy4gJ01vb1YnLCBzbyBkb24ndCBib3RoZXIgbG9va2luZyBhdCB0aG9zZS4KLSAgICAgICAgaWYg
KENGU3RyaW5nR2V0Q2hhcmFjdGVyQXRJbmRleChleHQsIDApICE9ICdcJycpIHsKLSAgICAgICAg
ICAgIC8vIFVUSSBpcyBtaXNzaW5nIG1hbnkgbWVkaWEgcmVsYXRlZCBNSU1FIHR5cGVzIHN1cHBv
cnRlZCBieSBRVEtpdCAoc2VlIHJkYXI6Ly82NDM0MTY4KSwgYW5kIG5vdCBhbGwKLSAgICAgICAg
ICAgIC8vIHdlYiBzZXJ2ZXJzIHVzZSB0aGUgTUlNRSB0eXBlIFVUSSByZXR1cm5zIGZvciBhbiBl
eHRlbnNpb24gKHNlZSByZGFyOi8vNzg3NTM5MyksIHNvIGV2ZW4gaWYgVVRJIAotICAgICAgICAg
ICAgLy8gaGFzIGEgdHlwZSBmb3IgdGhpcyBleHRlbnNpb24gYWRkIGFueSB0eXBlcyBpbiBoYXJk
IGNvZGVkIHRhYmxlIGluIHRoZSBNSU1FIHR5cGUgcmVnc2l0cnkuCi0gICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlc0ZvckV4dGVuc2lvbiA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1lZGlh
TUlNRVR5cGVzRm9yRXh0ZW5zaW9uKGV4dCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9
IHR5cGVzRm9yRXh0ZW5zaW9uLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbmR4
ID0gMDsgbmR4IDwgY291bnQ7ICsrbmR4KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nJiB0eXBl
ID0gdHlwZXNGb3JFeHRlbnNpb25bbmR4XTsKLQotICAgICAgICAgICAgICAgIGlmIChzaG91bGRS
ZWplY3RNSU1FVHlwZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIWNhY2hlLmNvbnRhaW5zKHR5cGUpKQotICAgICAgICAgICAgICAg
ICAgICBjYWNoZS5hZGQodHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9ICAg
IAotfQotCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVDb21tb25UeXBlc0NhY2hlKCkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgY2FjaGUsICgpKTsKLSAg
ICBzdGF0aWMgYm9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBpZiAoIXR5
cGVMaXN0SW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgdHlwZUxpc3RJbml0aWFsaXplZCA9IHRydWU7
Ci0gICAgICAgIE5TQXJyYXkqIGZpbGVUeXBlcyA9IFtRVE1vdmllIG1vdmllRmlsZVR5cGVzOlFU
SW5jbHVkZUNvbW1vblR5cGVzXTsKLSAgICAgICAgYWRkRmlsZVR5cGVzVG9DYWNoZShmaWxlVHlw
ZXMsIGNhY2hlKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNhY2hlOwotfSAKLQotc3RhdGlj
IEhhc2hTZXQ8U3RyaW5nPiBtaW1lTW9kZXJuVHlwZXNDYWNoZSgpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7Ci0gICAgc3RhdGljIGJvb2wg
dHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIAotICAgIGlmICghdHlwZUxpc3RJbml0
aWFsaXplZCkgewotICAgICAgICB0eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAg
TlNBcnJheSogZmlsZVR5cGVzID0gW1FUTW92aWUgbW92aWVGaWxlVHlwZXM6KFFUTW92aWVGaWxl
VHlwZU9wdGlvbnMpd2tRVEluY2x1ZGVPbmx5TW9kZXJuTWVkaWFGaWxlVHlwZXMoKV07Ci0gICAg
ICAgIGFkZEZpbGVUeXBlc1RvQ2FjaGUoZmlsZVR5cGVzLCBjYWNoZSk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBjYWNoZTsKLX0KLQotc3RhdGljIHZvaWQgY29uY2F0ZW5hdGVIYXNoU2V0cyhI
YXNoU2V0PFN0cmluZz4mIGRlc3RpbmF0aW9uLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHNvdXJj
ZSkKLXsKLSAgICBIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc291cmNlLmJl
Z2luKCk7Ci0gICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzb3VyY2Uu
ZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZGVzdGluYXRpb24u
YWRkKCppdCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmdldFN1cHBvcnRl
ZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkVHlwZXMpCi17Ci0gICAgY29uY2F0ZW5h
dGVIYXNoU2V0cyhzdXBwb3J0ZWRUeXBlcywgbWltZU1vZGVyblR5cGVzQ2FjaGUoKSk7Ci0KLSAg
ICAvLyBOb3RlOiB0aGlzIG1ldGhvZCBzdGFydHMgUVRLaXRTZXJ2ZXIgaWYgaXQgaXNuJ3QgYWxy
ZWFkeSBydW5uaW5nIHdoZW4gaW4gNjQtYml0IGJlY2F1c2UgaXQgaGFzIHRvIHJldHVybiB0aGUg
bGlzdCAKLSAgICAvLyBvZiBldmVyeSBNSU1FIHR5cGUgc3VwcG9ydGVkIGJ5IFFUS2l0LgotICAg
IGNvbmNhdGVuYXRlSGFzaFNldHMoc3VwcG9ydGVkVHlwZXMsIG1pbWVDb21tb25UeXBlc0NhY2hl
KCkpOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFy
YW1ldGVycykKLXsKLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIC8vIFFUS2l0IGRv
ZXMgbm90IHN1cHBvcnQgYW55IGVuY3J5dHBlZCBtZWRpYSwgc28gcmV0dXJuIElzTm90U3VwcG9y
dGVkIGlmIHRoZSBrZXlTeXN0ZW0gaXMgbm9uLU5VTEw6Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmtl
eVN5c3RlbS5pc051bGwoKSAmJiAhcGFyYW1ldGVycy5rZXlTeXN0ZW0uaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKQotICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UpCi0g
ICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Ci0jZW5kaWYKLQotICAg
IC8vIE9ubHkgcmV0dXJuICJJc1N1cHBvcnRlZCIgaWYgdGhlcmUgaXMgbm8gY29kZWNzIHBhcmFt
ZXRlciBmb3Igbm93IGFzIHRoZXJlIGlzIG5vIHdheSB0byBhc2sgUVQgaWYgaXQgc3VwcG9ydHMg
YW4KLSAgICAvLyBleHRlbmRlZCBNSU1FIHR5cGUgeWV0LgotCi0gICAgLy8gRHVlIHRvIDxyZGFy
Oi8vcHJvYmxlbS8xMDc3NzA1OT4sIGF2b2lkIGNhbGxpbmcgdGhlIG1pbWUgdHlwZXMgY2FjaGUg
ZnVuY3Rpb25zIGlmIGF0Ci0gICAgLy8gYWxsIHBvc3NpYmxlOgotICAgIGlmIChzaG91bGRSZWpl
Y3RNSU1FVHlwZShwYXJhbWV0ZXJzLnR5cGUpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6
OklzTm90U3VwcG9ydGVkOwotCi0gICAgLy8gV2UgY2hlY2sgdGhlICJtb2Rlcm4iIHR5cGUgY2Fj
aGUgZmlyc3QsIGFzIGl0IGRvZXNuJ3QgcmVxdWlyZSBRVEtpdFNlcnZlciB0byBzdGFydC4KLSAg
ICBpZiAobWltZU1vZGVyblR5cGVzQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpIHx8
IG1pbWVDb21tb25UeXBlc0NhY2hlKCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlKSkKLSAgICAg
ICAgcmV0dXJuIHBhcmFtZXRlcnMuY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlC
ZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLQotICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmlzQXZhaWxhYmxlKCkKLXsKLSAgICAvLyBPbiAxMC41IGFuZCBoaWdoZXIsIFF1aWNrVGlt
ZSB3aWxsIGFsd2F5cyBiZSBuZXcgZW5vdWdoIGZvciA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBv
cnQsIHNvIHdlIGp1c3QgY2hlY2sgdGhhdCB0aGUgZnJhbWV3b3JrIGNhbiBiZSBsb2FkZWQuCi0g
ICAgcmV0dXJuIFFUS2l0TGlicmFyeSgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpnZXRTaXRlc0luTWVkaWFDYWNoZShWZWN0b3I8U3RyaW5nPiYgc2l0ZXMpIAotewotICAg
IE5TQXJyYXkgKm1lZGlhU2l0ZXMgPSB3a1FUR2V0U2l0ZXNJbk1lZGlhRG93bmxvYWRDYWNoZSgp
OwotICAgIGZvciAoTlNTdHJpbmcgKnNpdGUgaW4gbWVkaWFTaXRlcykKLSAgICAgICAgc2l0ZXMu
YXBwZW5kKHNpdGUpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjbGVhck1l
ZGlhQ2FjaGUoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpj
bGVhck1lZGlhQ2FjaGUoKSIpOwotICAgIHdrUVRDbGVhck1lZGlhRG93bmxvYWRDYWNoZSgpOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjbGVhck1lZGlhQ2FjaGVGb3JTaXRl
KGNvbnN0IFN0cmluZyYgc2l0ZSkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6Y2xlYXJNZWRpYUNhY2hlRm9yU2l0ZSgpIik7Ci0gICAgd2tRVENsZWFyTWVkaWFE
b3dubG9hZENhY2hlRm9yU2l0ZShzaXRlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKCVwKSIsIHRoaXMp
OwotCi0gICAgaWYgKCFtX3F0TW92aWUpIHsKLSAgICAgICAgbV9lbmFibGVkVHJhY2tDb3VudCA9
IDA7Ci0gICAgICAgIG1fdG90YWxUcmFja0NvdW50ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+KiBhbGxvd2VkVHJhY2tUeXBlcyA9
IDA7Ci0gICAgaWYgKCFhbGxvd2VkVHJhY2tUeXBlcykgewotICAgICAgICBhbGxvd2VkVHJhY2tU
eXBlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz47Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5h
ZGQoUVRNZWRpYVR5cGVWaWRlbyk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoUVRN
ZWRpYVR5cGVTb3VuZCk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoUVRNZWRpYVR5
cGVUZXh0KTsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZChRVE1lZGlhVHlwZUJhc2Up
OwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFFUTWVkaWFUeXBlTVBFRyk7Ci0gICAg
ICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoImNsY3AiKTsgLy8gQ2xvc2VkIGNhcHRpb24KLSAg
ICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZCgic2J0bCIpOyAvLyBTdWJ0aXRsZQotICAgICAg
ICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKCJvZHNtIik7IC8vIE1QRUctNCBvYmplY3QgZGVzY3Jp
cHRvciBzdHJlYW0KLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFkZCgic2RzbSIpOyAvLyBN
UEVHLTQgc2NlbmUgZGVzY3JpcHRpb24gc3RyZWFtCi0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVz
LT5hZGQoInRtY2QiKTsgLy8gdGltZWNvZGUKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMtPmFk
ZCgidGM2NCIpOyAvLyB0aW1jb2RlLTY0Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQo
InRtZXQiKTsgLy8gdGltZWQgbWV0YWRhdGEKLSAgICB9Ci0gICAgCi0gICAgTlNBcnJheSAqdHJh
Y2tzID0gW21fcXRNb3ZpZS5nZXQoKSB0cmFja3NdOwotICAgIAotICAgIG1fdG90YWxUcmFja0Nv
dW50ID0gW3RyYWNrcyBjb3VudF07Ci0gICAgbV9lbmFibGVkVHJhY2tDb3VudCA9IG1fdG90YWxU
cmFja0NvdW50OwotICAgIGZvciAodW5zaWduZWQgdHJhY2tJbmRleCA9IDA7IHRyYWNrSW5kZXgg
PCBtX3RvdGFsVHJhY2tDb3VudDsgdHJhY2tJbmRleCsrKSB7Ci0gICAgICAgIC8vIEdyYWIgdGhl
IHRyYWNrIGF0IHRoZSBjdXJyZW50IGluZGV4LiBJZiB0aGVyZSBpc24ndCBvbmUgdGhlcmUsIHRo
ZW4KLSAgICAgICAgLy8gd2UgY2FuIG1vdmUgb250byB0aGUgbmV4dCBvbmUuCi0gICAgICAgIFFU
VHJhY2sgKnRyYWNrID0gW3RyYWNrcyBvYmplY3RBdEluZGV4OnRyYWNrSW5kZXhdOwotICAgICAg
ICBpZiAoIXRyYWNrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGRpc2FibGVkIGFscmVhZHksIHdlIHNob3Vs
ZCBtb3ZlIGFsb25nLgotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWRpc2FibGUgaXQu
Ci0gICAgICAgIGlmICghW3RyYWNrIGlzRW5hYmxlZF0pIHsKLSAgICAgICAgICAgIC0tbV9lbmFi
bGVkVHJhY2tDb3VudDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAvLyBHZXQgdGhlIHRyYWNrJ3MgbWVkaWEgdHlwZS4KLSAgICAgICAgTlNTdHJp
bmcgKm1lZGlhVHlwZSA9IFt0cmFjayBhdHRyaWJ1dGVGb3JLZXk6UVRUcmFja01lZGlhVHlwZUF0
dHJpYnV0ZV07Ci0gICAgICAgIGlmICghbWVkaWFUeXBlKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgLy8gVGVzdCB3aGV0aGVyIHRoZSBtZWRpYSB0eXBlIGlzIGluIG91ciB3aGl0
ZSBsaXN0LgotICAgICAgICBpZiAoIWFsbG93ZWRUcmFja1R5cGVzLT5jb250YWlucyhtZWRpYVR5
cGUpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIHRyYWNrIHR5cGUgaXMgbm90IGFsbG93ZWQs
IHRoZW4gd2UgbmVlZCB0byBkaXNhYmxlIGl0LgotICAgICAgICAgICAgW3RyYWNrIHNldEVuYWJs
ZWQ6Tk9dOwotICAgICAgICAgICAgLS1tX2VuYWJsZWRUcmFja0NvdW50OwotICAgICAgICAgICAg
bV9oYXNVbnN1cHBvcnRlZFRyYWNrcyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBE
aXNhYmxlIGNoYXB0ZXIgdHJhY2tzLiBUaGVzZSBhcmUgbW9zdCBsaWtlbHkgdG8gbGVhZCB0byB0
cm91YmxlLCBhcwotICAgICAgICAvLyB0aGV5IHdpbGwgYmUgY29tcG9zaXRlZCB1bmRlciB0aGUg
dmlkZW8gdHJhY2tzLCBmb3JjaW5nIFFUIHRvIGRvIGV4dHJhCi0gICAgICAgIC8vIHdvcmsuCi0g
ICAgICAgIFFUVHJhY2sgKmNoYXB0ZXJUcmFjayA9IFt0cmFjayBwZXJmb3JtU2VsZWN0b3I6QHNl
bGVjdG9yKGNoYXB0ZXJsaXN0KV07Ci0gICAgICAgIGlmICghY2hhcHRlclRyYWNrKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAvLyBUcnkgdG8gZ3JhYiB0aGUgbWVk
aWEgZm9yIHRoZSB0cmFjay4KLSAgICAgICAgUVRNZWRpYSAqY2hhcHRlck1lZGlhID0gW2NoYXB0
ZXJUcmFjayBtZWRpYV07Ci0gICAgICAgIGlmICghY2hhcHRlck1lZGlhKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIAotICAgICAgICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZvciB0
aGlzIHRyYWNrLgotICAgICAgICBpZCBjaGFwdGVyTWVkaWFUeXBlID0gW2NoYXB0ZXJNZWRpYSBh
dHRyaWJ1dGVGb3JLZXk6UVRNZWRpYVR5cGVBdHRyaWJ1dGVdOwotICAgICAgICBpZiAoIWNoYXB0
ZXJNZWRpYVR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8v
IENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYSB2aWRlbyB0cmFjay4gV2UgZG9uJ3QgY2Fy
ZSBhYm91dAotICAgICAgICAvLyBvdGhlciBub24tdmlkZW8gdHJhY2tzLgotICAgICAgICBpZiAo
IVtjaGFwdGVyTWVkaWFUeXBlIGlzRXF1YWw6UVRNZWRpYVR5cGVWaWRlb10pCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJh
Y2sgaXMgYWxyZWFkeSBkaXNhYmxlZC4gSWYgaXQgaXMsIHdlCi0gICAgICAgIC8vIHNob3VsZCBt
b3ZlIGFsb25nLgotICAgICAgICBpZiAoIVtjaGFwdGVyVHJhY2sgaXNFbmFibGVkXSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgLy8gRGlzYWJsZSB0aGUgZXZpbCwg
ZXZpbCB0cmFjay4KLSAgICAgICAgW2NoYXB0ZXJUcmFjayBzZXRFbmFibGVkOk5PXTsKLSAgICAg
ICAgLS1tX2VuYWJsZWRUcmFja0NvdW50OwotICAgICAgICBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tz
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNhd1Vu
c3VwcG9ydGVkVHJhY2tzKCkKLXsKLSAgICBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzID0gdHJ1ZTsK
LSAgICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJTYXdVbnN1cHBv
cnRlZFRyYWNrcyhtX3BsYXllcik7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBpc1Jl
YWR5Rm9yVmlkZW9TZXR1cCgpICYmIGdldFFUTW92aWVMYXllckNsYXNzKCkgIT0gTmlsOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRl
Q2hhbmdlZCgpCi17Ci0gICAgLy8gU2V0IHVwIG9yIGNoYW5nZSB0aGUgcmVuZGVyaW5nIHBhdGgg
aWYgbmVjZXNzYXJ5LgotICAgIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKLX0KLQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdAotewot
ICAgIGlmICghbV9xdE1vdmllKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IHJlc29sdmVkT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShV
Ukwod2tRVE1vdmllUmVzb2x2ZWRVUkwobV9xdE1vdmllLmdldCgpKSkpOwotICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gcmVxdWVzdGVkT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZy
b21TdHJpbmcobV9tb3ZpZVVSTCk7Ci0gICAgcmV0dXJuIHJlc29sdmVkT3JpZ2luLT5pc1NhbWVT
Y2hlbWVIb3N0UG9ydChyZXF1ZXN0ZWRPcmlnaW4uZ2V0KCkpOwotfQotCi1NZWRpYVBsYXllcjo6
TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bW92aWVMb2FkVHlwZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3F0TW92aWUpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6
VW5rbm93bjsKLQotICAgIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllVHlwZSA9IChN
ZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSl3a1FUTW92aWVHZXRUeXBlKG1fcXRNb3ZpZS5nZXQo
KSk7Ci0KLSAgICAvLyBDYW4ndCBpbmNsdWRlIFdlYktpdFN5c3RlbUludGVyZmFjZSBmcm9tIFdl
YkNvcmUgc28gd2UgY2FuJ3QgZ2V0IHRoZSBlbnVtIHJldHVybmVkCi0gICAgLy8gYnkgd2tRVE1v
dmllR2V0VHlwZSwgYnV0IGF0IGxlYXN0IHZlcmlmeSB0aGF0IHRoZSB2YWx1ZSBpcyBpbiB0aGUg
dmFsaWQgcmFuZ2UuCi0gICAgQVNTRVJUKG1vdmllVHlwZSA+PSBNZWRpYVBsYXllcjo6VW5rbm93
biAmJiBtb3ZpZVR5cGUgPD0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW0pOwotCi0gICAgcmV0dXJu
IG1vdmllVHlwZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0UHJlbG9h
ZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQotewotICAgIG1fcHJlbG9hZCA9IHByZWxv
YWQ7Ci0gICAgaWYgKG1fcHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6Tm9uZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFtX3F0TW92aWUpCi0gICAgICAgIHJlc3VtZUxvYWQoKTsKLSAgICBl
bHNlIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG8pCi0gICAgICAgIFttX3F0TW92
aWUuZ2V0KCkgc2V0QXR0cmlidXRlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5
OkAiUVRNb3ZpZUxpbWl0UmVhZEFoZWFkQXR0cmlidXRlIl07Ci19Ci0KLWZsb2F0IE1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0OjptZWRpYVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQgdGltZVZhbHVlKSBj
b25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHRp
bWVWYWx1ZTsKLQotICAgIFFUVGltZSBxdHRpbWUgPSBjcmVhdGVRVFRpbWUodGltZVZhbHVlKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHF0dGltZS50aW1lVmFsdWUpIC8gcXR0aW1l
LnRpbWVTY2FsZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0UHJpdmF0
ZUJyb3dzaW5nTW9kZShib29sIHByaXZhdGVCcm93c2luZykKLXsKLSAgICBtX3ByaXZhdGVCcm93
c2luZyA9IHByaXZhdGVCcm93c2luZzsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0QXR0cmlidXRlOltOU051bWJlciBudW1iZXJX
aXRoQm9vbDohcHJpdmF0ZUJyb3dzaW5nXSBmb3JLZXk6QCJRVE1vdmllQWxsb3dQZXJzaXN0ZW50
Q2FjaGVBdHRyaWJ1dGUiXTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1AaW1wbGVt
ZW50YXRpb24gV2ViQ29yZU1vdmllT2JzZXJ2ZXIKLQotLSAoaWQpaW5pdFdpdGhDYWxsYmFjazoo
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQqKWNhbGxiYWNrCi17Ci0gICAgbV9jYWxsYmFjayA9IGNh
bGxiYWNrOwotICAgIHJldHVybiBbc3VwZXIgaW5pdF07Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVj
dAotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJn
ZXQ6c2VsZl07Ci0gICAgbV9jYWxsYmFjayA9IDA7Ci19Ci0KLS0oTlNNZW51KiltZW51Rm9yRXZl
bnREZWxlZ2F0ZTooTlNFdmVudCopdGhlRXZlbnQKLXsKLSAgICAvLyBHZXQgdGhlIGNvbnRleHR1
YWwgbWVudSBmcm9tIHRoZSBRVE1vdmllVmlldydzIHN1cGVydmlldywgdGhlIGZyYW1lIHZpZXcK
LSAgICByZXR1cm4gW1ttX3ZpZXcgc3VwZXJ2aWV3XSBtZW51Rm9yRXZlbnQ6dGhlRXZlbnRdOwot
fQotCi0tKHZvaWQpc2V0VmlldzooTlNWaWV3Kil2aWV3Ci17Ci0gICAgbV92aWV3ID0gdmlldzsK
LX0KLQotLSh2b2lkKXJlcGFpbnQKLXsKLSAgICBpZiAobV9kZWxheUNhbGxiYWNrcykKLSAgICAg
ICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTow
Ll07Ci0gICAgZWxzZSBpZiAobV9jYWxsYmFjaykKLSAgICAgICAgbV9jYWxsYmFjay0+cmVwYWlu
dCgpOwotfQotCi0tICh2b2lkKWxvYWRTdGF0ZUNoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopdW51
c2VkTm90aWZpY2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7
Ci0gICAgaWYgKG1fZGVsYXlDYWxsYmFja3MpCi0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
cjpfY21kIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07Ci0gICAgZWxzZQotICAgICAgICBt
X2NhbGxiYWNrLT5sb2FkU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLS0gKHZvaWQpbG9hZGVkUmFuZ2Vz
Q2hhbmdlZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KLXsKLSAgICBVTlVT
RURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKLSAgICBpZiAobV9kZWxheUNhbGxiYWNrcykK
LSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpuaWwgYWZ0ZXJE
ZWxheTowXTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2FsbGJhY2stPmxvYWRlZFJhbmdlc0NoYW5n
ZWQoKTsKLX0KLQotLSAodm9pZClyYXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWRO
b3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKLSAg
ICBpZiAobV9kZWxheUNhbGxiYWNrcykKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9j
bWQgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowXTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2Fs
bGJhY2stPnJhdGVDaGFuZ2VkKCk7Ci19Ci0KLS0gKHZvaWQpc2l6ZUNoYW5nZWQ6KE5TTm90aWZp
Y2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNlZE5v
dGlmaWNhdGlvbik7Ci0gICAgaWYgKG1fZGVsYXlDYWxsYmFja3MpCi0gICAgICAgIFtzZWxmIHBl
cmZvcm1TZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07Ci0gICAgZWxz
ZQotICAgICAgICBtX2NhbGxiYWNrLT5zaXplQ2hhbmdlZCgpOwotfQotCi0tICh2b2lkKXRpbWVD
aGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgotewotICAgIFVOVVNF
RF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotICAgIGlmIChtX2RlbGF5Q2FsbGJhY2tzKQot
ICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6X2NtZCB3aXRoT2JqZWN0Om5pbCBhZnRlckRl
bGF5OjBdOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsYmFjay0+dGltZUNoYW5nZWQoKTsKLX0K
LQotLSAodm9pZClkaWRFbmQ6KE5TTm90aWZpY2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9uCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7Ci0gICAgaWYgKG1fZGVsYXlD
YWxsYmFja3MpCi0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6
bmlsIGFmdGVyRGVsYXk6MF07Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxiYWNrLT5kaWRFbmQo
KTsKLX0KLQotLSAodm9pZCluZXdJbWFnZUF2YWlsYWJsZTooTlNOb3RpZmljYXRpb24gKil1bnVz
ZWROb3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsK
LSAgICBbc2VsZiByZXBhaW50XTsKLX0KLQotLSAodm9pZClsYXllckhvc3RDaGFuZ2VkOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIENBTGF5ZXIqIHJvb3RMYXllciA9IHN0
YXRpY19jYXN0PENBTGF5ZXIqPihbbm90aWZpY2F0aW9uIG9iamVjdF0pOwotICAgIG1fY2FsbGJh
Y2stPmxheWVySG9zdENoYW5nZWQocm9vdExheWVyKTsKLX0KLQotLSAodm9pZClzZXREZWxheUNh
bGxiYWNrczooQk9PTClzaG91bGREZWxheQotewotICAgIG1fZGVsYXlDYWxsYmFja3MgPSBzaG91
bGREZWxheTsKLX0KLQotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1t
CShyZXZpc2lvbiAxNjU0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBA
QAogI2ltcG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZGb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+Ci0jaW1wb3J0IDxRVEtp
dC9RVEtpdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9EaXNwbGF5U2xlZXBEaXNhYmxlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRM
aW5raW5nLmg+CkBAIC00MSwxMyArNDAsNiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotU09GVF9MSU5LX0ZSQU1FV09SSyhRVEtpdCkKLVNPRlRfTElOS19DTEFTUyhRVEtpdCwgUVRN
b3ZpZUxheWVyKQotCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZVJhdGVEaWRDaGFu
Z2VOb3RpZmljYXRpb24sIE5TU3RyaW5nICopCi0KLSNkZWZpbmUgUVRNb3ZpZVJhdGVEaWRDaGFu
Z2VOb3RpZmljYXRpb24gZ2V0UVRNb3ZpZVJhdGVEaWRDaGFuZ2VOb3RpZmljYXRpb24oKQotCiBT
T0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5k
YXRpb24sIEFWUGxheWVyTGF5ZXIpCiAKQEAgLTEyNywxOCArMTE5LDcgQEAgLSAodm9pZClzZXRN
ZWRpYUVsZW1lbnQ6KEhUTUxNZWRpYUVsZW1lbgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
W3NlbGYgaXNXaW5kb3dMb2FkZWRdKSB7Ci0gICAgICAgIGlmIChfbWVkaWFFbGVtZW50LT5wbGF0
Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkgewotICAgICAg
ICAgICAgUVRNb3ZpZSAqbW92aWUgPSBfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVk
aWEucXRNb3ZpZTsKLSAgICAgICAgICAgIFFUTW92aWVMYXllciAqbGF5ZXIgPSBbW2dldFFUTW92
aWVMYXllckNsYXNzKCkgYWxsb2NdIGluaXRdOwotICAgICAgICAgICAgW2xheWVyIHNldE1vdmll
Om1vdmllXTsKLSAgICAgICAgICAgIFtzZWxmIHNldHVwVmlkZW9PdmVybGF5OmxheWVyXTsKLQot
ICAgICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjpzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdG9yOkBzZWxlY3RvcihyYXRlQ2hhbmdlZDopCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlFUTW92aWVSYXRl
RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om1vdmllXTsKLQotICAgICAgICB9IGVsc2UgaWYg
KF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBsYXRmb3JtTWVkaWE6OkFW
Rm91bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgeworICAgICAgICBpZiAoX21lZGlhRWxlbWVudC0+
cGxhdGZvcm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQ
bGF5ZXJUeXBlKSB7CiAgICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0gX21lZGlhRWxlbWVu
dC0+cGxhdGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOwogICAgICAgICAgICAgQVZQ
bGF5ZXJMYXllciAqbGF5ZXIgPSBbW2dldEFWUGxheWVyTGF5ZXJDbGFzcygpIGFsbG9jXSBpbml0
XTsKICAgICAgICAgICAgIFtzZWxmIHNldHVwVmlkZW9PdmVybGF5OmxheWVyXTsKQEAgLTM1Nywx
NSArMzM4LDcgQEAgLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW4KIAogLSAo
dm9pZCl1cGRhdGVQb3dlckFzc2VydGlvbnMKIHsKLSAgICBmbG9hdCByYXRlID0gMDsKLSAgICBp
ZiAoX21lZGlhRWxlbWVudCAmJiBfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9
PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkKLSAgICAgICAgcmF0ZSA9IFtfbWVkaWFFbGVt
ZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3ZpZSByYXRlXTsKLSAgICAKLSAgICBpZiAo
cmF0ZSAmJiAhX2lzRW5kaW5nRnVsbHNjcmVlbikgewotICAgICAgICBpZiAoIV9kaXNwbGF5U2xl
ZXBEaXNhYmxlcikKLSAgICAgICAgICAgIF9kaXNwbGF5U2xlZXBEaXNhYmxlciA9IERpc3BsYXlT
bGVlcERpc2FibGVyOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJDb3JlIC0gRnVsbHNjcmVlbiB2aWRl
byIpOwotICAgIH0gZWxzZQotICAgICAgICBfZGlzcGxheVNsZWVwRGlzYWJsZXIgPSBudWxscHRy
OworICAgIF9kaXNwbGF5U2xlZXBEaXNhYmxlciA9IG51bGxwdHI7CiB9CiAKIC8vIE1BUks6IC0K
</data>
<flag name="review"
          id="250768"
          type_id="1"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>