<?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>17833</bug_id>
          
          <creation_ts>2008-03-13 13:08:22 -0700</creation_ts>
          <short_desc>Don&apos;t force source file types, imply the type from the extension.  Rename a few files with incorrect extensions.</short_desc>
          <delta_ts>2008-03-15 10:37:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Mentovai">mark</reporter>
          <assigned_to name="Mark Mentovai">mark</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>73622</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Mentovai">mark</who>
    <bug_when>2008-03-13 13:08:22 -0700</bug_when>
    <thetext>Following up from bug 17809:

In WebCore.xcodeproj, there are a few instances of &quot;explicitFileType&quot; for source files, which need not be.  Most of these can be changed to &quot;lastKnownFileType&quot; with the type being implied from the extension, equivalent to setting &quot;File Type:&quot; to &quot;Default for File&quot; in Xcode&apos;s Get [File] Info window&apos;s General tab.

There are three files in WebCore for which this change cannot be made, because the file&apos;s extension indicates a file type other than the source contained in the file:

bridge/jni/jni_jsobject.cpp
loader/mac/LoaderNSURLExtras.m
platform/mac/SharedTimerMac.cpp

Each of these files actually contains Objective-C++ source, and deserves an .mm extension.  It&apos;s obvious that the latter two files are already Mac-only files and that there won&apos;t be any problems renaming them to .mm.  jni_jsobject.cpp contains heavily Mac-specific source, unguarded, and therefore it, too, is safe to rename as .mm.  None of these files are even mentioned in WebCore.vcproj/WebCore.vcproj.

Until yesterday, r30980, loader/FrameLoader.cpp also used Objective-C, but the file itself was a cross-platform file and would have been unsuitable for renaming.  As of r30980, the Objective-C call has been removed from that file, which no longer needs to be treated as Objective-C++ on the Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73624</commentid>
    <comment_count>1</comment_count>
      <attachid>19741</attachid>
    <who name="Mark Mentovai">mark</who>
    <bug_when>2008-03-13 13:11:58 -0700</bug_when>
    <thetext>Created attachment 19741
Use lastKnownFileType instead of explicitFileType; rename files to have the correct extension

Note for checkin: this patch should only be used to patch the ChangeLog and project file.  To preserve svn history, the file adds/removes should be performed with &quot;svn move&quot;, as there are no changes to the file contents, only to their names:

svn move bridge/jni/jni_jsobject.cpp bridge/jni/jni_jsobject.mm
svn move loader/mac/LoaderNSURLExtras.m loader/mac/LoaderNSURLExtras.mm
svn move platform/mac/SharedTimerMac.cpp platform/mac/SharedTimerMac.mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73826</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-15 10:31:31 -0700</bug_when>
    <thetext>We&apos;ve been doing this periodically. I&apos;m sure this won&apos;t be the last time!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73827</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-15 10:37:37 -0700</bug_when>
    <thetext>It was a little harder than it should have been to land this because there were tab characters in the ChangeLog.

Committed revision 31076.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19741</attachid>
            <date>2008-03-13 13:11:58 -0700</date>
            <delta_ts>2008-03-15 10:31:01 -0700</delta_ts>
            <desc>Use lastKnownFileType instead of explicitFileType; rename files to have the correct extension</desc>
            <filename>webkit-17833.1.patch</filename>
            <type>text/plain</type>
            <size>91419</size>
            <attacher name="Mark Mentovai">mark</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMxMDM1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDgtMDMt
MTMgIE1hcmsgTWVudG92YWkgIDxtYXJrQG1veGllbmV0LmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajogUmVtb3ZlIHVubmVjZXNzYXJ5CisJICB1c2VzIG9mIGV4cGxpY2l0RmlsZVR5
cGUsIHByZWZlcnJpbmcgbGFzdEtub3duRmlsZVR5cGUgKCJGaWxlIFR5cGU6CisJICBEZWZhdWx0
IGZvciBGaWxlIiBpbiBYY29kZSdzIEZpbGUgSW5mbydzIEdlbmVyYWwgdGFiKS4gIEZpbGVzIGJl
bG93CisJICB0aGF0IHJlbGllZCBvbiBhbiBleHBsaWNpdCBmaWxlIHR5cGUgc2V0dGluZyBvdGhl
ciB0aGFuIHdoYXQgd291bGQKKwkgIGJlIGltcGxpZWQgYnkgdGhlaXIgZXh0ZW5zaW9ucyBoYXZl
IGJlZW4gcmVuYW1lZCB0byBoYXZlIGNvcnJlY3QKKwkgIGV4dGVuc2lvbnMuCisgICAgICAgICog
YnJpZGdlL2puaS9qbmlfanNvYmplY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9q
bmkvam5pX2pzb2JqZWN0Lm1tOiBDb3BpZWQgZnJvbSBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5j
cHAuCisgICAgICAgICogbG9hZGVyL21hYy9Mb2FkZXJOU1VSTEV4dHJhcy5tOiBSZW1vdmVkLgor
ICAgICAgICAqIGxvYWRlci9tYWMvTG9hZGVyTlNVUkxFeHRyYXMubW06IENvcGllZCBmcm9tIGxv
YWRlci9tYWMvTG9hZGVyTlNVUkxFeHRyYXMubS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2hh
cmVkVGltZXJNYWMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TaGFyZWRU
aW1lck1hYy5tbTogQ29waWVkIGZyb20gcGxhdGZvcm0vbWFjL1NoYXJlZFRpbWVyTWFjLmNwcC4K
KwogMjAwOC0wMy0xMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAzMTAzMCkKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBACiAJCTFBNTY5RDAwMEQ3RTJCODIwMDdD
Mzk4MyAvKiBqbmlfY2xhc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNTY5Q0QwMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuaCAqLzsgfTsK
IAkJMUE1NjlEMDEwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEMTBEN0UyQjgyMDA3
QzM5ODMgLyogam5pX2luc3RhbmNlLmNwcCAqLzsgfTsKIAkJMUE1NjlEMDIwRDdFMkI4MjAwN0Mz
OTgzIC8qIGpuaV9pbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE1NjlDRDIwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5oICov
OyB9OwotCQkxQTU2OUQwMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0QzMEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3QuY3BwICovOyB9OworCQkxQTU2OUQwMzBEN0UyQjgy
MDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVj
dC5tbSAqLzsgfTsKIAkJMUE1NjlEMDQwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRDQw
RDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBNTY5RDA1MEQ3RTJCODIwMDdDMzk4MyAvKiBq
bmlfb2JqYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNTY5Q0Q1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAqLzsgfTsKIAkJMUE1NjlE
MDYwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0Q2MEQ3RTJCODIwMDdDMzk4MyAvKiBq
bmlfcnVudGltZS5jcHAgKi87IH07CkBAIC01MjcsNyArNTI3LDcgQEAKIAkJNjU2NTgyMDAwOUQx
NTA4RDAwMEU2MUQ3IC8qIFNWR05hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFFOTA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHTmFtZXMuaCAq
LzsgfTsKIAkJNjU2NTgyMDIwOUQxNTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUVCMDlEMTUwOEQw
MDBFNjFENyAvKiBYTGlua05hbWVzLmggKi87IH07CiAJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0
RCAvKiBMb2FkZXJOU1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU2RDM3MUEwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0
cmFzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
NjU2RDM3MzMwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTZEMzcxQjBBREJBNURFMDBB
NDU1NEQgLyogTG9hZGVyTlNVUkxFeHRyYXMubSAqLzsgfTsKKwkJNjU2RDM3MzMwQURCQTVERTAw
QTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2RDM3MUIwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5T
VVJMRXh0cmFzLm1tICovOyB9OwogCQk2NTZEMzczNjBBREJBNURFMDBBNDU1NEQgLyogRG9jdW1l
bnRMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1NkQzNzFFMEFEQkE1REUwMEE0NTU0RCAvKiBEb2N1bWVudExvYWRlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NkQzNzNBMEFEQkE1REUw
MEE0NTU0RCAvKiBGb3JtU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NkQzNzIyMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3RhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTZEMzczQjBB
REJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzIzMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3Rh
dGUuY3BwICovOyB9OwpAQCAtMTU2NSw3ICsxNTY1LDcgQEAKIAkJOTMzMDlFMjAwOTlFNjQ5MjAw
NTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMzMDlERDEwOTlFNjQ5MTAwNTZFNTgxIC8qIFZpc2libGVQb3Np
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMzA5RTIzMDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1h
bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMz
MDlERDQwOTlFNjQ5MTAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5j
cHAgKi87IH07CiAJCTkzMzA5RTI0MDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1
bW15U3BhbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5REQ1MDk5RTY0OTEwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3Bh
bkNvbW1hbmQuaCAqLzsgfTsKLQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRp
bWVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMzA5RTlGMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5jcHAgKi87IH07CisJ
CTkzMzA5RUEyMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RTlGMDk5RUI3OEMwMDU2
RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5tbSAqLzsgfTsKIAkJOTMzMDlFQTMwOTlFQjc4QzAwNTZF
NTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzMwOUVBMDA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCAqLzsg
fTsKIAkJOTMzMDlFQTQwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RUExMDk5RUI3OEMwMDU2RTU4
MSAvKiBUaW1lci5jcHAgKi87IH07CiAJCTkzMzU0QTNDMEIyNEY4QzkwMDNGNkRFQSAvKiBVSUV2
ZW50V2l0aEtleVN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzU0QTNCMEIyNEY4QzkwMDNGNkRFQSAvKiBVSUV2ZW50V2l0aEtleVN0YXRl
LmNwcCAqLzsgfTsKQEAgLTQ0MzUsNyArNDQzNSw3IEBACiAJCTFBNTY5Q0QwMEQ3RTJCODIwMDdD
Mzk4MyAvKiBqbmlfY2xhc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gam5p
X2NsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0QxMEQ3RTJCODIw
MDdDMzk4MyAvKiBqbmlfaW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gam5pX2luc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUE1NjlDRDIwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBqbmlfaW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUE1NjlDRDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IGpuaV9qc29iamVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNTY5Q0QzMEQ3RTJCODIwMDdDMzk4MyAvKiBq
bmlfanNvYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBq
bmlfanNvYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0Q0MEQ3
RTJCODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gam5pX2pzb2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
NTY5Q0Q1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IGpuaV9vYmpjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQTU2OUNENjBEN0UyQjgyMDA3QzM5ODMgLyogam5pX3J1bnRpbWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gam5pX3J1bnRpbWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY0MCw3ICs0NjQwLDcgQEAKIAkJMUFFMkFFRTUwQTFE
MkE3NTAwQjQyQjI1IC8qIEpTSFRNTEJsb2NrcXVvdGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxCbG9ja3F1b3RlRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUU4MkY4RDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFiYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFODJGOEUwQ0FBRkE5RDAwMjIzN0FF
IC8qIEpTRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRh
YmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUU4MkZFQTBDQUIwN0VFMDAy
MjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBKU1NRTFJlc3VsdFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBRTgyRkVBMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFJlc3VsdFNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTgyRkVCMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJl
c3VsdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFJlc3VsdFNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUU4MzA0MjBDQUIwRUQxMDAyMjM3
QUUgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RhdGFiYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUFGMzI2NDAwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGVNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBWE9iamVjdENhY2hlTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY1MSw3ICs0NjUxLDcgQEAKIAkJMUFGRTEx
N0IwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMUmVzdWx0U2V0Um93TGlzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRkUxMTdDMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxS
ZXN1bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFJl
c3VsdFNldFJvd0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGRTExOEMw
Q0JGRkM0RTAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFNRTFJlc3VsdFNldFJvd0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxQUZFMTE5NzBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSlNTUUxSZXN1bHRTZXRS
b3dMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGRTExOTcwQ0JGRkND
NDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUZFMTE5ODBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1
bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVz
dWx0U2V0Um93TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzE0RTc2OTBB
RDhDODFDMDBCNjE1OEIgLyogZGVsZXRlQnV0dG9uUHJlc3NlZC50aWZmICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UudGlmZjsgcGF0aCA9IGRl
bGV0ZUJ1dHRvblByZXNzZWQudGlmZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMx
NEU3NkEwQUQ4QzgxQzAwQjYxNThCIC8qIGRlbGV0ZUJ1dHRvbi50aWZmICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UudGlmZjsgcGF0aCA9IGRl
bGV0ZUJ1dHRvbi50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDcwNyw3ICs0
NzA3LDcgQEAKIAkJMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25z
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1
IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDQxMjQ0RDgwQ0I4NTNFRDAwOEYwQzc5IC8qIEpTSFRNTElucHV0RWxlbWVudEJhc2VU
YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDMwOyBwYXRoID0gSlNIVE1MSW5wdXRF
bGVtZW50QmFzZVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDQyOUFB
RUEwQ0I4NERDNzAwNzY0N0M1IC8qIERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBm
aWxlRW5jb2RpbmcgPSAzMDsgcGF0aCA9IERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0MjlBQUVBMENCODREQzcwMDc2NDdDNSAvKiBET01D
U1NTdHlsZVNoZWV0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDQyOUFBRjEwQ0I4NEUzNTAwNzY0N0M1IC8qIERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTENvbGxlY3Rpb25Qcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MjlBQUY4MENCODRFNUYwMDc2NDdD
NSAvKiBET01FdmVudFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTUV2ZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDI5QUFG
QjBDQjg0RTg4MDA3NjQ3QzUgLyogRE9NSFRNTEVtYmVkRWxlbWVudFByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxFbWJlZEVsZW1lbnRQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODg2LDEwICs0ODg2LDEwIEBACiAJCTY1
NjU4MUVBMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTGlua05hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNjU2NTgxRUIwOUQxNTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhMaW5rTmFtZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3MUEwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJM
RXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2FkZXJOU1VSTEV4
dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NTZEMzcxQjBBREJBNURFMDBB
NDU1NEQgLyogTG9hZGVyTlNVUkxFeHRyYXMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgcGF0aCA9IExvYWRlck5TVVJMRXh0cmFzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTY1NkQzNzFCMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VSTEV4dHJhcy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2FkZXJOU1VSTEV4dHJh
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3MUUwQURCQTVERTAwQTQ1
NTREIC8qIERvY3VtZW50TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEb2N1bWVudExvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTZEMzcy
MjBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb3JtU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjU2
RDM3MjMwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmls
ZUVuY29kaW5nID0gMzA7IHBhdGggPSBGb3JtU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2NTZEMzcyMzBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtU3RhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NTZEMzcyNDBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVM
b2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lTG9hZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NkQzNzI2MEFEQkE1REUwMEE0NTU0RCAv
KiBGcmFtZUxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RnJhbWVMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3
MjcwQURCQTVERTAwQTQ1NTREIC8qIFJlc291cmNlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTc5Niw3ICs1Nzk2LDcgQEAKIAkJOTMwQ0FCOEYwOUM0OUYxQjAwMjI5QzA0IC8q
IENhbnZhc1BhdHRlcm4uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENhbnZhc1BhdHRlcm4u
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzI3QTk0MTA5OTY4RDFBMDA2OEE1
NDYgLyogSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMjg3MUJGMEIyMERFQjcwMDQ5MDM1QSAvKiBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1NZW51
RGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTMyRTE2MDgwQUY1
NzgzNDAwMjVGNDA4IC8qIEZyYW1lTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gRnJhbWVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5MzJFMTYwODBBRjU3ODM0MDAyNUY0MDggLyogRnJhbWVMb2FkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVMb2FkZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUQ4NzA5OUU2NDkxMDA1NkU1ODEgLyogQXBwZW5kTm9k
ZUNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXBwZW5k
Tm9kZUNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUQ4ODA5
OUU2NDkxMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXBwZW5kTm9kZUNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTMzMDlEODkwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGx5U3R5bGVDb21tYW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4NjgsNyArNTg2OCw3IEBACiAJ
CTkzMzA5REQxMDk5RTY0OTEwMDU2RTU4MSAvKiBWaXNpYmxlUG9zaXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaWJsZVBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzMzA5REQ0MDk5RTY0OTEwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJ
bkR1bW15U3BhbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTMzMDlERDUwOTlFNjQ5MTAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OTMzMDlFOUYwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhcmVkVGltZXJNYWMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5MzMwOUU5RjA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVk
VGltZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTaGFy
ZWRUaW1lck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlFQTAwOTlF
Qjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNoYXJlZFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5
RUExMDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
MzU0QTNCMEIyNEY4QzkwMDNGNkRFQSAvKiBVSUV2ZW50V2l0aEtleVN0YXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVJRXZlbnRXaXRoS2V5U3RhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk2NCw4ICs1OTY0LDggQEAKIAkJOTNDQTRD
QTMwOURGOTNGQTAwREY4Njc3IC8qIHRva2VuaXplci5mbGV4ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IHRva2VuaXplci5mbGV4OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NDRjAy
NjBBRjZDNTI5MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0aW9uQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQ0NGMDVGMEFGNkNBNzYwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRpb25BY3Rpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0UyMjdEQjBBRjU4OUFEMDBENDgz
MjQgLyogRG9jdW1lbnRMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBEb2N1bWVudExvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTkzRTIyN0RDMEFGNTg5QUQwMEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBNYWluUmVzb3VyY2VMb2FkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0UyMjdEQjBBRjU4OUFEMDBENDgzMjQg
LyogRG9jdW1lbnRMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRG9jdW1lbnRMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0Uy
MjdEQzBBRjU4OUFEMDBENDgzMjQgLyogTWFpblJlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1haW5SZXNvdXJjZUxvYWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTIyN0REMEFGNTg5QUQwMEQ0ODMyNCAvKiBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzRTIyN0RFMEFGNTg5QUQwMEQ0ODMyNCAvKiBSZXNvdXJjZUxvYWRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTIyN0RGMEFGNTg5QUQwMEQ0ODMy
NCAvKiBTdWJyZXNvdXJjZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdWJyZXNvdXJjZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02MDMyLDcgKzYwMzIsNyBAQAogCQlBNzk1NDY0MjBCNUM0Q0I0MDA3QjQzOEYgLyogRHJh
Z0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHJhZ0RhdGEu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I2RTY5RDBCMjkxQTk2MDBEMDUy
OUYgLyogRHJhZ0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0Rh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDQTU5NUIwQjI3QkQ5RTAwRkEw
MjFEIC8qIERyYWdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERyYWdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3Q0E1OTVD
MEIyN0JEOUUwMEZBMDIxRCAvKiBEcmFnQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgZmlsZUVu
Y29kaW5nID0gNDsgcGF0aCA9IERyYWdDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTdDQTU5NUMwQjI3QkQ5RTAwRkEwMjFEIC8qIERyYWdDb250cm9sbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERyYWdDb250cm9sbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDQTU5NjIwQjI3QzFGMjAwRkEwMjFE
IC8qIERyYWdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0Ns
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0NGQjNDRjBCN0VEMTBBMDA3
MEMzMkQgLyogRHJhZ0ltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEcmFnSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0NGQjNE
MDBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEcmFnSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgy
OTIsNyArODI5Miw3IEBACiAJCQkJMUE1NjlDRDAwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9jbGFz
cy5oICovLAogCQkJCTFBNTY5Q0QxMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfaW5zdGFuY2UuY3Bw
ICovLAogCQkJCTFBNTY5Q0QyMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfaW5zdGFuY2UuaCAqLywK
LQkJCQkxQTU2OUNEMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmNwcCAqLywKKwkJ
CQkxQTU2OUNEMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tICovLAogCQkJCTFB
NTY5Q0Q0MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3QuaCAqLywKIAkJCQkxQTU2OUNE
NTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX29iamMubW0gKi8sCiAJCQkJMUE1NjlDRDYwRDdFMkI4
MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmNwcCAqLywKQEAgLTg1OTYsNyArODU5Niw3IEBACiAJ
CQkJOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gKi8sCiAJCQkJ
QUI3MTcwOUYwQjMxMTkzQjAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVudU1hYy5tbSAqLywKIAkJ
CQkxQTRBOTU1MTBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyTWFjLm1tICovLAotCQkJ
CTkzMzA5RTlGMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5jcHAgKi8sCisJCQkJ
OTMzMDlFOUYwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tICovLAogCQkJCTBB
NDg0NDk4MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5oICovLAogCQkJCTRCMzA0M0M4
MEFFMDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5tbSAqLywKIAkJCQk4NEIyQjI0RjA1NkJGMTVG
MDBEMkI3NzEgLyogU1NMS2V5R2VuZXJhdG9yTWFjLm1tICovLApAQCAtOTk3MSw3ICs5OTcxLDcg
QEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFDMjY0OTc5MEQ3RTI0OEEwMEJEMTBGMiAvKiBEb2N1
bWVudExvYWRlck1hYy5jcHAgKi8sCiAJCQkJNjU2RDM3MUEwQURCQTVERTAwQTQ1NTREIC8qIExv
YWRlck5TVVJMRXh0cmFzLmggKi8sCi0JCQkJNjU2RDM3MUIwQURCQTVERTAwQTQ1NTREIC8qIExv
YWRlck5TVVJMRXh0cmFzLm0gKi8sCisJCQkJNjU2RDM3MUIwQURCQTVERTAwQTQ1NTREIC8qIExv
YWRlck5TVVJMRXh0cmFzLm1tICovLAogCQkJCTUxQUEzRjZFMEJENUFBOUUwMDg5Mjk3MSAvKiBS
ZXNvdXJjZUxvYWRlck1hYy5tbSAqLywKIAkJCQlDMDI5NERGMTBENUE2RkQ4MDBDQzdENkIgLyog
VXNlclN0eWxlU2hlZXRMb2FkZXIuY3BwICovLAogCQkJCUMwMjk0REYyMEQ1QTZGRDgwMENDN0Q2
QiAvKiBVc2VyU3R5bGVTaGVldExvYWRlci5oICovLApAQCAtMTU2MDIsNyArMTU2MDIsNyBAQAog
CQkJCTkzNTIwODQ1MDlCRDQzQjkwMEYyMDM4RCAvKiBMYW5ndWFnZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEVBN0E1MzBBMTkxQTUyMDBBOEVGNUYgLyogTGlzdE1hcmtlckJveC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk2NTZEMzczMzBBREJBNURFMDBBNDU1NEQgLyogTG9hZGVy
TlNVUkxFeHRyYXMubSBpbiBTb3VyY2VzICovLAorCQkJCTY1NkQzNzMzMEFEQkE1REUwMEE0NTU0
RCAvKiBMb2FkZXJOU1VSTEV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA2RTgxRUVDMEFC
NURBOTcwMEM4NzgzNyAvKiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5MzUyMDdDMDA5QkQ0MTIxMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5nc01h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MjM5RTAwMDlCM0NGOEEwMEI2MDY0MSAvKiBMb2dn
aW5nLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTU5NTYsNyArMTU5NTYsNyBAQAogCQkJCUIyQUZG
QzkzMEQwMEE1REYwMDMwMDc0RCAvKiBTaGFwZUFyYWJpYy5jIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUE0QTk1NEQwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVy
TWFjLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzMzA5RUEyMDk5RUI3OEMwMDU2RTU4MSAvKiBT
aGFyZWRUaW1lck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTRCNkZBNkY1MEMzOUU0OEMwMDA4
NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEI2RkE2RjcwQzM5
RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRC
MzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAt
MTYxMzcsNyArMTYxMzcsNyBAQAogCQkJCTFBNTY5Q0ZEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0
aWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlDRkYwRDdFMkI4MjAwN0MzOTgzIC8q
IGpuaV9jbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUQwMTBEN0UyQjgyMDA3QzM5
ODMgLyogam5pX2luc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBNTY5RDAzMEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE1NjlE
MDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBNTY5RDA1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBNTY5RDA2MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfcnVudGltZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTU2OUQwODBEN0UyQjgyMDA3QzM5ODMgLyogam5pX3V0aWxpdHkuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gYnJpZGdlL2puaS9qbmlfanNvYmplY3QuY3BwCShyZXZpc2lvbiAzMTAzMCkKKysrIGJy
aWRnZS9qbmkvam5pX2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJqbmlfanNv
YmplY3QuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUZyYW1lVmll
dy5oIgotI2luY2x1ZGUgImpuaV9ydW50aW1lLmgiCi0jaW5jbHVkZSAiam5pX3V0aWxpdHkuaCIK
LSNpbmNsdWRlICJranNfcHJveHkuaCIKLSNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgotI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPGtqcy9FeGVjU3RhdGUuaD4KLSNpbmNs
dWRlIDxranMvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxranMvaW50ZXJwcmV0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBXZWJDb3JlOjpGcmFtZTsKLQot
dXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgS0pTOwotCi0j
aWZkZWYgTkRFQlVHCi0jZGVmaW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkK
LSNlbHNlCi0jZGVmaW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSB7IFwKLSAgICBmcHJpbnRm
IChzdGRlcnIsICIlcyglcCwlcCk6ICAiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfcGVyZm9ybUph
dmFTY3JpcHRSdW5Mb29wLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCkpOyBcCi0gICAgZnByaW50Zihz
dGRlcnIsIGZvcm1hdEFuZEFyZ3MpOyBcCi19Ci0jZW5kaWYKLQotI2RlZmluZSBVbmRlZmluZWRI
YW5kbGUgMQotCi1zdGF0aWMgQ0ZSdW5Mb29wU291cmNlUmVmIF9wZXJmb3JtSmF2YVNjcmlwdFNv
dXJjZTsKLXN0YXRpYyBDRlJ1bkxvb3BSZWYgX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcDsKLQot
Ly8gTWF5IG9ubHkgYmUgc2V0IGJ5IGRpc3BhdGNoVG9KYXZhU2NyaXB0VGhyZWFkKCkuCi1zdGF0
aWMgQ0ZSdW5Mb29wU291cmNlUmVmIGNvbXBsZXRpb25Tb3VyY2U7Ci0KLXN0YXRpYyB2b2lkIGNv
bXBsZXRlZEphdmFTY3JpcHRBY2Nlc3MgKHZvaWQgKmkpCi17Ci0gICAgYXNzZXJ0IChDRlJ1bkxv
b3BHZXRDdXJyZW50KCkgIT0gX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCk7Ci0gICAgCi0gICAg
SlNPYmplY3RDYWxsQ29udGV4dCAqY2FsbENvbnRleHQgPSAoSlNPYmplY3RDYWxsQ29udGV4dCAq
KWk7Ci0gICAgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3AgPSAoQ0ZSdW5Mb29wUmVmKWNhbGxDb250ZXh0
LT5vcmlnaW5hdGluZ0xvb3A7Ci0gICAgCi0gICAgYXNzZXJ0IChDRlJ1bkxvb3BHZXRDdXJyZW50
KCkgPT0gcnVuTG9vcCk7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wU3RvcChydW5Mb29wKTsKLX0KLQot
c3RhdGljIHB0aHJlYWRfb25jZV90IGphdmFTY3JpcHRBY2Nlc3NMb2NrT25jZSA9IFBUSFJFQURf
T05DRV9JTklUOwotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBqYXZhU2NyaXB0QWNjZXNzTG9jazsK
LXN0YXRpYyBpbnQgamF2YVNjcmlwdEFjY2Vzc0xvY2tDb3VudCA9IDA7Ci0KLXN0YXRpYyB2b2lk
IGluaXRpYWxpemVKYXZhU2NyaXB0QWNjZXNzTG9jaygpCi17Ci0gICAgcHRocmVhZF9tdXRleGF0
dHJfdCBhdHRyOwotICAgIAotICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpOwotICAg
IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lW
RSk7Ci0gICAgCi0gICAgcHRocmVhZF9tdXRleF9pbml0KCZqYXZhU2NyaXB0QWNjZXNzTG9jaywg
JmF0dHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja0phdmFTY3JpcHRBY2Nlc3MoKQot
ewotICAgIC8vIFBlcmhhcHMgYWRkIGRlYWRsb2NrIGRldGVjdGlvbj8KLSAgICBwdGhyZWFkX29u
Y2UoJmphdmFTY3JpcHRBY2Nlc3NMb2NrT25jZSwgaW5pdGlhbGl6ZUphdmFTY3JpcHRBY2Nlc3NM
b2NrKTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmphdmFTY3JpcHRBY2Nlc3NMb2NrKTsKLSAg
ICBqYXZhU2NyaXB0QWNjZXNzTG9ja0NvdW50Kys7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1
bmxvY2tKYXZhU2NyaXB0QWNjZXNzKCkKLXsKLSAgICBqYXZhU2NyaXB0QWNjZXNzTG9ja0NvdW50
LS07Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJmphdmFTY3JpcHRBY2Nlc3NMb2NrKTsKLX0K
LQotc3RhdGljIHZvaWQgZGlzcGF0Y2hUb0phdmFTY3JpcHRUaHJlYWQoSlNPYmplY3RDYWxsQ29u
dGV4dCAqY29udGV4dCkKLXsKLSAgICAvLyBUaGlzIGxvY2sgZ3VhcmFudGVlcyB0aGF0IG9ubHkg
b25lIHRocmVhZCBjYW4gaW52b2tlCi0gICAgLy8gYXQgYSB0aW1lLCBhbmQgYWxzbyBndWFyYW50
ZWVzIHRoYXQgY29tcGxldGlvblNvdXJjZTsKLSAgICAvLyB3b24ndCBnZXQgY2xvYmJlcmVkLgot
ICAgIGxvY2tKYXZhU2NyaXB0QWNjZXNzKCk7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wUmVmIGN1cnJl
bnRSdW5Mb29wID0gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOwotICAgIAotICAgIGFzc2VydCAoY3Vy
cmVudFJ1bkxvb3AgIT0gX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCk7Ci0gICAgCi0gICAgLy8g
U2V0dXAgYSBzb3VyY2UgdG8gc2lnbmFsIG9uY2UgdGhlIGludm9jYXRpb24gb2YgdGhlIEphdmFT
Y3JpcHQKLSAgICAvLyBjYWxsIGNvbXBsZXRlcy4KLSAgICAvLwotICAgIC8vIEZJWE1FOiAgVGhp
cyBjb3VsZCBiZSBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpc3N1ZS4gIENyZWF0aW5nIGFuZAot
ICAgIC8vIGFkZGluZyBydW4gbG9vcCBzb3VyY2VzIGlzIGV4cGVuc2l2ZS4gIFdlIGNvdWxkIGNy
ZWF0ZSBvbmUgc291cmNlIAotICAgIC8vIHBlciB0aHJlYWQsIGFzIG5lZWRlZCwgaW5zdGVhZC4K
LSAgICBjb250ZXh0LT5vcmlnaW5hdGluZ0xvb3AgPSBjdXJyZW50UnVuTG9vcDsKLSAgICBDRlJ1
bkxvb3BTb3VyY2VDb250ZXh0IHNvdXJjZUNvbnRleHQgPSB7MCwgY29udGV4dCwgTlVMTCwgTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgY29tcGxldGVkSmF2YVNjcmlwdEFjY2Vz
c307Ci0gICAgY29tcGxldGlvblNvdXJjZSA9IENGUnVuTG9vcFNvdXJjZUNyZWF0ZShOVUxMLCAw
LCAmc291cmNlQ29udGV4dCk7Ci0gICAgQ0ZSdW5Mb29wQWRkU291cmNlKGN1cnJlbnRSdW5Mb29w
LCBjb21wbGV0aW9uU291cmNlLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIAotICAgIC8v
IFdha2V1cCBKYXZhU2NyaXB0IGFjY2VzcyB0aHJlYWQgYW5kIG1ha2UgaXQgZG8gaXQncyB3b3Jr
LgotICAgIENGUnVuTG9vcFNvdXJjZVNpZ25hbChfcGVyZm9ybUphdmFTY3JpcHRTb3VyY2UpOwot
ICAgIGlmIChDRlJ1bkxvb3BJc1dhaXRpbmcoX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCkpCi0g
ICAgICAgIENGUnVuTG9vcFdha2VVcChfcGVyZm9ybUphdmFTY3JpcHRSdW5Mb29wKTsKLSAgICAK
LSAgICAvLyBXYWl0IHVudGlsIHRoZSBKYXZhU2NyaXB0IGFjY2VzcyB0aHJlYWQgaXMgZG9uZS4K
LSAgICBDRlJ1bkxvb3BSdW4gKCk7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKGN1
cnJlbnRSdW5Mb29wLCBjb21wbGV0aW9uU291cmNlLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwot
ICAgIENGUmVsZWFzZSAoY29tcGxldGlvblNvdXJjZSk7Ci0gICAgCi0gICAgdW5sb2NrSmF2YVNj
cmlwdEFjY2VzcygpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmb3JtSmF2YVNjcmlwdEFjY2Vzcyh2
b2lkKikKLXsKLSAgICBhc3NlcnQgKENGUnVuTG9vcEdldEN1cnJlbnQoKSA9PSBfcGVyZm9ybUph
dmFTY3JpcHRSdW5Mb29wKTsKLSAgICAKLSAgICAvLyBEaXNwYXRjaCBKYXZhU2NyaXB0IGNhbGxz
IGhlcmUuCi0gICAgQ0ZSdW5Mb29wU291cmNlQ29udGV4dCBzb3VyY2VDb250ZXh0OwotICAgIENG
UnVuTG9vcFNvdXJjZUdldENvbnRleHQgKGNvbXBsZXRpb25Tb3VyY2UsICZzb3VyY2VDb250ZXh0
KTsKLSAgICBKU09iamVjdENhbGxDb250ZXh0ICpjYWxsQ29udGV4dCA9IChKU09iamVjdENhbGxD
b250ZXh0ICopc291cmNlQ29udGV4dC5pbmZvOyAgICAKLSAgICBDRlJ1bkxvb3BSZWYgb3JpZ2lu
YXRpbmdMb29wID0gY2FsbENvbnRleHQtPm9yaWdpbmF0aW5nTG9vcDsKLSAgICAKLSAgICBKYXZh
SlNPYmplY3Q6Omludm9rZSAoY2FsbENvbnRleHQpOwotICAgIAotICAgIC8vIFNpZ25hbCB0aGUg
b3JpZ2luYXRpbmcgdGhyZWFkIHRoYXQgd2UncmUgZG9uZS4KLSAgICBDRlJ1bkxvb3BTb3VyY2VT
aWduYWwgKGNvbXBsZXRpb25Tb3VyY2UpOwotICAgIGlmIChDRlJ1bkxvb3BJc1dhaXRpbmcob3Jp
Z2luYXRpbmdMb29wKSkKLSAgICAgICAgQ0ZSdW5Mb29wV2FrZVVwKG9yaWdpbmF0aW5nTG9vcCk7
Ci19Ci0KLS8vIE11c3QgYmUgY2FsbGVkIGZyb20gdGhlIHRocmVhZCB0aGF0IHdpbGwgYmUgdXNl
ZCB0byBhY2Nlc3MgSmF2YVNjcmlwdC4KLXZvaWQgSmF2YUpTT2JqZWN0Ojppbml0aWFsaXplSk5J
VGhyZWFkaW5nKCkgewotICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgotICAgIEFT
U0VSVCghX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCk7Ci0gICAgCi0gICAgLy8gQXNzdW1lIHRo
YXQgd2UgY2FuIHJldGFpbiB0aGlzIHJ1biBsb29wIGZvcmV2ZXIuICBJdCdsbCBtb3N0IAotICAg
IC8vIGxpa2VseSAoYWx3YXlzPykgYmUgdGhlIG1haW4gbG9vcC4KLSAgICBfcGVyZm9ybUphdmFT
Y3JpcHRSdW5Mb29wID0gKENGUnVuTG9vcFJlZilDRlJldGFpbihDRlJ1bkxvb3BHZXRDdXJyZW50
KCkpOwotICAgIAotICAgIC8vIFNldHVwIGEgc291cmNlIHRoZSBvdGhlciB0aHJlYWRzIGNhbiB1
c2UgdG8gc2lnbmFsIHRoZSBfcnVuTG9vcAotICAgIC8vIHRocmVhZCB0aGF0IGEgSmF2YVNjcmlw
dCBjYWxsIG5lZWRzIHRvIGJlIGludm9rZWQuCi0gICAgQ0ZSdW5Mb29wU291cmNlQ29udGV4dCBz
b3VyY2VDb250ZXh0ID0gezAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V
TEwsIE5VTEwsIHBlcmZvcm1KYXZhU2NyaXB0QWNjZXNzfTsKLSAgICBfcGVyZm9ybUphdmFTY3Jp
cHRTb3VyY2UgPSBDRlJ1bkxvb3BTb3VyY2VDcmVhdGUoTlVMTCwgMCwgJnNvdXJjZUNvbnRleHQp
OwotICAgIENGUnVuTG9vcEFkZFNvdXJjZShfcGVyZm9ybUphdmFTY3JpcHRSdW5Mb29wLCBfcGVy
Zm9ybUphdmFTY3JpcHRTb3VyY2UsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci19Ci0KLXN0YXRp
YyBib29sIGlzSmF2YVNjcmlwdFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIChfcGVyZm9ybUphdmFT
Y3JpcHRSdW5Mb29wID09IENGUnVuTG9vcEdldEN1cnJlbnQoKSk7Ci19Ci0KLWp2YWx1ZSBKYXZh
SlNPYmplY3Q6Omludm9rZShKU09iamVjdENhbGxDb250ZXh0ICpjb250ZXh0KQotewotICAgIGp2
YWx1ZSByZXN1bHQ7Ci0KLSAgICBiemVybyAoKHZvaWQgKikmcmVzdWx0LCBzaXplb2YoanZhbHVl
KSk7Ci0gICAgCi0gICAgaWYgKCFpc0phdmFTY3JpcHRUaHJlYWQoKSkgeyAgICAgICAgCi0gICAg
ICAgIC8vIFNlbmQgdGhlIGNhbGwgY29udGV4dCB0byB0aGUgdGhyZWFkIHRoYXQgaXMgYWxsb3dl
ZCB0bwotICAgICAgICAvLyBjYWxsIEphdmFTY3JpcHQuCi0gICAgICAgIGRpc3BhdGNoVG9KYXZh
U2NyaXB0VGhyZWFkKGNvbnRleHQpOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5yZXN1bHQ7
Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBqbG9uZyBuYXRpdmVIYW5kbGUgPSBjb250ZXh0
LT5uYXRpdmVIYW5kbGU7Ci0gICAgICAgIGlmIChuYXRpdmVIYW5kbGUgPT0gVW5kZWZpbmVkSGFu
ZGxlIHx8IG5hdGl2ZUhhbmRsZSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnR5cGUgPT0gQ3JlYXRlTmF0aXZlKSB7
Ci0gICAgICAgICAgICByZXN1bHQuaiA9IEphdmFKU09iamVjdDo6Y3JlYXRlTmF0aXZlKG5hdGl2
ZUhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU09iamVj
dCAqaW1wID0gamxvbmdfdG9faW1wcHRyKG5hdGl2ZUhhbmRsZSk7Ci0gICAgICAgICAgICBpZiAo
IWZpbmRQcm90ZWN0aW5nUm9vdE9iamVjdChpbXApKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50
ZiAoc3RkZXJyLCAiJXM6JWQ6ICBBdHRlbXB0IHRvIGFjY2VzcyBKYXZhU2NyaXB0IGZyb20gZGVz
dHJveWVkIGFwcGxldCwgdHlwZSAlZC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgY29udGV4dC0+
dHlwZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc3dpdGNoIChjb250ZXh0LT50eXBlKXsgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBjYXNlIENhbGw6IHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBKYXZh
SlNPYmplY3QobmF0aXZlSGFuZGxlKS5jYWxsKGNvbnRleHQtPnN0cmluZywgY29udGV4dC0+YXJn
cyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEV2YWw6IHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmwgPSBKYXZhSlNPYmplY3QobmF0aXZlSGFuZGxlKS5ldmFsKGNvbnRleHQt
PnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgR2V0TWVtYmVyOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5sID0gSmF2YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkuZ2V0TWVt
YmVyKGNvbnRleHQtPnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFNldE1l
bWJlcjogewotICAgICAgICAgICAgICAgICAgICBKYXZhSlNPYmplY3QobmF0aXZlSGFuZGxlKS5z
ZXRNZW1iZXIoY29udGV4dC0+c3RyaW5nLCBjb250ZXh0LT52YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBjYXNlIFJlbW92ZU1lbWJlcjogewotICAgICAgICAgICAgICAgICAgICBKYXZh
SlNPYmplY3QobmF0aXZlSGFuZGxlKS5yZW1vdmVNZW1iZXIoY29udGV4dC0+c3RyaW5nKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRTbG90OiB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5sID0gSmF2YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkuZ2V0U2xvdChjb250ZXh0LT5pbmRl
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFNldFNsb3Q6IHsKLSAgICAgICAgICAg
ICAgICAgICAgSmF2YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkuc2V0U2xvdChjb250ZXh0LT5pbmRl
eCwgY29udGV4dC0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFRvU3RyaW5nOiB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gKGpvYmplY3QpIEphdmFKU09iamVjdChu
YXRpdmVIYW5kbGUpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEZpbmFsaXplOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIEphdmFKU09iamVjdChuYXRpdmVIYW5kbGUpLmZpbmFsaXplKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAg
IGZwcmludGYgKHN0ZGVyciwgIiVzOiAgaW52YWxpZCBKYXZhU2NyaXB0IGNhbGxcbiIsIF9fUFJF
VFRZX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBjb250ZXh0LT5yZXN1bHQgPSByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotCi1KYXZhSlNPYmplY3Q6OkphdmFKU09iamVjdChqbG9uZyBuYXRp
dmVKU09iamVjdCkKLXsKLSAgICBfaW1wID0gamxvbmdfdG9faW1wcHRyKG5hdGl2ZUpTT2JqZWN0
KTsKLSAgICAKLSAgICBBU1NFUlQoX2ltcCk7Ci0gICAgX3Jvb3RPYmplY3QgPSBmaW5kUHJvdGVj
dGluZ1Jvb3RPYmplY3QoX2ltcCk7Ci0gICAgQVNTRVJUKF9yb290T2JqZWN0KTsKLX0KLQotUm9v
dE9iamVjdCogSmF2YUpTT2JqZWN0Ojpyb290T2JqZWN0KCkgY29uc3QKLXsgCi0gICAgcmV0dXJu
IF9yb290T2JqZWN0ICYmIF9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBfcm9vdE9iamVjdC5nZXQo
KSA6IDA7IAotfQotCi1qb2JqZWN0IEphdmFKU09iamVjdDo6Y2FsbChqc3RyaW5nIG1ldGhvZE5h
bWUsIGpvYmplY3RBcnJheSBhcmdzKSBjb25zdAotewotICAgIEpTX0xPRyAoIm1ldGhvZE5hbWUg
PSAlc1xuIiwgSmF2YVN0cmluZyhtZXRob2ROYW1lKS5VVEY4U3RyaW5nKCkpOwotCi0gICAgUm9v
dE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKTsKLSAgICBpZiAoIXJvb3RP
YmplY3QpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIExvb2t1cCB0aGUgZnVuY3Rp
b24gb2JqZWN0LgotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2s7Ci0gICAgCi0gICAgSWRlbnRpZmll
ciBpZGVudGlmaWVyKEphdmFTdHJpbmcobWV0aG9kTmFtZSkudXN0cmluZygpKTsKLSAgICBKU1Zh
bHVlICpmdW5jID0gX2ltcC0+Z2V0IChleGVjLCBpZGVudGlmaWVyKTsKLSAgICBpZiAoZnVuYy0+
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBDYWxsIHRo
ZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgSlNPYmplY3QgKmZ1bmNJbXAgPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KGZ1bmMpOwotICAgIEpTT2JqZWN0ICp0aGlzT2JqID0gY29uc3RfY2FzdDxKU09i
amVjdCo+KF9pbXApOwotICAgIExpc3QgYXJnTGlzdDsKLSAgICBnZXRMaXN0RnJvbUpBcnJheShh
cmdzLCBhcmdMaXN0KTsKLSAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c3RhcnRUaW1l
b3V0Q2hlY2soKTsKLSAgICBKU1ZhbHVlICpyZXN1bHQgPSBmdW5jSW1wLT5jYWxsKGV4ZWMsIHRo
aXNPYmosIGFyZ0xpc3QpOwotICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5zdG9wVGlt
ZW91dENoZWNrKCk7Ci0KLSAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7
Ci19Ci0KLWpvYmplY3QgSmF2YUpTT2JqZWN0OjpldmFsKGpzdHJpbmcgc2NyaXB0KSBjb25zdAot
ewotICAgIEpTX0xPRyAoInNjcmlwdCA9ICVzXG4iLCBKYXZhU3RyaW5nKHNjcmlwdCkuVVRGOFN0
cmluZygpKTsKLSAgICAKLSAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPihfaW1wKTsKLSAgICBKU1ZhbHVlICpyZXN1bHQ7Ci0gICAgCi0gICAgSlNMb2NrIGxvY2s7
Ci0gICAgCi0gICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKTsK
LSAgICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0gICAgQ29tcGxldGlvbiBj
b21wbGV0aW9uID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCksIFVTdHJpbmcoKSwgMCwgSmF2YVN0cmluZyhzY3JpcHQpLnVzdHJp
bmcoKSx0aGlzT2JqKTsKLSAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c3RvcFRpbWVv
dXRDaGVjaygpOwotICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsK
LSAgICAKLSAgICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKLSAgICAgICAgcmVzdWx0ID0gY29tcGxl
dGlvbi52YWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVk
KCk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdCAocmVzdWx0KTsKLX0K
LQotam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIG1lbWJlck5hbWUpIGNv
bnN0Ci17Ci0gICAgSlNfTE9HICgiKCVwKSBtZW1iZXJOYW1lID0gJXNcbiIsIF9pbXAsIEphdmFT
dHJpbmcobWVtYmVyTmFtZSkuVVRGOFN0cmluZygpKTsKLQotICAgIFJvb3RPYmplY3QqIHJvb3RP
YmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7Ci0gICAgaWYgKCFyb290T2JqZWN0KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgCi0gICAgSlNMb2NrIGxvY2s7Ci0gICAgSlNWYWx1
ZSAqcmVzdWx0ID0gX2ltcC0+Z2V0IChleGVjLCBJZGVudGlmaWVyIChKYXZhU3RyaW5nKG1lbWJl
ck5hbWUpLnVzdHJpbmcoKSkpOwotCi0gICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdChy
ZXN1bHQpOwotfQotCi12b2lkIEphdmFKU09iamVjdDo6c2V0TWVtYmVyKGpzdHJpbmcgbWVtYmVy
TmFtZSwgam9iamVjdCB2YWx1ZSkgY29uc3QKLXsKLSAgICBKU19MT0cgKCJtZW1iZXJOYW1lID0g
JXMsIHZhbHVlID0gJXBcbiIsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuVVRGOFN0cmluZygpLCB2
YWx1ZSk7Ci0KLSAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgp
OwotICAgIGlmICghcm9vdE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhlY1N0YXRl
KiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0xvY2sgbG9jazsKLSAgICBfaW1wLT5wdXQoZXhlYywgSWRlbnRpZmllciAoSmF2YVN0cmluZyht
ZW1iZXJOYW1lKS51c3RyaW5nKCkpLCBjb252ZXJ0Sk9iamVjdFRvVmFsdWUodmFsdWUpKTsKLX0K
LQotCi12b2lkIEphdmFKU09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgbWVtYmVyTmFtZSkg
Y29uc3QKLXsKLSAgICBKU19MT0cgKCJtZW1iZXJOYW1lID0gJXNcbiIsIEphdmFTdHJpbmcobWVt
YmVyTmFtZSkuVVRGOFN0cmluZygpKTsKLQotICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0
aGlzLT5yb290T2JqZWN0KCk7Ci0gICAgaWYgKCFyb290T2JqZWN0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrOwotICAgIF9pbXAtPmRlbGV0ZVByb3BlcnR5KGV4
ZWMsIElkZW50aWZpZXIgKEphdmFTdHJpbmcobWVtYmVyTmFtZSkudXN0cmluZygpKSk7Ci19Ci0K
LQotam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldFNsb3QoamludCBpbmRleCkgY29uc3QKLXsKLSNp
ZmRlZiBfX0xQNjRfXwotICAgIEpTX0xPRyAoImluZGV4ID0gJWRcbiIsIGluZGV4KTsKLSNlbHNl
Ci0gICAgSlNfTE9HICgiaW5kZXggPSAlbGRcbiIsIGluZGV4KTsKLSNlbmRpZgotCi0gICAgUm9v
dE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKTsKLSAgICBpZiAoIXJvb3RP
YmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLQotICAgIEpTTG9jayBsb2NrOwot
ICAgIEpTVmFsdWUgKnJlc3VsdCA9IF9pbXAtPmdldCAoZXhlYywgKHVuc2lnbmVkKWluZGV4KTsK
LQotICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKLX0KLQotCi12b2lk
IEphdmFKU09iamVjdDo6c2V0U2xvdChqaW50IGluZGV4LCBqb2JqZWN0IHZhbHVlKSBjb25zdAot
ewotI2lmZGVmIF9fTFA2NF9fCi0gICAgSlNfTE9HICgiaW5kZXggPSAlZCwgdmFsdWUgPSAlcFxu
IiwgaW5kZXgsIHZhbHVlKTsKLSNlbHNlCi0gICAgSlNfTE9HICgiaW5kZXggPSAlbGQsIHZhbHVl
ID0gJXBcbiIsIGluZGV4LCB2YWx1ZSk7Ci0jZW5kaWYKLQotICAgIFJvb3RPYmplY3QqIHJvb3RP
YmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7Ci0gICAgaWYgKCFyb290T2JqZWN0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrOwotICAgIF9pbXAtPnB1dChleGVj
LCAodW5zaWduZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZSh2YWx1ZSkpOwotfQotCi0K
LWpzdHJpbmcgSmF2YUpTT2JqZWN0Ojp0b1N0cmluZygpIGNvbnN0Ci17Ci0gICAgSlNfTE9HICgi
XG4iKTsKLSAgICAKLSAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVj
dCgpOwotICAgIGlmICghcm9vdE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBKU0xv
Y2sgbG9jazsKLSAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihf
aW1wKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwotICAgIAotICAgIHJldHVybiAoanN0cmluZyljb252ZXJ0VmFsdWVUb0pW
YWx1ZSAoZXhlYywgdGhpc09iaiwgb2JqZWN0X3R5cGUsICJqYXZhLmxhbmcuU3RyaW5nIikubDsK
LX0KLQotdm9pZCBKYXZhSlNPYmplY3Q6OmZpbmFsaXplKCkgY29uc3QKLXsKLSAgICBpZiAoUm9v
dE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKSkKLSAgICAgICAgcm9vdE9i
amVjdC0+Z2NVbnByb3RlY3QoX2ltcCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IGNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlKQotewotICAgIEZyYW1lKiBm
cmFtZSA9IDA7Ci0gICAgZm9yIChOU1ZpZXcgKnZpZXcgPSAoTlNWaWV3ICopbmF0aXZlSGFuZGxl
OyB2aWV3OyB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XSkgewotICAgICAgICBpZiAoW3ZpZXcgY29u
Zm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pIHsKLSAgICAgICAg
ICAgIE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiAqd2ViQ29yZUZyYW1lVmlldyA9IHN0YXRpY19j
YXN0PE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3Pio+KHZpZXcpOwotICAgICAgICAgICAgZnJhbWUg
PSBbd2ViQ29yZUZyYW1lVmlldyBfd2ViX2ZyYW1lXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBmcmFtZS0+Y3JlYXRlUm9vdE9iamVjdChuYXRpdmVIYW5kbGUsIGZyYW1lLT5zY3JpcHRQ
cm94eSgpLT5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLS8vIFdlJ3JlIGVpdGhlciBjcmVhdGluZyBh
ICdSb290JyBvYmplY3QgKHZpYSBhIGNhbGwgdG8gSmF2YUpTT2JqZWN0LmdldFdpbmRvdygpKSwg
b3IKLS8vIGFub3RoZXIgSmF2YUpTT2JqZWN0LgotamxvbmcgSmF2YUpTT2JqZWN0OjpjcmVhdGVO
YXRpdmUoamxvbmcgbmF0aXZlSGFuZGxlKQotewotICAgIEpTX0xPRyAoIm5hdGl2ZUhhbmRsZSA9
ICVkXG4iLCAoaW50KW5hdGl2ZUhhbmRsZSk7Ci0KLSAgICBpZiAobmF0aXZlSGFuZGxlID09IFVu
ZGVmaW5lZEhhbmRsZSkKLSAgICAgICAgcmV0dXJuIG5hdGl2ZUhhbmRsZTsKLQotICAgIGlmIChm
aW5kUHJvdGVjdGluZ1Jvb3RPYmplY3QoamxvbmdfdG9faW1wcHRyKG5hdGl2ZUhhbmRsZSkpKQot
ICAgICAgICByZXR1cm4gbmF0aXZlSGFuZGxlOwotCi0gICAgUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QgPSBjcmVhdGVSb290T2JqZWN0KGpsb25nX3RvX3B0cihuYXRpdmVIYW5kbGUpKTsK
LQotICAgIC8vIElmIHJvb3RPYmplY3QgaXMgIU5VTEwgV2UgbXVzdCBoYXZlIGJlZW4gY2FsbGVk
IHZpYSBuZXRzY2FwZS5qYXZhc2NyaXB0LkphdmFKU09iamVjdC5nZXRXaW5kb3coKSwKLSAgICAv
LyBvdGhlcndpc2Ugd2UgYXJlIGJlaW5nIGNhbGxlZCBhZnRlciBjcmVhdGluZyBhIEphdmFKU09i
amVjdCBpbgotICAgIC8vIEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KCkuCi0g
ICAgaWYgKHJvb3RPYmplY3QpIHsKLSAgICAgICAgSlNPYmplY3QqIGdsb2JhbE9iamVjdCA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAvLyBXZSBjYWxsIGdjUHJvdGVjdCBo
ZXJlIHRvIGdldCB0aGUgb2JqZWN0IGludG8gdGhlIHJvb3Qgb2JqZWN0J3MgInByb3RlY3Qgc2V0
IiB3aGljaAotICAgICAgICAvLyBpcyB1c2VkIHRvIHRlc3QgaWYgYSBuYXRpdmUgaGFuZGxlIGlz
IHZhbGlkIGFzIHdlbGwgYXMgZ2V0dGluZyB0aGUgcm9vdCBvYmplY3QgZ2l2ZW4gdGhlIGhhbmRs
ZS4KLSAgICAgICAgcm9vdE9iamVjdC0+Z2NQcm90ZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHJfdG9famxvbmcoZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG5hdGl2ZUhhbmRsZTsKLX0KLQotam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1
ZVRvSk9iamVjdCAoSlNWYWx1ZSAqdmFsdWUpIGNvbnN0Ci17Ci0gICAgSlNMb2NrIGxvY2s7Ci0g
ICAgCi0gICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKTsKLSAg
ICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRXhlY1N0YXRlKiBl
eGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKTklF
bnYgKmVudiA9IGdldEpOSUVudigpOwotICAgIGpvYmplY3QgcmVzdWx0ID0gMDsKLSAgICAKLSAg
ICAvLyBTZWUgc2VjdGlvbiAyMi43IG9mICdKYXZhU2NyaXB0OiAgVGhlIERlZmluaXRpdmUgR3Vp
ZGUsIDR0aCBFZGl0aW9uJywKLSAgICAvLyBmaWd1cmUgMjItNS4KLSAgICAvLyBudW1iZXIgLT4g
amF2YS5sYW5nLkRvdWJsZQotICAgIC8vIHN0cmluZyAtPiBqYXZhLmxhbmcuU3RyaW5nCi0gICAg
Ly8gYm9vbGVhbiAtPiBqYXZhLmxhbmcuQm9vbGVhbgotICAgIC8vIEphdmEgaW5zdGFuY2UgLT4g
SmF2YSBpbnN0YW5jZQotICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSAtPiBKYXZhSlNPYmplY3QKLSAg
ICAKLSAgICBKU1R5cGUgdHlwZSA9IHZhbHVlLT50eXBlKCk7Ci0gICAgaWYgKHR5cGUgPT0gTnVt
YmVyVHlwZSkgewotICAgICAgICBqY2xhc3MgSlNPYmplY3RDbGFzcyA9IGVudi0+RmluZENsYXNz
ICgiamF2YS9sYW5nL0RvdWJsZSIpOwotICAgICAgICBqbWV0aG9kSUQgY29uc3RydWN0b3JJRCA9
IGVudi0+R2V0TWV0aG9kSUQgKEpTT2JqZWN0Q2xhc3MsICI8aW5pdD4iLCAiKEQpViIpOwotICAg
ICAgICBpZiAoY29uc3RydWN0b3JJRCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBl
bnYtPk5ld09iamVjdCAoSlNPYmplY3RDbGFzcywgY29uc3RydWN0b3JJRCwgKGpkb3VibGUpdmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
ID09IFN0cmluZ1R5cGUpIHsKLSAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLT50
b1N0cmluZyhleGVjKTsKLSAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICAg
ICAgcmVzdWx0ID0gZW52LT5OZXdTdHJpbmcgKChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmRh
dGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBC
b29sZWFuVHlwZSkgewotICAgICAgICBqY2xhc3MgSlNPYmplY3RDbGFzcyA9IGVudi0+RmluZENs
YXNzICgiamF2YS9sYW5nL0Jvb2xlYW4iKTsKLSAgICAgICAgam1ldGhvZElEIGNvbnN0cnVjdG9y
SUQgPSBlbnYtPkdldE1ldGhvZElEIChKU09iamVjdENsYXNzLCAiPGluaXQ+IiwgIihaKVYiKTsK
LSAgICAgICAgaWYgKGNvbnN0cnVjdG9ySUQgIT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0
ID0gZW52LT5OZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNvbnN0cnVjdG9ySUQsIChqYm9vbGVh
bil2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gQ3JlYXRlIGEgSmF2YUpTT2JqZWN0LgotICAgICAgICBqbG9uZyBuYXRpdmVI
YW5kbGU7Ci0gICAgICAgIAotICAgICAgICBpZiAodHlwZSA9PSBPYmplY3RUeXBlKXsKLSAgICAg
ICAgICAgIEpTT2JqZWN0ICppbXAgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbHVlKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZWl0aGVyIGhhdmUgYSB3cmFwcGVyIGFyb3Vu
ZCBhIEphdmEgaW5zdGFuY2Ugb3IgYSBKYXZhU2NyaXB0Ci0gICAgICAgICAgICAvLyBvYmplY3Qu
ICBJZiB3ZSBoYXZlIGEgd3JhcHBlciBhcm91bmQgYSBKYXZhIGluc3RhbmNlLCByZXR1cm4gdGhh
dAotICAgICAgICAgICAgLy8gaW5zdGFuY2UsIG90aGVyd2lzZSBjcmVhdGUgYSBuZXcgSmF2YSBK
YXZhSlNPYmplY3Qgd2l0aCB0aGUgSlNPYmplY3QqCi0gICAgICAgICAgICAvLyBhcyBpdCdzIG5h
dGl2ZUhhbmRsZS4KLSAgICAgICAgICAgIGlmIChpbXAtPmNsYXNzSW5mbygpICYmIHN0cmNtcChp
bXAtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUsICJSdW50aW1lT2JqZWN0IikgPT0gMCkgewotICAg
ICAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAgKnJ1bnRpbWVJbXAgPSBzdGF0aWNfY2FzdDxS
dW50aW1lT2JqZWN0SW1wKj4odmFsdWUpOwotICAgICAgICAgICAgICAgIEphdmFJbnN0YW5jZSAq
cnVudGltZUluc3RhbmNlID0gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlICo+KHJ1bnRpbWVJbXAt
PmdldEludGVybmFsSW5zdGFuY2UoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFydW50aW1lSW5z
dGFuY2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lSW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmF0aXZl
SGFuZGxlID0gcHRyX3RvX2psb25nKGltcCk7Ci0gICAgICAgICAgICAgICAgcm9vdE9iamVjdC0+
Z2NQcm90ZWN0KGltcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQWxs
IG90aGVyIHR5cGVzIHdpbGwgcmVzdWx0IGluIGFuIHVuZGVmaW5lZCBvYmplY3QuCi0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgbmF0aXZlSGFuZGxlID0gVW5kZWZpbmVkSGFuZGxlOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgY3JlYXRlIHRoZSBKYXZhIEphdmFKU09i
amVjdC4gIExvb2sgZm9yIHRoZSBKYXZhSlNPYmplY3QgaW4gaXQncyBuZXcgKFRpZ2VyKQotICAg
ICAgICAvLyBsb2NhdGlvbiBhbmQgaW4gdGhlIG9yaWdpbmFsIEphdmEgMS40LjIgbG9jYXRpb24u
Ci0gICAgICAgIGpjbGFzcyBKU09iamVjdENsYXNzOwotICAgICAgICAKLSAgICAgICAgSlNPYmpl
Y3RDbGFzcyA9IGVudi0+RmluZENsYXNzICgic3VuL3BsdWdpbi9qYXZhc2NyaXB0L3dlYmtpdC9K
U09iamVjdCIpOwotICAgICAgICBpZiAoIUpTT2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgICAgIGVu
di0+RXhjZXB0aW9uRGVzY3JpYmUoKTsKLSAgICAgICAgICAgIGVudi0+RXhjZXB0aW9uQ2xlYXIo
KTsKLSAgICAgICAgICAgIEpTT2JqZWN0Q2xhc3MgPSBlbnYtPkZpbmRDbGFzcyAoImFwcGxlL2Fw
cGxldC9KU09iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgam1ldGhv
ZElEIGNvbnN0cnVjdG9ySUQgPSBlbnYtPkdldE1ldGhvZElEIChKU09iamVjdENsYXNzLCAiPGlu
aXQ+IiwgIihKKVYiKTsKLSAgICAgICAgaWYgKGNvbnN0cnVjdG9ySUQgIT0gTlVMTCkgewotICAg
ICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNvbnN0cnVj
dG9ySUQsIG5hdGl2ZUhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotSlNWYWx1ZSAqSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmFs
dWUgKGpvYmplY3QgdGhlT2JqZWN0KSBjb25zdAotewotICAgIC8vIEluc3RhbmNlcyBvZiBuZXRz
Y2FwZS5qYXZhc2NyaXB0LkpTT2JqZWN0IGdldCBjb252ZXJ0ZWQgYmFjayB0bwotICAgIC8vIEph
dmFTY3JpcHQgb2JqZWN0cy4gIEFsbCBvdGhlciBvYmplY3RzIGFyZSB3cmFwcGVkLiAgSXQncyBu
b3QKLSAgICAvLyBwb3NzaWJsZSB0byBwYXNzIHByaW1pdGl2ZSB0eXBlcyBmcm9tIHRoZSBKYXZh
IHRvIEphdmFTY3JpcHQuCi0gICAgLy8gU2VlIHNlY3Rpb24gMjIuNyBvZiAnSmF2YVNjcmlwdDog
IFRoZSBEZWZpbml0aXZlIEd1aWRlLCA0dGggRWRpdGlvbicsCi0gICAgLy8gZmlndXJlIDIyLTQu
Ci0gICAgam9iamVjdCBjbGFzc09mSW5zdGFuY2UgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KHRo
ZU9iamVjdCwgImdldENsYXNzIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKLSAgICBqc3RyaW5n
IGNsYXNzTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4oY2xhc3NPZkluc3Rh
bmNlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgIAotICAgIC8vIE9u
bHkgdGhlIHN1bi5wbHVnaW4uamF2YXNjcmlwdC53ZWJraXQuSlNPYmplY3QgaGFzIGEgbWVtYmVy
IGNhbGxlZCBuYXRpdmVKU09iamVjdC4gVGhpcyBjbGFzcyBpcwotICAgIC8vIGNyZWF0ZWQgYWJv
dmUgdG8gd3JhcCBpbnRlcm5hbCBicm93c2VyIG9iamVjdHMuIFRoZSBjb25zdHJ1Y3RvciBvZiB0
aGlzIGNsYXNzIHRha2VzIHRoZSBuYXRpdmUKLSAgICAvLyBwb2ludGVyIGFuZCBzdG9yZXMgaXQg
aW4gdGhpcyBvYmplY3QsIHNvIHRoYXQgaXQgY2FuIGJlIHJldHJpZXZlZCBiZWxvdy4KLSAgICBp
ZiAoc3RyY21wKEphdmFTdHJpbmcoY2xhc3NOYW1lKS5VVEY4U3RyaW5nKCksICJzdW4ucGx1Z2lu
LmphdmFzY3JpcHQud2Via2l0LkpTT2JqZWN0IikgPT0gMCkgewotICAgICAgICAvLyBQdWxsIHRo
ZSBuYXRpdmVKU09iamVjdCB2YWx1ZSBmcm9tIHRoZSBKYXZhIGluc3RhbmNlLiAgVGhpcyBpcyBh
Ci0gICAgICAgIC8vIHBvaW50ZXIgdG8gdGhlIEpTT2JqZWN0LgotICAgICAgICBKTklFbnYgKmVu
diA9IGdldEpOSUVudigpOwotICAgICAgICBqZmllbGRJRCBmaWVsZElEID0gZW52LT5HZXRGaWVs
ZElEKChqY2xhc3MpY2xhc3NPZkluc3RhbmNlLCAibmF0aXZlSlNPYmplY3QiLCAiSiIpOwotICAg
ICAgICBpZiAoZmllbGRJRCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgfQotICAgICAgICBqbG9uZyBuYXRpdmVIYW5kbGUgPSBlbnYtPkdldExv
bmdGaWVsZCh0aGVPYmplY3QsIGZpZWxkSUQpOwotICAgICAgICBpZiAobmF0aXZlSGFuZGxlID09
IFVuZGVmaW5lZEhhbmRsZSkgewotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgSlNPYmplY3QgKmltcCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
amxvbmdfdG9faW1wcHRyKG5hdGl2ZUhhbmRsZSkpOwotICAgICAgICByZXR1cm4gaW1wOwotICAg
IH0KLQotICAgIEpTTG9jayBsb2NrOwotCi0gICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRoZU9iamVjdCwg
X3Jvb3RPYmplY3QpKTsKLX0KLQotdm9pZCBKYXZhSlNPYmplY3Q6OmdldExpc3RGcm9tSkFycmF5
KGpvYmplY3RBcnJheSBqQXJyYXksIExpc3QmIGxpc3QpIGNvbnN0Ci17Ci0gICAgSk5JRW52ICpl
bnYgPSBnZXRKTklFbnYoKTsKLSAgICBpbnQgaSwgbnVtT2JqZWN0cyA9IGpBcnJheSA/IGVudi0+
R2V0QXJyYXlMZW5ndGggKGpBcnJheSkgOiAwOwotICAgIAotICAgIGZvciAoaSA9IDA7IGkgPCBu
dW1PYmplY3RzOyBpKyspIHsKLSAgICAgICAgam9iamVjdCBhbk9iamVjdCA9IGVudi0+R2V0T2Jq
ZWN0QXJyYXlFbGVtZW50ICgoam9iamVjdEFycmF5KWpBcnJheSwgaSk7Ci0gICAgICAgIGlmIChh
bk9iamVjdCkgewotICAgICAgICAgICAgbGlzdC5hcHBlbmQoY29udmVydEpPYmplY3RUb1ZhbHVl
KGFuT2JqZWN0KSk7Ci0gICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmIChhbk9iamVjdCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkRl
c2NyaWJlKCk7Ci0gICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLWV4dGVybiAiQyIgewotCi1qbG9uZyBLSlNfSlNDcmVhdGVOYXRpdmVKU09i
amVjdCAoSk5JRW52KiwgamNsYXNzLCBqc3RyaW5nLCBqbG9uZyBuYXRpdmVIYW5kbGUsIGpib29s
ZWFuKQotewotICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LnR5
cGUgPSBDcmVhdGVOYXRpdmU7Ci0gICAgY29udGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5k
bGU7Ci0gICAgcmV0dXJuIEphdmFKU09iamVjdDo6aW52b2tlICgmY29udGV4dCkuajsKLX0KLQot
dm9pZCBLSlNfSlNPYmplY3RfSlNGaW5hbGl6ZSAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRp
dmVIYW5kbGUpCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRl
eHQudHlwZSA9IEZpbmFsaXplOwotICAgIGNvbnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFu
ZGxlOwotICAgIEphdmFKU09iamVjdDo6aW52b2tlICgmY29udGV4dCk7Ci19Ci0KLWpvYmplY3Qg
S0pTX0pTT2JqZWN0X0pTT2JqZWN0Q2FsbCAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVI
YW5kbGUsIGpzdHJpbmcsIGpzdHJpbmcgbWV0aG9kTmFtZSwgam9iamVjdEFycmF5IGFyZ3MsIGpi
b29sZWFuKQotewotICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0
LnR5cGUgPSBDYWxsOwotICAgIGNvbnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFuZGxlOwot
ICAgIGNvbnRleHQuc3RyaW5nID0gbWV0aG9kTmFtZTsKLSAgICBjb250ZXh0LmFyZ3MgPSBhcmdz
OwotICAgIHJldHVybiBKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRleHQpLmw7Ci19Ci0KLWpv
YmplY3QgS0pTX0pTT2JqZWN0X0pTT2JqZWN0RXZhbCAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBu
YXRpdmVIYW5kbGUsIGpzdHJpbmcsIGpzdHJpbmcganNjcmlwdCwgamJvb2xlYW4pCi17Ci0gICAg
SlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IEV2YWw7Ci0g
ICAgY29udGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5kbGU7Ci0gICAgY29udGV4dC5zdHJp
bmcgPSBqc2NyaXB0OwotICAgIHJldHVybiBKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRleHQp
Lmw7Ci19Ci0KLWpvYmplY3QgS0pTX0pTT2JqZWN0X0pTT2JqZWN0R2V0TWVtYmVyIChKTklFbnYq
LCBqY2xhc3MsIGpsb25nIG5hdGl2ZUhhbmRsZSwganN0cmluZywganN0cmluZyBqbmFtZSwgamJv
b2xlYW4pCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQu
dHlwZSA9IEdldE1lbWJlcjsKLSAgICBjb250ZXh0Lm5hdGl2ZUhhbmRsZSA9IG5hdGl2ZUhhbmRs
ZTsKLSAgICBjb250ZXh0LnN0cmluZyA9IGpuYW1lOwotICAgIHJldHVybiBKYXZhSlNPYmplY3Q6
Omludm9rZSAoJmNvbnRleHQpLmw7Ci19Ci0KLXZvaWQgS0pTX0pTT2JqZWN0X0pTT2JqZWN0U2V0
TWVtYmVyIChKTklFbnYqLCBqY2xhc3MsIGpsb25nIG5hdGl2ZUhhbmRsZSwganN0cmluZywganN0
cmluZyBqbmFtZSwgam9iamVjdCB2YWx1ZSwgamJvb2xlYW4pCi17Ci0gICAgSlNPYmplY3RDYWxs
Q29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IFNldE1lbWJlcjsKLSAgICBjb250
ZXh0Lm5hdGl2ZUhhbmRsZSA9IG5hdGl2ZUhhbmRsZTsKLSAgICBjb250ZXh0LnN0cmluZyA9IGpu
YW1lOwotICAgIGNvbnRleHQudmFsdWUgPSB2YWx1ZTsKLSAgICBKYXZhSlNPYmplY3Q6Omludm9r
ZSAoJmNvbnRleHQpOwotfQotCi12b2lkIEtKU19KU09iamVjdF9KU09iamVjdFJlbW92ZU1lbWJl
ciAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVIYW5kbGUsIGpzdHJpbmcsIGpzdHJpbmcg
am5hbWUsIGpib29sZWFuKQotewotICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4dDsKLSAg
ICBjb250ZXh0LnR5cGUgPSBSZW1vdmVNZW1iZXI7Ci0gICAgY29udGV4dC5uYXRpdmVIYW5kbGUg
PSBuYXRpdmVIYW5kbGU7Ci0gICAgY29udGV4dC5zdHJpbmcgPSBqbmFtZTsKLSAgICBKYXZhSlNP
YmplY3Q6Omludm9rZSAoJmNvbnRleHQpOwotfQotCi1qb2JqZWN0IEtKU19KU09iamVjdF9KU09i
amVjdEdldFNsb3QgKEpOSUVudiosIGpjbGFzcywgamxvbmcgbmF0aXZlSGFuZGxlLCBqc3RyaW5n
LCBqaW50IGppbmRleCwgamJvb2xlYW4pCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250
ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IEdldFNsb3Q7Ci0gICAgY29udGV4dC5uYXRpdmVIYW5k
bGUgPSBuYXRpdmVIYW5kbGU7Ci0gICAgY29udGV4dC5pbmRleCA9IGppbmRleDsKLSAgICByZXR1
cm4gSmF2YUpTT2JqZWN0OjppbnZva2UgKCZjb250ZXh0KS5sOwotfQotCi12b2lkIEtKU19KU09i
amVjdF9KU09iamVjdFNldFNsb3QgKEpOSUVudiosIGpjbGFzcywgamxvbmcgbmF0aXZlSGFuZGxl
LCBqc3RyaW5nLCBqaW50IGppbmRleCwgam9iamVjdCB2YWx1ZSwgamJvb2xlYW4pCi17Ci0gICAg
SlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IFNldFNsb3Q7
Ci0gICAgY29udGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5kbGU7Ci0gICAgY29udGV4dC5p
bmRleCA9IGppbmRleDsKLSAgICBjb250ZXh0LnZhbHVlID0gdmFsdWU7Ci0gICAgSmF2YUpTT2Jq
ZWN0OjppbnZva2UgKCZjb250ZXh0KTsKLX0KLQotanN0cmluZyBLSlNfSlNPYmplY3RfSlNPYmpl
Y3RUb1N0cmluZyAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVIYW5kbGUpCi17Ci0gICAg
SlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IFRvU3RyaW5n
OwotICAgIGNvbnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFuZGxlOwotICAgIHJldHVybiAo
anN0cmluZylKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRleHQpLmw7Ci19Ci0KLX0KSW5kZXg6
IGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9qbmkvam5p
X2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAzMTAzMCkJKGZyb20gYnJpZGdlL2puaS9qbmlfanNvYmpl
Y3QuY3BwOjMxMDMwKQorKysgYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiam5pX2pzb2JqZWN0LmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIldlYkNvcmVGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJqbmlfcnVudGltZS5oIgorI2luY2x1
ZGUgImpuaV91dGlsaXR5LmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAicnVu
dGltZV9vYmplY3QuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxranMv
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSA8a2pzL0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8
a2pzL2ludGVycHJldGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcg
V2ViQ29yZTo6RnJhbWU7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwordXNpbmcg
bmFtZXNwYWNlIEtKUzsKKworI2lmZGVmIE5ERUJVRworI2RlZmluZSBKU19MT0coZm9ybWF0QW5k
QXJncy4uLikgKCh2b2lkKTApCisjZWxzZQorI2RlZmluZSBKU19MT0coZm9ybWF0QW5kQXJncy4u
LikgeyBcCisgICAgZnByaW50ZiAoc3RkZXJyLCAiJXMoJXAsJXApOiAgIiwgX19QUkVUVFlfRlVO
Q1RJT05fXywgX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgp
KTsgXAorICAgIGZwcmludGYoc3RkZXJyLCBmb3JtYXRBbmRBcmdzKTsgXAorfQorI2VuZGlmCisK
KyNkZWZpbmUgVW5kZWZpbmVkSGFuZGxlIDEKKworc3RhdGljIENGUnVuTG9vcFNvdXJjZVJlZiBf
cGVyZm9ybUphdmFTY3JpcHRTb3VyY2U7CitzdGF0aWMgQ0ZSdW5Mb29wUmVmIF9wZXJmb3JtSmF2
YVNjcmlwdFJ1bkxvb3A7CisKKy8vIE1heSBvbmx5IGJlIHNldCBieSBkaXNwYXRjaFRvSmF2YVNj
cmlwdFRocmVhZCgpLgorc3RhdGljIENGUnVuTG9vcFNvdXJjZVJlZiBjb21wbGV0aW9uU291cmNl
OworCitzdGF0aWMgdm9pZCBjb21wbGV0ZWRKYXZhU2NyaXB0QWNjZXNzICh2b2lkICppKQorewor
ICAgIGFzc2VydCAoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpICE9IF9wZXJmb3JtSmF2YVNjcmlwdFJ1
bkxvb3ApOworICAgIAorICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgKmNhbGxDb250ZXh0ID0gKEpT
T2JqZWN0Q2FsbENvbnRleHQgKilpOworICAgIENGUnVuTG9vcFJlZiBydW5Mb29wID0gKENGUnVu
TG9vcFJlZiljYWxsQ29udGV4dC0+b3JpZ2luYXRpbmdMb29wOworICAgIAorICAgIGFzc2VydCAo
Q0ZSdW5Mb29wR2V0Q3VycmVudCgpID09IHJ1bkxvb3ApOworICAgIAorICAgIENGUnVuTG9vcFN0
b3AocnVuTG9vcCk7Cit9CisKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBqYXZhU2NyaXB0QWNjZXNz
TG9ja09uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgamF2
YVNjcmlwdEFjY2Vzc0xvY2s7CitzdGF0aWMgaW50IGphdmFTY3JpcHRBY2Nlc3NMb2NrQ291bnQg
PSAwOworCitzdGF0aWMgdm9pZCBpbml0aWFsaXplSmF2YVNjcmlwdEFjY2Vzc0xvY2soKQorewor
ICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgICAKKyAgICBwdGhyZWFkX211dGV4YXR0
cl9pbml0KCZhdHRyKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlICgmYXR0ciwgUFRI
UkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgIAorICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmamF2
YVNjcmlwdEFjY2Vzc0xvY2ssICZhdHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tK
YXZhU2NyaXB0QWNjZXNzKCkKK3sKKyAgICAvLyBQZXJoYXBzIGFkZCBkZWFkbG9jayBkZXRlY3Rp
b24/CisgICAgcHRocmVhZF9vbmNlKCZqYXZhU2NyaXB0QWNjZXNzTG9ja09uY2UsIGluaXRpYWxp
emVKYXZhU2NyaXB0QWNjZXNzTG9jayk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZqYXZhU2Ny
aXB0QWNjZXNzTG9jayk7CisgICAgamF2YVNjcmlwdEFjY2Vzc0xvY2tDb3VudCsrOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrSmF2YVNjcmlwdEFjY2VzcygpCit7CisgICAgamF2YVNj
cmlwdEFjY2Vzc0xvY2tDb3VudC0tOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZqYXZhU2Ny
aXB0QWNjZXNzTG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BhdGNoVG9KYXZhU2NyaXB0VGhy
ZWFkKEpTT2JqZWN0Q2FsbENvbnRleHQgKmNvbnRleHQpCit7CisgICAgLy8gVGhpcyBsb2NrIGd1
YXJhbnRlZXMgdGhhdCBvbmx5IG9uZSB0aHJlYWQgY2FuIGludm9rZQorICAgIC8vIGF0IGEgdGlt
ZSwgYW5kIGFsc28gZ3VhcmFudGVlcyB0aGF0IGNvbXBsZXRpb25Tb3VyY2U7CisgICAgLy8gd29u
J3QgZ2V0IGNsb2JiZXJlZC4KKyAgICBsb2NrSmF2YVNjcmlwdEFjY2VzcygpOworICAgIAorICAg
IENGUnVuTG9vcFJlZiBjdXJyZW50UnVuTG9vcCA9IENGUnVuTG9vcEdldEN1cnJlbnQoKTsKKyAg
ICAKKyAgICBhc3NlcnQgKGN1cnJlbnRSdW5Mb29wICE9IF9wZXJmb3JtSmF2YVNjcmlwdFJ1bkxv
b3ApOworICAgIAorICAgIC8vIFNldHVwIGEgc291cmNlIHRvIHNpZ25hbCBvbmNlIHRoZSBpbnZv
Y2F0aW9uIG9mIHRoZSBKYXZhU2NyaXB0CisgICAgLy8gY2FsbCBjb21wbGV0ZXMuCisgICAgLy8K
KyAgICAvLyBGSVhNRTogIFRoaXMgY291bGQgYmUgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNz
dWUuICBDcmVhdGluZyBhbmQKKyAgICAvLyBhZGRpbmcgcnVuIGxvb3Agc291cmNlcyBpcyBleHBl
bnNpdmUuICBXZSBjb3VsZCBjcmVhdGUgb25lIHNvdXJjZSAKKyAgICAvLyBwZXIgdGhyZWFkLCBh
cyBuZWVkZWQsIGluc3RlYWQuCisgICAgY29udGV4dC0+b3JpZ2luYXRpbmdMb29wID0gY3VycmVu
dFJ1bkxvb3A7CisgICAgQ0ZSdW5Mb29wU291cmNlQ29udGV4dCBzb3VyY2VDb250ZXh0ID0gezAs
IGNvbnRleHQsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGNvbXBs
ZXRlZEphdmFTY3JpcHRBY2Nlc3N9OworICAgIGNvbXBsZXRpb25Tb3VyY2UgPSBDRlJ1bkxvb3BT
b3VyY2VDcmVhdGUoTlVMTCwgMCwgJnNvdXJjZUNvbnRleHQpOworICAgIENGUnVuTG9vcEFkZFNv
dXJjZShjdXJyZW50UnVuTG9vcCwgY29tcGxldGlvblNvdXJjZSwga0NGUnVuTG9vcERlZmF1bHRN
b2RlKTsKKyAgICAKKyAgICAvLyBXYWtldXAgSmF2YVNjcmlwdCBhY2Nlc3MgdGhyZWFkIGFuZCBt
YWtlIGl0IGRvIGl0J3Mgd29yay4KKyAgICBDRlJ1bkxvb3BTb3VyY2VTaWduYWwoX3BlcmZvcm1K
YXZhU2NyaXB0U291cmNlKTsKKyAgICBpZiAoQ0ZSdW5Mb29wSXNXYWl0aW5nKF9wZXJmb3JtSmF2
YVNjcmlwdFJ1bkxvb3ApKQorICAgICAgICBDRlJ1bkxvb3BXYWtlVXAoX3BlcmZvcm1KYXZhU2Ny
aXB0UnVuTG9vcCk7CisgICAgCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgSmF2YVNjcmlwdCBhY2Nl
c3MgdGhyZWFkIGlzIGRvbmUuCisgICAgQ0ZSdW5Mb29wUnVuICgpOworICAgIAorICAgIENGUnVu
TG9vcFJlbW92ZVNvdXJjZShjdXJyZW50UnVuTG9vcCwgY29tcGxldGlvblNvdXJjZSwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKyAgICBDRlJlbGVhc2UgKGNvbXBsZXRpb25Tb3VyY2UpOworICAg
IAorICAgIHVubG9ja0phdmFTY3JpcHRBY2Nlc3MoKTsKK30KKworc3RhdGljIHZvaWQgcGVyZm9y
bUphdmFTY3JpcHRBY2Nlc3Modm9pZCopCit7CisgICAgYXNzZXJ0IChDRlJ1bkxvb3BHZXRDdXJy
ZW50KCkgPT0gX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCk7CisgICAgCisgICAgLy8gRGlzcGF0
Y2ggSmF2YVNjcmlwdCBjYWxscyBoZXJlLgorICAgIENGUnVuTG9vcFNvdXJjZUNvbnRleHQgc291
cmNlQ29udGV4dDsKKyAgICBDRlJ1bkxvb3BTb3VyY2VHZXRDb250ZXh0IChjb21wbGV0aW9uU291
cmNlLCAmc291cmNlQ29udGV4dCk7CisgICAgSlNPYmplY3RDYWxsQ29udGV4dCAqY2FsbENvbnRl
eHQgPSAoSlNPYmplY3RDYWxsQ29udGV4dCAqKXNvdXJjZUNvbnRleHQuaW5mbzsgICAgCisgICAg
Q0ZSdW5Mb29wUmVmIG9yaWdpbmF0aW5nTG9vcCA9IGNhbGxDb250ZXh0LT5vcmlnaW5hdGluZ0xv
b3A7CisgICAgCisgICAgSmF2YUpTT2JqZWN0OjppbnZva2UgKGNhbGxDb250ZXh0KTsKKyAgICAK
KyAgICAvLyBTaWduYWwgdGhlIG9yaWdpbmF0aW5nIHRocmVhZCB0aGF0IHdlJ3JlIGRvbmUuCisg
ICAgQ0ZSdW5Mb29wU291cmNlU2lnbmFsIChjb21wbGV0aW9uU291cmNlKTsKKyAgICBpZiAoQ0ZS
dW5Mb29wSXNXYWl0aW5nKG9yaWdpbmF0aW5nTG9vcCkpCisgICAgICAgIENGUnVuTG9vcFdha2VV
cChvcmlnaW5hdGluZ0xvb3ApOworfQorCisvLyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSB0aHJl
YWQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzIEphdmFTY3JpcHQuCit2b2lkIEphdmFKU09i
amVjdDo6aW5pdGlhbGl6ZUpOSVRocmVhZGluZygpIHsKKyAgICAvLyBTaG91bGQgb25seSBiZSBj
YWxsZWQgb25jZS4KKyAgICBBU1NFUlQoIV9wZXJmb3JtSmF2YVNjcmlwdFJ1bkxvb3ApOworICAg
IAorICAgIC8vIEFzc3VtZSB0aGF0IHdlIGNhbiByZXRhaW4gdGhpcyBydW4gbG9vcCBmb3JldmVy
LiAgSXQnbGwgbW9zdCAKKyAgICAvLyBsaWtlbHkgKGFsd2F5cz8pIGJlIHRoZSBtYWluIGxvb3Au
CisgICAgX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCA9IChDRlJ1bkxvb3BSZWYpQ0ZSZXRhaW4o
Q0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsKKyAgICAKKyAgICAvLyBTZXR1cCBhIHNvdXJjZSB0aGUg
b3RoZXIgdGhyZWFkcyBjYW4gdXNlIHRvIHNpZ25hbCB0aGUgX3J1bkxvb3AKKyAgICAvLyB0aHJl
YWQgdGhhdCBhIEphdmFTY3JpcHQgY2FsbCBuZWVkcyB0byBiZSBpbnZva2VkLgorICAgIENGUnVu
TG9vcFNvdXJjZUNvbnRleHQgc291cmNlQ29udGV4dCA9IHswLCBOVUxMLCBOVUxMLCBOVUxMLCBO
VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBwZXJmb3JtSmF2YVNjcmlwdEFjY2Vzc307Cisg
ICAgX3BlcmZvcm1KYXZhU2NyaXB0U291cmNlID0gQ0ZSdW5Mb29wU291cmNlQ3JlYXRlKE5VTEws
IDAsICZzb3VyY2VDb250ZXh0KTsKKyAgICBDRlJ1bkxvb3BBZGRTb3VyY2UoX3BlcmZvcm1KYXZh
U2NyaXB0UnVuTG9vcCwgX3BlcmZvcm1KYXZhU2NyaXB0U291cmNlLCBrQ0ZSdW5Mb29wRGVmYXVs
dE1vZGUpOworfQorCitzdGF0aWMgYm9vbCBpc0phdmFTY3JpcHRUaHJlYWQoKQoreworICAgIHJl
dHVybiAoX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCA9PSBDRlJ1bkxvb3BHZXRDdXJyZW50KCkp
OworfQorCitqdmFsdWUgSmF2YUpTT2JqZWN0OjppbnZva2UoSlNPYmplY3RDYWxsQ29udGV4dCAq
Y29udGV4dCkKK3sKKyAgICBqdmFsdWUgcmVzdWx0OworCisgICAgYnplcm8gKCh2b2lkICopJnJl
c3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOworICAgIAorICAgIGlmICghaXNKYXZhU2NyaXB0VGhyZWFk
KCkpIHsgICAgICAgIAorICAgICAgICAvLyBTZW5kIHRoZSBjYWxsIGNvbnRleHQgdG8gdGhlIHRo
cmVhZCB0aGF0IGlzIGFsbG93ZWQgdG8KKyAgICAgICAgLy8gY2FsbCBKYXZhU2NyaXB0LgorICAg
ICAgICBkaXNwYXRjaFRvSmF2YVNjcmlwdFRocmVhZChjb250ZXh0KTsKKyAgICAgICAgcmVzdWx0
ID0gY29udGV4dC0+cmVzdWx0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgamxvbmcgbmF0
aXZlSGFuZGxlID0gY29udGV4dC0+bmF0aXZlSGFuZGxlOworICAgICAgICBpZiAobmF0aXZlSGFu
ZGxlID09IFVuZGVmaW5lZEhhbmRsZSB8fCBuYXRpdmVIYW5kbGUgPT0gMCkgeworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZXh0LT50eXBl
ID09IENyZWF0ZU5hdGl2ZSkgeworICAgICAgICAgICAgcmVzdWx0LmogPSBKYXZhSlNPYmplY3Q6
OmNyZWF0ZU5hdGl2ZShuYXRpdmVIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgSlNPYmplY3QgKmltcCA9IGpsb25nX3RvX2ltcHB0cihuYXRpdmVIYW5kbGUp
OworICAgICAgICAgICAgaWYgKCFmaW5kUHJvdGVjdGluZ1Jvb3RPYmplY3QoaW1wKSkgeworICAg
ICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVkOiAgQXR0ZW1wdCB0byBhY2Nlc3Mg
SmF2YVNjcmlwdCBmcm9tIGRlc3Ryb3llZCBhcHBsZXQsIHR5cGUgJWQuXG4iLCBfX0ZJTEVfXywg
X19MSU5FX18sIGNvbnRleHQtPnR5cGUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoY29udGV4dC0+dHlwZSl7ICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDYWxsOiB7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5sID0gSmF2YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkuY2FsbChjb250ZXh0LT5z
dHJpbmcsIGNvbnRleHQtPmFyZ3MpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBFdmFs
OiB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gSmF2YUpTT2JqZWN0KG5hdGl2ZUhh
bmRsZSkuZXZhbChjb250ZXh0LT5zdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dE1lbWJlcjogeworICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IEphdmFKU09iamVjdChu
YXRpdmVIYW5kbGUpLmdldE1lbWJlcihjb250ZXh0LT5zdHJpbmcpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBTZXRNZW1iZXI6IHsKKyAgICAgICAgICAgICAgICAgICAgSmF2YUpTT2Jq
ZWN0KG5hdGl2ZUhhbmRsZSkuc2V0TWVtYmVyKGNvbnRleHQtPnN0cmluZywgY29udGV4dC0+dmFs
dWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBSZW1vdmVNZW1iZXI6IHsKKyAgICAg
ICAgICAgICAgICAgICAgSmF2YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkucmVtb3ZlTWVtYmVyKGNv
bnRleHQtPnN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0U2xvdDogeworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQubCA9IEphdmFKU09iamVjdChuYXRpdmVIYW5kbGUpLmdl
dFNsb3QoY29udGV4dC0+aW5kZXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTZXRT
bG90OiB7CisgICAgICAgICAgICAgICAgICAgIEphdmFKU09iamVjdChuYXRpdmVIYW5kbGUpLnNl
dFNsb3QoY29udGV4dC0+aW5kZXgsIGNvbnRleHQtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBUb1N0cmluZzogeworICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IChqb2Jq
ZWN0KSBKYXZhSlNPYmplY3QobmF0aXZlSGFuZGxlKS50b1N0cmluZygpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBGaW5hbGl6ZTogeworICAgICAgICAgICAgICAgICAgICBKYXZhSlNPYmplY3QobmF0aXZl
SGFuZGxlKS5maW5hbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIGludmFsaWQgSmF2YVNj
cmlwdCBjYWxsXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+cmVzdWx0ID0gcmVzdWx0
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSmF2YUpTT2JqZWN0OjpKYXZh
SlNPYmplY3QoamxvbmcgbmF0aXZlSlNPYmplY3QpCit7CisgICAgX2ltcCA9IGpsb25nX3RvX2lt
cHB0cihuYXRpdmVKU09iamVjdCk7CisgICAgCisgICAgQVNTRVJUKF9pbXApOworICAgIF9yb290
T2JqZWN0ID0gZmluZFByb3RlY3RpbmdSb290T2JqZWN0KF9pbXApOworICAgIEFTU0VSVChfcm9v
dE9iamVjdCk7Cit9CisKK1Jvb3RPYmplY3QqIEphdmFKU09iamVjdDo6cm9vdE9iamVjdCgpIGNv
bnN0Cit7IAorICAgIHJldHVybiBfcm9vdE9iamVjdCAmJiBfcm9vdE9iamVjdC0+aXNWYWxpZCgp
ID8gX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOyAKK30KKworam9iamVjdCBKYXZhSlNPYmplY3Q6OmNh
bGwoanN0cmluZyBtZXRob2ROYW1lLCBqb2JqZWN0QXJyYXkgYXJncykgY29uc3QKK3sKKyAgICBK
U19MT0cgKCJtZXRob2ROYW1lID0gJXNcbiIsIEphdmFTdHJpbmcobWV0aG9kTmFtZSkuVVRGOFN0
cmluZygpKTsKKworICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0
KCk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAv
LyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9jayBsb2NrOwor
ICAgIAorICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihKYXZhU3RyaW5nKG1ldGhvZE5hbWUpLnVz
dHJpbmcoKSk7CisgICAgSlNWYWx1ZSAqZnVuYyA9IF9pbXAtPmdldCAoZXhlYywgaWRlbnRpZmll
cik7CisgICAgaWYgKGZ1bmMtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgorICAgIEpTT2JqZWN0ICpmdW5j
SW1wID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jKTsKKyAgICBKU09iamVjdCAqdGhpc09i
aiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihfaW1wKTsKKyAgICBMaXN0IGFyZ0xpc3Q7CisgICAg
Z2V0TGlzdEZyb21KQXJyYXkoYXJncywgYXJnTGlzdCk7CisgICAgcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7CisgICAgSlNWYWx1ZSAqcmVzdWx0ID0gZnVu
Y0ltcC0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKKyAgICByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+c3RvcFRpbWVvdXRDaGVjaygpOworCisgICAgcmV0dXJuIGNvbnZlcnRWYWx1
ZVRvSk9iamVjdChyZXN1bHQpOworfQorCitqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChqc3Ry
aW5nIHNjcmlwdCkgY29uc3QKK3sKKyAgICBKU19MT0cgKCJzY3JpcHQgPSAlc1xuIiwgSmF2YVN0
cmluZyhzY3JpcHQpLlVURjhTdHJpbmcoKSk7CisgICAgCisgICAgSlNPYmplY3QgKnRoaXNPYmog
PSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CisgICAgSlNWYWx1ZSAqcmVzdWx0OworICAg
IAorICAgIEpTTG9jayBsb2NrOworICAgIAorICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0
aGlzLT5yb290T2JqZWN0KCk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5zdGFydFRpbWVvdXRDaGVjaygp
OworICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShyb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBVU3RyaW5nKCksIDAsIEphdmFT
dHJpbmcoc2NyaXB0KS51c3RyaW5nKCksdGhpc09iaik7CisgICAgcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnN0b3BUaW1lb3V0Q2hlY2soKTsKKyAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBs
ZXRpb24uY29tcGxUeXBlKCk7CisgICAgCisgICAgaWYgKHR5cGUgPT0gTm9ybWFsKSB7CisgICAg
ICAgIHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAgIH0gZWxzZQorICAgICAgICBy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAgIAorICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pP
YmplY3QgKHJlc3VsdCk7Cit9CisKK2pvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0
cmluZyBtZW1iZXJOYW1lKSBjb25zdAoreworICAgIEpTX0xPRyAoIiglcCkgbWVtYmVyTmFtZSA9
ICVzXG4iLCBfaW1wLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpLlVURjhTdHJpbmcoKSk7CisKKyAg
ICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOworICAgIGlmICgh
cm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIAorICAgIEpTTG9j
ayBsb2NrOworICAgIEpTVmFsdWUgKnJlc3VsdCA9IF9pbXAtPmdldCAoZXhlYywgSWRlbnRpZmll
ciAoSmF2YVN0cmluZyhtZW1iZXJOYW1lKS51c3RyaW5nKCkpKTsKKworICAgIHJldHVybiBjb252
ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKK30KKwordm9pZCBKYXZhSlNPYmplY3Q6OnNldE1l
bWJlcihqc3RyaW5nIG1lbWJlck5hbWUsIGpvYmplY3QgdmFsdWUpIGNvbnN0Cit7CisgICAgSlNf
TE9HICgibWVtYmVyTmFtZSA9ICVzLCB2YWx1ZSA9ICVwXG4iLCBKYXZhU3RyaW5nKG1lbWJlck5h
bWUpLlVURjhTdHJpbmcoKSwgdmFsdWUpOworCisgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9
IHRoaXMtPnJvb3RPYmplY3QoKTsKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVy
bjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CisgICAgSlNMb2NrIGxvY2s7CisgICAgX2ltcC0+cHV0KGV4ZWMsIElkZW50
aWZpZXIgKEphdmFTdHJpbmcobWVtYmVyTmFtZSkudXN0cmluZygpKSwgY29udmVydEpPYmplY3RU
b1ZhbHVlKHZhbHVlKSk7Cit9CisKKwordm9pZCBKYXZhSlNPYmplY3Q6OnJlbW92ZU1lbWJlcihq
c3RyaW5nIG1lbWJlck5hbWUpIGNvbnN0Cit7CisgICAgSlNfTE9HICgibWVtYmVyTmFtZSA9ICVz
XG4iLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpLlVURjhTdHJpbmcoKSk7CisKKyAgICBSb290T2Jq
ZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOworICAgIGlmICghcm9vdE9iamVj
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2sgbG9jazsKKyAgICBfaW1w
LT5kZWxldGVQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyIChKYXZhU3RyaW5nKG1lbWJlck5hbWUp
LnVzdHJpbmcoKSkpOworfQorCisKK2pvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRTbG90KGppbnQg
aW5kZXgpIGNvbnN0Cit7CisjaWZkZWYgX19MUDY0X18KKyAgICBKU19MT0cgKCJpbmRleCA9ICVk
XG4iLCBpbmRleCk7CisjZWxzZQorICAgIEpTX0xPRyAoImluZGV4ID0gJWxkXG4iLCBpbmRleCk7
CisjZW5kaWYKKworICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0
KCk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisK
KyAgICBKU0xvY2sgbG9jazsKKyAgICBKU1ZhbHVlICpyZXN1bHQgPSBfaW1wLT5nZXQgKGV4ZWMs
ICh1bnNpZ25lZClpbmRleCk7CisKKyAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJl
c3VsdCk7Cit9CisKKwordm9pZCBKYXZhSlNPYmplY3Q6OnNldFNsb3QoamludCBpbmRleCwgam9i
amVjdCB2YWx1ZSkgY29uc3QKK3sKKyNpZmRlZiBfX0xQNjRfXworICAgIEpTX0xPRyAoImluZGV4
ID0gJWQsIHZhbHVlID0gJXBcbiIsIGluZGV4LCB2YWx1ZSk7CisjZWxzZQorICAgIEpTX0xPRyAo
ImluZGV4ID0gJWxkLCB2YWx1ZSA9ICVwXG4iLCBpbmRleCwgdmFsdWUpOworI2VuZGlmCisKKyAg
ICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOworICAgIGlmICgh
cm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2sgbG9jazsK
KyAgICBfaW1wLT5wdXQoZXhlYywgKHVuc2lnbmVkKWluZGV4LCBjb252ZXJ0Sk9iamVjdFRvVmFs
dWUodmFsdWUpKTsKK30KKworCitqc3RyaW5nIEphdmFKU09iamVjdDo6dG9TdHJpbmcoKSBjb25z
dAoreworICAgIEpTX0xPRyAoIlxuIik7CisgICAgCisgICAgUm9vdE9iamVjdCogcm9vdE9iamVj
dCA9IHRoaXMtPnJvb3RPYmplY3QoKTsKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSlNMb2NrIGxvY2s7CisgICAgSlNPYmplY3QgKnRoaXNPYmogPSBjb25z
dF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAKKyAgICByZXR1cm4gKGpzdHJp
bmcpY29udmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIHRoaXNPYmosIG9iamVjdF90eXBlLCAiamF2
YS5sYW5nLlN0cmluZyIpLmw7Cit9CisKK3ZvaWQgSmF2YUpTT2JqZWN0OjpmaW5hbGl6ZSgpIGNv
bnN0Cit7CisgICAgaWYgKFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0
KCkpCisgICAgICAgIHJvb3RPYmplY3QtPmdjVW5wcm90ZWN0KF9pbXApOworfQorCitzdGF0aWMg
UGFzc1JlZlB0cjxSb290T2JqZWN0PiBjcmVhdGVSb290T2JqZWN0KHZvaWQqIG5hdGl2ZUhhbmRs
ZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSAwOworICAgIGZvciAoTlNWaWV3ICp2aWV3ID0gKE5T
VmlldyAqKW5hdGl2ZUhhbmRsZTsgdmlldzsgdmlldyA9IFt2aWV3IHN1cGVydmlld10pIHsKKyAg
ICAgICAgaWYgKFt2aWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViQ29yZUZyYW1l
VmlldyldKSB7CisgICAgICAgICAgICBOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4gKndlYkNvcmVG
cmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qPih2aWV3KTsK
KyAgICAgICAgICAgIGZyYW1lID0gW3dlYkNvcmVGcmFtZVZpZXcgX3dlYl9mcmFtZV07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QobmF0aXZlSGFu
ZGxlLCBmcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkpOworfQorCisvLyBXZSdy
ZSBlaXRoZXIgY3JlYXRpbmcgYSAnUm9vdCcgb2JqZWN0ICh2aWEgYSBjYWxsIHRvIEphdmFKU09i
amVjdC5nZXRXaW5kb3coKSksIG9yCisvLyBhbm90aGVyIEphdmFKU09iamVjdC4KK2psb25nIEph
dmFKU09iamVjdDo6Y3JlYXRlTmF0aXZlKGpsb25nIG5hdGl2ZUhhbmRsZSkKK3sKKyAgICBKU19M
T0cgKCJuYXRpdmVIYW5kbGUgPSAlZFxuIiwgKGludCluYXRpdmVIYW5kbGUpOworCisgICAgaWYg
KG5hdGl2ZUhhbmRsZSA9PSBVbmRlZmluZWRIYW5kbGUpCisgICAgICAgIHJldHVybiBuYXRpdmVI
YW5kbGU7CisKKyAgICBpZiAoZmluZFByb3RlY3RpbmdSb290T2JqZWN0KGpsb25nX3RvX2ltcHB0
cihuYXRpdmVIYW5kbGUpKSkKKyAgICAgICAgcmV0dXJuIG5hdGl2ZUhhbmRsZTsKKworICAgIFJl
ZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gY3JlYXRlUm9vdE9iamVjdChqbG9uZ190b19w
dHIobmF0aXZlSGFuZGxlKSk7CisKKyAgICAvLyBJZiByb290T2JqZWN0IGlzICFOVUxMIFdlIG11
c3QgaGF2ZSBiZWVuIGNhbGxlZCB2aWEgbmV0c2NhcGUuamF2YXNjcmlwdC5KYXZhSlNPYmplY3Qu
Z2V0V2luZG93KCksCisgICAgLy8gb3RoZXJ3aXNlIHdlIGFyZSBiZWluZyBjYWxsZWQgYWZ0ZXIg
Y3JlYXRpbmcgYSBKYXZhSlNPYmplY3QgaW4KKyAgICAvLyBKYXZhSlNPYmplY3Q6OmNvbnZlcnRW
YWx1ZVRvSk9iamVjdCgpLgorICAgIGlmIChyb290T2JqZWN0KSB7CisgICAgICAgIEpTT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgLy8g
V2UgY2FsbCBnY1Byb3RlY3QgaGVyZSB0byBnZXQgdGhlIG9iamVjdCBpbnRvIHRoZSByb290IG9i
amVjdCdzICJwcm90ZWN0IHNldCIgd2hpY2gKKyAgICAgICAgLy8gaXMgdXNlZCB0byB0ZXN0IGlm
IGEgbmF0aXZlIGhhbmRsZSBpcyB2YWxpZCBhcyB3ZWxsIGFzIGdldHRpbmcgdGhlIHJvb3Qgb2Jq
ZWN0IGdpdmVuIHRoZSBoYW5kbGUuCisgICAgICAgIHJvb3RPYmplY3QtPmdjUHJvdGVjdChnbG9i
YWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyX3RvX2psb25nKGdsb2JhbE9iamVjdCk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBuYXRpdmVIYW5kbGU7Cit9CisKK2pvYmplY3QgSmF2YUpT
T2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QgKEpTVmFsdWUgKnZhbHVlKSBjb25zdAorewor
ICAgIEpTTG9jayBsb2NrOworICAgIAorICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlz
LT5yb290T2JqZWN0KCk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CisgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKKyAgICBqb2JqZWN0IHJl
c3VsdCA9IDA7CisgICAgCisgICAgLy8gU2VlIHNlY3Rpb24gMjIuNyBvZiAnSmF2YVNjcmlwdDog
IFRoZSBEZWZpbml0aXZlIEd1aWRlLCA0dGggRWRpdGlvbicsCisgICAgLy8gZmlndXJlIDIyLTUu
CisgICAgLy8gbnVtYmVyIC0+IGphdmEubGFuZy5Eb3VibGUKKyAgICAvLyBzdHJpbmcgLT4gamF2
YS5sYW5nLlN0cmluZworICAgIC8vIGJvb2xlYW4gLT4gamF2YS5sYW5nLkJvb2xlYW4KKyAgICAv
LyBKYXZhIGluc3RhbmNlIC0+IEphdmEgaW5zdGFuY2UKKyAgICAvLyBFdmVyeXRoaW5nIGVsc2Ug
LT4gSmF2YUpTT2JqZWN0CisgICAgCisgICAgSlNUeXBlIHR5cGUgPSB2YWx1ZS0+dHlwZSgpOwor
ICAgIGlmICh0eXBlID09IE51bWJlclR5cGUpIHsKKyAgICAgICAgamNsYXNzIEpTT2JqZWN0Q2xh
c3MgPSBlbnYtPkZpbmRDbGFzcyAoImphdmEvbGFuZy9Eb3VibGUiKTsKKyAgICAgICAgam1ldGhv
ZElEIGNvbnN0cnVjdG9ySUQgPSBlbnYtPkdldE1ldGhvZElEIChKU09iamVjdENsYXNzLCAiPGlu
aXQ+IiwgIihEKVYiKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9ySUQgIT0gTlVMTCkgeworICAg
ICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNvbnN0cnVj
dG9ySUQsIChqZG91YmxlKXZhbHVlLT50b051bWJlcihleGVjKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAodHlwZSA9PSBTdHJpbmdUeXBlKSB7CisgICAgICAgIFVTdHJpbmcgc3Ry
aW5nVmFsdWUgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CisgICAgICAgIEpOSUVudiAqZW52ID0g
Z2V0Sk5JRW52KCk7CisgICAgICAgIHJlc3VsdCA9IGVudi0+TmV3U3RyaW5nICgoY29uc3QgamNo
YXIgKilzdHJpbmdWYWx1ZS5kYXRhKCksIHN0cmluZ1ZhbHVlLnNpemUoKSk7CisgICAgfQorICAg
IGVsc2UgaWYgKHR5cGUgPT0gQm9vbGVhblR5cGUpIHsKKyAgICAgICAgamNsYXNzIEpTT2JqZWN0
Q2xhc3MgPSBlbnYtPkZpbmRDbGFzcyAoImphdmEvbGFuZy9Cb29sZWFuIik7CisgICAgICAgIGpt
ZXRob2RJRCBjb25zdHJ1Y3RvcklEID0gZW52LT5HZXRNZXRob2RJRCAoSlNPYmplY3RDbGFzcywg
Ijxpbml0PiIsICIoWilWIik7CisgICAgICAgIGlmIChjb25zdHJ1Y3RvcklEICE9IE5VTEwpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IGVudi0+TmV3T2JqZWN0IChKU09iamVjdENsYXNzLCBjb25z
dHJ1Y3RvcklELCAoamJvb2xlYW4pdmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIENyZWF0ZSBhIEphdmFKU09iamVjdC4KKyAg
ICAgICAgamxvbmcgbmF0aXZlSGFuZGxlOworICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgPT0g
T2JqZWN0VHlwZSl7CisgICAgICAgICAgICBKU09iamVjdCAqaW1wID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPih2YWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGVpdGhlciBo
YXZlIGEgd3JhcHBlciBhcm91bmQgYSBKYXZhIGluc3RhbmNlIG9yIGEgSmF2YVNjcmlwdAorICAg
ICAgICAgICAgLy8gb2JqZWN0LiAgSWYgd2UgaGF2ZSBhIHdyYXBwZXIgYXJvdW5kIGEgSmF2YSBp
bnN0YW5jZSwgcmV0dXJuIHRoYXQKKyAgICAgICAgICAgIC8vIGluc3RhbmNlLCBvdGhlcndpc2Ug
Y3JlYXRlIGEgbmV3IEphdmEgSmF2YUpTT2JqZWN0IHdpdGggdGhlIEpTT2JqZWN0KgorICAgICAg
ICAgICAgLy8gYXMgaXQncyBuYXRpdmVIYW5kbGUuCisgICAgICAgICAgICBpZiAoaW1wLT5jbGFz
c0luZm8oKSAmJiBzdHJjbXAoaW1wLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLCAiUnVudGltZU9i
amVjdCIpID09IDApIHsKKyAgICAgICAgICAgICAgICBSdW50aW1lT2JqZWN0SW1wICpydW50aW1l
SW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBKYXZhSW5zdGFuY2UgKnJ1bnRpbWVJbnN0YW5jZSA9IHN0YXRpY19jYXN0PEphdmFJbnN0
YW5jZSAqPihydW50aW1lSW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOworICAgICAgICAgICAg
ICAgIGlmICghcnVudGltZUluc3RhbmNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZUluc3RhbmNl
LT5qYXZhSW5zdGFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIG5hdGl2ZUhhbmRsZSA9IHB0cl90b19qbG9uZyhpbXApOworICAgICAgICAg
ICAgICAgIHJvb3RPYmplY3QtPmdjUHJvdGVjdChpbXApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIC8vIEFsbCBvdGhlciB0eXBlcyB3aWxsIHJlc3VsdCBpbiBhbiB1bmRlZmlu
ZWQgb2JqZWN0LgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5hdGl2ZUhhbmRsZSA9IFVu
ZGVmaW5lZEhhbmRsZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IGNyZWF0
ZSB0aGUgSmF2YSBKYXZhSlNPYmplY3QuICBMb29rIGZvciB0aGUgSmF2YUpTT2JqZWN0IGluIGl0
J3MgbmV3IChUaWdlcikKKyAgICAgICAgLy8gbG9jYXRpb24gYW5kIGluIHRoZSBvcmlnaW5hbCBK
YXZhIDEuNC4yIGxvY2F0aW9uLgorICAgICAgICBqY2xhc3MgSlNPYmplY3RDbGFzczsKKyAgICAg
ICAgCisgICAgICAgIEpTT2JqZWN0Q2xhc3MgPSBlbnYtPkZpbmRDbGFzcyAoInN1bi9wbHVnaW4v
amF2YXNjcmlwdC93ZWJraXQvSlNPYmplY3QiKTsKKyAgICAgICAgaWYgKCFKU09iamVjdENsYXNz
KSB7CisgICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkRlc2NyaWJlKCk7CisgICAgICAgICAgICBl
bnYtPkV4Y2VwdGlvbkNsZWFyKCk7CisgICAgICAgICAgICBKU09iamVjdENsYXNzID0gZW52LT5G
aW5kQ2xhc3MgKCJhcHBsZS9hcHBsZXQvSlNPYmplY3QiKTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvcklEID0gZW52LT5HZXRNZXRob2RJRCAo
SlNPYmplY3RDbGFzcywgIjxpbml0PiIsICIoSilWIik7CisgICAgICAgIGlmIChjb25zdHJ1Y3Rv
cklEICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGVudi0+TmV3T2JqZWN0IChKU09i
amVjdENsYXNzLCBjb25zdHJ1Y3RvcklELCBuYXRpdmVIYW5kbGUpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUgKkphdmFKU09iamVjdDo6
Y29udmVydEpPYmplY3RUb1ZhbHVlIChqb2JqZWN0IHRoZU9iamVjdCkgY29uc3QKK3sKKyAgICAv
LyBJbnN0YW5jZXMgb2YgbmV0c2NhcGUuamF2YXNjcmlwdC5KU09iamVjdCBnZXQgY29udmVydGVk
IGJhY2sgdG8KKyAgICAvLyBKYXZhU2NyaXB0IG9iamVjdHMuICBBbGwgb3RoZXIgb2JqZWN0cyBh
cmUgd3JhcHBlZC4gIEl0J3Mgbm90CisgICAgLy8gcG9zc2libGUgdG8gcGFzcyBwcmltaXRpdmUg
dHlwZXMgZnJvbSB0aGUgSmF2YSB0byBKYXZhU2NyaXB0LgorICAgIC8vIFNlZSBzZWN0aW9uIDIy
Ljcgb2YgJ0phdmFTY3JpcHQ6ICBUaGUgRGVmaW5pdGl2ZSBHdWlkZSwgNHRoIEVkaXRpb24nLAor
ICAgIC8vIGZpZ3VyZSAyMi00LgorICAgIGpvYmplY3QgY2xhc3NPZkluc3RhbmNlID0gY2FsbEpO
SU1ldGhvZDxqb2JqZWN0Pih0aGVPYmplY3QsICJnZXRDbGFzcyIsICIoKUxqYXZhL2xhbmcvQ2xh
c3M7Iik7CisgICAganN0cmluZyBjbGFzc05hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpv
YmplY3Q+KGNsYXNzT2ZJbnN0YW5jZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsi
KTsKKyAgICAKKyAgICAvLyBPbmx5IHRoZSBzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0LkpT
T2JqZWN0IGhhcyBhIG1lbWJlciBjYWxsZWQgbmF0aXZlSlNPYmplY3QuIFRoaXMgY2xhc3MgaXMK
KyAgICAvLyBjcmVhdGVkIGFib3ZlIHRvIHdyYXAgaW50ZXJuYWwgYnJvd3NlciBvYmplY3RzLiBU
aGUgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyB0YWtlcyB0aGUgbmF0aXZlCisgICAgLy8gcG9p
bnRlciBhbmQgc3RvcmVzIGl0IGluIHRoaXMgb2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSByZXRy
aWV2ZWQgYmVsb3cuCisgICAgaWYgKHN0cmNtcChKYXZhU3RyaW5nKGNsYXNzTmFtZSkuVVRGOFN0
cmluZygpLCAic3VuLnBsdWdpbi5qYXZhc2NyaXB0LndlYmtpdC5KU09iamVjdCIpID09IDApIHsK
KyAgICAgICAgLy8gUHVsbCB0aGUgbmF0aXZlSlNPYmplY3QgdmFsdWUgZnJvbSB0aGUgSmF2YSBp
bnN0YW5jZS4gIFRoaXMgaXMgYQorICAgICAgICAvLyBwb2ludGVyIHRvIHRoZSBKU09iamVjdC4K
KyAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKKyAgICAgICAgamZpZWxkSUQgZmll
bGRJRCA9IGVudi0+R2V0RmllbGRJRCgoamNsYXNzKWNsYXNzT2ZJbnN0YW5jZSwgIm5hdGl2ZUpT
T2JqZWN0IiwgIkoiKTsKKyAgICAgICAgaWYgKGZpZWxkSUQgPT0gTlVMTCkgeworICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgamxvbmcgbmF0aXZl
SGFuZGxlID0gZW52LT5HZXRMb25nRmllbGQodGhlT2JqZWN0LCBmaWVsZElEKTsKKyAgICAgICAg
aWYgKG5hdGl2ZUhhbmRsZSA9PSBVbmRlZmluZWRIYW5kbGUpIHsKKyAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIEpTT2JqZWN0ICppbXAgPSBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KGpsb25nX3RvX2ltcHB0cihuYXRpdmVIYW5kbGUpKTsKKyAgICAg
ICAgcmV0dXJuIGltcDsKKyAgICB9CisKKyAgICBKU0xvY2sgbG9jazsKKworICAgIHJldHVybiBL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChKYXZhSW5zdGFuY2U6
OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KSk7Cit9CisKK3ZvaWQgSmF2YUpTT2JqZWN0
OjpnZXRMaXN0RnJvbUpBcnJheShqb2JqZWN0QXJyYXkgakFycmF5LCBMaXN0JiBsaXN0KSBjb25z
dAoreworICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgaW50IGksIG51bU9iamVj
dHMgPSBqQXJyYXkgPyBlbnYtPkdldEFycmF5TGVuZ3RoIChqQXJyYXkpIDogMDsKKyAgICAKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgbnVtT2JqZWN0czsgaSsrKSB7CisgICAgICAgIGpvYmplY3QgYW5P
YmplY3QgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudCAoKGpvYmplY3RBcnJheSlqQXJyYXks
IGkpOworICAgICAgICBpZiAoYW5PYmplY3QpIHsKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGNv
bnZlcnRKT2JqZWN0VG9WYWx1ZShhbk9iamVjdCkpOworICAgICAgICAgICAgZW52LT5EZWxldGVM
b2NhbFJlZiAoYW5PYmplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgZW52LT5FeGNlcHRpb25EZXNjcmliZSgpOworICAgICAgICAgICAgZW52LT5FeGNlcHRpb25D
bGVhcigpOworICAgICAgICB9CisgICAgfQorfQorCitleHRlcm4gIkMiIHsKKworamxvbmcgS0pT
X0pTQ3JlYXRlTmF0aXZlSlNPYmplY3QgKEpOSUVudiosIGpjbGFzcywganN0cmluZywgamxvbmcg
bmF0aXZlSGFuZGxlLCBqYm9vbGVhbikKK3sKKyAgICBKU09iamVjdENhbGxDb250ZXh0IGNvbnRl
eHQ7CisgICAgY29udGV4dC50eXBlID0gQ3JlYXRlTmF0aXZlOworICAgIGNvbnRleHQubmF0aXZl
SGFuZGxlID0gbmF0aXZlSGFuZGxlOworICAgIHJldHVybiBKYXZhSlNPYmplY3Q6Omludm9rZSAo
JmNvbnRleHQpLmo7Cit9CisKK3ZvaWQgS0pTX0pTT2JqZWN0X0pTRmluYWxpemUgKEpOSUVudios
IGpjbGFzcywgamxvbmcgbmF0aXZlSGFuZGxlKQoreworICAgIEpTT2JqZWN0Q2FsbENvbnRleHQg
Y29udGV4dDsKKyAgICBjb250ZXh0LnR5cGUgPSBGaW5hbGl6ZTsKKyAgICBjb250ZXh0Lm5hdGl2
ZUhhbmRsZSA9IG5hdGl2ZUhhbmRsZTsKKyAgICBKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRl
eHQpOworfQorCitqb2JqZWN0IEtKU19KU09iamVjdF9KU09iamVjdENhbGwgKEpOSUVudiosIGpj
bGFzcywgamxvbmcgbmF0aXZlSGFuZGxlLCBqc3RyaW5nLCBqc3RyaW5nIG1ldGhvZE5hbWUsIGpv
YmplY3RBcnJheSBhcmdzLCBqYm9vbGVhbikKK3sKKyAgICBKU09iamVjdENhbGxDb250ZXh0IGNv
bnRleHQ7CisgICAgY29udGV4dC50eXBlID0gQ2FsbDsKKyAgICBjb250ZXh0Lm5hdGl2ZUhhbmRs
ZSA9IG5hdGl2ZUhhbmRsZTsKKyAgICBjb250ZXh0LnN0cmluZyA9IG1ldGhvZE5hbWU7CisgICAg
Y29udGV4dC5hcmdzID0gYXJnczsKKyAgICByZXR1cm4gSmF2YUpTT2JqZWN0OjppbnZva2UgKCZj
b250ZXh0KS5sOworfQorCitqb2JqZWN0IEtKU19KU09iamVjdF9KU09iamVjdEV2YWwgKEpOSUVu
diosIGpjbGFzcywgamxvbmcgbmF0aXZlSGFuZGxlLCBqc3RyaW5nLCBqc3RyaW5nIGpzY3JpcHQs
IGpib29sZWFuKQoreworICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4dDsKKyAgICBjb250
ZXh0LnR5cGUgPSBFdmFsOworICAgIGNvbnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFuZGxl
OworICAgIGNvbnRleHQuc3RyaW5nID0ganNjcmlwdDsKKyAgICByZXR1cm4gSmF2YUpTT2JqZWN0
OjppbnZva2UgKCZjb250ZXh0KS5sOworfQorCitqb2JqZWN0IEtKU19KU09iamVjdF9KU09iamVj
dEdldE1lbWJlciAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVIYW5kbGUsIGpzdHJpbmcs
IGpzdHJpbmcgam5hbWUsIGpib29sZWFuKQoreworICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29u
dGV4dDsKKyAgICBjb250ZXh0LnR5cGUgPSBHZXRNZW1iZXI7CisgICAgY29udGV4dC5uYXRpdmVI
YW5kbGUgPSBuYXRpdmVIYW5kbGU7CisgICAgY29udGV4dC5zdHJpbmcgPSBqbmFtZTsKKyAgICBy
ZXR1cm4gSmF2YUpTT2JqZWN0OjppbnZva2UgKCZjb250ZXh0KS5sOworfQorCit2b2lkIEtKU19K
U09iamVjdF9KU09iamVjdFNldE1lbWJlciAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVI
YW5kbGUsIGpzdHJpbmcsIGpzdHJpbmcgam5hbWUsIGpvYmplY3QgdmFsdWUsIGpib29sZWFuKQor
eworICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LnR5cGUgPSBT
ZXRNZW1iZXI7CisgICAgY29udGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5kbGU7CisgICAg
Y29udGV4dC5zdHJpbmcgPSBqbmFtZTsKKyAgICBjb250ZXh0LnZhbHVlID0gdmFsdWU7CisgICAg
SmF2YUpTT2JqZWN0OjppbnZva2UgKCZjb250ZXh0KTsKK30KKwordm9pZCBLSlNfSlNPYmplY3Rf
SlNPYmplY3RSZW1vdmVNZW1iZXIgKEpOSUVudiosIGpjbGFzcywgamxvbmcgbmF0aXZlSGFuZGxl
LCBqc3RyaW5nLCBqc3RyaW5nIGpuYW1lLCBqYm9vbGVhbikKK3sKKyAgICBKU09iamVjdENhbGxD
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC50eXBlID0gUmVtb3ZlTWVtYmVyOworICAgIGNv
bnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFuZGxlOworICAgIGNvbnRleHQuc3RyaW5nID0g
am5hbWU7CisgICAgSmF2YUpTT2JqZWN0OjppbnZva2UgKCZjb250ZXh0KTsKK30KKworam9iamVj
dCBLSlNfSlNPYmplY3RfSlNPYmplY3RHZXRTbG90IChKTklFbnYqLCBqY2xhc3MsIGpsb25nIG5h
dGl2ZUhhbmRsZSwganN0cmluZywgamludCBqaW5kZXgsIGpib29sZWFuKQoreworICAgIEpTT2Jq
ZWN0Q2FsbENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LnR5cGUgPSBHZXRTbG90OworICAg
IGNvbnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFuZGxlOworICAgIGNvbnRleHQuaW5kZXgg
PSBqaW5kZXg7CisgICAgcmV0dXJuIEphdmFKU09iamVjdDo6aW52b2tlICgmY29udGV4dCkubDsK
K30KKwordm9pZCBLSlNfSlNPYmplY3RfSlNPYmplY3RTZXRTbG90IChKTklFbnYqLCBqY2xhc3Ms
IGpsb25nIG5hdGl2ZUhhbmRsZSwganN0cmluZywgamludCBqaW5kZXgsIGpvYmplY3QgdmFsdWUs
IGpib29sZWFuKQoreworICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4dDsKKyAgICBjb250
ZXh0LnR5cGUgPSBTZXRTbG90OworICAgIGNvbnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFu
ZGxlOworICAgIGNvbnRleHQuaW5kZXggPSBqaW5kZXg7CisgICAgY29udGV4dC52YWx1ZSA9IHZh
bHVlOworICAgIEphdmFKU09iamVjdDo6aW52b2tlICgmY29udGV4dCk7Cit9CisKK2pzdHJpbmcg
S0pTX0pTT2JqZWN0X0pTT2JqZWN0VG9TdHJpbmcgKEpOSUVudiosIGpjbGFzcywgamxvbmcgbmF0
aXZlSGFuZGxlKQoreworICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4dDsKKyAgICBjb250
ZXh0LnR5cGUgPSBUb1N0cmluZzsKKyAgICBjb250ZXh0Lm5hdGl2ZUhhbmRsZSA9IG5hdGl2ZUhh
bmRsZTsKKyAgICByZXR1cm4gKGpzdHJpbmcpSmF2YUpTT2JqZWN0OjppbnZva2UgKCZjb250ZXh0
KS5sOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBicmlkZ2Uvam5pL2puaV9qc29iamVj
dC5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCgpJbmRleDogbG9hZGVyL21hYy9M
b2FkZXJOU1VSTEV4dHJhcy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9tYWMvTG9hZGVyTlNVUkxF
eHRyYXMubQkocmV2aXNpb24gMzEwMzApCisrKyBsb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFz
Lm0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCi0KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0jaW1wb3J0ICJLVVJMLmgiCi0j
aW1wb3J0ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW1wb3J0ICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
Ci0jaW1wb3J0ICJQbGF0Zm9ybVN0cmluZy5oIgotI2ltcG9ydCAiV2ViQ29yZU5TU3RyaW5nRXh0
cmFzLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgYm9vbCB2ZWN0b3JD
b250YWluc1N0cmluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKLXsKLSAgICBpbnQgc2l6ZSA9IHZlY3Rvci5zaXplKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIGlmICh2ZWN0b3JbaV0gPT0gc3RyaW5nKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1OU1N0cmlu
ZyAqc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5cGUoTlNVUkwgKnVybCwgTlNTdHJpbmcgKk1J
TUVUeXBlKQotewotICAgIC8vIEdldCB0aGUgZmlsZW5hbWUgZnJvbSB0aGUgVVJMLiBUcnkgdGhl
IGxhc3RQYXRoQ29tcG9uZW50IGZpcnN0LgotICAgIE5TU3RyaW5nICpsYXN0UGF0aENvbXBvbmVu
dCA9IFtbdXJsIHBhdGhdIGxhc3RQYXRoQ29tcG9uZW50XTsKLSAgICBOU1N0cmluZyAqZmlsZW5h
bWUgPSBmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMobGFzdFBhdGhDb21wb25lbnQp
OwotICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBuaWw7Ci0KLSAgICBpZiAoW2ZpbGVuYW1lIGxl
bmd0aF0gPT0gMCB8fCBbbGFzdFBhdGhDb21wb25lbnQgaXNFcXVhbFRvU3RyaW5nOkAiLyJdKSB7
Ci0gICAgICAgIC8vIGxhc3RQYXRoQ29tcG9uZW50IGlzIG5vIGdvb2QsIHRyeSB0aGUgaG9zdC4K
LSAgICAgICAgTlNTdHJpbmcgKmhvc3QgPSBLVVJMKHVybCkuaG9zdCgpOwotICAgICAgICBmaWxl
bmFtZSA9IGZpbGVuYW1lQnlGaXhpbmdJbGxlZ2FsQ2hhcmFjdGVycyhob3N0KTsKLSAgICAgICAg
aWYgKFtmaWxlbmFtZSBsZW5ndGhdID09IDApIHsKLSAgICAgICAgICAgIC8vIENhbid0IG1ha2Ug
YSBmaWxlbmFtZSB1c2luZyB0aGlzIFVSTCwgdXNlICJ1bmtub3duIi4KLSAgICAgICAgICAgIGZp
bGVuYW1lID0gY29weUltYWdlVW5rbm93bkZpbGVMYWJlbCgpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gU2F2ZSB0aGUgZXh0ZW5zaW9uIGZvciBsYXRlciBjb3JyZWN0aW9u
LiBPbmx5IGNvcnJlY3QgdGhlIGV4dGVuc2lvbiBvZiB0aGUgbGFzdFBhdGhDb21wb25lbnQuCi0g
ICAgICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgZmlsZW5hbWUgZW5kcyB1cCBiZWluZyB0aGUg
aG9zdCwgd2Ugd291bGRuJ3Qgd2FudCB0byBjb3JyZWN0ICIuY29tIiBpbiAid3d3LmFwcGxlLmNv
bSIuCi0gICAgICAgIGV4dGVuc2lvbiA9IFtmaWxlbmFtZSBwYXRoRXh0ZW5zaW9uXTsKLSAgICB9
Ci0KLSAgICAvLyBObyBtaW1lIHR5cGUgcmVwb3J0ZWQuIEp1c3QgcmV0dXJuIHRoZSBmaWxlbmFt
ZSB3ZSBoYXZlIG5vdy4KLSAgICBpZiAoIU1JTUVUeXBlKSB7Ci0gICAgICAgIHJldHVybiBmaWxl
bmFtZTsKLSAgICB9Ci0KLSAgICAvLyBEbyBub3QgY29ycmVjdCBmaWxlbmFtZXMgdGhhdCBhcmUg
cmVwb3J0ZWQgd2l0aCBhIG1pbWUgdHlwZSBvZiB0YXIsIGFuZCAKLSAgICAvLyBoYXZlIGEgZmls
ZW5hbWUgd2hpY2ggaGFzIC50YXIgaW4gaXQgb3IgZW5kcyBpbiAudGd6Ci0gICAgaWYgKChbTUlN
RVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAiYXBwbGljYXRpb24vdGFyIl0gfHwgW01JTUVUeXBlIGlz
RXF1YWxUb1N0cmluZzpAImFwcGxpY2F0aW9uL3gtdGFyIl0pIAotICAgICAgICAmJiAoaGFzQ2Fz
ZUluc2Vuc2l0aXZlU3Vic3RyaW5nKGZpbGVuYW1lLCBAIi50YXIiKQotICAgICAgICB8fCBoYXND
YXNlSW5zZW5zaXRpdmVTdWZmaXgoZmlsZW5hbWUsIEAiLnRneiIpKSkgewotICAgICAgICByZXR1
cm4gZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgLy8gSSBkb24ndCB0aGluayB3ZSBuZWVkIHRvIHdv
cnJ5IGFib3V0IHRoaXMgZm9yIHRoZSBpbWFnZSBjYXNlCi0gICAgLy8gSWYgdGhlIHR5cGUgaXMg
a25vd24sIGNoZWNrIHRoZSBleHRlbnNpb24gYW5kIGNvcnJlY3QgaXQgaWYgbmVjZXNzYXJ5Lgot
ICAgIGlmICghW01JTUVUeXBlIGlzRXF1YWxUb1N0cmluZzpAImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSJdICYmICFbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAidGV4dC9wbGFpbiJdKSB7Ci0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRF
eHRlbnNpb25zRm9yTUlNRVR5cGUoTUlNRVR5cGUpOwotCi0gICAgICAgIGlmIChleHRlbnNpb25z
LmlzRW1wdHkoKSB8fCAhdmVjdG9yQ29udGFpbnNTdHJpbmcoZXh0ZW5zaW9ucywgZXh0ZW5zaW9u
KSkgewotICAgICAgICAgICAgLy8gVGhlIGV4dGVuc2lvbiBkb2Vzbid0IG1hdGNoIHRoZSBNSU1F
IHR5cGUuIENvcnJlY3QgdGhpcy4KLSAgICAgICAgICAgIE5TU3RyaW5nICpjb3JyZWN0RXh0ZW5z
aW9uID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUo
TUlNRVR5cGUpOwotICAgICAgICAgICAgaWYgKFtjb3JyZWN0RXh0ZW5zaW9uIGxlbmd0aF0gIT0g
MCkgewotICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgY29ycmVjdCBleHRlbnNpb24uCi0g
ICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBbZmlsZW5hbWUgc3RyaW5nQnlBcHBlbmRpbmdQYXRo
RXh0ZW5zaW9uOmNvcnJlY3RFeHRlbnNpb25dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZpbGVuYW1lOwotfQpJbmRleDogbG9hZGVyL21hYy9Mb2FkZXJO
U1VSTEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFz
Lm1tCShyZXZpc2lvbiAzMTAzMCkJKGZyb20gbG9hZGVyL21hYy9Mb2FkZXJOU1VSTEV4dHJhcy5t
OjMxMDMwKQorKysgbG9hZGVyL21hYy9Mb2FkZXJOU1VSTEV4dHJhcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiTG9hZGVyTlNVUkxFeHRyYXMuaCIKKworI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNpbXBvcnQgIktVUkwuaCIKKyNpbXBvcnQgIkxvY2FsaXpl
ZFN0cmluZ3MuaCIKKyNpbXBvcnQgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbXBvcnQgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW1wb3J0ICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBib29sIHZlY3RvckNvbnRhaW5zU3RyaW5nKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IGludCBzaXplID0gdmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
IGkrKykKKyAgICAgICAgaWYgKHZlY3RvcltpXSA9PSBzdHJpbmcpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05TU3RyaW5nICpzdWdnZXN0ZWRGaWxl
bmFtZVdpdGhNSU1FVHlwZShOU1VSTCAqdXJsLCBOU1N0cmluZyAqTUlNRVR5cGUpCit7CisgICAg
Ly8gR2V0IHRoZSBmaWxlbmFtZSBmcm9tIHRoZSBVUkwuIFRyeSB0aGUgbGFzdFBhdGhDb21wb25l
bnQgZmlyc3QuCisgICAgTlNTdHJpbmcgKmxhc3RQYXRoQ29tcG9uZW50ID0gW1t1cmwgcGF0aF0g
bGFzdFBhdGhDb21wb25lbnRdOworICAgIE5TU3RyaW5nICpmaWxlbmFtZSA9IGZpbGVuYW1lQnlG
aXhpbmdJbGxlZ2FsQ2hhcmFjdGVycyhsYXN0UGF0aENvbXBvbmVudCk7CisgICAgTlNTdHJpbmcg
KmV4dGVuc2lvbiA9IG5pbDsKKworICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwIHx8IFts
YXN0UGF0aENvbXBvbmVudCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pIHsKKyAgICAgICAgLy8gbGFz
dFBhdGhDb21wb25lbnQgaXMgbm8gZ29vZCwgdHJ5IHRoZSBob3N0LgorICAgICAgICBOU1N0cmlu
ZyAqaG9zdCA9IEtVUkwodXJsKS5ob3N0KCk7CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVC
eUZpeGluZ0lsbGVnYWxDaGFyYWN0ZXJzKGhvc3QpOworICAgICAgICBpZiAoW2ZpbGVuYW1lIGxl
bmd0aF0gPT0gMCkgeworICAgICAgICAgICAgLy8gQ2FuJ3QgbWFrZSBhIGZpbGVuYW1lIHVzaW5n
IHRoaXMgVVJMLCB1c2UgInVua25vd24iLgorICAgICAgICAgICAgZmlsZW5hbWUgPSBjb3B5SW1h
Z2VVbmtub3duRmlsZUxhYmVsKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBTYXZlIHRoZSBleHRlbnNpb24gZm9yIGxhdGVyIGNvcnJlY3Rpb24uIE9ubHkgY29ycmVjdCB0
aGUgZXh0ZW5zaW9uIG9mIHRoZSBsYXN0UGF0aENvbXBvbmVudC4KKyAgICAgICAgLy8gRm9yIGV4
YW1wbGUsIGlmIHRoZSBmaWxlbmFtZSBlbmRzIHVwIGJlaW5nIHRoZSBob3N0LCB3ZSB3b3VsZG4n
dCB3YW50IHRvIGNvcnJlY3QgIi5jb20iIGluICJ3d3cuYXBwbGUuY29tIi4KKyAgICAgICAgZXh0
ZW5zaW9uID0gW2ZpbGVuYW1lIHBhdGhFeHRlbnNpb25dOworICAgIH0KKworICAgIC8vIE5vIG1p
bWUgdHlwZSByZXBvcnRlZC4gSnVzdCByZXR1cm4gdGhlIGZpbGVuYW1lIHdlIGhhdmUgbm93Lgor
ICAgIGlmICghTUlNRVR5cGUpIHsKKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lOworICAgIH0KKwor
ICAgIC8vIERvIG5vdCBjb3JyZWN0IGZpbGVuYW1lcyB0aGF0IGFyZSByZXBvcnRlZCB3aXRoIGEg
bWltZSB0eXBlIG9mIHRhciwgYW5kIAorICAgIC8vIGhhdmUgYSBmaWxlbmFtZSB3aGljaCBoYXMg
LnRhciBpbiBpdCBvciBlbmRzIGluIC50Z3oKKyAgICBpZiAoKFtNSU1FVHlwZSBpc0VxdWFsVG9T
dHJpbmc6QCJhcHBsaWNhdGlvbi90YXIiXSB8fCBbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5nOkAi
YXBwbGljYXRpb24veC10YXIiXSkgCisgICAgICAgICYmIChoYXNDYXNlSW5zZW5zaXRpdmVTdWJz
dHJpbmcoZmlsZW5hbWUsIEAiLnRhciIpCisgICAgICAgIHx8IGhhc0Nhc2VJbnNlbnNpdGl2ZVN1
ZmZpeChmaWxlbmFtZSwgQCIudGd6IikpKSB7CisgICAgICAgIHJldHVybiBmaWxlbmFtZTsKKyAg
ICB9CisKKyAgICAvLyBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcyBm
b3IgdGhlIGltYWdlIGNhc2UKKyAgICAvLyBJZiB0aGUgdHlwZSBpcyBrbm93biwgY2hlY2sgdGhl
IGV4dGVuc2lvbiBhbmQgY29ycmVjdCBpdCBpZiBuZWNlc3NhcnkuCisgICAgaWYgKCFbTUlNRVR5
cGUgaXNFcXVhbFRvU3RyaW5nOkAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0gJiYgIVtNSU1F
VHlwZSBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXh0L3BsYWluIl0pIHsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz4gZXh0ZW5zaW9ucyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldEV4dGVuc2lvbnNGb3JNSU1F
VHlwZShNSU1FVHlwZSk7CisKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuaXNFbXB0eSgpIHx8ICF2
ZWN0b3JDb250YWluc1N0cmluZyhleHRlbnNpb25zLCBleHRlbnNpb24pKSB7CisgICAgICAgICAg
ICAvLyBUaGUgZXh0ZW5zaW9uIGRvZXNuJ3QgbWF0Y2ggdGhlIE1JTUUgdHlwZS4gQ29ycmVjdCB0
aGlzLgorICAgICAgICAgICAgTlNTdHJpbmcgKmNvcnJlY3RFeHRlbnNpb24gPSBNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShNSU1FVHlwZSk7CisgICAg
ICAgICAgICBpZiAoW2NvcnJlY3RFeHRlbnNpb24gbGVuZ3RoXSAhPSAwKSB7CisgICAgICAgICAg
ICAgICAgLy8gQXBwZW5kIHRoZSBjb3JyZWN0IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBm
aWxlbmFtZSA9IFtmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246Y29ycmVj
dEV4dGVuc2lvbl07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZmlsZW5hbWU7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBsb2FkZXIvbWFjL0xvYWRlck5T
VVJMRXh0cmFzLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4OiBwbGF0
Zm9ybS9tYWMvU2hhcmVkVGltZXJNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9T
aGFyZWRUaW1lck1hYy5jcHAJKHJldmlzaW9uIDMxMDMwKQorKysgcGxhdGZvcm0vbWFjL1NoYXJl
ZFRpbWVyTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaGFyZWRUaW1lci5oIgot
Ci0jaW5jbHVkZSA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotQGNsYXNzIFdlYkNvcmVQb3dlck5vdGlmaWVyOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBXZWJDb3JlUG93ZXJOb3RpZmllciAqcG93ZXJOb3RpZmllcjsKLXN0
YXRpYyBDRlJ1bkxvb3BUaW1lclJlZiBzaGFyZWRUaW1lcjsKLXN0YXRpYyB2b2lkICgqc2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKSgpOwotc3RhdGljIHZvaWQgdGltZXJGaXJlZChDRlJ1bkxvb3BU
aW1lclJlZiwgdm9pZCopOwotCi19Ci0KLUBpbnRlcmZhY2UgV2ViQ29yZVBvd2VyTm90aWZpZXIg
OiBOU09iamVjdAotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZVBvd2VyTm90aWZpZXIK
LQotLSAoaWQpaW5pdAotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgCi0gICAgaWYg
KHNlbGYpCi0gICAgICAgIFtbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gbm90aWZpY2F0
aW9uQ2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IoZGlk
V2FrZTopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTpOU1dvcmtzcGFjZURpZFdha2VOb3RpZmljYXRpb24gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdDpuaWxdOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWRpZFdha2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKFdlYkNv
cmU6OnNoYXJlZFRpbWVyKSB7Ci0gICAgICAgIFdlYkNvcmU6OnN0b3BTaGFyZWRUaW1lcigpOwot
ICAgICAgICBXZWJDb3JlOjp0aW1lckZpcmVkKDAsIDApOwotICAgIH0KLX0KLQotQGVuZAotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZv
aWQgKCpmKSgpKQotewotICAgIEFTU0VSVCghc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uIHx8IHNo
YXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9PSBmKTsKLQotICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5j
dGlvbiA9IGY7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpbWVyRmlyZWQoQ0ZSdW5Mb29wVGltZXJSZWYs
IHZvaWQqKQotewotICAgIC8vIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgZ2xvYmFsIGNhdGNo
LWFsbCBpZiB3ZSBmaXggPHJkYXI6Ly9wcm9ibGVtLzUyOTkwMTg+LgotICAgIE5TQXV0b3JlbGVh
c2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0gICAgc2hh
cmVkVGltZXJGaXJlZEZ1bmN0aW9uKCk7Ci0gICAgW3Bvb2wgZHJhaW5dOwotfQotCi12b2lkIHNl
dFNoYXJlZFRpbWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQotewotICAgIEFTU0VSVChzaGFy
ZWRUaW1lckZpcmVkRnVuY3Rpb24pOwotCi0gICAgaWYgKHNoYXJlZFRpbWVyKSB7Ci0gICAgICAg
IENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShzaGFyZWRUaW1lcik7Ci0gICAgICAgIENGUmVsZWFz
ZShzaGFyZWRUaW1lcik7Ci0gICAgfQotCi0gICAgQ0ZBYnNvbHV0ZVRpbWUgZmlyZURhdGUgPSBm
aXJlVGltZSAtIGtDRkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwOwotICAgIHNoYXJlZFRp
bWVyID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgZmlyZURhdGUsIDAsIDAsIDAsIHRpbWVyRmly
ZWQsIDApOwotICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgc2hh
cmVkVGltZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgCi0gICAgaWYgKCFwb3dlck5v
dGlmaWVyKSB7Ci0gICAgICAgIHBvd2VyTm90aWZpZXIgPSBbW1dlYkNvcmVQb3dlck5vdGlmaWVy
IGFsbG9jXSBpbml0XTsKLSAgICAgICAgQ0ZSZXRhaW4ocG93ZXJOb3RpZmllcik7Ci0gICAgICAg
IFtwb3dlck5vdGlmaWVyIHJlbGVhc2VdOwotICAgIH0KLX0KLQotdm9pZCBzdG9wU2hhcmVkVGlt
ZXIoKQotewotICAgIGlmIChzaGFyZWRUaW1lcikgewotICAgICAgICBDRlJ1bkxvb3BUaW1lcklu
dmFsaWRhdGUoc2hhcmVkVGltZXIpOwotICAgICAgICBDRlJlbGVhc2Uoc2hhcmVkVGltZXIpOwot
ICAgICAgICBzaGFyZWRUaW1lciA9IDA7Ci0gICAgfQotfQotCi19CkluZGV4OiBwbGF0Zm9ybS9t
YWMvU2hhcmVkVGltZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL1NoYXJlZFRp
bWVyTWFjLm1tCShyZXZpc2lvbiAzMTAzMCkJKGZyb20gcGxhdGZvcm0vbWFjL1NoYXJlZFRpbWVy
TWFjLmNwcDozMTAzMCkKKysrIHBsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJTaGFyZWRUaW1lci5oIgorCisjaW5jbHVkZSA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworQGNsYXNzIFdl
YkNvcmVQb3dlck5vdGlmaWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBXZWJD
b3JlUG93ZXJOb3RpZmllciAqcG93ZXJOb3RpZmllcjsKK3N0YXRpYyBDRlJ1bkxvb3BUaW1lclJl
ZiBzaGFyZWRUaW1lcjsKK3N0YXRpYyB2b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgp
Oworc3RhdGljIHZvaWQgdGltZXJGaXJlZChDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCopOworCit9
CisKK0BpbnRlcmZhY2UgV2ViQ29yZVBvd2VyTm90aWZpZXIgOiBOU09iamVjdAorQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV2ViQ29yZVBvd2VyTm90aWZpZXIKKworLSAoaWQpaW5pdAoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgCisgICAgaWYgKHNlbGYpCisgICAgICAgIFtbW05T
V29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gbm90aWZpY2F0aW9uQ2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkV2FrZTopCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZTpOU1dvcmtzcGFjZURpZFdha2VOb3RpZmljYXRpb24gCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpuaWxdOwor
ICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZFdha2U6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKFdlYkNvcmU6OnNoYXJlZFRpbWVyKSB7Cisg
ICAgICAgIFdlYkNvcmU6OnN0b3BTaGFyZWRUaW1lcigpOworICAgICAgICBXZWJDb3JlOjp0aW1l
ckZpcmVkKDAsIDApOworICAgIH0KK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgpKQoreworICAgIEFT
U0VSVCghc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uIHx8IHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlv
biA9PSBmKTsKKworICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9IGY7Cit9CisKK3N0YXRp
YyB2b2lkIHRpbWVyRmlyZWQoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqKQoreworICAgIC8vIEZJ
WE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgZ2xvYmFsIGNhdGNoLWFsbCBpZiB3ZSBmaXggPHJkYXI6
Ly9wcm9ibGVtLzUyOTkwMTg+LgorICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1
dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9u
KCk7CisgICAgW3Bvb2wgZHJhaW5dOworfQorCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZVRpbWUo
ZG91YmxlIGZpcmVUaW1lKQoreworICAgIEFTU0VSVChzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24p
OworCisgICAgaWYgKHNoYXJlZFRpbWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxp
ZGF0ZShzaGFyZWRUaW1lcik7CisgICAgICAgIENGUmVsZWFzZShzaGFyZWRUaW1lcik7CisgICAg
fQorCisgICAgQ0ZBYnNvbHV0ZVRpbWUgZmlyZURhdGUgPSBmaXJlVGltZSAtIGtDRkFic29sdXRl
VGltZUludGVydmFsU2luY2UxOTcwOworICAgIHNoYXJlZFRpbWVyID0gQ0ZSdW5Mb29wVGltZXJD
cmVhdGUoMCwgZmlyZURhdGUsIDAsIDAsIDAsIHRpbWVyRmlyZWQsIDApOworICAgIENGUnVuTG9v
cEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgc2hhcmVkVGltZXIsIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7CisgICAgCisgICAgaWYgKCFwb3dlck5vdGlmaWVyKSB7CisgICAgICAgIHBv
d2VyTm90aWZpZXIgPSBbW1dlYkNvcmVQb3dlck5vdGlmaWVyIGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgQ0ZSZXRhaW4ocG93ZXJOb3RpZmllcik7CisgICAgICAgIFtwb3dlck5vdGlmaWVyIHJlbGVh
c2VdOworICAgIH0KK30KKwordm9pZCBzdG9wU2hhcmVkVGltZXIoKQoreworICAgIGlmIChzaGFy
ZWRUaW1lcikgeworICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUoc2hhcmVkVGltZXIp
OworICAgICAgICBDRlJlbGVhc2Uoc2hhcmVkVGltZXIpOworICAgICAgICBzaGFyZWRUaW1lciA9
IDA7CisgICAgfQorfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBwbGF0Zm9ybS9tYWMvU2hh
cmVkVGltZXJNYWMubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoK
</data>
<flag name="review"
          id="8643"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>