<?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>131446</bug_id>
          
          <creation_ts>2014-04-09 11:36:52 -0700</creation_ts>
          <short_desc>[Win] Various DumpRenderTree Fixes</short_desc>
          <delta_ts>2014-04-09 13:22:10 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>999241</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-09 11:36:52 -0700</bug_when>
    <thetext>While investigating some flakiness in the Windows test runs, I found the following issues that needed to be addressed:

1. The logic that decides when to output raw text (rather than a RenderTree) does not match what happens on Mac. This caused tests to output render trees in some cases when raw text output was expected, resulting in test failures.
2. BSTR types were not consistently cleaned up, resulting in small memory leaks. Instead, we should be using the Visual Studio-supplied _bstr_t type, which encapsulates the data type and ensure proper creation/destruction.
3. BSTR types were being copied into new wstring values for the sole purpose of output to printf. This is not necessary, and should be done by an appropriate cast.
4. Hand-rolled routines to convert BSTR-&gt;JSStringRef or JSStringRef-&gt;BSTR should instead use the JS library-provided JSStringCreateWithBSTR or JSStringCopyBSTR, respectively.

This patch corrects these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999248</commentid>
    <comment_count>1</comment_count>
      <attachid>228972</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-09 12:24:12 -0700</bug_when>
    <thetext>Created attachment 228972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999262</commentid>
    <comment_count>2</comment_count>
      <attachid>228976</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-09 13:11:06 -0700</bug_when>
    <thetext>Created attachment 228976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999269</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-09 13:22:10 -0700</bug_when>
    <thetext>Committed r167030: &lt;http://trac.webkit.org/changeset/167030&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228972</attachid>
            <date>2014-04-09 12:24:12 -0700</date>
            <delta_ts>2014-04-09 13:11:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131446-20140409122351.patch</filename>
            <type>text/plain</type>
            <size>101576</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2NzAyMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3MCBAQAorMjAxNC0wNC0wOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBbV2luXSBWYXJpb3VzIER1bXBSZW5kZXJUcmVlIEZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNDQ2LgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGUpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpTU3RyaW5nQ3Jl
YXRlV2l0aEJTVFIuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlv
bik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQpOiBE
aXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVk
KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5
VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGVza3RvcE5v
dGlmaWNhdGlvblByZXNlbnRlci5jcHA6CisgICAgICAgIChEUlREZXNrdG9wTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpRdWVyeUludGVyZmFjZSk6IEdldCByaWQgb2YgdW5lZWRlZCBTVERNRVRIT0RD
QUxMVFlQRSBkZWNsYXJhdGlvbi4KKyAgICAgICAgKERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OkFkZFJlZik6IERpdHRvLgorICAgICAgICAoRFJURGVza3RvcE5vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UmVsZWFzZSk6IERpdHRvLgorICAgICAgICAoRFJURGVza3RvcE5vdGlmaWNhdGlv
blByZXNlbnRlcjo6c2hvd0Rlc2t0b3BOb3RpZmljYXRpb24pOiBTd2l0Y2ggdG8gX2JzdHJfdC4g
VXNlIEpTU3RyaW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChEUlREZXNrdG9wTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpjYW5jZWxEZXNrdG9wTm90aWZpY2F0aW9uKTogRGl0dG8uCisgICAgICAg
IChEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyOjpub3RpZmljYXRpb25EZXN0cm95ZWQp
OiBEaXR0by4KKyAgICAgICAgKERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OmNoZWNr
Tm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAgICAgICAoRFJURGVza3RvcE5vdGlm
aWNhdGlvblByZXNlbnRlcjo6cmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBEaXR0by4K
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNl
bnRlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6
CisgICAgICAgIChkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoZHVt
cEZyYW1lc0FzVGV4dCk6IERpdHRvLgorICAgICAgICAoY29tcGFyZUhpc3RvcnlJdGVtcyk6IERp
dHRvLgorICAgICAgICAoZHVtcEhpc3RvcnlJdGVtKTogRGl0dG8uCisgICAgICAgIChkdW1wKTog
RGl0dG8uCisgICAgICAgIChyZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKTogRGl0dG8u
CisgICAgICAgIChyZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcpOiBE
aXR0by4KKyAgICAgICAgKHJ1blRlc3QpOiBEaXR0by4KKyAgICAgICAgKGNyZWF0ZVdlYlZpZXdB
bmRPZmZzY3JlZW5XaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
RWRpdGluZ0RlbGVnYXRlLmNwcDoKKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6UXVlcnlJbnRl
cmZhY2UpOiBHZXQgcmlkIG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRpb24u
CisgICAgICAgIChFZGl0aW5nRGVsZWdhdGU6OkFkZFJlZik6IERpdHRvLgorICAgICAgICAoRWRp
dGluZ0RlbGVnYXRlOjpSZWxlYXNlKTogRGl0dG8uCisgICAgICAgIChkdW1wUGF0aCk6IFN3aXRj
aCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNUUgorICAgICAgICAoRWRpdGlu
Z0RlbGVnYXRlOjpzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlKTogR2V0IHJpZCBvZiB1bmVl
ZGVkIFNURE1FVEhPRENBTExUWVBFIGRlY2xhcmF0aW9uLgorICAgICAgICAoRWRpdGluZ0RlbGVn
YXRlOjpzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZSk6IERpdHRvLgorICAgICAgICAoRWRpdGlu
Z0RlbGVnYXRlOjpzaG91bGRJbnNlcnROb2RlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVs
ZWdhdGU6OnNob3VsZEluc2VydFRleHQpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0
ZTo6c2hvdWxkRGVsZXRlRE9NUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0
ZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSk6IERpdHRvLgorICAgICAgICAoRWRpdGlu
Z0RlbGVnYXRlOjpzaG91bGRBcHBseVN0eWxlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVs
ZWdhdGU6OnNob3VsZENoYW5nZVR5cGluZ1N0eWxlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5n
RGVsZWdhdGU6OmRvUGxhdGZvcm1Db21tYW5kKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVs
ZWdhdGU6OndlYlZpZXdEaWRCZWdpbkVkaXRpbmcpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpT
U3RyaW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChFZGl0aW5nRGVsZWdhdGU6OndlYlZpZXdE
aWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZEVu
ZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZENo
YW5nZVR5cGluZ1N0eWxlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVsZWdhdGU6OndlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
d2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKGRlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KTogU3dpdGNoIHRvIF9ic3RyX3QuIFVzZSBKU1N0cmluZ0NyZWF0ZVdpdGhC
U1RSLgorICAgICAgICAoRnJhbWVMb2FkRGVsZWdhdGU6OkZyYW1lTG9hZERlbGVnYXRlKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UpOiBHZXQgcmlk
IG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRpb24uCisgICAgICAgIChGcmFt
ZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKTogRGl0dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0
ZTo6UmVsZWFzZSk6IERpdHRvLgorICAgICAgICAoRnJhbWVMb2FkRGVsZWdhdGU6OmRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpTU3RyaW5n
Q3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAg
KEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKTog
RGl0dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVRpdGxlKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ2hhbmdlSWNvbnMpOiBEaXR0by4K
KyAgICAgICAgKGRlbGVnYXRlc1dpdGhEZWxheWVkV29yayk6IERpdHRvLgorICAgICAgICAoRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSk6IERpdHRvLgorICAgICAgICAo
RnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZhaWxMb2FkV2l0aEVycm9yKTogRGl0dG8uCisgICAgICAg
IChGcmFtZUxvYWREZWxlZ2F0ZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RG
b3JGcmFtZSk6IERpdHRvLgorICAgICAgICAoRnJhbWVMb2FkRGVsZWdhdGU6OndpbGxDbG9zZUZy
YW1lKTogRGl0dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWRI
YW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZSk6IERpdHRvLgorICAgICAgICAoRnJhbWVMb2FkRGVs
ZWdhdGU6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEluRnJhbWUpOiBEaXR0by4KKyAg
ICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50KTog
RGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmg6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0hpc3RvcnlEZWxlZ2F0ZS5jcHA6CisgICAg
ICAgIChIaXN0b3J5RGVsZWdhdGU6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKTogU3dp
dGNoIHRvIF9ic3RyX3QuIFVzZSBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RSLgorICAgICAgICAoSGlz
dG9yeURlbGVnYXRlOjp1cGRhdGVIaXN0b3J5VGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEhpc3Rv
cnlEZWxlZ2F0ZTo6cG9wdWxhdGVWaXNpdGVkTGlua3NGb3JXZWJWaWV3KTogRGl0dG8uCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcDoKKyAgICAgICAgKGR1
bXBQYXRoKToKKyAgICAgICAgKFBvbGljeURlbGVnYXRlOjpRdWVyeUludGVyZmFjZSk6IEdldCBy
aWQgb2YgdW5lZWRlZCBTVERNRVRIT0RDQUxMVFlQRSBkZWNsYXJhdGlvbi4KKyAgICAgICAgKFBv
bGljeURlbGVnYXRlOjpBZGRSZWYpOiBEaXR0by4KKyAgICAgICAgKFBvbGljeURlbGVnYXRlOjpS
ZWxlYXNlKTogRGl0dG8uCisgICAgICAgIChQb2xpY3lEZWxlZ2F0ZTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbik6IFN3aXRjaCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVX
aXRoQlNUUi4KKyAgICAgICAgKFBvbGljeURlbGVnYXRlOjp1bmFibGVUb0ltcGxlbWVudFBvbGlj
eVdpdGhFcnJvcik6IERpdHRvLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJj
ZUxvYWREZWxlZ2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpTU3Ry
aW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6UXVlcnlJ
bnRlcmZhY2UpOiBHZXQgcmlkIG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRp
b24uCisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKTogRGl0dG8uCisgICAg
ICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6UmVsZWFzZSk6IERpdHRvLgorICAgICAgICAoUmVz
b3VyY2VMb2FkRGVsZWdhdGU6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCk6IFN3aXRjaCB0
byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNUUi4KKyAgICAgICAgKFJlc291cmNl
TG9hZERlbGVnYXRlOjpyZW1vdmVJZGVudGlmaWVyRm9yUmVxdWVzdCk6IERpdHRvLgorICAgICAg
ICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCk6IERpdHRvLgorICAgICAg
ICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSk6IERpdHRvLgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNw
b25zZSk6IERpdHRvLgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaExv
YWRpbmdGcm9tRGF0YVNvdXJjZSk6IERpdHRvLgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdh
dGU6OmRpZEZhaWxMb2FkaW5nV2l0aEVycm9yKTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZCk6IFN3aXRjaCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNU
Ui4KKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChU
ZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UpOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5u
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTogRGl0dG8uCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL1RleHRJbnB1dENvbnRyb2xsZXJXaW4uY3BwOiBEaXR0by4KKyAgICAg
ICAgKFRleHRJbnB1dENvbnRyb2xsZXI6OnNldE1hcmtlZFRleHQpOiBTd2l0Y2ggdG8gX2JzdHJf
dC4gVXNlIEpTU3RyaW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9s
bGVyOjppbnNlcnRUZXh0KTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1VJ
RGVsZWdhdGUuY3BwOgorICAgICAgICAoVUlEZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UpOiBHZXQg
cmlkIG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRpb24uCisgICAgICAgIChV
SURlbGVnYXRlOjpBZGRSZWYpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OlJlbGVhc2Up
OiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6Omhhc0N1c3RvbU1lbnVJbXBsZW1lbnRhdGlv
bik6IFN3aXRjaCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNUUi4KKyAgICAg
ICAgKFVJRGVsZWdhdGU6OnRyYWNrQ3VzdG9tUG9wdXBNZW51KTogRGl0dG8uCisgICAgICAgIChV
SURlbGVnYXRlOjpyZWdpc3RlclVuZG9XaXRoVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChVSURl
bGVnYXRlOjpyZW1vdmVBbGxBY3Rpb25zV2l0aFRhcmdldCk6IERpdHRvLgorICAgICAgICAoVUlE
ZWxlZ2F0ZTo6c2V0QWN0aW9uVGl0bGUpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnVu
ZG8pOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnJlZG8pOiBEaXR0by4KKyAgICAgICAg
KFVJRGVsZWdhdGU6OmNhblVuZG8pOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmNhblJl
ZG8pOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnByaW50RnJhbWUpOiBEaXR0by4KKyAg
ICAgICAgKFVJRGVsZWdhdGU6OmZ0cERpcmVjdG9yeVRlbXBsYXRlUGF0aCk6IERpdHRvLgorICAg
ICAgICAoVUlEZWxlZ2F0ZTo6d2ViVmlld0hlYWRlckhlaWdodCk6IERpdHRvLgorICAgICAgICAo
VUlEZWxlZ2F0ZTo6d2ViVmlld0Zvb3RlckhlaWdodCk6IERpdHRvLgorICAgICAgICAoVUlEZWxl
Z2F0ZTo6ZHJhd0hlYWRlckluUmVjdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6ZHJh
d0Zvb3RlckluUmVjdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6d2ViVmlld1ByaW50
aW5nTWFyZ2luUmVjdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6Y2FuUnVuTW9kYWwp
OiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmNyZWF0ZU1vZGFsRGlhbG9nKTogRGl0dG8u
CisgICAgICAgIChVSURlbGVnYXRlOjpydW5Nb2RhbCk6IERpdHRvLgorICAgICAgICAoVUlEZWxl
Z2F0ZTo6aXNNZW51QmFyVmlzaWJsZSk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6c2V0
TWVudUJhclZpc2libGUpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnJ1bkRhdGFiYXNl
U2l6ZUxpbWl0UHJvbXB0KTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjpwYWludEN1c3Rv
bVNjcm9sbGJhcik6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cGFpbnRDdXN0b21TY3Jv
bGxDb3JuZXIpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnNldEZyYW1lKTogRGl0dG8u
CisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFVJ
RGVsZWdhdGU6OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UpOiBEaXR0by4KKyAg
ICAgICAgKFVJRGVsZWdhdGU6OnJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVs
V2l0aFByb21wdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6Ondl
YlZpZXdBZGRNZXNzYWdlVG9Db25zb2xlKTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjpk
b0RyYWdEcm9wKTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3R2V0RGxnQ29k
ZSk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6Y3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0
KTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3Q2xvc2UpOiBEaXR0by4KKyAg
ICAgICAgKFVJRGVsZWdhdGU6OndlYlZpZXdGb2N1cyk6IERpdHRvLgorICAgICAgICAoVUlEZWxl
Z2F0ZTo6d2ViVmlld1VuZm9jdXMpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OndlYlZp
ZXdQYWludGVkKTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjpleGNlZWRlZERhdGFiYXNl
UXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmVtYmVkZGVkVmlld1dpdGhBcmd1
bWVudHMpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OndlYlZpZXdDbG9zaW5nKTogRGl0
dG8uCisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3U2V0Q3Vyc29yKTogRGl0dG8uCisgICAg
ICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3RGlkSW52YWxpZGF0ZSk6IERpdHRvLgorICAgICAgICAo
VUlEZWxlZ2F0ZTo6c2V0U3RhdHVzVGV4dCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6
ZGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZSk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0
ZTo6ZHJhd0JhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6
ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uKTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvd2luL1dvcmtRdWV1ZUl0ZW1XaW4uY3BwOiBEaXR0by4KKyAgICAgICAgKExvYWRJdGVt
OjppbnZva2UpOiAgU3dpdGNoIHRvIF9ic3RyX3QuIFVzZSBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RS
LgorICAgICAgICAoTG9hZEhUTUxTdHJpbmdJdGVtOjppbnZva2UpOiBEaXR0by4KKyAgICAgICAg
KFNjcmlwdEl0ZW06Omludm9rZSk6IERpdHRvLgorCiAyMDE0LTA0LTA5ICBHZXJnbyBCYWxvZ2gg
IDxnYmFsb2doLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAKICAgICAgICAgU3R5bGVj
aGVja2VyOiBGYWxzZSBwb3NpdGl2ZSBvbiBpbmxpbmUgYXNtIGNvZGUuCkBAIC0xMzksNiArMzA2
LDE3IEBACiAKIDIwMTQtMDQtMDggIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CiAKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5l
ZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6
CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorCisyMDE0LTA0LTA4ICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQgZ2Fy
ZGVuaW5nIChUYWtlIDIpOiBQcmV2ZW50IHVzZXJzIGZyb20gYXR0ZW1wdGluZwogICAgICAgICB0
byBidWlsZCB3aXRoIGtub3duIGludmFsaWQgY1VSTC4gCiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAJKHJl
dmlzaW9uIDE2NzAyMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkRGVsZWdh
dGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogI2luY2x1ZGUgPGNvbXV0aWwuaD4KICNpbmNsdWRlIDx0Y2hhci5oPgpAQCAt
Mjk2LDEyICsyOTcsMTEgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0
bAogICAgIGlmICghbV9lbGVtZW50KQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKIAotICAgIEJTVFIgdGl0bGVCU1RSOwotICAgIGlmIChGQUlMRUQo
bV9lbGVtZW50LT5nZXRfYWNjTmFtZShzZWxmKCksICZ0aXRsZUJTVFIpKSB8fCAhdGl0bGVCU1RS
KQorICAgIF9ic3RyX3QgdGl0bGVCU1RSOworICAgIGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRf
YWNjTmFtZShzZWxmKCksICZ0aXRsZUJTVFIuR2V0QlNUUigpKSkgfHwgIXRpdGxlQlNUUi5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci0gICAgd3N0cmluZyB0aXRsZSh0aXRsZUJTVFIsIFN5c1N0cmluZ0xlbih0aXRsZUJTVFIpKTsK
LSAgICA6OlN5c0ZyZWVTdHJpbmcodGl0bGVCU1RSKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycyh0aXRsZS5kYXRhKCksIHRpdGxlLmxlbmd0aCgpKTsKKworICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RSKHRpdGxlQlNUUik7CiB9CiAKIEpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTMwOSwxMiArMzA5LDEw
IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2MKICAgICBpZiAoIW1f
ZWxlbWVudCkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7CiAKLSAgICBCU1RSIGRlc2NyaXB0aW9uQlNUUjsKLSAgICBpZiAoRkFJTEVEKG1fZWxlbWVu
dC0+Z2V0X2FjY0Rlc2NyaXB0aW9uKHNlbGYoKSwgJmRlc2NyaXB0aW9uQlNUUikpIHx8ICFkZXNj
cmlwdGlvbkJTVFIpCisgICAgX2JzdHJfdCBkZXNjcmlwdGlvbkJTVFI7CisgICAgaWYgKEZBSUxF
RChtX2VsZW1lbnQtPmdldF9hY2NEZXNjcmlwdGlvbihzZWxmKCksICZkZXNjcmlwdGlvbkJTVFIu
R2V0QlNUUigpKSkgfHwgIWRlc2NyaXB0aW9uQlNUUi5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0gICAgd3N0cmluZyBkZXNjcmlw
dGlvbihkZXNjcmlwdGlvbkJTVFIsIFN5c1N0cmluZ0xlbihkZXNjcmlwdGlvbkJTVFIpKTsKLSAg
ICA6OlN5c0ZyZWVTdHJpbmcoZGVzY3JpcHRpb25CU1RSKTsKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycyhkZXNjcmlwdGlvbi5kYXRhKCksIGRlc2NyaXB0aW9uLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQlNUUihkZXNjcmlwdGlvbkJTVFIp
OwogfQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgp
CkBAIC0zMzIsMTIgKzMzMCwxMCBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoZWxwCiAgICAgaWYgKCFtX2VsZW1lbnQpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCi0gICAgQlNUUiBoZWxwVGV4dEJTVFI7Ci0gICAgaWYg
KEZBSUxFRChtX2VsZW1lbnQtPmdldF9hY2NIZWxwKHNlbGYoKSwgJmhlbHBUZXh0QlNUUikpIHx8
ICFoZWxwVGV4dEJTVFIpCisgICAgX2JzdHJfdCBoZWxwVGV4dEJTVFI7CisgICAgaWYgKEZBSUxF
RChtX2VsZW1lbnQtPmdldF9hY2NIZWxwKHNlbGYoKSwgJmhlbHBUZXh0QlNUUi5HZXRCU1RSKCkp
KSB8fCAhaGVscFRleHRCU1RSLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLSAgICB3c3RyaW5nIGhlbHBUZXh0KGhlbHBUZXh0QlNU
UiwgU3lzU3RyaW5nTGVuKGhlbHBUZXh0QlNUUikpOwotICAgIDo6U3lzRnJlZVN0cmluZyhoZWxw
VGV4dEJTVFIpOwotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGhlbHBU
ZXh0LmRhdGEoKSwgaGVscFRleHQubGVuZ3RoKCkpOworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhCU1RSKGhlbHBUZXh0QlNUUik7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp4KCkKQEAgLTQ3MiwxMyArNDY4LDEyIEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbnRWYWx1ZSgKICAgICBpZiAoIW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBCU1RSIHZhbHVlQlNUUjsKLSAgICBpZiAoRkFJTEVEKG1fZWxlbWVudC0+Z2V0X2FjY1Zh
bHVlKHNlbGYoKSwgJnZhbHVlQlNUUikpIHx8ICF2YWx1ZUJTVFIpCisgICAgX2JzdHJfdCB2YWx1
ZUJTVFI7CisgICAgaWYgKEZBSUxFRChtX2VsZW1lbnQtPmdldF9hY2NWYWx1ZShzZWxmKCksICZ2
YWx1ZUJTVFIuR2V0QlNUUigpKSkgfHwgIXZhbHVlQlNUUi5sZW5ndGgoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgd3N0cmluZyB2YWx1ZSh2YWx1ZUJTVFIsIFN5c1N0cmluZ0xlbih2YWx1ZUJT
VFIpKTsKLSAgICA6OlN5c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKKwogICAgIFRDSEFSKiBpZ25v
cmVkOwotICAgIHJldHVybiBfdGNzdG9kKHZhbHVlLmRhdGEoKSwgJmlnbm9yZWQpOworICAgIHJl
dHVybiBfdGNzdG9kKHN0YXRpY19jYXN0PFRDSEFSKj4odmFsdWVCU1RSKSwgJmlnbm9yZWQpOwog
fQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUoKQpAQCAtNDk2LDEx
ICs0OTEsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aQogICAg
IGlmICghbV9lbGVtZW50KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEJTVFIgdmFsdWVCU1RS
OwotICAgIGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRfYWNjRGVmYXVsdEFjdGlvbihzZWxmKCks
ICZ2YWx1ZUJTVFIpIHx8ICF2YWx1ZUJTVFIpKQorICAgIF9ic3RyX3QgdmFsdWVCU1RSOworICAg
IGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRfYWNjRGVmYXVsdEFjdGlvbihzZWxmKCksICZ2YWx1
ZUJTVFIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghOjpT
eXNTdHJpbmdMZW4odmFsdWVCU1RSKSkKKyAgICBpZiAoIXZhbHVlQlNUUi5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC03MjUsMTQgKzcyMCwx
MSBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2NlCiAgICAgaWYgKCFt
X2VsZW1lbnQpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOwogCi0gICAgQlNUUiB2YWx1ZUJTVFI7Ci0gICAgaWYgKEZBSUxFRChtX2VsZW1lbnQtPmdl
dF9hY2NWYWx1ZShzZWxmKCksICZ2YWx1ZUJTVFIpKSB8fCAhdmFsdWVCU1RSKQorICAgIF9ic3Ry
X3QgdmFsdWVCU1RSOworICAgIGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRfYWNjVmFsdWUoc2Vs
ZigpLCAmdmFsdWVCU1RSLkdldEJTVFIoKSkpIHx8ICF2YWx1ZUJTVFIubGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCi0gICAgd3N0
cmluZyB2YWx1ZSh2YWx1ZUJTVFIsIFN5c1N0cmluZ0xlbih2YWx1ZUJTVFIpKTsKLSAgICA6OlN5
c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKHZhbHVlLmRhdGEoKSwgdmFsdWUubGVuZ3RoKCkpOworICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhCU1RSKHZhbHVlQlNUUik7CiB9CiAKIApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0RSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9wTm90aWZpY2F0aW9uUHJl
c2VudGVyLmNwcAkocmV2aXNpb24gMTY3MDIyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0RSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiwx
MSArMzcsMTIgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTm90aWZpY2F0aW9uQ2xpZW50Lmg+CisjaW5jbHVkZSA8Y29tdXRpbC5oPgogCiBEUlREZXNr
dG9wTm90aWZpY2F0aW9uUHJlc2VudGVyOjpEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVy
KCkKICAgICA6IG1fcmVmQ291bnQoMSkge30gCiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCitIUkVTVUxUIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQogewog
ICAgICpwcHZPYmplY3QgPSAwOwogICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVVua25v
d24pKQpAQCAtNTQsMTIgKzU2LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGVz
a3RvcE5vdGkKICAgICByZXR1cm4gU19PSzsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUg
RFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6QWRkUmVmKCkKK1VMT05HIERSVERlc2t0
b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OkFkZFJlZigpCiB7CiAgICAgcmV0dXJuICsrbV9yZWZD
b3VudDsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGVza3RvcE5vdGlmaWNhdGlv
blByZXNlbnRlcjo6UmVsZWFzZSgpCitVTE9ORyBEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOjpSZWxlYXNlKCkKIHsKICAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CiAgICAg
aWYgKCFuZXdSZWYpCkBAIC02OCwyMyArNzAsMjAgQEAgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUg
RFJURGVza3RvcE5vdGlmaQogICAgIHJldHVybiBuZXdSZWY7CiB9CiAKLUhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvd0Rlc2t0b3BO
b3RpZmljYXRpb24oCitIUkVTVUxUIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNo
b3dEZXNrdG9wTm90aWZpY2F0aW9uKAogICAgIC8qIFtpbl0gKi8gSVdlYkRlc2t0b3BOb3RpZmlj
YXRpb24qIG5vdGlmaWNhdGlvbikKIHsKLSAgICBCU1RSIHRpdGxlLCB0ZXh0LCB1cmw7CisgICAg
X2JzdHJfdCB0aXRsZSwgdGV4dCwgdXJsOwogICAgIEJPT0wgaHRtbDsKIAogICAgIGlmICghbm90
aWZpY2F0aW9uLT5pc0hUTUwoJmh0bWwpICYmIGh0bWwpIHsKLSAgICAgICAgbm90aWZpY2F0aW9u
LT5jb250ZW50c1VSTCgmdXJsKTsgICAgCi0gICAgICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklD
QVRJT046IGNvbnRlbnRzIGF0ICVTXG4iLCB1cmwgPyB1cmwgOiBMIiIpOworICAgICAgICBub3Rp
ZmljYXRpb24tPmNvbnRlbnRzVVJMKCZ1cmwuR2V0QlNUUigpKTsgICAgCisgICAgICAgIHByaW50
ZigiREVTS1RPUCBOT1RJRklDQVRJT046IGNvbnRlbnRzIGF0ICVTXG4iLCB1cmwpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG5vdGlmaWNhdGlvbi0+aWNvblVSTCgmdXJsKTsKLSAgICAgICAgbm90
aWZpY2F0aW9uLT50aXRsZSgmdGl0bGUpOwotICAgICAgICBub3RpZmljYXRpb24tPnRleHQoJnRl
eHQpOwotICAgICAgICBwcmludGYoIkRFU0tUT1AgTk9USUZJQ0FUSU9OOiBpY29uICVTLCB0aXRs
ZSAlUywgdGV4dCAlU1xuIiwgCi0gICAgICAgICAgICB1cmwgPyB1cmwgOiBMIiIsIAotICAgICAg
ICAgICAgdGl0bGUgPyB0aXRsZSA6IEwiIiwgCi0gICAgICAgICAgICB0ZXh0ID8gdGV4dCA6IEwi
Iik7CisgICAgICAgIG5vdGlmaWNhdGlvbi0+aWNvblVSTCgmdXJsLkdldEJTVFIoKSk7CisgICAg
ICAgIG5vdGlmaWNhdGlvbi0+dGl0bGUoJnRpdGxlLkdldEJTVFIoKSk7CisgICAgICAgIG5vdGlm
aWNhdGlvbi0+dGV4dCgmdGV4dC5HZXRCU1RSKCkpOworICAgICAgICBwcmludGYoIkRFU0tUT1Ag
Tk9USUZJQ0FUSU9OOiBpY29uICVTLCB0aXRsZSAlUywgdGV4dCAlU1xuIiwgc3RhdGljX2Nhc3Q8
d2NoYXJfdCo+KHVybCksIHN0YXRpY19jYXN0PHdjaGFyX3QqPih0aXRsZSksIHN0YXRpY19jYXN0
PHdjaGFyX3QqPih0ZXh0KSk7CiAgICAgfQogCiAgICAgLy8gSW4gdGhpcyBzdHViIGltcGxlbWVu
dGF0aW9uLCB0aGUgbm90aWZpY2F0aW9uIGlzIGRpc3BsYXllZCBpbW1lZGlhdGVseTsKQEAgLTk0
LDI0ICs5MywyNCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERSVERlc2t0b3BOb3RpCiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGVza3Rv
cE5vdGlmaWNhdGlvblByZXNlbnRlcjo6Y2FuY2VsRGVza3RvcE5vdGlmaWNhdGlvbigKK0hSRVNV
TFQgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6Y2FuY2VsRGVza3RvcE5vdGlmaWNh
dGlvbigKICAgICAvKiBbaW5dICovIElXZWJEZXNrdG9wTm90aWZpY2F0aW9uKiBub3RpZmljYXRp
b24pCiB7Ci0gICAgQlNUUiBpZGVudGlmaWVyOworICAgIF9ic3RyX3QgaWRlbnRpZmllcjsKICAg
ICBCT09MIGh0bWw7CiAgICAgbm90aWZpY2F0aW9uLT5pc0hUTUwoJmh0bWwpOwogICAgIGlmICho
dG1sKQotICAgICAgICBub3RpZmljYXRpb24tPmNvbnRlbnRzVVJMKCZpZGVudGlmaWVyKTsKKyAg
ICAgICAgbm90aWZpY2F0aW9uLT5jb250ZW50c1VSTCgmaWRlbnRpZmllci5HZXRCU1RSKCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbm90aWZpY2F0aW9uLT50aXRsZSgmaWRlbnRpZmllcik7CisgICAg
ICAgIG5vdGlmaWNhdGlvbi0+dGl0bGUoJmlkZW50aWZpZXIuR2V0QlNUUigpKTsKIAotICAgIHBy
aW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gQ0xPU0VEOiAlU1xuIiwgaWRlbnRpZmllciA/IGlk
ZW50aWZpZXIgOiBMIiIpOworICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gQ0xPU0VE
OiAlU1xuIiwgc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KGlkZW50aWZpZXIpKTsKICAgICBub3RpZmlj
YXRpb24tPm5vdGlmeUNsb3NlKGZhbHNlKTsKIAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6Om5v
dGlmaWNhdGlvbkRlc3Ryb3llZCgKK0hSRVNVTFQgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNl
bnRlcjo6bm90aWZpY2F0aW9uRGVzdHJveWVkKAogICAgIC8qIFtpbl0gKi8gSVdlYkRlc2t0b3BO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKIHsKICAgICAvLyBTaW5jZSBpbiB0aGVzZSB0ZXN0
cyBldmVudHMgaGFwcGVuIGltbWVkaWF0ZWx5LCB3ZSBkb24ndCBob2xkIG9uIHRvCkBAIC0xMTks
NyArMTE4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEUlREZXNrdG9wTm90aQogICAg
IHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERSVERlc2t0b3BO
b3RpZmljYXRpb25QcmVzZW50ZXI6OmNoZWNrTm90aWZpY2F0aW9uUGVybWlzc2lvbigKK0hSRVNV
TFQgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6Y2hlY2tOb3RpZmljYXRpb25QZXJt
aXNzaW9uKAogICAgICAgICAvKiBbaW5dICovIEJTVFIgb3JpZ2luLCAKICAgICAgICAgLyogW291
dCwgcmV0dmFsXSAqLyBpbnQqIHJlc3VsdCkKIHsKQEAgLTEzNyw3ICsxMzYsNyBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIERSVERlc2t0b3BOb3RpCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
LUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRl
cjo6cmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24oCitIUkVTVUxUIERSVERlc2t0b3BOb3Rp
ZmljYXRpb25QcmVzZW50ZXI6OnJlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uKAogICAgICAg
ICAvKiBbaW5dICovIEJTVFIgb3JpZ2luKQogewogICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklD
QVRJT04gUEVSTUlTU0lPTiBSRVFVRVNURUQ6ICVTXG4iLCBvcmlnaW4gPyBvcmlnaW4gOiBMIiIp
OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERlc2t0b3BOb3RpZmljYXRpb25Q
cmVzZW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGVz
a3RvcE5vdGlmaWNhdGlvblByZXNlbnRlci5oCShyZXZpc2lvbiAxNjcwMjIpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjZGVmaW5lIERSVERlc2t0b3BOb3RpZmljYXRp
b25QcmVzZW50ZXJfaAogCiAjaW5jbHVkZSA8V2ViS2l0L1dlYktpdC5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3aW5kZWYuaD4KIAogY2xhc3MgRFJURGVza3RvcE5vdGlm
aWNhdGlvblByZXNlbnRlciA6IHB1YmxpYyBJV2ViRGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0
ZSB7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAJ
KHJldmlzaW9uIDE2NzAyMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxMSArNDAyLDEwIEBAIHZvaWQgZHVtcEZy
YW1lU2Nyb2xsUG9zaXRpb24oSVdlYkZyYW1lKgogICAgICAgICBpZiAoRkFJTEVEKGZyYW1lLT5w
YXJlbnRGcmFtZSgmcGFyZW50KSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChw
YXJlbnQpIHsKLSAgICAgICAgICAgIEJTVFIgbmFtZTsKLSAgICAgICAgICAgIGlmIChGQUlMRUQo
ZnJhbWUtPm5hbWUoJm5hbWUpKSkKKyAgICAgICAgICAgIF9ic3RyX3QgbmFtZTsKKyAgICAgICAg
ICAgIGlmIChGQUlMRUQoZnJhbWUtPm5hbWUoJm5hbWUuR2V0QlNUUigpKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgcHJpbnRmKCJmcmFtZSAnJVMnICIsIG5hbWUgPyBu
YW1lIDogTCIiKTsKLSAgICAgICAgICAgIFN5c0ZyZWVTdHJpbmcobmFtZSk7CisgICAgICAgICAg
ICBwcmludGYoImZyYW1lICclUycgIiwgc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KG5hbWUpKTsKICAg
ICAgICAgfQogICAgICAgICBwcmludGYoInNjcm9sbGVkIHRvICUuZiwlLmZcbiIsIChkb3VibGUp
c2Nyb2xsUG9zaXRpb24uY3gsIChkb3VibGUpc2Nyb2xsUG9zaXRpb24uY3kpOwogICAgIH0KQEAg
LTQ0NywyNyArNDQ2LDIzIEBAIHN0YXRpYyB3c3RyaW5nIGR1bXBGcmFtZXNBc1RleHQoSVdlYkZy
YW0KICAgICBpZiAoRkFJTEVEKGZyYW1lLT5wYXJlbnRGcmFtZSgmcGFyZW50KSkpCiAgICAgICAg
IHJldHVybiBMIiI7CiAgICAgaWYgKHBhcmVudCkgewotICAgICAgICBCU1RSIG5hbWUgPSBMIiI7
Ci0gICAgICAgIGlmIChGQUlMRUQoZnJhbWUtPm5hbWUoJm5hbWUpKSkKKyAgICAgICAgX2JzdHJf
dCBuYW1lOworICAgICAgICBpZiAoRkFJTEVEKGZyYW1lLT5uYW1lKCZuYW1lLkdldEJTVFIoKSkp
KQogICAgICAgICAgICAgcmV0dXJuIEwiIjsKIAogICAgICAgICByZXN1bHQuYXBwZW5kKEwiXG4t
LS0tLS0tLVxuRnJhbWU6ICciKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChuYW1lID8gbmFtZSA6
IEwiIiwgU3lzU3RyaW5nTGVuKG5hbWUpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNf
Y2FzdDx3Y2hhcl90Kj4obmFtZSksIG5hbWUubGVuZ3RoKCkpOwogICAgICAgICByZXN1bHQuYXBw
ZW5kKEwiJ1xuLS0tLS0tLS1cbiIpOwotCi0gICAgICAgIFN5c0ZyZWVTdHJpbmcobmFtZSk7CiAg
ICAgfQogCi0gICAgQlNUUiBpbm5lclRleHQgPSAwOworICAgIF9ic3RyX3QgaW5uZXJUZXh0Owog
ICAgIENPTVB0cjxJRE9NRWxlbWVudFByaXZhdGU+IGRvY1ByaXZhdGU7CiAgICAgaWYgKFNVQ0NF
RURFRChkb2N1bWVudEVsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKCZkb2NQcml2YXRlKSkpCi0gICAg
ICAgIGRvY1ByaXZhdGUtPmlubmVyVGV4dCgmaW5uZXJUZXh0KTsKKyAgICAgICAgZG9jUHJpdmF0
ZS0+aW5uZXJUZXh0KCZpbm5lclRleHQuR2V0QlNUUigpKTsKIAotICAgIHJlc3VsdC5hcHBlbmQo
aW5uZXJUZXh0ID8gaW5uZXJUZXh0IDogTCIiLCBTeXNTdHJpbmdMZW4oaW5uZXJUZXh0KSk7Cisg
ICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oaW5uZXJUZXh0KSwgaW5uZXJU
ZXh0Lmxlbmd0aCgpKTsKICAgICByZXN1bHQuYXBwZW5kKEwiXG4iKTsKIAotICAgIFN5c0ZyZWVT
dHJpbmcoaW5uZXJUZXh0KTsKLQogICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wQ2hpbGRGcmFt
ZXNBc1RleHQoKSkgewogICAgICAgICBDT01QdHI8SUVudW1WQVJJQU5UPiBlbnVtS2lkczsKICAg
ICAgICAgaWYgKEZBSUxFRChmcmFtZS0+Y2hpbGRGcmFtZXMoJmVudW1LaWRzKSkpCkBAIC00OTYs
MjAgKzQ5MSwxNSBAQCBzdGF0aWMgaW50IGNvbXBhcmVIaXN0b3J5SXRlbXMoY29uc3Qgdm9pCiAg
ICAgaWYgKEZBSUxFRCgoKihDT01QdHI8SVVua25vd24+KilpdGVtMiktPlF1ZXJ5SW50ZXJmYWNl
KCZpdGVtQikpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEJTVFIgdGFyZ2V0QTsKLSAgICBp
ZiAoRkFJTEVEKGl0ZW1BLT50YXJnZXQoJnRhcmdldEEpKSkKKyAgICBfYnN0cl90IHRhcmdldEE7
CisgICAgaWYgKEZBSUxFRChpdGVtQS0+dGFyZ2V0KCZ0YXJnZXRBLkdldEJTVFIoKSkpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIEJTVFIgdGFyZ2V0QjsKLSAgICBpZiAoRkFJTEVEKGl0ZW1C
LT50YXJnZXQoJnRhcmdldEIpKSkgewotICAgICAgICBTeXNGcmVlU3RyaW5nKHRhcmdldEEpOwor
ICAgIF9ic3RyX3QgdGFyZ2V0QjsKKyAgICBpZiAoRkFJTEVEKGl0ZW1CLT50YXJnZXQoJnRhcmdl
dEIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIGludCByZXN1
bHQgPSB3Y3NpY21wKHdzdHJpbmcodGFyZ2V0QSwgU3lzU3RyaW5nTGVuKHRhcmdldEEpKS5jX3N0
cigpLCB3c3RyaW5nKHRhcmdldEIsIFN5c1N0cmluZ0xlbih0YXJnZXRCKSkuY19zdHIoKSk7Ci0g
ICAgU3lzRnJlZVN0cmluZyh0YXJnZXRBKTsKLSAgICBTeXNGcmVlU3RyaW5nKHRhcmdldEIpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHdjc2ljbXAoc3RhdGljX2Nhc3Q8d2NoYXJf
dCo+KHRhcmdldEEpLCBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4odGFyZ2V0QikpOwogfQogCiBzdGF0
aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0oSVdlYkhpc3RvcnlJdGVtKiBpdGVtLCBpbnQgaW5kZW50
LCBib29sIGN1cnJlbnQpCkBAIC01MjQsNDAgKzUxNCwzNyBAQCBzdGF0aWMgdm9pZCBkdW1wSGlz
dG9yeUl0ZW0oSVdlYkhpc3RvcnlJCiAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgaW5kZW50
OyBpKyspCiAgICAgICAgIHB1dGNoYXIoJyAnKTsKIAotICAgIEJTVFIgdXJsOwotICAgIGlmIChG
QUlMRUQoaXRlbS0+VVJMU3RyaW5nKCZ1cmwpKSkKKyAgICBfYnN0cl90IHVybDsKKyAgICBpZiAo
RkFJTEVEKGl0ZW0tPlVSTFN0cmluZygmdXJsLkdldEJTVFIoKSkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAod2Nzc3RyKHVybCwgTCJmaWxlOi8iKSA9PSB1cmwpIHsKKyAgICBpZiAod2Nz
c3RyKHN0YXRpY19jYXN0PHdjaGFyX3QqPih1cmwpLCBMImZpbGU6LyIpID09IHN0YXRpY19jYXN0
PHdjaGFyX3QqPih1cmwpKSB7CiAgICAgICAgIHN0YXRpYyB3Y2hhcl90KiBsYXlvdXRUZXN0c1N0
cmluZyA9IEwiL0xheW91dFRlc3RzLyI7CiAgICAgICAgIHN0YXRpYyB3Y2hhcl90KiBmaWxlVGVz
dFN0cmluZyA9IEwiKGZpbGUgdGVzdCk6IjsKICAgICAgICAgCi0gICAgICAgIHdjaGFyX3QqIHJl
c3VsdCA9IHdjc3N0cih1cmwsIGxheW91dFRlc3RzU3RyaW5nKTsKKyAgICAgICAgd2NoYXJfdCog
cmVzdWx0ID0gd2Nzc3RyKHN0YXRpY19jYXN0PHdjaGFyX3QqPih1cmwpLCBsYXlvdXRUZXN0c1N0
cmluZyk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgd2NoYXJfdCogc3RhcnQgPSByZXN1bHQgKyB3Y3NsZW4obGF5b3V0VGVzdHNTdHJp
bmcpOwogCi0gICAgICAgIEJTVFIgbmV3VVJMID0gU3lzQWxsb2NTdHJpbmdMZW4oTlVMTCwgU3lz
U3RyaW5nTGVuKHVybCkpOwotICAgICAgICB3Y3NjcHkobmV3VVJMLCBmaWxlVGVzdFN0cmluZyk7
Ci0gICAgICAgIHdjc2NweShuZXdVUkwgKyB3Y3NsZW4oZmlsZVRlc3RTdHJpbmcpLCBzdGFydCk7
CisgICAgICAgIF9ic3RyX3QgbmV3VVJMKFN5c0FsbG9jU3RyaW5nTGVuKDAsIFN5c1N0cmluZ0xl
bih1cmwpKSwgZmFsc2UpOworICAgICAgICB3Y3NjcHkoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KG5l
d1VSTCksIGZpbGVUZXN0U3RyaW5nKTsKKyAgICAgICAgd2NzY3B5KHN0YXRpY19jYXN0PHdjaGFy
X3QqPihuZXdVUkwpICsgd2NzbGVuKGZpbGVUZXN0U3RyaW5nKSwgc3RhcnQpOwogCi0gICAgICAg
IFN5c0ZyZWVTdHJpbmcodXJsKTsKICAgICAgICAgdXJsID0gbmV3VVJMOwogICAgIH0KIAotICAg
IHByaW50ZigiJVMiLCB1cmwgPyB1cmwgOiBMIiIpOwotICAgIFN5c0ZyZWVTdHJpbmcodXJsKTsK
KyAgICBwcmludGYoIiVTIiwgc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KHVybCkpOwogCiAgICAgQ09N
UHRyPElXZWJIaXN0b3J5SXRlbVByaXZhdGU+IGl0ZW1Qcml2YXRlOwogICAgIGlmIChGQUlMRUQo
aXRlbS0+UXVlcnlJbnRlcmZhY2UoJml0ZW1Qcml2YXRlKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEJTVFIgdGFyZ2V0OwotICAgIGlmIChGQUlMRUQoaXRlbVByaXZhdGUtPnRhcmdldCgmdGFy
Z2V0KSkpCisgICAgX2JzdHJfdCB0YXJnZXQ7CisgICAgaWYgKEZBSUxFRChpdGVtUHJpdmF0ZS0+
dGFyZ2V0KCZ0YXJnZXQuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoU3lz
U3RyaW5nTGVuKHRhcmdldCkpCi0gICAgICAgIHByaW50ZigiIChpbiBmcmFtZSBcIiVTXCIpIiwg
dGFyZ2V0KTsKLSAgICBTeXNGcmVlU3RyaW5nKHRhcmdldCk7CisgICAgaWYgKHRhcmdldC5sZW5n
dGgoKSkKKyAgICAgICAgcHJpbnRmKCIgKGluIGZyYW1lIFwiJVNcIikiLCBzdGF0aWNfY2FzdDx3
Y2hhcl90Kj4odGFyZ2V0KSk7CiAgICAgQk9PTCBpc1RhcmdldEl0ZW0gPSBGQUxTRTsKICAgICBp
ZiAoRkFJTEVEKGl0ZW1Qcml2YXRlLT5pc1RhcmdldEl0ZW0oJmlzVGFyZ2V0SXRlbSkpKQogICAg
ICAgICByZXR1cm47CkBAIC02OTgsNTIgKzY4NSw0OSBAQCB2b2lkIGR1bXAoKQogICAgIGlmIChT
VUNDRUVERUQoZnJhbWUtPmRhdGFTb3VyY2UoJmRhdGFTb3VyY2UpKSkgewogICAgICAgICBDT01Q
dHI8SVdlYlVSTFJlc3BvbnNlPiByZXNwb25zZTsKICAgICAgICAgaWYgKFNVQ0NFRURFRChkYXRh
U291cmNlLT5yZXNwb25zZSgmcmVzcG9uc2UpKSAmJiByZXNwb25zZSkgewotICAgICAgICAgICAg
QlNUUiBtaW1lVHlwZTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzcG9uc2UtPk1JTUVU
eXBlKCZtaW1lVHlwZSkpICYmICFfdGNzY21wKG1pbWVUeXBlLCBURVhUKCJ0ZXh0L3BsYWluIikp
KSB7CisgICAgICAgICAgICBfYnN0cl90IG1pbWVUeXBlOworICAgICAgICAgICAgaWYgKFNVQ0NF
RURFRChyZXNwb25zZS0+TUlNRVR5cGUoJm1pbWVUeXBlLkdldEJTVFIoKSkpICYmICFfdGNzY21w
KHN0YXRpY19jYXN0PFRDSEFSKj4obWltZVR5cGUpLCBURVhUKCJ0ZXh0L3BsYWluIikpKSB7CiAg
ICAgICAgICAgICAgICAgOjpnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKICAgICAg
ICAgICAgICAgICA6OmdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTeXNGcmVlU3RyaW5nKG1pbWVUeXBlKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIEJTVFIgcmVzdWx0U3RyaW5nID0gMDsKKyAgICBfYnN0cl90
IHJlc3VsdFN0cmluZzsKIAogICAgIGlmIChkdW1wVHJlZSkgewogICAgICAgICA6OkludmFsaWRh
dGVSZWN0KHdlYlZpZXdXaW5kb3csIDAsIFRSVUUpOwogICAgICAgICA6OlNlbmRNZXNzYWdlKHdl
YlZpZXdXaW5kb3csIFdNX1BBSU5ULCAwLCAwKTsKIAogICAgICAgICBpZiAoOjpnVGVzdFJ1bm5l
ci0+ZHVtcEFzVGV4dCgpKSB7Ci0gICAgICAgICAgICB3c3RyaW5nIHJlc3VsdCA9IGR1bXBGcmFt
ZXNBc1RleHQoZnJhbWUpOwotICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gU3lzQWxsb2NTdHJp
bmdMZW4ocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgICAgICByZXN1bHRT
dHJpbmcgPSBkdW1wRnJhbWVzQXNUZXh0KGZyYW1lKS5kYXRhKCk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlOwogICAg
ICAgICAgICAgaWYgKEZBSUxFRChmcmFtZS0+UXVlcnlJbnRlcmZhY2UoJmZyYW1lUHJpdmF0ZSkp
KQogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIGZyYW1lUHJpdmF0ZS0+
cmVuZGVyVHJlZUFzRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihnVGVzdFJ1bm5lci0+aXNQcmludGlu
ZygpLCAmcmVzdWx0U3RyaW5nKTsKKyAgICAgICAgICAgIGZyYW1lUHJpdmF0ZS0+cmVuZGVyVHJl
ZUFzRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihnVGVzdFJ1bm5lci0+aXNQcmludGluZygpLCAmcmVz
dWx0U3RyaW5nLkdldEJTVFIoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICgh
cmVzdWx0U3RyaW5nKQotICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogbmlsIHJlc3VsdCBmcm9t
ICVzIiwgOjpnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4dCgpID8gIklET01FbGVtZW50Ojppbm5lclRl
eHQiIDogIklGcmFtZVZpZXdQcml2YXRlOjpyZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0
aW9uIik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3Ro
ID0gU3lzU3RyaW5nTGVuKHJlc3VsdFN0cmluZyk7CisKKyAgICAgICAgaWYgKHJlc3VsdFN0cmlu
Zy5sZW5ndGgoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gcmVzdWx0
U3RyaW5nLmxlbmd0aCgpOwogICAgICAgICAgICAgaW50IGJ1ZmZlclNpemUgPSA6OldpZGVDaGFy
VG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgcmVzdWx0U3RyaW5nLCBzdHJpbmdMZW5ndGgsIDAsIDAs
IDAsIDApOwogICAgICAgICAgICAgY2hhciogYnVmZmVyID0gKGNoYXIqKW1hbGxvYyhidWZmZXJT
aXplICsgMSk7CiAgICAgICAgICAgICA6OldpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwg
cmVzdWx0U3RyaW5nLCBzdHJpbmdMZW5ndGgsIGJ1ZmZlciwgYnVmZmVyU2l6ZSArIDEsIDAsIDAp
OwogICAgICAgICAgICAgZndyaXRlKGJ1ZmZlciwgMSwgYnVmZmVyU2l6ZSwgc3Rkb3V0KTsKICAg
ICAgICAgICAgIGZyZWUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmICghOjpnVGVzdFJ1bm5lci0+
ZHVtcEFzVGV4dCgpKQorCisgICAgICAgICAgICBpZiAoITo6Z1Rlc3RSdW5uZXItPmR1bXBBc1Rl
eHQoKSAmJiAhOjpnVGVzdFJ1bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICE6OmdUZXN0
UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkgJiYgITo6Z1Rlc3RSdW5uZXItPmR1bXBB
c0F1ZGlvKCkpCiAgICAgICAgICAgICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oZnJhbWUp
OwotICAgICAgICB9Ci0gICAgICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wQmFja0ZvcndhcmRM
aXN0KCkpCi0gICAgICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yQWxsV2luZG93cygpOwot
ICAgIH0KIAotICAgIGlmIChwcmludFNlcGFyYXRvcnMpIHsKLSAgICAgICAgcHV0cygiI0VPRiIp
OyAgIC8vIHRlcm1pbmF0ZSB0aGUgY29udGVudCBibG9jawotICAgICAgICBmcHV0cygiI0VPRlxu
Iiwgc3RkZXJyKTsKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgIGZmbHVzaChzdGRl
cnIpOworICAgICAgICAgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBCYWNrRm9yd2FyZExpc3Qo
KSkKKyAgICAgICAgICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yQWxsV2luZG93cygpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiRVJST1I6IG5pbCByZXN1bHQgZnJv
bSAlcyIsIDo6Z1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSA/ICJJRE9NRWxlbWVudDo6aW5uZXJU
ZXh0IiA6ICJJRnJhbWVWaWV3UHJpdmF0ZTo6cmVuZGVyVHJlZUFzRXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiIpOworCisgICAgICAgIGlmIChwcmludFNlcGFyYXRvcnMpIHsKKyAgICAgICAgICAgIHB1
dHMoIiNFT0YiKTsgLy8gdGVybWluYXRlIHRoZSBjb250ZW50IGJsb2NrCisgICAgICAgICAgICBm
cHV0cygiI0VPRlxuIiwgc3RkZXJyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChkdW1w
UGl4ZWxzRm9yQ3VycmVudFRlc3QKQEAgLTc1NCw2ICs3MzgsNyBAQCB2b2lkIGR1bXAoKQogCiAg
ICAgcHJpbnRmKCIjRU9GXG4iKTsgICAvLyB0ZXJtaW5hdGUgdGhlIChwb3NzaWJseSBlbXB0eSkg
cGl4ZWxzIGJsb2NrCiAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZmZsdXNoKHN0ZGVycik7CiAK
IGZhaWw6CiAgICAgU3lzRnJlZVN0cmluZyhyZXN1bHRTdHJpbmcpOwpAQCAtNzg1LDE5ICs3NzAs
MTkgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKAogc3RhdGljIHZv
aWQgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcyhJV2ViUHJlZmVyZW5jZXMqIHByZWZl
cmVuY2VzKQogewogI2lmZGVmIFVTRV9NQUNfRk9OVFMKLSAgICBzdGF0aWMgQlNUUiBzdGFuZGFy
ZEZhbWlseSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIlRpbWVzIikpOwotICAgIHN0YXRpYyBCU1RS
IGZpeGVkRmFtaWx5ID0gU3lzQWxsb2NTdHJpbmcoVEVYVCgiQ291cmllciIpKTsKLSAgICBzdGF0
aWMgQlNUUiBzYW5zU2VyaWZGYW1pbHkgPSBTeXNBbGxvY1N0cmluZyhURVhUKCJIZWx2ZXRpY2Ei
KSk7Ci0gICAgc3RhdGljIEJTVFIgY3Vyc2l2ZUZhbWlseSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQo
IkFwcGxlIENoYW5jZXJ5IikpOwotICAgIHN0YXRpYyBCU1RSIGZhbnRhc3lGYW1pbHkgPSBTeXNB
bGxvY1N0cmluZyhURVhUKCJQYXB5cnVzIikpOwotICAgIHN0YXRpYyBCU1RSIHBpY3RvZ3JhcGhG
YW1pbHkgPSBTeXNBbGxvY1N0cmluZyhURVhUKCJBcHBsZSBDb2xvciBFbW9qaSIpKTsKKyAgICBz
dGF0aWMgX2JzdHJfdCBzdGFuZGFyZEZhbWlseShURVhUKCJUaW1lcyIpKTsKKyAgICBzdGF0aWMg
X2JzdHJfdCBmaXhlZEZhbWlseShURVhUKCJDb3VyaWVyIikpOworICAgIHN0YXRpYyBfYnN0cl90
IHNhbnNTZXJpZkZhbWlseShURVhUKCJIZWx2ZXRpY2EiKSk7CisgICAgc3RhdGljIF9ic3RyX3Qg
Y3Vyc2l2ZUZhbWlseShURVhUKCJBcHBsZSBDaGFuY2VyeSIpKTsKKyAgICBzdGF0aWMgX2JzdHJf
dCBmYW50YXN5RmFtaWx5KFRFWFQoIlBhcHlydXMiKSk7CisgICAgc3RhdGljIF9ic3RyX3QgcGlj
dG9ncmFwaEZhbWlseShURVhUKCJBcHBsZSBDb2xvciBFbW9qaSIpKTsKICNlbHNlCi0gICAgc3Rh
dGljIEJTVFIgc3RhbmRhcmRGYW1pbHkgPSBTeXNBbGxvY1N0cmluZyhURVhUKCJUaW1lcyBOZXcg
Um9tYW4iKSk7Ci0gICAgc3RhdGljIEJTVFIgZml4ZWRGYW1pbHkgPSBTeXNBbGxvY1N0cmluZyhU
RVhUKCJDb3VyaWVyIE5ldyIpKTsKLSAgICBzdGF0aWMgQlNUUiBzYW5zU2VyaWZGYW1pbHkgPSBT
eXNBbGxvY1N0cmluZyhURVhUKCJBcmlhbCIpKTsKLSAgICBzdGF0aWMgQlNUUiBjdXJzaXZlRmFt
aWx5ID0gU3lzQWxsb2NTdHJpbmcoVEVYVCgiQ29taWMgU2FucyBNUyIpKTsgLy8gTm90IGFjdHVh
bGx5IGN1cnNpdmUsIGJ1dCBpdCdzIHdoYXQgSUUgYW5kIEZpcmVmb3ggdXNlLgotICAgIHN0YXRp
YyBCU1RSIGZhbnRhc3lGYW1pbHkgPSBTeXNBbGxvY1N0cmluZyhURVhUKCJUaW1lcyBOZXcgUm9t
YW4iKSk7Ci0gICAgc3RhdGljIEJTVFIgcGljdG9ncmFwaEZhbWlseSA9IFN5c0FsbG9jU3RyaW5n
KFRFWFQoIlRpbWVzIE5ldyBSb21hbiIpKTsKKyAgICBzdGF0aWMgX2JzdHJfdCBzdGFuZGFyZEZh
bWlseShURVhUKCJUaW1lcyBOZXcgUm9tYW4iKSk7CisgICAgc3RhdGljIF9ic3RyX3QgZml4ZWRG
YW1pbHkoVEVYVCgiQ291cmllciBOZXciKSk7CisgICAgc3RhdGljIF9ic3RyX3Qgc2Fuc1Nlcmlm
RmFtaWx5KFRFWFQoIkFyaWFsIikpOworICAgIHN0YXRpYyBfYnN0cl90IGN1cnNpdmVGYW1pbHko
VEVYVCgiQ29taWMgU2FucyBNUyIpKTsgLy8gTm90IGFjdHVhbGx5IGN1cnNpdmUsIGJ1dCBpdCdz
IHdoYXQgSUUgYW5kIEZpcmVmb3ggdXNlLgorICAgIHN0YXRpYyBfYnN0cl90IGZhbnRhc3lGYW1p
bHkoVEVYVCgiVGltZXMgTmV3IFJvbWFuIikpOworICAgIHN0YXRpYyBfYnN0cl90IHBpY3RvZ3Jh
cGhGYW1pbHkoVEVYVCgiVGltZXMgTmV3IFJvbWFuIikpOwogI2VuZGlmCiAKICAgICBwcmVmZXJl
bmNlcy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KHN0YW5kYXJkRmFtaWx5KTsKQEAgLTgzMiw5ICs4
MTcsOCBAQCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsCiAgICAgaWYg
KHBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKSB7CiAgICAgICAgIFZlY3Rvcjx3Y2hh
cl90PiB1cmxDaGFyYWN0ZXJzKENGU3RyaW5nR2V0TGVuZ3RoKHBlcnNpc3RlbnRVc2VyU3R5bGVT
aGVldExvY2F0aW9uLmdldCgpKSk7CiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhwZXJz
aXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJp
bmdHZXRMZW5ndGgocGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkpKSwgKFVu
aUNoYXIgKil1cmxDaGFyYWN0ZXJzLmRhdGEoKSk7Ci0gICAgICAgIEJTVFIgdXJsID0gU3lzQWxs
b2NTdHJpbmdMZW4odXJsQ2hhcmFjdGVycy5kYXRhKCksIHVybENoYXJhY3RlcnMuc2l6ZSgpKTsK
KyAgICAgICAgX2JzdHJfdCB1cmwodXJsQ2hhcmFjdGVycy5kYXRhKCkpOwogICAgICAgICBwcmVm
ZXJlbmNlcy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbih1cmwpOwotICAgICAgICBTeXNGcmVl
U3RyaW5nKHVybCk7CiAgICAgICAgIHByZWZlcmVuY2VzLT5zZXRVc2VyU3R5bGVTaGVldEVuYWJs
ZWQoVFJVRSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHByZWZlcmVuY2VzLT5zZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQoRkFMU0UpOwpAQCAtOTAxLDExICs4ODUsOSBAQCBzdGF0aWMgdm9pZCByZXNl
dFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAgICAgd2ViVmlld1ByaXZhdGUtPmNsZWFyTWFpbkZy
YW1lTmFtZSgpOwogICAgIHdlYlZpZXdQcml2YXRlLT5yZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlz
dHMoKTsKIAotICAgIEJTVFIgZ3JvdXBOYW1lOwotICAgIGlmIChTVUNDRUVERUQod2ViVmlldy0+
Z3JvdXBOYW1lKCZncm91cE5hbWUpKSkgeworICAgIF9ic3RyX3QgZ3JvdXBOYW1lOworICAgIGlm
IChTVUNDRUVERUQod2ViVmlldy0+Z3JvdXBOYW1lKCZncm91cE5hbWUuR2V0QlNUUigpKSkpCiAg
ICAgICAgIHdlYlZpZXdQcml2YXRlLT5yZW1vdmVBbGxVc2VyQ29udGVudEZyb21Hcm91cChncm91
cE5hbWUpOwotICAgICAgICBTeXNGcmVlU3RyaW5nKGdyb3VwTmFtZSk7Ci0gICAgfQogCiAgICAg
c2hhcmVkVUlEZWxlZ2F0ZS0+cmVzZXRVbmRvTWFuYWdlcigpOwogCkBAIC0xMDA0LDE0ICs5ODYs
MTQgQEAgc3RhdGljIHZvaWQgcmVtb3ZlRm9udEZhbGxiYWNrSWZQcmVzZW50KAogCiBzdGF0aWMg
dm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogeworICAgIEFTU0VSVCghaW5w
dXRMaW5lLmVtcHR5KCkpOworCiAgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRM
aW5lKGlucHV0TGluZSk7CiAgICAgY29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBjb21tYW5kLnBh
dGhPclVSTDsKICAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1
bXBQaXhlbHMgfHwgZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogCi0gICAgc3RhdGljIEJTVFIgbWV0
aG9kQlN0ciA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIkdFVCIpKTsKKyAgICBzdGF0aWMgX2JzdHJf
dCBtZXRob2RCU3RyKFRFWFQoIkdFVCIpKTsKIAotICAgIEJTVFIgdXJsQlN0cjsKLSAKICAgICBD
RlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHBhdGhPclVSTC5j
X3N0cigpLCBrQ0ZTdHJpbmdFbmNvZGluZ1dpbmRvd3NMYXRpbjEpOwogICAgIENGVVJMUmVmIHVy
bCA9IENGVVJMQ3JlYXRlV2l0aFN0cmluZygwLCBzdHIsIDApOwogCkBAIC0xMDI1LDE3ICsxMDA3
LDIwIEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICBzdHIg
PSBDRlVSTEdldFN0cmluZyh1cmwpOwogCiAgICAgQ0ZJbmRleCBsZW5ndGggPSBDRlN0cmluZ0dl
dExlbmd0aChzdHIpOwotICAgIFVuaUNoYXIqIGJ1ZmZlciA9IG5ldyBVbmlDaGFyW2xlbmd0aF07
CisgICAgVW5pQ2hhciogYnVmZmVyID0gbmV3IFVuaUNoYXJbbGVuZ3RoICsgMV07CiAKICAgICBD
RlN0cmluZ0dldENoYXJhY3RlcnMoc3RyLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBidWZmZXIp
OwotICAgIHVybEJTdHIgPSBTeXNBbGxvY1N0cmluZ0xlbigoT0xFQ0hBUiopYnVmZmVyLCBsZW5n
dGgpOworICAgIGJ1ZmZlcltsZW5ndGhdID0gMDsKKworICAgIF9ic3RyX3QgdXJsQlN0cigoT0xF
Q0hBUiopYnVmZmVyKTsKKyAgICBBU1NFUlQodXJsQlN0ci5sZW5ndGgoKSA9PSBsZW5ndGgpOwog
ICAgIGRlbGV0ZVtdIGJ1ZmZlcjsKIAogICAgIENGUmVsZWFzZSh1cmwpOwogCiAgICAgOjpnVGVz
dFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQ
aXhlbEhhc2gpOwotICAgIGRvbmUgPSBmYWxzZTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwor
ICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIGFkZEZvbnRGYWxsYmFja0lmUHJlc2VudChmYWxsYmFj
a1BhdGgpOwogCkBAIC0xMDYyLDEyICsxMDQ3LDEyIEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29u
c3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVm
b3JlVGVzdGluZygpOwogCi0gICAgaWYgKHNob3VsZEVuYWJsZURldmVsb3BlckV4dHJhcyhwYXRo
T3JVUkwuY19zdHIoKSkpCisgICAgaWYgKHNob3VsZEVuYWJsZURldmVsb3BlckV4dHJhcyhwYXRo
T3JVUkwuY19zdHIoKSkpIHsKICAgICAgICAgZ1Rlc3RSdW5uZXItPnNldERldmVsb3BlckV4dHJh
c0VuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoc2hvdWxkRHVtcEFzVGV4dChwYXRoT3JVUkwuY19z
dHIoKSkpIHsKLSAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBBc1RleHQodHJ1ZSk7Ci0gICAg
ICAgIGdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CisgICAgICAg
IGlmIChzaG91bGREdW1wQXNUZXh0KHBhdGhPclVSTC5jX3N0cigpKSkgeworICAgICAgICAgICAg
Z1Rlc3RSdW5uZXItPnNldER1bXBBc1RleHQodHJ1ZSk7CisgICAgICAgICAgICBnVGVzdFJ1bm5l
ci0+c2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMoZmFsc2UpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgcHJldlRlc3RCRkl0ZW0gPSAwOwpAQCAtMTEzNSw3ICsxMTIwLDYgQEAgc3RhdGljIHZvaWQg
cnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogCiBleGl0OgogICAgIHJlbW92ZUZvbnRGYWxs
YmFja0lmUHJlc2VudChmYWxsYmFja1BhdGgpOwotICAgIFN5c0ZyZWVTdHJpbmcodXJsQlN0cik7
CiAgICAgOjpnVGVzdFJ1bm5lci5jbGVhcigpOwogCiAgICAgcmV0dXJuOwpAQCAtMTE3MywxMCAr
MTE1Nyw4IEBAIElXZWJWaWV3KiBjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG8KIAogICAg
IFJFQ1QgY2xpZW50UmVjdDsKICAgICBjbGllbnRSZWN0LmJvdHRvbSA9IGNsaWVudFJlY3QubGVm
dCA9IGNsaWVudFJlY3QudG9wID0gY2xpZW50UmVjdC5yaWdodCA9IDA7Ci0gICAgQlNUUiBncm91
cE5hbWUgPSBTeXNBbGxvY1N0cmluZyhMIm9yZy53ZWJraXQuRHVtcFJlbmRlclRyZWUiKTsKLSAg
ICBib29sIGZhaWxlZCA9IEZBSUxFRCh3ZWJWaWV3LT5pbml0V2l0aEZyYW1lKGNsaWVudFJlY3Qs
IDAsIGdyb3VwTmFtZSkpOwotICAgIFN5c0ZyZWVTdHJpbmcoZ3JvdXBOYW1lKTsKLSAgICBpZiAo
ZmFpbGVkKQorICAgIF9ic3RyX3QgZ3JvdXBOYW1lKEwib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJl
ZSIpOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+aW5pdFdpdGhGcmFtZShjbGllbnRSZWN0LCAw
LCBncm91cE5hbWUpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBDT01QdHI8SVdlYlZpZXdQ
cml2YXRlPiB2aWV3UHJpdmF0ZTsKQEAgLTExODYsMTIgKzExNjgsMTAgQEAgSVdlYlZpZXcqIGNy
ZWF0ZVdlYlZpZXdBbmRPZmZzY3JlZW5XaW5kbwogICAgIHZpZXdQcml2YXRlLT5zZXRTaG91bGRB
cHBseU1hY0ZvbnRBc2NlbnRIYWNrKFRSVUUpOwogICAgIHZpZXdQcml2YXRlLT5zZXRBbHdheXNV
c2VzQ29tcGxleFRleHRDb2RlUGF0aChmb3JjZUNvbXBsZXhUZXh0KTsKIAotICAgIEJTVFIgcGx1
Z2luUGF0aCA9IFN5c0FsbG9jU3RyaW5nTGVuKDAsIGV4ZVBhdGgoKS5sZW5ndGgoKSArIF90Y3Ns
ZW4oVGVzdFBsdWdpbkRpcikpOwotICAgIF90Y3NjcHkocGx1Z2luUGF0aCwgZXhlUGF0aCgpLmNf
c3RyKCkpOwotICAgIF90Y3NjYXQocGx1Z2luUGF0aCwgVGVzdFBsdWdpbkRpcik7Ci0gICAgZmFp
bGVkID0gRkFJTEVEKHZpZXdQcml2YXRlLT5hZGRBZGRpdGlvbmFsUGx1Z2luRGlyZWN0b3J5KHBs
dWdpblBhdGgpKTsKLSAgICBTeXNGcmVlU3RyaW5nKHBsdWdpblBhdGgpOwotICAgIGlmIChmYWls
ZWQpCisgICAgX2JzdHJfdCBwbHVnaW5QYXRoKFN5c0FsbG9jU3RyaW5nTGVuKDAsIGV4ZVBhdGgo
KS5sZW5ndGgoKSArIF90Y3NsZW4oVGVzdFBsdWdpbkRpcikpLCBmYWxzZSk7CisgICAgX3Rjc2Nw
eShzdGF0aWNfY2FzdDxUQ0hBUio+KHBsdWdpblBhdGgpLCBleGVQYXRoKCkuY19zdHIoKSk7Cisg
ICAgX3Rjc2NhdChzdGF0aWNfY2FzdDxUQ0hBUio+KHBsdWdpblBhdGgpLCBUZXN0UGx1Z2luRGly
KTsKKyAgICBpZiAoRkFJTEVEKHZpZXdQcml2YXRlLT5hZGRBZGRpdGlvbmFsUGx1Z2luRGlyZWN0
b3J5KHBsdWdpblBhdGgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBIV05EIHZpZXdXaW5k
b3c7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVnYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVnYXRlLmNw
cAkocmV2aXNpb24gMTY3MDIyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0VkaXRpbmdE
ZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkVkaXRpbmdEZWxlZ2F0ZS5oIgogCisjaW5jbHVkZSA8Y29tdXRp
bC5oPgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CkBAIC00Niw3ICs0Nyw3IEBAIEVkaXRpbmdE
ZWxlZ2F0ZTo6RWRpdGluZ0RlbGVnYXRlKCkKIH0KIAogLy8gSVVua25vd24KLUhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlp
ZCwgdm9pZCoqIHBwdk9iamVjdCkKK0hSRVNVTFQgRWRpdGluZ0RlbGVnYXRlOjpRdWVyeUludGVy
ZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKIHsKICAgICAqcHB2T2JqZWN0ID0g
MDsKICAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKQEAgLTYwLDEyICs2
MSwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKLVVMT05HIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6
QWRkUmVmKHZvaWQpCitVTE9ORyBFZGl0aW5nRGVsZWdhdGU6OkFkZFJlZih2b2lkKQogewogICAg
IHJldHVybiArK21fcmVmQ291bnQ7CiB9CiAKLVVMT05HIFNURE1FVEhPRENBTExUWVBFIEVkaXRp
bmdEZWxlZ2F0ZTo6UmVsZWFzZSh2b2lkKQorVUxPTkcgRWRpdGluZ0RlbGVnYXRlOjpSZWxlYXNl
KHZvaWQpCiB7CiAgICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OwogICAgIGlmICghbmV3
UmVmKQpAQCAtODAsMTEgKzgxLDEwIEBAIHN0YXRpYyB3c3RyaW5nIGR1bXBQYXRoKElET01Ob2Rl
KiBub2RlKQogCiAgICAgd3N0cmluZyByZXN1bHQ7CiAKLSAgICBCU1RSIG5hbWU7Ci0gICAgaWYg
KEZBSUxFRChub2RlLT5ub2RlTmFtZSgmbmFtZSkpKQorICAgIF9ic3RyX3QgbmFtZTsKKyAgICBp
ZiAoRkFJTEVEKG5vZGUtPm5vZGVOYW1lKCZuYW1lLkdldEJTVFIoKSkpKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIHJlc3VsdC5hc3NpZ24obmFtZSwgU3lzU3RyaW5nTGVuKG5hbWUpKTsK
LSAgICBTeXNGcmVlU3RyaW5nKG5hbWUpOworICAgIHJlc3VsdC5hc3NpZ24oc3RhdGljX2Nhc3Q8
d2NoYXJfdCo+KG5hbWUpLCBuYW1lLmxlbmd0aCgpKTsKIAogICAgIENPTVB0cjxJRE9NTm9kZT4g
cGFyZW50OwogICAgIGlmIChTVUNDRUVERUQobm9kZS0+cGFyZW50Tm9kZSgmcGFyZW50KSkpCkBA
IC0xMTgsMTAgKzExOCw3IEBAIHN0YXRpYyB3c3RyaW5nIGR1bXAoSURPTVJhbmdlKiByYW5nZSkK
ICAgICByZXR1cm4gYnVmZmVyOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRp
bmdEZWxlZ2F0ZTo6c2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZSggCi0gICAgLyogW2luXSAq
LyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElET01SYW5nZSogcmFuZ2UsCi0g
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxUIEVkaXRpbmdEZWxl
Z2F0ZTo6c2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZSgvKiBbaW5dICovIElXZWJWaWV3KiB3
ZWJWaWV3LCAvKiBbaW5dICovIElET01SYW5nZSogcmFuZ2UsIC8qIFtyZXR2YWxdW291dF0gKi8g
Qk9PTCogcmVzdWx0KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMTM1LDEwICsxMzIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEVkaXRpbmdEZWxlZ2F0CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZSggCi0g
ICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElET01SYW5n
ZSogcmFuZ2UsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxU
IEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2UoLyogW2luXSAqLyBJ
V2ViVmlldyogd2ViVmlldywgLyogW2luXSAqLyBJRE9NUmFuZ2UqIHJhbmdlLCAvKiBbcmV0dmFs
XVtvdXRdICovIEJPT0wqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE1MiwxMSArMTQ2LDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkSW5zZXJ0Tm9kZSggCi0g
ICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElET01Ob2Rl
KiBub2RlLAotICAgIC8qIFtpbl0gKi8gSURPTVJhbmdlKiByYW5nZSwKLSAgICAvKiBbaW5dICov
IFdlYlZpZXdJbnNlcnRBY3Rpb24gYWN0aW9uKQorSFJFU1VMVCBFZGl0aW5nRGVsZWdhdGU6OnNo
b3VsZEluc2VydE5vZGUoLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywgLyogW2luXSAqLyBJ
RE9NTm9kZSogbm9kZSwgLyogW2luXSAqLyBJRE9NUmFuZ2UqIHJhbmdlLCAvKiBbaW5dICovIFdl
YlZpZXdJbnNlcnRBY3Rpb24gYWN0aW9uKQogewogICAgIHN0YXRpYyBMUENUU1RSIGluc2VydGFj
dGlvbnN0cmluZ1tdID0gewogICAgICAgICBURVhUKCJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQi
KSwKQEAgLTE3MCwxMiArMTYwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5n
RGVsZWdhdAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkSW5zZXJ0VGV4dCggCi0gICAgLyogW2luXSAqLyBJV2Vi
Vmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIEJTVFIgdGV4dCwKLSAgICAvKiBbaW5dICov
IElET01SYW5nZSogcmFuZ2UsCi0gICAgLyogW2luXSAqLyBXZWJWaWV3SW5zZXJ0QWN0aW9uIGFj
dGlvbiwKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgRWRp
dGluZ0RlbGVnYXRlOjpzaG91bGRJbnNlcnRUZXh0KC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZp
ZXcsIC8qIFtpbl0gKi8gQlNUUiB0ZXh0LCAvKiBbaW5dICovIElET01SYW5nZSogcmFuZ2UsIC8q
IFtpbl0gKi8gV2ViVmlld0luc2VydEFjdGlvbiBhY3Rpb24sIC8qIFtyZXR2YWxdW291dF0gKi8g
Qk9PTCogcmVzdWx0KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMTk1LDEwICsxODAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEVkaXRpbmdEZWxlZ2F0CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGREZWxldGVET01SYW5nZSggCi0gICAgLyog
W2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElET01SYW5nZSogcmFu
Z2UsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxUIEVkaXRp
bmdEZWxlZ2F0ZTo6c2hvdWxkRGVsZXRlRE9NUmFuZ2UoLyogW2luXSAqLyBJV2ViVmlldyogd2Vi
VmlldywgLyogW2luXSAqLyBJRE9NUmFuZ2UqIHJhbmdlLCAvKiBbcmV0dmFsXVtvdXRdICovIEJP
T0wqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTIxMiwxMyArMTk0LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBF
ZGl0aW5nRGVsZWdhdAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSggCi0g
ICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElET01SYW5n
ZSogY3VycmVudFJhbmdlLAotICAgIC8qIFtpbl0gKi8gSURPTVJhbmdlKiBwcm9wb3NlZFJhbmdl
LAotICAgIC8qIFtpbl0gKi8gV2ViU2VsZWN0aW9uQWZmaW5pdHkgc2VsZWN0aW9uQWZmaW5pdHks
Ci0gICAgLyogW2luXSAqLyBCT09MIHN0aWxsU2VsZWN0aW5nLAotICAgIC8qIFtyZXR2YWxdW291
dF0gKi8gQk9PTCogcmVzdWx0KQorSFJFU1VMVCBFZGl0aW5nRGVsZWdhdGU6OnNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2UoSVdlYlZpZXcqIHdlYlZpZXcsIElET01SYW5nZSogY3VycmVudFJh
bmdlLCBJRE9NUmFuZ2UqIHByb3Bvc2VkUmFuZ2UsCisgICAgV2ViU2VsZWN0aW9uQWZmaW5pdHkg
c2VsZWN0aW9uQWZmaW5pdHksIEJPT0wgc3RpbGxTZWxlY3RpbmcsIEJPT0wqIHJlc3VsdCkKIHsK
ICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI0
MSwxMSArMjE4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdAog
ICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdE
ZWxlZ2F0ZTo6c2hvdWxkQXBwbHlTdHlsZSggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2Vi
VmlldywKLSAgICAvKiBbaW5dICovIElET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKLSAg
ICAvKiBbaW5dICovIElET01SYW5nZSogcmFuZ2UsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBC
T09MKiByZXN1bHQpCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkQXBwbHlTdHlsZSgv
KiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LCAvKiBbaW5dICovIElET01DU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgLyogW2luXSAqLyBJRE9NUmFuZ2UqIHJhbmdlLCAvKiBbcmV0dmFsXVtv
dXRdICovIEJPT0wqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI1OSwxMSArMjMyLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBFZGl0aW5nRGVsZWdhdAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkQ2hhbmdlVHlwaW5nU3R5bGUo
IAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCi0gICAgLyogW2luXSAqLyBJRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3VycmVudFN0eWxlLAotICAgIC8qIFtpbl0gKi8gSURPTUNT
U1N0eWxlRGVjbGFyYXRpb24qIHByb3Bvc2VkU3R5bGUsCi0gICAgLyogW3JldHZhbF1bb3V0XSAq
LyBCT09MKiByZXN1bHQpCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkQ2hhbmdlVHlw
aW5nU3R5bGUoLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywgLyogW2luXSAqLyBJRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiogY3VycmVudFN0eWxlLCAvKiBbaW5dICovIElET01DU1NTdHlsZURl
Y2xhcmF0aW9uKiBwcm9wb3NlZFN0eWxlLCAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3Vs
dCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTI3NywxMCArMjQ2LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVs
ZWdhdAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVk
aXRpbmdEZWxlZ2F0ZTo6ZG9QbGF0Zm9ybUNvbW1hbmQoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZp
ZXcgKndlYlZpZXcsCi0gICAgLyogW2luXSAqLyBCU1RSIGNvbW1hbmQsCi0gICAgLyogW3JldHZh
bF1bb3V0XSAqLyBCT09MICpyZXN1bHQpCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6ZG9QbGF0
Zm9ybUNvbW1hbmQoLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywgLyogW2luXSAqLyBCU1RS
IGNvbW1hbmQsIC8qIFtyZXR2YWxdW291dF0gKi8gQk9PTCogcmVzdWx0KQogewogICAgIGlmICgh
cmVzdWx0KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk0LDYyICsyNjAs
NTIgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdAogICAgIHJldHVy
biBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6
d2ViVmlld0RpZEJlZ2luRWRpdGluZyggCi0gICAgLyogW2luXSAqLyBJV2ViTm90aWZpY2F0aW9u
KiBub3RpZmljYXRpb24pCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZEJlZ2lu
RWRpdGluZygvKiBbaW5dICovIElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKIHsKICAg
ICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgewot
ICAgICAgICBCU1RSIG5hbWU7Ci0gICAgICAgIG5vdGlmaWNhdGlvbi0+bmFtZSgmbmFtZSk7Ci0g
ICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVk
aXRpbmc6JXNcbiIpLCBuYW1lID8gbmFtZSA6IFRFWFQoIiIpKTsKLSAgICAgICAgU3lzRnJlZVN0
cmluZyhuYW1lKTsKKyAgICAgICAgX2JzdHJfdCBuYW1lOworICAgICAgICBub3RpZmljYXRpb24t
Pm5hbWUoJm5hbWUuR2V0QlNUUigpKTsKKyAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzolc1xuIiksIHN0YXRpY19jYXN0PFRDSEFS
Kj4obmFtZSkpOwogICAgIH0KICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdGU6OndlYlZpZXdEaWRDaGFuZ2UoIAotICAgIC8qIFtp
bl0gKi8gSVdlYk5vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKQorSFJFU1VMVCBFZGl0aW5nRGVs
ZWdhdGU6OndlYlZpZXdEaWRDaGFuZ2UoLyogW2luXSAqLyBJV2ViTm90aWZpY2F0aW9uKiBub3Rp
ZmljYXRpb24pCiB7CiAgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkgJiYgIWRvbmUpIHsKLSAgICAgICAgQlNUUiBuYW1lOwotICAgICAgICBub3RpZmljYXRpb24t
Pm5hbWUoJm5hbWUpOwotICAgICAgICBfdHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiVzXG4iKSwgbmFtZSA/IG5hbWUgOiBURVhUKCIiKSk7Ci0g
ICAgICAgIFN5c0ZyZWVTdHJpbmcobmFtZSk7CisgICAgICAgIF9ic3RyX3QgbmFtZTsKKyAgICAg
ICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lLkdldEJTVFIoKSk7CisgICAgICAgIF90cHJpbnRm
KFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6JXNcbiIpLCBz
dGF0aWNfY2FzdDxUQ0hBUio+KG5hbWUpKTsKICAgICB9CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
LUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjp3ZWJWaWV3RGlkRW5k
RWRpdGluZyggCi0gICAgLyogW2luXSAqLyBJV2ViTm90aWZpY2F0aW9uICpub3RpZmljYXRpb24p
CitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZEVuZEVkaXRpbmcoLyogW2luXSAq
LyBJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgaWYgKDo6Z1Rlc3RSdW5u
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKLSAgICAgICAgQlNUUiBuYW1l
OwotICAgICAgICBub3RpZmljYXRpb24tPm5hbWUoJm5hbWUpOwotICAgICAgICBfdHByaW50ZihU
RVhUKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzolc1xuIiksIG5hbWUg
PyBuYW1lIDogVEVYVCgiIikpOwotICAgICAgICBTeXNGcmVlU3RyaW5nKG5hbWUpOworICAgICAg
ICBfYnN0cl90IG5hbWU7CisgICAgICAgIG5vdGlmaWNhdGlvbi0+bmFtZSgmbmFtZS5HZXRCU1RS
KCkpOworICAgICAgICBfdHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
RW5kRWRpdGluZzolc1xuIiksIHN0YXRpY19jYXN0PFRDSEFSKj4obmFtZSkpOwogICAgIH0KICAg
ICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVs
ZWdhdGU6OndlYlZpZXdEaWRDaGFuZ2VUeXBpbmdTdHlsZSggCi0gICAgLyogW2luXSAqLyBJV2Vi
Tm90aWZpY2F0aW9uICpub3RpZmljYXRpb24pCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6d2Vi
Vmlld0RpZENoYW5nZVR5cGluZ1N0eWxlKC8qIFtpbl0gKi8gSVdlYk5vdGlmaWNhdGlvbiogbm90
aWZpY2F0aW9uKQogewogICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpICYmICFkb25lKSB7Ci0gICAgICAgIEJTVFIgbmFtZTsKLSAgICAgICAgbm90aWZpY2F0aW9u
LT5uYW1lKCZuYW1lKTsKLSAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVR5cGluZ1N0eWxlOiVzXG4iKSwgbmFtZSA/IG5hbWUgOiBURVhUKCIi
KSk7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcobmFtZSk7CisgICAgICAgIF9ic3RyX3QgbmFtZTsK
KyAgICAgICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lLkdldEJTVFIoKSk7CisgICAgICAgIF90
cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VUeXBpbmdTdHls
ZTolc1xuIiksIHN0YXRpY19jYXN0PFRDSEFSKj4obmFtZSkpOwogICAgIH0KICAgICByZXR1cm4g
U19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdGU6Ondl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb24oIAotICAgIC8qIFtpbl0gKi8gSVdlYk5vdGlmaWNhdGlv
biAqbm90aWZpY2F0aW9uKQorSFJFU1VMVCBFZGl0aW5nRGVsZWdhdGU6OndlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb24oLyogW2luXSAqLyBJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7
CiAgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUp
IHsKLSAgICAgICAgQlNUUiBuYW1lOwotICAgICAgICBub3RpZmljYXRpb24tPm5hbWUoJm5hbWUp
OwotICAgICAgICBfdHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOiVzXG4iKSwgbmFtZSA/IG5hbWUgOiBURVhUKCIiKSk7Ci0gICAgICAgIFN5
c0ZyZWVTdHJpbmcobmFtZSk7CisgICAgICAgIF9ic3RyX3QgbmFtZTsKKyAgICAgICAgbm90aWZp
Y2F0aW9uLT5uYW1lKCZuYW1lLkdldEJTVFIoKSk7CisgICAgICAgIF90cHJpbnRmKFRFWFQoIkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246JXNcbiIpLCBzdGF0aWNf
Y2FzdDxUQ0hBUio+KG5hbWUpKTsKICAgICB9CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNzAs
NyArMzI2LDcgQEAgc3RhdGljIGludCB3b3JkTGVuZ3RoKGNvbnN0IFRDSEFSKiB0ZXh0KQogICAg
IHJldHVybiBjdXJzb3IgLSB0ZXh0OwogfTsKIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBF
ZGl0aW5nRGVsZWdhdGU6OmNoZWNrU3BlbGxpbmdPZlN0cmluZygKK0hSRVNVTFQgRWRpdGluZ0Rl
bGVnYXRlOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoCiAgICAgICAgICAgICAvKiBbaW5dICovIElX
ZWJWaWV3KiB2aWV3LAogICAgICAgICAgICAgLyogW2luXSAqLyBMUENUU1RSIHRleHQsCiAgICAg
ICAgICAgICAvKiBbaW5dICovIGludCBsZW5ndGgsCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAJKHJldmlzaW9uIDE2NzAyMikKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkZyYW1lTG9hZERlbGVnYXRlLmgiCiAKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPGNvbXV0aWwuaD4KICNpbmNsdWRlICJEdW1wUmVu
ZGVyVHJlZS5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAjaW5jbHVkZSAiR0NDb250cm9s
bGVyLmgiCkBAIC00NSw3ICs0Niw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxz
dHJpbmc+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogdXNpbmcgc3RkOjpzdHJpbmc7CkBAIC02MiwyMiArNjMsMjEgQEAgc3RyaW5n
IGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KAogICAgIGlmIChGQUlMRUQod2ViVmll
dy0+bWFpbkZyYW1lKCZtYWluRnJhbWUpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZygpOwogCi0g
ICAgQlNUUiBmcmFtZU5hbWVCU1RSOwotICAgIGlmIChGQUlMRUQod2ViRnJhbWUtPm5hbWUoJmZy
YW1lTmFtZUJTVFIpKSB8fCB0b1VURjgoZnJhbWVOYW1lQlNUUikuZW1wdHkoKSkKKyAgICBfYnN0
cl90IGZyYW1lTmFtZUJTVFI7CisgICAgaWYgKEZBSUxFRCh3ZWJGcmFtZS0+bmFtZSgmZnJhbWVO
YW1lQlNUUi5HZXRCU1RSKCkpKSB8fCAhZnJhbWVOYW1lQlNUUi5sZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuICh3ZWJGcmFtZSA9PSBtYWluRnJhbWUpID8gIm1haW4gZnJhbWUiIDogc3RyaW5nKCk7
CiAKICAgICBzdHJpbmcgZnJhbWVOYW1lID0gKHdlYkZyYW1lID09IG1haW5GcmFtZSkgPyAibWFp
biBmcmFtZSIgOiAiZnJhbWUiOwogICAgIGZyYW1lTmFtZSArPSAiIFwiIiArIHRvVVRGOChmcmFt
ZU5hbWVCU1RSKSArICJcIiI7IAogCi0gICAgU3lzRnJlZVN0cmluZyhmcmFtZU5hbWVCU1RSKTsg
CiAgICAgcmV0dXJuIGZyYW1lTmFtZTsKIH0KIAogRnJhbWVMb2FkRGVsZWdhdGU6OkZyYW1lTG9h
ZERlbGVnYXRlKCkKICAgICA6IG1fcmVmQ291bnQoMSkKLSAgICAsIG1fZ2NDb250cm9sbGVyKGFk
b3B0UHRyKG5ldyBHQ0NvbnRyb2xsZXIpKQotICAgICwgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cihhZG9wdFB0cihuZXcgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpKQotICAgICwgbV90ZXh0SW5w
dXRDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBUZXh0SW5wdXRDb250cm9sbGVyKSkKKyAgICAsIG1f
Z2NDb250cm9sbGVyKG5ldyBHQ0NvbnRyb2xsZXIpCisgICAgLCBtX2FjY2Vzc2liaWxpdHlDb250
cm9sbGVyKG5ldyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAsIG1fdGV4dElucHV0Q29u
dHJvbGxlcihuZXcgVGV4dElucHV0Q29udHJvbGxlcikKIHsKIH0KIApAQCAtODUsNyArODUsNyBA
QCBGcmFtZUxvYWREZWxlZ2F0ZTo6fkZyYW1lTG9hZERlbGVnYXRlKCkKIHsKIH0KIAotSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UoUkVG
SUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpR
dWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKIHsKICAgICAqcHB2
T2JqZWN0ID0gMDsKICAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKQEAg
LTEwMywxMiArMTAzLDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVs
ZWcKICAgICByZXR1cm4gU19PSzsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVM
b2FkRGVsZWdhdGU6OkFkZFJlZih2b2lkKQorVUxPTkcgRnJhbWVMb2FkRGVsZWdhdGU6OkFkZFJl
Zih2b2lkKQogewogICAgIHJldHVybiArK21fcmVmQ291bnQ7CiB9CiAKLVVMT05HIFNURE1FVEhP
RENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRlOjpSZWxlYXNlKHZvaWQpCitVTE9ORyBGcmFtZUxv
YWREZWxlZ2F0ZTo6UmVsZWFzZSh2b2lkKQogewogICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZD
b3VudDsKICAgICBpZiAoIW5ld1JlZikKQEAgLTExOCw5ICsxMTgsNyBAQCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0CiB9CiAKIAotSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSgg
Ci0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElXZWJG
cmFtZSogZnJhbWUpIAorSFJFU1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkU3RhcnRQcm92aXNp
b25hbExvYWRGb3JGcmFtZSgvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LCAvKiBbaW5dICov
IElXZWJGcmFtZSogZnJhbWUpIAogewogICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JGcmFtZVxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
ZnJhbWUpLmNfc3RyKCkpOwpAQCAtMTMzLDkgKzEzMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1cm4gU19PSzsgCiB9CiAKLUhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3
ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkKK0hSRVNVTFQgRnJhbWVM
b2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZv
ckZyYW1lKC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsIC8qIFtpbl0gKi8gSVdlYkZyYW1l
KiBmcmFtZSkKIHsgCiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZVxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoZnJhbWUpLmNfc3RyKCkpOwpAQCAtMTQzLDEwICsxMzksNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZhaWxQcm92aXNp
b25hbExvYWRXaXRoRXJyb3IoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0g
ICAgLyogW2luXSAqLyBJV2ViRXJyb3IgKmVycm9yLAotICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1l
ICpmcmFtZSkKK0hSRVNVTFQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZhaWxQcm92aXNpb25hbExv
YWRXaXRoRXJyb3IoLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywgLyogW2luXSAqLyBJV2Vi
RXJyb3IqIGVycm9yLCAvKiBbaW5dICovIElXZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHBy
aW50ZigiJXMgLSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yXG4iLCBkZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSkuY19zdHIoKSk7CkBAIC0xNTUsOSArMTQ4LDcg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogICAgIHJldHVybiBT
X09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRlOjpk
aWRDb21taXRMb2FkRm9yRnJhbWUoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcs
Ci0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQorSFJFU1VMVCBGcmFtZUxvYWREZWxl
Z2F0ZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcs
IC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RS
dW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRp
ZENvbW1pdExvYWRGb3JGcmFtZVxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
ZnJhbWUpLmNfc3RyKCkpOwpAQCAtMTcxLDEwICsxNjIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEZyYW1lTG9hZERlbGVnCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVUaXRsZSggCi0gICAg
LyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBbaW5dICovIEJTVFIgdGl0bGUs
Ci0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQorSFJFU1VMVCBGcmFtZUxvYWREZWxl
Z2F0ZTo6ZGlkUmVjZWl2ZVRpdGxlKC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsIC8qIFtp
bl0gKi8gQlNUUiB0aXRsZSwvKiBbaW5dICovIElXZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHByaW50ZigiJXMgLSBkaWRSZWNlaXZlVGl0bGU6ICVTXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChmcmFtZSkuY19zdHIoKSwgdGl0bGUpOwpAQCAtMTg0LDcgKzE3Miw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1cm4gU19P
SzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlk
Q2hhbmdlSWNvbnMoCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRDaGFuZ2VJY29ucygK
ICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAogICAgIC8qIFtpbl0gKi8gSVdlYkZy
YW1lKiBmcmFtZSkKIHsKQEAgLTIxMyw3ICsyMDEsNyBAQCB2b2lkIEZyYW1lTG9hZERlbGVnYXRl
OjpyZXNldFRvQ29uc2lzdGVuCiB0eXBlZGVmIFZlY3RvcjxDT01QdHI8RnJhbWVMb2FkRGVsZWdh
dGU+ID4gRGVsZWdhdGVWZWN0b3I7CiBzdGF0aWMgRGVsZWdhdGVWZWN0b3ImIGRlbGVnYXRlc1dp
dGhEZWxheWVkV29yaygpCiB7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKERl
bGVnYXRlVmVjdG9yLCBkZWxlZ2F0ZXMsICgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
RGVsZWdhdGVWZWN0b3I+IGRlbGVnYXRlczsKICAgICByZXR1cm4gZGVsZWdhdGVzOwogfQogCkBA
IC0yNTMsOSArMjQxLDcgQEAgdm9pZCBGcmFtZUxvYWREZWxlZ2F0ZTo6bG9jYXRpb25DaGFuZ2VE
bwogICAgIGR1bXAoKTsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWRE
ZWxlZ2F0ZTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3
KiB3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkKK0hSRVNVTFQgRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSgvKiBbaW5dICovIElXZWJWaWV3
KiB3ZWJWaWV3LCAvKiBbaW5dICovIElXZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50
ZigiJXMgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWVcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKQEAgLTI2NCwxMCArMjUwLDcgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogICAgIHJldHVybiBTX09LOwogfQogCi1I
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGYWlsTG9hZFdp
dGhFcnJvciggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5d
ICovIElXZWJFcnJvciogZXJyb3IsCi0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUqIGZyYW1lKQor
SFJFU1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRmFpbExvYWRXaXRoRXJyb3IoLyogW2luXSAq
LyBJV2ViVmlldyogd2ViVmlldywgLyogW2luXSAqLyBJV2ViRXJyb3IqIGVycm9yLCAvKiBbaW5d
ICovIElXZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsTG9h
ZFdpdGhFcnJvclxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpLmNf
c3RyKCkpOwpAQCAtMjc2LDEyICsyNTksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZy
YW1lTG9hZERlbGVnCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTCgg
Ci0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBbaW5dICovIEJTVFIg
dXJsLCAgCi0gICAgLyogW2luXSAqLyBkb3VibGUgZGVsYXlTZWNvbmRzLAotICAgIC8qIFtpbl0g
Ki8gREFURSBmaXJlRGF0ZSwKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpCitIUkVT
VUxUIEZyYW1lTG9hZERlbGVnYXRlOjp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkwoLyog
W2luXSAqLyBJV2ViVmlldyogd2ViVmlldywgLyogW2luXSAqLyBCU1RSIHVybCwgLyogW2luXSAq
LyBkb3VibGUgZGVsYXlTZWNvbmRzLCAvKiBbaW5dICovIERBVEUgZmlyZURhdGUsIC8qIFtpbl0g
Ki8gSVdlYkZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIHdpbGxQZXJmb3Jt
Q2xpZW50UmVkaXJlY3RUb1VSTDogJVMgXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChmcmFtZSkuY19zdHIoKSwKQEAgLTI5MCw5ICsyNjgsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEZyYW1lTG9hZERlbGVnCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZENhbmNlbENsaWVudFJlZGly
ZWN0Rm9yRnJhbWUoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgLyog
W2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQorSFJFU1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlk
Q2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZSgvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3
LCAvKiBbaW5dICovIElXZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0
UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBk
aWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdChmcmFtZSkuY19zdHIoKSk7CkBAIC0zMDEsOSArMjc3LDcgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogfQogCiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OndpbGxDbG9zZUZyYW1lKCAKLSAgICAvKiBbaW5d
ICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkK
K0hSRVNVTFQgRnJhbWVMb2FkRGVsZWdhdGU6OndpbGxDbG9zZUZyYW1lKC8qIFtpbl0gKi8gSVdl
YlZpZXcqIHdlYlZpZXcsIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1
cm4gRV9OT1RJTVBMOwogfQpAQCAtMzgwLDkgKzM1NCw3IEBAIHZvaWQgRnJhbWVMb2FkRGVsZWdh
dGU6OmRpZENsZWFyV2luZG93T2IKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVy
bmFsc09iamVjdChjb250ZXh0KTsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFt
ZUxvYWREZWxlZ2F0ZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoIAotICAgIC8qIFtp
bl0gKi8gSVdlYlZpZXcgKnNlbmRlciwKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUp
CitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFt
ZSgvKiBbaW5dICovIElXZWJWaWV3KiBzZW5kZXIsIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFt
ZSkKIHsKICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1l
XG4iLApAQCAtNDA0LDkgKzM3Niw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVM
b2FkRGVsZWcKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUoIAotICAg
IC8qIFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRlciwKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAq
ZnJhbWUpCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRIYW5kbGVPbmxvYWRFdmVudHNG
b3JGcmFtZSgvKiBbaW5dICovIElXZWJWaWV3KiBzZW5kZXIsIC8qIFtpbl0gKi8gSVdlYkZyYW1l
KiBmcmFtZSkKIHsKICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0Zv
ckZyYW1lXG4iLApAQCAtNDE1LDE1ICszODUsMTIgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBGcmFtZUxvYWREZWxlZwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRJbkZyYW1lKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3ICpzZW5kZXIsCi0gICAgLyogW2lu
XSAqLyBJV2ViRnJhbWUgKmZyYW1lKQorSFJFU1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0SW5GcmFtZSgvKiBbaW5dICovIElXZWJWaWV3KiBzZW5k
ZXIsIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gU19PSzsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRGlzcGxh
eUluc2VjdXJlQ29udGVudCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJF
U1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCgvKiBbaW5d
ICovIElXZWJWaWV3KiBzZW5kZXIpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiZGlkRGlzcGxheUluc2Vj
dXJlQ29udGVudFxuIik7CkBAIC00MzEsMTMgKzM5OCwxMCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEZyYW1lTG9hZERlbGVnCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZFJ1bkluc2VjdXJlQ29udGVudCgg
Ci0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAotICAgIC8qIFtpbl0gKi8gSVdlYlNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4pCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRSdW5J
bnNlY3VyZUNvbnRlbnQoLyogW2luXSAqLyBJV2ViVmlldyogc2VuZGVyLCAvKiBbaW5dICovIElX
ZWJTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoImRpZFJ1bkluc2Vj
dXJlQ29udGVudFxuIik7CiAKICAgICByZXR1cm4gU19PSzsKIH0KLQpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmgJKHJldmlzaW9uIDE2NzAyMikK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjZGVmaW5lIEZyYW1lTG9hZERlbGVnYXRlX2gKIAog
I2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIGNs
YXNzIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOwogY2xhc3MgVGV4dElucHV0Q29udHJvbGxlcjsK
QEAgLTE2OSw5ICsxNjgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgbG9jYXRpb25DaGFuZ2VEb25l
KElXZWJFcnJvciosIElXZWJGcmFtZSopOwogCiAgICAgVUxPTkcgbV9yZWZDb3VudDsKLSAgICBP
d25QdHI8R0NDb250cm9sbGVyPiBtX2djQ29udHJvbGxlcjsKLSAgICBPd25QdHI8QWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7Ci0gICAgT3duUHRyPFRl
eHRJbnB1dENvbnRyb2xsZXI+IG1fdGV4dElucHV0Q29udHJvbGxlcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R0NDb250cm9sbGVyPiBtX2djQ29udHJvbGxlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFRleHRJbnB1dENvbnRyb2xsZXI+IG1fdGV4dElucHV0Q29udHJvbGxl
cjsKIH07CiAKICNlbmRpZiAvLyBGcmFtZUxvYWREZWxlZ2F0ZV9oCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vSGlzdG9yeURlbGVnYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vSGlzdG9yeURlbGVnYXRlLmNwcAkocmV2aXNpb24gMTY3MDIyKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0hpc3RvcnlEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWVXaW4uaCIKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCisjaW5j
bHVkZSA8Y29tdXRpbC5oPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxXZWJLaXQvV2Vi
S2l0Lmg+CiAKQEAgLTgzLDMzICs4NCwyNCBAQCBIUkVTVUxUIEhpc3RvcnlEZWxlZ2F0ZTo6ZGlk
TmF2aWdhdGVXaXRoCiAgICAgaWYgKCFnVGVzdFJ1bm5lci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNh
bGxiYWNrcygpKQogICAgICAgICByZXR1cm4gU19PSzsKIAotICAgIEJTVFIgdXJsQlNUUjsKLSAg
ICBpZiAoRkFJTEVEKG5hdmlnYXRpb25EYXRhLT51cmwoJnVybEJTVFIpKSkKKyAgICBfYnN0cl90
IHVybEJTVFI7CisgICAgaWYgKEZBSUxFRChuYXZpZ2F0aW9uRGF0YS0+dXJsKCZ1cmxCU1RSLkdl
dEJTVFIoKSkpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogICAgIHdzdHJpbmcgdXJsOwotICAg
IGlmICh1cmxCU1RSKQorICAgIGlmICh1cmxCU1RSLmxlbmd0aCgpKQogICAgICAgICB1cmwgPSB1
cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQod3N0cmluZ0Zyb21CU1RSKHVybEJTVFIpKTsKLSAgICBT
eXNGcmVlU3RyaW5nKHVybEJTVFIpOwogCi0gICAgQlNUUiB0aXRsZUJTVFI7Ci0gICAgaWYgKEZB
SUxFRChuYXZpZ2F0aW9uRGF0YS0+dGl0bGUoJnRpdGxlQlNUUikpKQorICAgIF9ic3RyX3QgdGl0
bGVCU1RSOworICAgIGlmIChGQUlMRUQobmF2aWdhdGlvbkRhdGEtPnRpdGxlKCZ0aXRsZUJTVFIu
R2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7Ci0gICAgd3N0cmluZyB0aXRsZTsK
LSAgICBpZiAodGl0bGVCU1RSKQotICAgICAgICB0aXRsZSA9IHdzdHJpbmdGcm9tQlNUUih0aXRs
ZUJTVFIpOwotICAgIFN5c0ZyZWVTdHJpbmcodGl0bGVCU1RSKTsKIAogICAgIENPTVB0cjxJV2Vi
VVJMUmVxdWVzdD4gcmVxdWVzdDsKICAgICBpZiAoRkFJTEVEKG5hdmlnYXRpb25EYXRhLT5vcmln
aW5hbFJlcXVlc3QoJnJlcXVlc3QpKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEJT
VFIgaHR0cE1ldGhvZEJTVFI7Ci0gICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5IVFRQTWV0aG9kKCZo
dHRwTWV0aG9kQlNUUikpKQorICAgIF9ic3RyX3QgaHR0cE1ldGhvZEJTVFI7CisgICAgaWYgKEZB
SUxFRChyZXF1ZXN0LT5IVFRQTWV0aG9kKCZodHRwTWV0aG9kQlNUUi5HZXRCU1RSKCkpKSkKICAg
ICAgICAgcmV0dXJuIEVfRkFJTDsKLSAgICB3c3RyaW5nIGh0dHBNZXRob2Q7Ci0gICAgaWYgKGh0
dHBNZXRob2RCU1RSKQotICAgICAgICBodHRwTWV0aG9kID0gd3N0cmluZ0Zyb21CU1RSKGh0dHBN
ZXRob2RCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKGh0dHBNZXRob2RCU1RSKTsKIAogICAgIENP
TVB0cjxJV2ViVVJMUmVzcG9uc2U+IHJlc3BvbnNlOwogICAgIGlmIChGQUlMRUQobmF2aWdhdGlv
bkRhdGEtPnJlc3BvbnNlKCZyZXNwb25zZSkpKQpAQCAtMTI3LDIxICsxMTksMjAgQEAgSFJFU1VM
VCBIaXN0b3J5RGVsZWdhdGU6OmRpZE5hdmlnYXRlV2l0aAogICAgIGlmIChGQUlMRUQobmF2aWdh
dGlvbkRhdGEtPmhhc1N1YnN0aXR1dGVEYXRhKCZoYXNTdWJzdGl0dXRlRGF0YSkpKQogICAgICAg
ICByZXR1cm4gRV9GQUlMOwogCi0gICAgQlNUUiBjbGllbnRSZWRpcmVjdFNvdXJjZUJTVFI7Ci0g
ICAgaWYgKEZBSUxFRChuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50UmVkaXJlY3RTb3VyY2UoJmNsaWVu
dFJlZGlyZWN0U291cmNlQlNUUikpKQorICAgIF9ic3RyX3QgY2xpZW50UmVkaXJlY3RTb3VyY2VC
U1RSOworICAgIGlmIChGQUlMRUQobmF2aWdhdGlvbkRhdGEtPmNsaWVudFJlZGlyZWN0U291cmNl
KCZjbGllbnRSZWRpcmVjdFNvdXJjZUJTVFIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiBF
X0ZBSUw7Ci0gICAgYm9vbCBoYXNDbGllbnRSZWRpcmVjdCA9IGNsaWVudFJlZGlyZWN0U291cmNl
QlNUUiAmJiBTeXNTdHJpbmdMZW4oY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSKTsKKyAgICBib29s
IGhhc0NsaWVudFJlZGlyZWN0ID0gY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSLmxlbmd0aCgpOwog
ICAgIHdzdHJpbmcgcmVkaXJlY3RTb3VyY2U7Ci0gICAgaWYgKGNsaWVudFJlZGlyZWN0U291cmNl
QlNUUikKKyAgICBpZiAoY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSLmxlbmd0aCgpKQogICAgICAg
ICByZWRpcmVjdFNvdXJjZSA9IHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3c3RyaW5nRnJvbUJT
VFIoY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSKSk7Ci0gICAgU3lzRnJlZVN0cmluZyhjbGllbnRS
ZWRpcmVjdFNvdXJjZUJTVFIpOwogCiAgICAgYm9vbCB3YXNGYWlsdXJlID0gaGFzU3Vic3RpdHV0
ZURhdGEgfHwgKGh0dHBSZXNwb25zZSAmJiBzdGF0dXNDb2RlID49IDQwMCk7CiAgICAgICAgIAog
ICAgIHByaW50ZigiV2ViVmlldyBuYXZpZ2F0ZWQgdG8gdXJsIFwiJVNcIiB3aXRoIHRpdGxlIFwi
JVNcIiB3aXRoIEhUVFAgZXF1aXZhbGVudCBtZXRob2QgXCIlU1wiLiAgVGhlIG5hdmlnYXRpb24g
d2FzICVzIGFuZCB3YXMgJXMlUy5cbiIsIAogICAgICAgICB1cmwuY19zdHIoKSwgCi0gICAgICAg
IHRpdGxlLmNfc3RyKCksIAotICAgICAgICBodHRwTWV0aG9kLmNfc3RyKCksCisgICAgICAgIHN0
YXRpY19jYXN0PHdjaGFyX3QqPih0aXRsZUJTVFIpLAorICAgICAgICBzdGF0aWNfY2FzdDx3Y2hh
cl90Kj4oaHR0cE1ldGhvZEJTVFIpLAogICAgICAgICB3YXNGYWlsdXJlID8gImEgZmFpbHVyZSIg
OiAic3VjY2Vzc2Z1bCIsIAogICAgICAgICBoYXNDbGllbnRSZWRpcmVjdCA/ICJhIGNsaWVudCBy
ZWRpcmVjdCBmcm9tICIgOiAibm90IGEgY2xpZW50IHJlZGlyZWN0IiwgCiAgICAgICAgIHJlZGly
ZWN0U291cmNlLmNfc3RyKCkpOwpAQCAtMTkyLDExICsxODMsNyBAQCBIUkVTVUxUIEhpc3RvcnlE
ZWxlZ2F0ZTo6dXBkYXRlSGlzdG9yeVRpCiAgICAgaWYgKHVybEJTVFIpCiAgICAgICAgIHVybCA9
IHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3c3RyaW5nRnJvbUJTVFIodXJsQlNUUikpOwogCi0g
ICAgd3N0cmluZyB0aXRsZTsKLSAgICBpZiAodGl0bGVCU1RSKQotICAgICAgICB0aXRsZSA9IHdz
dHJpbmdGcm9tQlNUUih0aXRsZUJTVFIpOwotCi0gICAgcHJpbnRmKCJXZWJWaWV3IHVwZGF0ZWQg
dGhlIHRpdGxlIGZvciBoaXN0b3J5IFVSTCBcIiVTXCIgdG8gXCIlU1wiLlxuIiwgdXJsLmNfc3Ry
KCksIHRpdGxlLmNfc3RyKCkpOworICAgIHByaW50ZigiV2ViVmlldyB1cGRhdGVkIHRoZSB0aXRs
ZSBmb3IgaGlzdG9yeSBVUkwgXCIlU1wiIHRvIFwiJVNcIi5cbiIsIHVybC5jX3N0cigpLCB0aXRs
ZUJTVFIgPyB0aXRsZUJTVFIgOiBMIiIpOwogICAgIHJldHVybiBTX09LOwogfQogICAgIApAQCAt
MjA1LDE0ICsxOTIsMTMgQEAgSFJFU1VMVCBIaXN0b3J5RGVsZWdhdGU6OnBvcHVsYXRlVmlzaXRl
ZAogICAgIGlmICghZ1Rlc3RSdW5uZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkK
ICAgICAgICAgcmV0dXJuIFNfT0s7CiAKLSAgICBCU1RSIHVybEJTVFI7Ci0gICAgaWYgKEZBSUxF
RCh3ZWJWaWV3LT5tYWluRnJhbWVVUkwoJnVybEJTVFIpKSkKKyAgICBfYnN0cl90IHVybEJTVFI7
CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5tYWluRnJhbWVVUkwoJnVybEJTVFIuR2V0QlNUUigp
KSkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICB3c3RyaW5nIHVybDsKLSAgICBpZiAo
dXJsQlNUUikKKyAgICBpZiAodXJsQlNUUi5sZW5ndGgoKSkKICAgICAgICAgdXJsID0gdXJsU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KHdzdHJpbmdGcm9tQlNUUih1cmxCU1RSKSk7Ci0gICAgU3lzRnJl
ZVN0cmluZyh1cmxCU1RSKTsKIAogICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFZpc2l0ZWRMaW5r
c0NhbGxiYWNrKCkpCiAgICAgICAgIHByaW50ZigiQXNrZWQgdG8gcG9wdWxhdGUgdmlzaXRlZCBs
aW5rcyBmb3IgV2ViVmlldyBcIiVTXCJcbiIsIHVybC5jX3N0cigpKTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9Qb2xpY3lEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcAkocmV2aXNpb24gMTY3MDIyKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWUuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCisjaW5jbHVkZSA8Y29tdXRpbC5oPgogI2lu
Y2x1ZGUgPHN0cmluZz4KIAogdXNpbmcgc3RkOjp3c3RyaW5nOwpAQCAtNDEsMTEgKzQyLDEwIEBA
IHN0YXRpYyB3c3RyaW5nIGR1bXBQYXRoKElET01Ob2RlKiBub2RlKQogCiAgICAgd3N0cmluZyBy
ZXN1bHQ7CiAKLSAgICBCU1RSIG5hbWU7Ci0gICAgaWYgKEZBSUxFRChub2RlLT5ub2RlTmFtZSgm
bmFtZSkpKQorICAgIF9ic3RyX3QgbmFtZTsKKyAgICBpZiAoRkFJTEVEKG5vZGUtPm5vZGVOYW1l
KCZuYW1lLkdldEJTVFIoKSkpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJlc3VsdC5h
c3NpZ24obmFtZSwgU3lzU3RyaW5nTGVuKG5hbWUpKTsKLSAgICBTeXNGcmVlU3RyaW5nKG5hbWUp
OworICAgIHJlc3VsdC5hc3NpZ24obmFtZSwgbmFtZS5sZW5ndGgoKSk7CiAKICAgICBDT01QdHI8
SURPTU5vZGU+IHBhcmVudDsKICAgICBpZiAoU1VDQ0VFREVEKG5vZGUtPnBhcmVudE5vZGUoJnBh
cmVudCkpKQpAQCAtNjIsNyArNjIsNyBAQCBQb2xpY3lEZWxlZ2F0ZTo6UG9saWN5RGVsZWdhdGUo
KQogfQogCiAvLyBJVW5rbm93bgotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBQb2xpY3lEZWxl
Z2F0ZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCitIUkVT
VUxUIFBvbGljeURlbGVnYXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBw
dk9iamVjdCkKIHsKICAgICAqcHB2T2JqZWN0ID0gMDsKICAgICBpZiAoSXNFcXVhbEdVSUQocmlp
ZCwgSUlEX0lVbmtub3duKSkKQEAgLTc2LDEyICs3NiwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFBvbGljeURlbGVnYXRlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLVVMT05HIFNURE1F
VEhPRENBTExUWVBFIFBvbGljeURlbGVnYXRlOjpBZGRSZWYodm9pZCkKK1VMT05HIFBvbGljeURl
bGVnYXRlOjpBZGRSZWYodm9pZCkKIHsKICAgICByZXR1cm4gKyttX3JlZkNvdW50OwogfQogCi1V
TE9ORyBTVERNRVRIT0RDQUxMVFlQRSBQb2xpY3lEZWxlZ2F0ZTo6UmVsZWFzZSh2b2lkKQorVUxP
TkcgUG9saWN5RGVsZWdhdGU6OlJlbGVhc2Uodm9pZCkKIHsKICAgICBVTE9ORyBuZXdSZWYgPSAt
LW1fcmVmQ291bnQ7CiAgICAgaWYgKCFuZXdSZWYpCkBAIC05MCwxNiArOTAsMTYgQEAgVUxPTkcg
U1RETUVUSE9EQ0FMTFRZUEUgUG9saWN5RGVsZWdhdGU6OgogICAgIHJldHVybiBuZXdSZWY7CiB9
CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUG9saWN5RGVsZWdhdGU6OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24oCitIUkVTVUxUIFBvbGljeURlbGVnYXRlOjpkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKAogICAgIC8qW2luXSovIElXZWJWaWV3KiAvKndlYlZpZXcq
LywgCiAgICAgLypbaW5dKi8gSVByb3BlcnR5QmFnKiBhY3Rpb25JbmZvcm1hdGlvbiwgCiAgICAg
LypbaW5dKi8gSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsIAogICAgIC8qW2luXSovIElXZWJGcmFt
ZSogZnJhbWUsIAogICAgIC8qW2luXSovIElXZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyKiBsaXN0
ZW5lcikKIHsKLSAgICBCU1RSIHVybDsKLSAgICByZXF1ZXN0LT5VUkwoJnVybCk7Ci0gICAgd3N0
cmluZyB3dXJsID0gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdzdHJpbmcodXJsLCBTeXNTdHJp
bmdMZW4odXJsKSkpOworICAgIF9ic3RyX3QgdXJsOworICAgIHJlcXVlc3QtPlVSTCgmdXJsLkdl
dEJTVFIoKSk7CisgICAgd3N0cmluZyB3dXJsID0gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdz
dHJpbmcodXJsLCB1cmwubGVuZ3RoKCkpKTsKIAogICAgIGludCBuYXZUeXBlID0gMDsKICAgICBW
QVJJQU5UIHZhcjsKQEAgLTE0Niw4ICsxNDYsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFBvbGljeURlbGVnYXRlCiAKICAgICBwcmludGYoIiVTXG4iLCBtZXNzYWdlLmNfc3RyKCkpOwog
Ci0gICAgU3lzRnJlZVN0cmluZyh1cmwpOwotCiAgICAgaWYgKG1fcGVybWlzc2l2ZURlbGVnYXRl
KQogICAgICAgICBsaXN0ZW5lci0+dXNlKCk7CiAgICAgZWxzZQpAQCAtMTYyLDI2ICsxNjAsMjEg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBQb2xpY3lEZWxlZ2F0ZQogfQogCiAKLUhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgUG9saWN5RGVsZWdhdGU6OnVuYWJsZVRvSW1wbGVtZW50UG9s
aWN5V2l0aEVycm9yKAorSFJFU1VMVCBQb2xpY3lEZWxlZ2F0ZTo6dW5hYmxlVG9JbXBsZW1lbnRQ
b2xpY3lXaXRoRXJyb3IoCiAgICAgLypbaW5dKi8gSVdlYlZpZXcqIC8qd2ViVmlldyovLCAKICAg
ICAvKltpbl0qLyBJV2ViRXJyb3IqIGVycm9yLCAKICAgICAvKltpbl0qLyBJV2ViRnJhbWUqIGZy
YW1lKQogewotICAgIEJTVFIgZG9tYWluU3RyOwotICAgIGVycm9yLT5kb21haW4oJmRvbWFpblN0
cik7Ci0gICAgd3N0cmluZyBkb21haW5NZXNzYWdlID0gZG9tYWluU3RyOworICAgIF9ic3RyX3Qg
ZG9tYWluU3RyOworICAgIGVycm9yLT5kb21haW4oJmRvbWFpblN0ci5HZXRCU1RSKCkpOwogCiAg
ICAgaW50IGNvZGU7CiAgICAgZXJyb3ItPmNvZGUoJmNvZGUpOwogICAgIAotICAgIEJTVFIgZnJh
bWVOYW1lOwotICAgIGZyYW1lLT5uYW1lKCZmcmFtZU5hbWUpOwotICAgIHdzdHJpbmcgZnJhbWVO
YW1lTWVzc2FnZSA9IGZyYW1lTmFtZTsKLSAgICAKLSAgICBwcmludGYoIlBvbGljeSBkZWxlZ2F0
ZTogdW5hYmxlIHRvIGltcGxlbWVudCBwb2xpY3kgd2l0aCBlcnJvciBkb21haW4gJyVTJywgZXJy
b3IgY29kZSAlZCwgaW4gZnJhbWUgJyVTJyIsIGRvbWFpbk1lc3NhZ2UuY19zdHIoKSwgY29kZSwg
ZnJhbWVOYW1lTWVzc2FnZS5jX3N0cigpKTsKKyAgICBfYnN0cl90IGZyYW1lTmFtZTsKKyAgICBm
cmFtZS0+bmFtZSgmZnJhbWVOYW1lLkdldEJTVFIoKSk7CiAgICAgCi0gICAgU3lzRnJlZVN0cmlu
Zyhkb21haW5TdHIpOwotICAgIFN5c0ZyZWVTdHJpbmcoZnJhbWVOYW1lKTsKKyAgICBwcmludGYo
IlBvbGljeSBkZWxlZ2F0ZTogdW5hYmxlIHRvIGltcGxlbWVudCBwb2xpY3kgd2l0aCBlcnJvciBk
b21haW4gJyVTJywgZXJyb3IgY29kZSAlZCwgaW4gZnJhbWUgJyVTJyIsIHN0YXRpY19jYXN0PHdj
aGFyX3QqPihkb21haW5TdHIpLCBjb2RlLCBzdGF0aWNfY2FzdDxUQ0hBUio+KGZyYW1lTmFtZSkp
OwogICAgIAogICAgIHJldHVybiBTX09LOwogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxNjcwMjIpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTc0LDI4ICs3NCwyMyBAQCB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRl
OjpkZXNjcmlwdGlvCiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm4gTCIobnVsbCki
OwogCi0gICAgQlNUUiB1cmxCU1RSOwotICAgIGlmIChGQUlMRUQocmVxdWVzdC0+VVJMKCZ1cmxC
U1RSKSkpCisgICAgX2JzdHJfdCB1cmxCU1RSOworICAgIGlmIChGQUlMRUQocmVxdWVzdC0+VVJM
KCZ1cmxCU1RSLkdldEJTVFIoKSkpKQogICAgICAgICByZXR1cm4gd3N0cmluZygpOwogICAgIAog
ICAgIHdzdHJpbmcgdXJsID0gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdzdHJpbmdGcm9tQlNU
Uih1cmxCU1RSKSk7Ci0gICAgOjpTeXNGcmVlU3RyaW5nKHVybEJTVFIpOwogICAgIAotICAgIEJT
VFIgbWFpbkRvY3VtZW50VVJMQlNUUjsKLSAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPm1haW5Eb2N1
bWVudFVSTCgmbWFpbkRvY3VtZW50VVJMQlNUUikpKQorICAgIF9ic3RyX3QgbWFpbkRvY3VtZW50
VVJMQlNUUjsKKyAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPm1haW5Eb2N1bWVudFVSTCgmbWFpbkRv
Y3VtZW50VVJMQlNUUi5HZXRCU1RSKCkpKSkKICAgICAgICAgcmV0dXJuIHdzdHJpbmcoKTsKICAg
ICAKICAgICB3c3RyaW5nIG1haW5Eb2N1bWVudFVSTCA9IHVybFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCh3c3RyaW5nRnJvbUJTVFIobWFpbkRvY3VtZW50VVJMQlNUUikpOwotICAgIDo6U3lzRnJlZVN0
cmluZyhtYWluRG9jdW1lbnRVUkxCU1RSKTsKICAgICAKLSAgICBCU1RSIGh0dHBNZXRob2RCU1RS
OwotICAgIGlmIChGQUlMRUQocmVxdWVzdC0+SFRUUE1ldGhvZCgmaHR0cE1ldGhvZEJTVFIpKSkK
KyAgICBfYnN0cl90IGh0dHBNZXRob2RCU1RSOworICAgIGlmIChGQUlMRUQocmVxdWVzdC0+SFRU
UE1ldGhvZCgmaHR0cE1ldGhvZEJTVFIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiB3c3Ry
aW5nKCk7CiAgICAgCi0gICAgd3N0cmluZyBodHRwTWV0aG9kID0gd3N0cmluZ0Zyb21CU1RSKGh0
dHBNZXRob2RCU1RSKTsKLSAgICA6OlN5c0ZyZWVTdHJpbmcoaHR0cE1ldGhvZEJTVFIpOwotCi0g
ICAgcmV0dXJuIEwiPE5TVVJMUmVxdWVzdCBVUkwgIiArIHVybCArIEwiLCBtYWluIGRvY3VtZW50
IFVSTCAiICsgbWFpbkRvY3VtZW50VVJMICsgTCIsIGh0dHAgbWV0aG9kICIgKyBodHRwTWV0aG9k
ICsgTCI+IjsKKyAgICByZXR1cm4gTCI8TlNVUkxSZXF1ZXN0IFVSTCAiICsgdXJsICsgTCIsIG1h
aW4gZG9jdW1lbnQgVVJMICIgKyBtYWluRG9jdW1lbnRVUkwgKyBMIiwgaHR0cCBtZXRob2QgIiAr
IHN0YXRpY19jYXN0PHdjaGFyX3QqPihodHRwTWV0aG9kQlNUUikgKyBMIj4iOwogfQogCiB3c3Ry
aW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChJV2ViVVJMUmVzcG9uc2UqIHJlc3BvbnNlKQpAQCAtMTAzLDEyICs5OCwxMSBAQCB3c3RyaW5n
IFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvCiAgICAgaWYgKCFyZXNwb25zZSkKICAg
ICAgICAgcmV0dXJuIEwiKG51bGwpIjsKIAotICAgIEJTVFIgdXJsQlNUUjsKLSAgICBpZiAoRkFJ
TEVEKHJlc3BvbnNlLT5VUkwoJnVybEJTVFIpKSkKKyAgICBfYnN0cl90IHVybEJTVFI7CisgICAg
aWYgKEZBSUxFRChyZXNwb25zZS0+VVJMKCZ1cmxCU1RSLkdldEJTVFIoKSkpKQogICAgICAgICBy
ZXR1cm4gd3N0cmluZygpOwogICAgIAogICAgIHdzdHJpbmcgdXJsID0gdXJsU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHdzdHJpbmdGcm9tQlNUUih1cmxCU1RSKSk7Ci0gICAgOjpTeXNGcmVlU3RyaW5n
KHVybEJTVFIpOwogCiAgICAgaW50IHN0YXR1c0NvZGUgPSAwOwogICAgIENPTVB0cjxJV2ViSFRU
UFVSTFJlc3BvbnNlPiBodHRwUmVzcG9uc2U7CkBAIC0xMjIsMTIgKzExNiwxMSBAQCB3c3RyaW5n
IFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvCiB7CiAgICAgd3N0cmluZyByZXN1bHQg
PSBMIjxOU0Vycm9yICI7CiAKLSAgICBCU1RSIGRvbWFpblNUUjsKLSAgICBpZiAoRkFJTEVEKGVy
cm9yLT5kb21haW4oJmRvbWFpblNUUikpKQorICAgIF9ic3RyX3QgZG9tYWluU1RSOworICAgIGlm
IChGQUlMRUQoZXJyb3ItPmRvbWFpbigmZG9tYWluU1RSLkdldEJTVFIoKSkpKQogICAgICAgICBy
ZXR1cm4gd3N0cmluZygpOwogCiAgICAgd3N0cmluZyBkb21haW4gPSB3c3RyaW5nRnJvbUJTVFIo
ZG9tYWluU1RSKTsKLSAgICA6OlN5c0ZyZWVTdHJpbmcoZG9tYWluU1RSKTsKIAogICAgIGludCBj
b2RlOwogICAgIGlmIChGQUlMRUQoZXJyb3ItPmNvZGUoJmNvZGUpKSkKQEAgLTE1MCwxNCArMTQz
LDEyIEBAIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0aW8KICAgICByZXN1
bHQgKz0gTCJkb21haW4gIiArIGRvbWFpbjsKICAgICByZXN1bHQgKz0gTCIsIGNvZGUgIiArIHdz
dHJpbmdGcm9tSW50KGNvZGUpOwogCi0gICAgQlNUUiBmYWlsaW5nVVJMU1RSOwotICAgIGlmIChG
QUlMRUQoZXJyb3ItPmZhaWxpbmdVUkwoJmZhaWxpbmdVUkxTVFIpKSkKKyAgICBfYnN0cl90IGZh
aWxpbmdVUkxTVFI7CisgICAgaWYgKEZBSUxFRChlcnJvci0+ZmFpbGluZ1VSTCgmZmFpbGluZ1VS
TFNUUi5HZXRCU1RSKCkpKSkKICAgICAgICAgcmV0dXJuIHdzdHJpbmcoKTsKIAotICAgIGlmIChm
YWlsaW5nVVJMU1RSKSB7CisgICAgaWYgKGZhaWxpbmdVUkxTVFIubGVuZ3RoKCkpCiAgICAgICAg
IHJlc3VsdCArPSBMIiwgZmFpbGluZyBVUkwgXCIiICsgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0
KHdzdHJpbmdGcm9tQlNUUihmYWlsaW5nVVJMU1RSKSkgKyBMIlwiIjsKLSAgICAgICAgOjpTeXNG
cmVlU3RyaW5nKGZhaWxpbmdVUkxTVFIpOwotICAgIH0KIAogICAgIHJlc3VsdCArPSBMIj4iOwog
CkBAIC0xNzMsNyArMTY0LDcgQEAgUmVzb3VyY2VMb2FkRGVsZWdhdGU6On5SZXNvdXJjZUxvYWRE
ZWxlZwogewogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERlbGVn
YXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK0hSRVNV
TFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lk
KiogcHB2T2JqZWN0KQogewogICAgICpwcHZPYmplY3QgPSAwOwogICAgIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBJSURfSVVua25vd24pKQpAQCAtMTg5LDEyICsxODAsMTIgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAgIHJldHVybiBTX09LOwogfQogCi1VTE9O
RyBTVERNRVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKHZvaWQpCitV
TE9ORyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKHZvaWQpCiB7CiAgICAgcmV0dXJuICsr
bV9yZWZDb3VudDsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGVs
ZWdhdGU6OlJlbGVhc2Uodm9pZCkKK1VMT05HIFJlc291cmNlTG9hZERlbGVnYXRlOjpSZWxlYXNl
KHZvaWQpCiB7CiAgICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OwogICAgIGlmICghbmV3
UmVmKQpAQCAtMjAzLDE1ICsxOTQsMTEgQEAgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3Vy
Y2VMb2FkRGVsZQogICAgIHJldHVybiBuZXdSZWY7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCgg
Ci0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElXZWJV
UkxSZXF1ZXN0KiByZXF1ZXN0LAotICAgIC8qIFtpbl0gKi8gSVdlYkRhdGFTb3VyY2UqIGRhdGFT
b3VyY2UsCi0gICAgLyogW2luXSAqLyB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCitIUkVTVUxU
IFJlc291cmNlTG9hZERlbGVnYXRlOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoSVdlYlZp
ZXcqIHdlYlZpZXcsIElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0LCBJV2ViRGF0YVNvdXJjZSogZGF0
YVNvdXJjZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogeyAKICAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBCU1RS
IHVybFN0cjsKLSAgICAgICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5VUkwoJnVybFN0cikpKQorICAg
ICAgICBfYnN0cl90IHVybFN0cjsKKyAgICAgICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5VUkwoJnVy
bFN0ci5HZXRCU1RSKCkpKSkKICAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICAgICAg
QVNTRVJUKCF1cmxNYXAoKS5jb250YWlucyhpZGVudGlmaWVyKSk7CkBAIC0yMjEsNyArMjA4LDcg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAgIHJldHVybiBT
X09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERlbGVnYXRl
OjpyZW1vdmVJZGVudGlmaWVyRm9yUmVxdWVzdCgKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdh
dGU6OnJlbW92ZUlkZW50aWZpZXJGb3JSZXF1ZXN0KAogICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcq
IHdlYlZpZXcsCiAgICAgLyogW2luXSAqLyB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CkBA
IC0yMzAsMTMgKzIxNyw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2Fk
RGUKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZXNv
dXJjZUxvYWREZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KCAKLSAgICAvKiBbaW5dICovIElXZWJW
aWV3KiB3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAot
ICAgIC8qIFtpbl0gKi8gSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsCi0gICAgLyogW2luXSAqLyBJ
V2ViVVJMUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UsCi0gICAgLyogW2luXSAqLyBJV2ViRGF0
YVNvdXJjZSogZGF0YVNvdXJjZSwKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIElXZWJVUkxSZXF1
ZXN0ICoqbmV3UmVxdWVzdCkKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OndpbGxTZW5k
UmVxdWVzdChJV2ViVmlldyogd2ViVmlldywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBJV2Vi
VVJMUmVxdWVzdCogcmVxdWVzdCwKKyAgICBJV2ViVVJMUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9u
c2UsIElXZWJEYXRhU291cmNlKiBkYXRhU291cmNlLCBJV2ViVVJMUmVxdWVzdCoqIG5ld1JlcXVl
c3QpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRmKCIlUyAtIHdpbGxTZW5kUmVxdWVzdCAlUyByZWRp
cmVjdFJlc3BvbnNlICVTXG4iLCAKQEAgLTI2NywyMCArMjQ5LDE1IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGUKICAgICByZXF1ZXN0LT5tdXRhYmxlQ29weSgmcmVx
dWVzdENvcHkpOwogICAgIGNvbnN0IHNldDxzdHJpbmc+JiBjbGVhckhlYWRlcnMgPSBnVGVzdFJ1
bm5lci0+d2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzKCk7CiAgICAgZm9yIChzZXQ8c3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaGVhZGVyID0gY2xlYXJIZWFkZXJzLmJlZ2luKCk7IGhlYWRlciAh
PSBjbGVhckhlYWRlcnMuZW5kKCk7ICsraGVhZGVyKSB7Ci0gICAgICBCU1RSIGJzdHJIZWFkZXIg
PSBCU1RSRnJvbVN0cmluZygqaGVhZGVyKTsKLSAgICAgIHJlcXVlc3RDb3B5LT5zZXRWYWx1ZSgw
LCBic3RySGVhZGVyKTsKLSAgICAgIFN5c0ZyZWVTdHJpbmcoYnN0ckhlYWRlcik7CisgICAgICAg
IF9ic3RyX3QgYnN0ckhlYWRlcihoZWFkZXItPmRhdGEoKSk7CisgICAgICAgIHJlcXVlc3RDb3B5
LT5zZXRWYWx1ZSgwLCBic3RySGVhZGVyKTsKICAgICB9CiAKICAgICAqbmV3UmVxdWVzdCA9IHJl
cXVlc3RDb3B5OwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFJlc291cmNlTG9hZERlbGVnYXRlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgLyogW2luXSAqLyB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCi0gICAgLyogW2luXSAqLyBJV2ViVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwKLSAgICAvKiBbaW5dICovIElXZWJEYXRhU291cmNl
ICpkYXRhU291cmNlKQorSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKElXZWJWaWV3KiB3ZWJWaWV3LCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIElXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSogY2hhbGxlbmdlLCBJV2Vi
RGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKIHsKICAgICBDT01QdHI8SVdlYlVSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlU2VuZGVyPiBzZW5kZXI7CiAgICAgaWYgKCFjaGFsbGVuZ2UgfHwgRkFJTEVE
KGNoYWxsZW5nZS0+c2VuZGVyKCZzZW5kZXIpKSkKQEAgLTMwNiw3ICsyODMsNyBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
LUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2Vp
dmVSZXNwb25zZSgKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNw
b25zZSgKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LCAKICAgICAvKiBbaW5dICov
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgCiAgICAgLyogW2luXSAqLyBJV2ViVVJMUmVzcG9u
c2UqIHJlc3BvbnNlLCAKQEAgLTMxOCwzMSArMjk1LDI0IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgUmVzb3VyY2VMb2FkRGUKICAgICAgICAgICAgIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHJlc3BvbnNlKS5jX3N0cigpKTsKICAgICB9CiAgICAgaWYgKCFkb25lICYmIGdU
ZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKSB7Ci0gICAgICAgIEJT
VFIgbWltZVR5cGVCU1RSOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3BvbnNlLT5NSU1FVHlwZSgm
bWltZVR5cGVCU1RSKSkpCisgICAgICAgIF9ic3RyX3QgbWltZVR5cGVCU1RSOworICAgICAgICBp
ZiAoRkFJTEVEKHJlc3BvbnNlLT5NSU1FVHlwZSgmbWltZVR5cGVCU1RSLkdldEJTVFIoKSkpKQog
ICAgICAgICAgICAgRV9GQUlMOwogICAgIAotICAgICAgICB3c3RyaW5nIG1pbWVUeXBlID0gd3N0
cmluZ0Zyb21CU1RSKG1pbWVUeXBlQlNUUik7Ci0gICAgICAgIDo6U3lzRnJlZVN0cmluZyhtaW1l
VHlwZUJTVFIpOwotCi0gICAgICAgIEJTVFIgdXJsQlNUUjsKLSAgICAgICAgaWYgKEZBSUxFRChy
ZXNwb25zZS0+VVJMKCZ1cmxCU1RSKSkpCisgICAgICAgIF9ic3RyX3QgdXJsQlNUUjsKKyAgICAg
ICAgaWYgKEZBSUxFRChyZXNwb25zZS0+VVJMKCZ1cmxCU1RSLkdldEJTVFIoKSkpKQogICAgICAg
ICAgICAgRV9GQUlMOwogICAgIAogICAgICAgICB3c3RyaW5nIHVybCA9IHdzdHJpbmdGcm9tQlNU
Uih1cmxCU1RSKTsKLSAgICAgICAgOjpTeXNGcmVlU3RyaW5nKHVybEJTVFIpOwogCi0gICAgICAg
IHByaW50ZigiJVMgaGFzIE1JTUUgdHlwZSAlU1xuIiwgbGFzdFBhdGhDb21wb25lbnQodXJsKS5j
X3N0cigpLCBtaW1lVHlwZS5jX3N0cigpKTsKKyAgICAgICAgcHJpbnRmKCIlUyBoYXMgTUlNRSB0
eXBlICVTXG4iLCBsYXN0UGF0aENvbXBvbmVudCh1cmwpLmNfc3RyKCksIHN0YXRpY19jYXN0PHdj
aGFyX3QqPihtaW1lVHlwZUJTVFIpKTsKICAgICB9CiAKICAgICByZXR1cm4gU19PSzsKIH0KIAog
Ci1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERlbGVnYXRlOjpkaWRGaW5p
c2hMb2FkaW5nRnJvbURhdGFTb3VyY2UoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZp
ZXcsCi0gICAgLyogW2luXSAqLyB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCi0gICAgLyogW2lu
XSAqLyBJV2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVs
ZWdhdGU6OmRpZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJjZShJV2ViVmlldyogd2ViVmlldywg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBJV2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKIHsK
ICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSkgewogICAgICAgICBwcmludGYoIiVTIC0gZGlkRmluaXNoTG9hZGluZ1xuIiwKQEAgLTM1NCwx
MSArMzI0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAg
IHJldHVybiBTX09LOwogfQogICAgICAgICAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVz
b3VyY2VMb2FkRGVsZWdhdGU6OmRpZEZhaWxMb2FkaW5nV2l0aEVycm9yKCAKLSAgICAvKiBbaW5d
ICovIElXZWJWaWV3KiB3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLAotICAgIC8qIFtpbl0gKi8gSVdlYkVycm9yKiBlcnJvciwKLSAgICAvKiBbaW5dICov
IElXZWJEYXRhU291cmNlKiBkYXRhU291cmNlKQorSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0
ZTo6ZGlkRmFpbExvYWRpbmdXaXRoRXJyb3IoSVdlYlZpZXcqIHdlYlZpZXcsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgSVdlYkVycm9yKiBlcnJvciwgSVdlYkRhdGFTb3VyY2UqIGRhdGFTb3Vy
Y2UpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRmKCIlUyAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9y
OiAlU1xuIiwgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4u
Y3BwCShyZXZpc2lvbiAxNjcwMjIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1
bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMywxMSArMjMzLDEwIEBAIHZvaWQgVGVz
dFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHUKICAgICBpZiAoRkFJTEVEKGRhdGFTb3Vy
Y2UtPnJlc3BvbnNlKCZyZXNwb25zZSkpIHx8ICFyZXNwb25zZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQlNUUiByZXNwb25zZVVSTEJTVFI7Ci0gICAgaWYgKEZBSUxFRChyZXNwb25zZS0+VVJM
KCZyZXNwb25zZVVSTEJTVFIpKSkKKyAgICBfYnN0cl90IHJlc3BvbnNlVVJMQlNUUjsKKyAgICBp
ZiAoRkFJTEVEKHJlc3BvbnNlLT5VUkwoJnJlc3BvbnNlVVJMQlNUUi5HZXRCU1RSKCkpKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIHdzdHJpbmcgcmVzcG9uc2VVUkwocmVzcG9uc2VVUkxCU1RSLCBT
eXNTdHJpbmdMZW4ocmVzcG9uc2VVUkxCU1RSKSk7Ci0gICAgU3lzRnJlZVN0cmluZyhyZXNwb25z
ZVVSTEJTVFIpOworICAgIHdzdHJpbmcgcmVzcG9uc2VVUkwocmVzcG9uc2VVUkxCU1RSLCByZXNw
b25zZVVSTEJTVFIubGVuZ3RoKCkpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyByZWFs
IHJlbGF0aXZlIFVSTCByZXNvbHV0aW9uIGhlcmUuCiAgICAgaW50IGxhc3RTbGFzaCA9IHJlc3Bv
bnNlVVJMLnJmaW5kKCcvJyk7CkBAIC02NTYsOSArNjU1LDggQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXRVc2VyU3R5bGVTaGVldExvY2F0aQogCiAgICAgcmVzdWx0UGF0aCA9IGNmU3RyaW5nUmVmVG9X
U3RyaW5nKENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSkpOwogCi0gICAgQlNUUiByZXN1bHRQYXRo
QlNUUiA9IFN5c0FsbG9jU3RyaW5nTGVuKHJlc3VsdFBhdGguZGF0YSgpLCByZXN1bHRQYXRoLnNp
emUoKSk7CisgICAgX2JzdHJfdCByZXN1bHRQYXRoQlNUUihyZXN1bHRQYXRoLmRhdGEoKSk7CiAg
ICAgcHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24ocmVzdWx0UGF0aEJTVFIp
OwotICAgIFN5c0ZyZWVTdHJpbmcocmVzdWx0UGF0aEJTVFIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVt
ZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTczOCw5ICs3MzYsNiBAQCBpbnQgVGVzdFJ1bm5l
cjo6d2luZG93Q291bnQoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5n
UmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQogewotICAgIHdzdHJpbmcgd05hbWUgPSBqc1N0
cmluZ1JlZlRvV1N0cmluZyhuYW1lKTsKLSAgICB3c3RyaW5nIHdWYWx1ZSA9IGpzU3RyaW5nUmVm
VG9XU3RyaW5nKHZhbHVlKTsKLQogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBp
ZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCiAgICAgICAgIHJldHVybjsKQEAg
LTc0OSwxMiArNzQ0LDkgQEAgdm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1Jl
ZgogICAgIGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdQcml2YXRlKSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEJTVFIgbmFtZUJTVFIgPSBTeXNBbGxvY1N0cmluZ0xl
bigoT0xFQ0hBUiopd05hbWUuY19zdHIoKSwgd05hbWUubGVuZ3RoKCkpOwotICAgIEJTVFIgdmFs
dWVCU1RSID0gU3lzQWxsb2NTdHJpbmdMZW4oKE9MRUNIQVIqKXdWYWx1ZS5jX3N0cigpLCB3VmFs
dWUubGVuZ3RoKCkpOworICAgIF9ic3RyX3QgbmFtZUJTVFIoSlNTdHJpbmdDb3B5QlNUUihuYW1l
KSwgZmFsc2UpOworICAgIF9ic3RyX3QgdmFsdWVCU1RSKEpTU3RyaW5nQ29weUJTVFIodmFsdWUp
LCBmYWxzZSk7CiAgICAgdmlld1ByaXZhdGUtPmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShuYW1l
QlNUUiwgdmFsdWVCU1RSKTsKLQotICAgIFN5c0ZyZWVTdHJpbmcobmFtZUJTVFIpOwotICAgIFN5
c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5n
KEpTQ29udGV4dFJlZiAvKiBjb250ZXh0ICovLCBKU1N0cmluZ1JlZiAvKiB0YXJnZXQgKi8sIEpT
T2JqZWN0UmVmIC8qIG9wdGlvbnNBcnJheSAqLykKQEAgLTgyMiwxMSArODE0LDkgQEAgdm9pZCBU
ZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdAogICAgIGlmICghcHJlZnNQcml2YXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBCU1RSIGtleUJTVFIgPSBKU1N0cmluZ0NvcHlCU1RS
KGtleSk7Ci0gICAgQlNUUiB2YWx1ZUJTVFIgPSBKU1N0cmluZ0NvcHlCU1RSKHZhbHVlKTsKKyAg
ICBfYnN0cl90IGtleUJTVFIoSlNTdHJpbmdDb3B5QlNUUihrZXkpLCBmYWxzZSk7CisgICAgX2Jz
dHJfdCB2YWx1ZUJTVFIoSlNTdHJpbmdDb3B5QlNUUih2YWx1ZSksIGZhbHNlKTsKICAgICBwcmVm
c1ByaXZhdGUtPnNldFByZWZlcmVuY2VGb3JUZXN0KGtleUJTVFIsIHZhbHVlQlNUUik7Ci0gICAg
U3lzRnJlZVN0cmluZyhrZXlCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKHZhbHVlQlNUUik7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcg
cXVvdGEpCkBAIC0xMDM2LDEwICsxMDI2LDkgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZQogICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdDsKICAgICB9CiAKLSAgICBC
U1RSIHJlc3VsdDsKLSAgICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0ZS0+c3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdEluU2NyaXB0V29ybGQod29ybGQuZ2V0KCksIGdsb2JhbE9iamVjdCwgYnN0
clQoc2NyaXB0KS5HZXRCU1RSKCksICZyZXN1bHQpKSkKKyAgICBfYnN0cl90IHJlc3VsdDsKKyAg
ICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0ZS0+c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdElu
U2NyaXB0V29ybGQod29ybGQuZ2V0KCksIGdsb2JhbE9iamVjdCwgYnN0clQoc2NyaXB0KS5HZXRC
U1RSKCksICZyZXN1bHQuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBTeXNGcmVl
U3RyaW5nKHJlc3VsdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRlZExp
bmtzKCkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVy
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGV4dElucHV0
Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDE2NzAyMikKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZC
U1RSLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV2Vi
S2l0Lmg+CiAjaW5jbHVkZSA8Y29tdXRpbC5oPgpAQCAtNDcsNyArNDgsNyBAQCB2b2lkIFRleHRJ
bnB1dENvbnRyb2xsZXI6OnNldE1hcmtlZFRleHQoCiAgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5R
dWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgX2Jz
dHJfdCBic3RyKHdzdHJpbmcoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHRleHQpLCBKU1N0cmlu
Z0dldExlbmd0aCh0ZXh0KSkuZGF0YSgpKTsKKyAgICBfYnN0cl90IGJzdHIoSlNTdHJpbmdDb3B5
QlNUUih0ZXh0KSwgZmFsc2UpOwogCiAgICAgdmlld1ByaXZhdGUtPnNldENvbXBvc2l0aW9uRm9y
VGVzdGluZyhic3RyLCBmcm9tLCBsZW5ndGgpOwogfQpAQCAtMTE1LDcgKzExNiw3IEBAIHZvaWQg
VGV4dElucHV0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChKU1MKICAgICBpZiAoRkFJTEVEKHdlYlZp
ZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQogICAgICAgICByZXR1cm47CiAgCi0g
ICAgX2JzdHJfdCBic3RyKHdzdHJpbmcoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHRleHQpLCBK
U1N0cmluZ0dldExlbmd0aCh0ZXh0KSkuZGF0YSgpKTsKKyAgICBfYnN0cl90IGJzdHIoSlNTdHJp
bmdDb3B5QlNUUih0ZXh0KSwgZmFsc2UpOwogCiAgICAgdmlld1ByaXZhdGUtPmNvbmZpcm1Db21w
b3NpdGlvbkZvclRlc3RpbmcoYnN0cik7CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVUlEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1VJRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxNjcwMjIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVUlEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KICNpbmNsdWRlIDxX
ZWJLaXQvV2ViS2l0Q09NQVBJLmg+CisjaW5jbHVkZSA8Y29tdXRpbC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAKIHVzaW5nIHN0ZDo6d3N0cmluZzsKQEAgLTE3MCw3ICsxNzEsNyBAQCB2b2lkIFVJ
RGVsZWdhdGU6OnJlc2V0VW5kb01hbmFnZXIoKQogICAgIG1fdW5kb01hbmFnZXIgPSBhZG9wdFB0
cihuZXcgRFJUVW5kb01hbmFnZXIpOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJ
RGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQor
SFJFU1VMVCBVSURlbGVnYXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBw
dk9iamVjdCkKIHsKICAgICAqcHB2T2JqZWN0ID0gMDsKICAgICBpZiAoSXNFcXVhbEdVSUQocmlp
ZCwgSUlEX0lVbmtub3duKSkKQEAgLTE5MiwxMiArMTkzLDEyIEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgVUlEZWxlZ2F0ZTo6UXUKICAgICByZXR1cm4gU19PSzsKIH0KIAotVUxPTkcgU1RE
TUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6QWRkUmVmKCkKK1VMT05HIFVJRGVsZWdhdGU6OkFk
ZFJlZigpCiB7CiAgICAgcmV0dXJuICsrbV9yZWZDb3VudDsKIH0KIAotVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgVUlEZWxlZ2F0ZTo6UmVsZWFzZSgpCitVTE9ORyBVSURlbGVnYXRlOjpSZWxlYXNl
KCkKIHsKICAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CiAgICAgaWYgKCFuZXdSZWYp
CkBAIC0yMDYsNjEgKzIwNyw1MSBAQCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRl
OjpSZWxlCiAgICAgcmV0dXJuIG5ld1JlZjsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBVSURlbGVnYXRlOjpoYXNDdXN0b21NZW51SW1wbGVtZW50YXRpb24oIAotICAgICAgICAvKiBb
cmV0dmFsXVtvdXRdICovIEJPT0wgKmhhc0N1c3RvbU1lbnVzKQorSFJFU1VMVCBVSURlbGVnYXRl
OjpoYXNDdXN0b21NZW51SW1wbGVtZW50YXRpb24oQk9PTCogaGFzQ3VzdG9tTWVudXMpCiB7CiAg
ICAgKmhhc0N1c3RvbU1lbnVzID0gVFJVRTsKIAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnRyYWNrQ3VzdG9tUG9wdXBNZW51KCAK
LSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAotICAgICAgICAvKiBbaW5dICov
IE9MRV9IQU5ETEUgbWVudSwKLSAgICAgICAgLyogW2luXSAqLyBMUFBPSU5UIHBvaW50KQorSFJF
U1VMVCBVSURlbGVnYXRlOjp0cmFja0N1c3RvbVBvcHVwTWVudShJV2ViVmlldyogLypzZW5kZXIq
LywgT0xFX0hBTkRMRSAvKm1lbnUqLywgTFBQT0lOVCAvKnBvaW50Ki8pCiB7CiAgICAgLy8gRG8g
bm90aGluZwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OnJlZ2lzdGVyVW5kb1dpdGhUYXJnZXQoCi0gICAgICAgIC8qIFtpbl0gKi8g
SVdlYlVuZG9UYXJnZXQqIHRhcmdldCwKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIGFjdGlvbk5h
bWUsCi0gICAgICAgIC8qIFtpbl0gKi8gSVVua25vd24qIGFjdGlvbkFyZykKK0hSRVNVTFQgVUlE
ZWxlZ2F0ZTo6cmVnaXN0ZXJVbmRvV2l0aFRhcmdldChJV2ViVW5kb1RhcmdldCogdGFyZ2V0LCBC
U1RSIGFjdGlvbk5hbWUsIElVbmtub3duKiBhY3Rpb25BcmcpCiB7CiAgICAgbV91bmRvTWFuYWdl
ci0+cmVnaXN0ZXJVbmRvV2l0aFRhcmdldCh0YXJnZXQsIGFjdGlvbk5hbWUsIGFjdGlvbkFyZyk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxl
Z2F0ZTo6cmVtb3ZlQWxsQWN0aW9uc1dpdGhUYXJnZXQoCi0gICAgICAgIC8qIFtpbl0gKi8gSVdl
YlVuZG9UYXJnZXQqKQorSFJFU1VMVCBVSURlbGVnYXRlOjpyZW1vdmVBbGxBY3Rpb25zV2l0aFRh
cmdldChJV2ViVW5kb1RhcmdldCopCiB7CiAgICAgbV91bmRvTWFuYWdlci0+cmVtb3ZlQWxsQWN0
aW9ucygpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OnNldEFjdGlvblRpdGxlKAotICAgICAgICAvKiBbaW5dICovIEJTVFIgYWN0
aW9uVGl0bGUpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnNldEFjdGlvblRpdGxlKEJTVFIgLyphY3Rp
b25UaXRsZSovKQogewogICAgIC8vIEl0IGlzIG5vdCBuZWNjZXNzYXJ5IHRvIGltcGxlbWVudCB0
aGlzIGZvciBEUlQgYmVjYXVzZSB0aGVyZSBpcwogICAgIC8vIG1lbnUgdG8gd3JpdGUgb3V0IHRo
ZSB0aXRsZSB0by4KICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBVSURlbGVnYXRlOjp1bmRvKCkKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6dW5kbygpCiB7CiAg
ICAgbV91bmRvTWFuYWdlci0+dW5kbygpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJlZG8oKQorSFJFU1VMVCBVSURlbGVnYXRl
OjpyZWRvKCkKIHsKICAgICBtX3VuZG9NYW5hZ2VyLT5yZWRvKCk7CiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6Y2FuVW5kbygKLSAg
ICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxUIFVJRGVsZWdh
dGU6OmNhblVuZG8oQk9PTCogcmVzdWx0KQogewogICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOwpAQCAtMjY5LDggKzI2MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgVUlEZWxlZ2F0ZTo6Y2EKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjYW5SZWRvKAotICAgICAgICAvKiBbcmV0dmFsXVtv
dXRdICovIEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6Y2FuUmVkbyhCT09MKiBy
ZXN1bHQpCiB7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CkBA
IC0yNzksMTYgKzI2OSwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6
OmNhCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlE
ZWxlZ2F0ZTo6cHJpbnRGcmFtZSggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywK
LSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnBy
aW50RnJhbWUoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBJV2ViRnJhbWUqIC8qZnJhbWUqLykKIHsK
ICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJ
RGVsZWdhdGU6OmZ0cERpcmVjdG9yeVRlbXBsYXRlUGF0aCggCi0gICAgLyogW2luXSAqLyBJV2Vi
VmlldyAqd2ViVmlldywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIgKnBhdGgpCitIUkVT
VUxUIFVJRGVsZWdhdGU6OmZ0cERpcmVjdG9yeVRlbXBsYXRlUGF0aChJV2ViVmlldyogLyp3ZWJW
aWV3Ki8sIEJTVFIqIHBhdGgpCiB7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwpAQCAtMjk3LDkgKzI4Myw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlE
ZWxlZ2F0ZTo6ZnQKIH0KIAogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6
OndlYlZpZXdIZWFkZXJIZWlnaHQoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcs
Ci0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBmbG9hdCAqcmVzdWx0KQorSFJFU1VMVCBVSURlbGVn
YXRlOjp3ZWJWaWV3SGVhZGVySGVpZ2h0KElXZWJWaWV3KiAvKndlYlZpZXcqLywgZmxvYXQqIHJl
c3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKQEAg
LTMwNyw5ICsyOTEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6Ondl
CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBV
SURlbGVnYXRlOjp3ZWJWaWV3Rm9vdGVySGVpZ2h0KCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3
ICp3ZWJWaWV3LAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gZmxvYXQgKnJlc3VsdCkKK0hSRVNV
TFQgVUlEZWxlZ2F0ZTo6d2ViVmlld0Zvb3RlckhlaWdodChJV2ViVmlldyogLyp3ZWJWaWV3Ki8s
IGZsb2F0KiByZXN1bHQpCiB7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CkBAIC0zMTcsNTUgKzI5OSwzNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJ
RGVsZWdhdGU6OndlCiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkcmF3SGVhZGVySW5SZWN0KCAKLSAgICAvKiBbaW5dICov
IElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gUkVDVCAqcmVjdCwKLSAgICAvKiBb
aW5dICovIE9MRV9IQU5ETEUgZHJhd2luZ0NvbnRleHQpCitIUkVTVUxUIFVJRGVsZWdhdGU6OmRy
YXdIZWFkZXJJblJlY3QoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBSRUNUKiAvKnJlY3QqLywgT0xF
X0hBTkRMRSAvKmRyYXdpbmdDb250ZXh0Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkcmF3Rm9vdGVySW5SZWN0
KCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gUkVD
VCAqcmVjdCwKLSAgICAvKiBbaW5dICovIE9MRV9IQU5ETEUgZHJhd2luZ0NvbnRleHQsCi0gICAg
LyogW2luXSAqLyBVSU5UIHBhZ2VJbmRleCwKLSAgICAvKiBbaW5dICovIFVJTlQgcGFnZUNvdW50
KQorSFJFU1VMVCBVSURlbGVnYXRlOjpkcmF3Rm9vdGVySW5SZWN0KElXZWJWaWV3KiAvKndlYlZp
ZXcqLywgUkVDVCogLypyZWN0Ki8sIE9MRV9IQU5ETEUgLypkcmF3aW5nQ29udGV4dCovLCBVSU5U
IC8qcGFnZUluZGV4Ki8sIFVJTlQgLypwYWdlQ291bnQqLykKIHsKICAgICByZXR1cm4gRV9OT1RJ
TVBMOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZpZXdQ
cmludGluZ01hcmdpblJlY3QoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0g
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBSRUNUICpyZWN0KQorSFJFU1VMVCBVSURlbGVnYXRlOjp3
ZWJWaWV3UHJpbnRpbmdNYXJnaW5SZWN0KElXZWJWaWV3KiAvKndlYlZpZXcqLywgUkVDVCogLypy
ZWN0Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBVSURlbGVnYXRlOjpjYW5SdW5Nb2RhbCggCi0gICAgLyogW2luXSAqLyBJV2ViVmll
dyAqd2ViVmlldywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wgKmNhblJ1bkJvb2xlYW4p
CitIUkVTVUxUIFVJRGVsZWdhdGU6OmNhblJ1bk1vZGFsKElXZWJWaWV3KiAvKndlYlZpZXcqLywg
Qk9PTCogLypjYW5SdW5Cb29sZWFuKi8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAot
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjcmVhdGVNb2RhbERpYWxvZygg
Ci0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAotICAgIC8qIFtpbl0gKi8gSVdlYlVS
TFJlcXVlc3QgKnJlcXVlc3QsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBJV2ViVmlldyAqKm5l
d1dlYlZpZXcpCitIUkVTVUxUIFVJRGVsZWdhdGU6OmNyZWF0ZU1vZGFsRGlhbG9nKElXZWJWaWV3
KiAvKnNlbmRlciovLCBJV2ViVVJMUmVxdWVzdCogLypyZXF1ZXN0Ki8sIElXZWJWaWV3KiogLypu
ZXdXZWJWaWV3Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydW5Nb2RhbCggCi0gICAgLyogW2luXSAqLyBJV2Vi
VmlldyAqd2ViVmlldykKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6cnVuTW9kYWwoSVdlYlZpZXcqIC8q
d2ViVmlldyovKQogewogICAgIHJldHVybiBFX05PVElNUEw7CiB9CiAKLUhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6aXNNZW51QmFyVmlzaWJsZSggCi0gICAgLyogW2luXSAq
LyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wgKnZpc2li
bGUpCitIUkVTVUxUIFVJRGVsZWdhdGU6OmlzTWVudUJhclZpc2libGUoSVdlYlZpZXcqIC8qd2Vi
VmlldyovLCBCT09MKiB2aXNpYmxlKQogewogICAgIGlmICghdmlzaWJsZSkKICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKQEAgLTM3MywxOCArMzM3LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgVUlEZWxlZ2F0ZTo6aXMKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnNldE1lbnVCYXJWaXNpYmxlKCAKLSAgICAv
KiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gQk9PTCB2aXNpYmxl
KQorSFJFU1VMVCBVSURlbGVnYXRlOjpzZXRNZW51QmFyVmlzaWJsZShJV2ViVmlldyogLyp3ZWJW
aWV3Ki8sIEJPT0wgLyp2aXNpYmxlKi8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAot
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydW5EYXRhYmFzZVNpemVMaW1p
dFByb21wdCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBbaW5d
ICovIEJTVFIgZGlzcGxheU5hbWUsCi0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmluaXRpYXRl
ZEJ5RnJhbWUsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MICphbGxvd2VkKQorSFJFU1VM
VCBVSURlbGVnYXRlOjpydW5EYXRhYmFzZVNpemVMaW1pdFByb21wdChJV2ViVmlldyogLyp3ZWJW
aWV3Ki8sIEJTVFIgLypkaXNwbGF5TmFtZSovLCBJV2ViRnJhbWUqIC8qaW5pdGlhdGVkQnlGcmFt
ZSovLCBCT09MKiBhbGxvd2VkKQogewogICAgIGlmICghYWxsb3dlZCkKICAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKQEAgLTM5Miw0OCArMzUwLDMwIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgVUlEZWxlZ2F0ZTo6cnUKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKCAKLSAgICAv
KiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gSERDIGhEQywKLSAg
ICAvKiBbaW5dICovIFJFQ1QgcmVjdCwKLSAgICAvKiBbaW5dICovIFdlYlNjcm9sbEJhckNvbnRy
b2xTaXplIHNpemUsCi0gICAgLyogW2luXSAqLyBXZWJTY3JvbGxiYXJDb250cm9sU3RhdGUgc3Rh
dGUsCi0gICAgLyogW2luXSAqLyBXZWJTY3JvbGxiYXJDb250cm9sUGFydCBwcmVzc2VkUGFydCwK
LSAgICAvKiBbaW5dICovIEJPT0wgdmVydGljYWwsCi0gICAgLyogW2luXSAqLyBmbG9hdCB2YWx1
ZSwKLSAgICAvKiBbaW5dICovIGZsb2F0IHByb3BvcnRpb24sCi0gICAgLyogW2luXSAqLyBXZWJT
Y3JvbGxiYXJDb250cm9sUGFydE1hc2sgcGFydHMpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnBhaW50
Q3VzdG9tU2Nyb2xsYmFyKElXZWJWaWV3KiAvKndlYlZpZXcqLywgSERDIC8qaERDKi8sIFJFQ1Qg
LypyZWN0Ki8sIFdlYlNjcm9sbEJhckNvbnRyb2xTaXplIC8qc2l6ZSovLCBXZWJTY3JvbGxiYXJD
b250cm9sU3RhdGUgLypzdGF0ZSovLAorICAgIFdlYlNjcm9sbGJhckNvbnRyb2xQYXJ0IC8qcHJl
c3NlZFBhcnQqLywgQk9PTCAvKnZlcnRpY2FsKi8sIGZsb2F0IC8qdmFsdWUqLywgZmxvYXQgLypw
cm9wb3J0aW9uKi8sIFdlYlNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayAvKnBhcnRzKi8pCiB7CiAg
ICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURl
bGVnYXRlOjpwYWludEN1c3RvbVNjcm9sbENvcm5lciggCi0gICAgLyogW2luXSAqLyBJV2ViVmll
dyAqd2ViVmlldywKLSAgICAvKiBbaW5dICovIEhEQyBoREMsCi0gICAgLyogW2luXSAqLyBSRUNU
IHJlY3QpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKElXZWJW
aWV3KiAvKndlYlZpZXcqLywgSERDIC8qaERDKi8sIFJFQ1QgLypyZWN0Ki8pCiB7CiAgICAgcmV0
dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRl
OjpzZXRGcmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIC8qc2VuZGVyKi8sCi0g
ICAgICAgIC8qIFtpbl0gKi8gUkVDVCogZnJhbWUpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnNldEZy
YW1lKElXZWJWaWV3KiAvKnNlbmRlciovLCBSRUNUKiBmcmFtZSkKIHsKICAgICBtX2ZyYW1lID0g
KmZyYW1lOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OndlYlZpZXdGcmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcq
IC8qc2VuZGVyKi8sCi0gICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gUkVDVCogZnJhbWUpCitI
UkVTVUxUIFVJRGVsZWdhdGU6OndlYlZpZXdGcmFtZShJV2ViVmlldyogLypzZW5kZXIqLywgUkVD
VCogZnJhbWUpCiB7CiAgICAgKmZyYW1lID0gbV9mcmFtZTsKICAgICByZXR1cm4gU19PSzsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydW5KYXZhU2NyaXB0QWxl
cnRQYW5lbFdpdGhNZXNzYWdlKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyogLypzZW5k
ZXIqLywKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIG1lc3NhZ2UpCitIUkVTVUxUIFVJRGVsZWdh
dGU6OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UoSVdlYlZpZXcqIC8qc2VuZGVy
Ki8sIEJTVFIgbWVzc2FnZSkKIHsKICAgICBwcmludGYoIkFMRVJUOiAlU1xuIiwgbWVzc2FnZSA/
IG1lc3NhZ2UgOiBMIiIpOwogICAgIGZmbHVzaChzdGRvdXQpOwpAQCAtNDQxLDEwICszODEsNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJ1CiAgICAgcmV0dXJuIFNf
T0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6cnVuSmF2YVNj
cmlwdENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3KiBz
ZW5kZXIsCi0gICAgLyogW2luXSAqLyBCU1RSIG1lc3NhZ2UsCi0gICAgLyogW3JldHZhbF1bb3V0
XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnJ1bkphdmFTY3JpcHRDb25m
aXJtUGFuZWxXaXRoTWVzc2FnZShJV2ViVmlldyogLypzZW5kZXIqLywgQlNUUiBtZXNzYWdlLCBC
T09MKiByZXN1bHQpCiB7CiAgICAgcHJpbnRmKCJDT05GSVJNOiAlU1xuIiwgbWVzc2FnZSA/IG1l
c3NhZ2UgOiBMIiIpOwogICAgICpyZXN1bHQgPSBUUlVFOwpAQCAtNDUyLDExICszODksNyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJ1CiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6cnVuSmF2YVNjcmlw
dFRleHRJbnB1dFBhbmVsV2l0aFByb21wdCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2Vu
ZGVyLAotICAgIC8qIFtpbl0gKi8gQlNUUiBtZXNzYWdlLAotICAgIC8qIFtpbl0gKi8gQlNUUiBk
ZWZhdWx0VGV4dCwKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIgKnJlc3VsdCkKK0hSRVNV
TFQgVUlEZWxlZ2F0ZTo6cnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdChJV2Vi
VmlldyogLypzZW5kZXIqLywgQlNUUiBtZXNzYWdlLCBCU1RSIGRlZmF1bHRUZXh0LCBCU1RSKiBy
ZXN1bHQpCiB7CiAgICAgcHJpbnRmKCJQUk9NUFQ6ICVTLCBkZWZhdWx0IHRleHQ6ICVTXG4iLCBt
ZXNzYWdlID8gbWVzc2FnZSA6IEwiIiwgZGVmYXVsdFRleHQgPyBkZWZhdWx0VGV4dCA6IEwiIik7
CiAgICAgKnJlc3VsdCA9IFN5c0FsbG9jU3RyaW5nKGRlZmF1bHRUZXh0KTsKQEAgLTQ2NCwxMSAr
Mzk3LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydQogICAgIHJl
dHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJ1
bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlKCAKLSAgICAvKiBbaW5dICovIElX
ZWJWaWV3KiAvKnNlbmRlciovLAotICAgIC8qIFtpbl0gKi8gQlNUUiBtZXNzYWdlLAotICAgIC8q
IFtpbl0gKi8gSVdlYkZyYW1lKiAvKmluaXRpYXRlZEJ5RnJhbWUqLywKLSAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6cnVuQmVmb3JlVW5s
b2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2UoSVdlYlZpZXcqIC8qc2VuZGVyKi8sIEJTVFIgbWVz
c2FnZSwgSVdlYkZyYW1lKiAvKmluaXRpYXRlZEJ5RnJhbWUqLywgQk9PTCogcmVzdWx0KQogewog
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwpAQCAtNDc3LDEyICs0
MDYsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJ1CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6d2Vi
Vmlld0FkZE1lc3NhZ2VUb0NvbnNvbGUoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHNlbmRl
ciwKLSAgICAvKiBbaW5dICovIEJTVFIgbWVzc2FnZSwKLSAgICAvKiBbaW5dICovIGludCBsaW5l
TnVtYmVyLAotICAgIC8qIFtpbl0gKi8gQlNUUiB1cmwsCi0gICAgLyogW2luXSAqLyBCT09MIGlz
RXJyb3IpCitIUkVTVUxUIFVJRGVsZWdhdGU6OndlYlZpZXdBZGRNZXNzYWdlVG9Db25zb2xlKElX
ZWJWaWV3KiAvKnNlbmRlciovLCBCU1RSIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBCU1RSIHVy
bCwgQk9PTCBpc0Vycm9yKQogewogICAgIHdzdHJpbmcgbmV3TWVzc2FnZTsKICAgICBpZiAobWVz
c2FnZSkgewpAQCAtNDk5LDEyICs0MjMsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJ
RGVsZWdhdGU6OndlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgVUlEZWxlZ2F0ZTo6ZG9EcmFnRHJvcCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyog
c2VuZGVyLAotICAgIC8qIFtpbl0gKi8gSURhdGFPYmplY3QqIG9iamVjdCwKLSAgICAvKiBbaW5d
ICovIElEcm9wU291cmNlKiBzb3VyY2UsCi0gICAgLyogW2luXSAqLyBEV09SRCBva0VmZmVjdCwK
LSAgICAvKiBbcmV0dmFsXVtvdXRdICovIERXT1JEKiBwZXJmb3JtZWRFZmZlY3QpCitIUkVTVUxU
IFVJRGVsZWdhdGU6OmRvRHJhZ0Ryb3AoSVdlYlZpZXcqIC8qc2VuZGVyKi8sIElEYXRhT2JqZWN0
KiBvYmplY3QsIElEcm9wU291cmNlKiBzb3VyY2UsIERXT1JEIC8qb2tFZmZlY3QqLywgRFdPUkQq
IHBlcmZvcm1lZEVmZmVjdCkKIHsKICAgICBpZiAoIXBlcmZvcm1lZEVmZmVjdCkKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKQEAgLTUyMiwxMCArNDQxLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBVSURlbGVnYXRlOjpkbwogICAgIHJldHVybiBvbGVEcmFnQW5kRHJvcFJldHVyblZh
bHVlOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZpZXdH
ZXREbGdDb2RlKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3KiAvKnNlbmRlciovLAotICAgIC8q
IFtpbl0gKi8gVUlOVCAvKmtleUNvZGUqLywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExPTkdf
UFRSICpjb2RlKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJWaWV3R2V0RGxnQ29kZShJV2ViVmll
dyogLypzZW5kZXIqLywgVUlOVCAvKmtleUNvZGUqLywgTE9OR19QVFIqIGNvZGUpCiB7CiAgICAg
aWYgKCFjb2RlKQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwpAQCAtNTMzLDEwICs0NDksNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlCiAgICAgcmV0dXJuIEVf
Tk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjcmVh
dGVXZWJWaWV3V2l0aFJlcXVlc3QoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICpzZW5k
ZXIsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlVSTFJlcXVlc3QgKnJlcXVlc3QsCi0gICAgICAg
IC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYlZpZXcgKipuZXdXZWJWaWV3KQorSFJFU1VMVCBVSURl
bGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QoSVdlYlZpZXcqIC8qc2VuZGVyKi8sIElX
ZWJVUkxSZXF1ZXN0KiAvKnJlcXVlc3QqLywgSVdlYlZpZXcqKiBuZXdXZWJWaWV3KQogewogICAg
IGlmICghOjpnVGVzdFJ1bm5lci0+Y2FuT3BlbldpbmRvd3MoKSkKICAgICAgICAgcmV0dXJuIEVf
RkFJTDsKQEAgLTU0NCw4ICs0NTcsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVs
ZWdhdGU6OmNyCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgVUlEZWxlZ2F0ZTo6d2ViVmlld0Nsb3NlKAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3
ICpzZW5kZXIpCitIUkVTVUxUIFVJRGVsZWdhdGU6OndlYlZpZXdDbG9zZShJV2ViVmlldyogc2Vu
ZGVyKQogewogICAgIEhXTkQgaG9zdFdpbmRvdzsKICAgICBzZW5kZXItPmhvc3RXaW5kb3cocmVp
bnRlcnByZXRfY2FzdDxPTEVfSEFORExFKj4oJmhvc3RXaW5kb3cpKTsKQEAgLTU1Myw4ICs0NjUs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlCiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6d2ViVmll
d0ZvY3VzKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBV
SURlbGVnYXRlOjp3ZWJWaWV3Rm9jdXMoSVdlYlZpZXcqIHNlbmRlcikKIHsKICAgICBIV05EIGhv
c3RXaW5kb3c7CiAgICAgc2VuZGVyLT5ob3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hB
TkRMRSo+KCZob3N0V2luZG93KSk7CkBAIC01NjIsMzkgKzQ3MywzMCBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlCiAgICAgcmV0dXJuIFNfT0s7IAogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZpZXdVbmZvY3VzKCAKLSAgICAg
ICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJW
aWV3VW5mb2N1cyhJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICBTZXRGb3JlZ3JvdW5kV2lu
ZG93KEdldERlc2t0b3BXaW5kb3coKSk7CiAgICAgcmV0dXJuIFNfT0s7IAogfQogCi1IUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZpZXdQYWludGVkKCAKLSAgICAgICAg
LyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJWaWV3
UGFpbnRlZChJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICByZXR1cm4gU19PSzsKIH0KIAot
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpleGNlZWRlZERhdGFiYXNlUXVv
dGEoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICpzZW5kZXIsCi0gICAgICAgIC8qIFtp
bl0gKi8gSVdlYkZyYW1lICpmcmFtZSwKLSAgICAgICAgLyogW2luXSAqLyBJV2ViU2VjdXJpdHlP
cmlnaW4gKm9yaWdpbiwKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIGRhdGFiYXNlSWRlbnRpZmll
cikKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKElXZWJWaWV3KiBz
ZW5kZXIsIElXZWJGcmFtZSogZnJhbWUsIElXZWJTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBCU1RS
IGRhdGFiYXNlSWRlbnRpZmllcikKIHsKLSAgICBCU1RSIHByb3RvY29sOwotICAgIEJTVFIgaG9z
dDsKKyAgICBfYnN0cl90IHByb3RvY29sOworICAgIF9ic3RyX3QgaG9zdDsKICAgICB1bnNpZ25l
ZCBzaG9ydCBwb3J0OwogCi0gICAgb3JpZ2luLT5wcm90b2NvbCgmcHJvdG9jb2wpOwotICAgIG9y
aWdpbi0+aG9zdCgmaG9zdCk7CisgICAgb3JpZ2luLT5wcm90b2NvbCgmcHJvdG9jb2wuR2V0QlNU
UigpKTsKKyAgICBvcmlnaW4tPmhvc3QoJmhvc3QuR2V0QlNUUigpKTsKICAgICBvcmlnaW4tPnBv
cnQoJnBvcnQpOwogCiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRGF0YWJhc2VD
YWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFD
SzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46eyVTLCAlUywgJWl9IGRh
dGFiYXNlOiVTXG4iLCBwcm90b2NvbCwgaG9zdCwgcG9ydCwgZGF0YWJhc2VJZGVudGlmaWVyKTsK
IAotICAgIFN5c0ZyZWVTdHJpbmcocHJvdG9jb2wpOwotICAgIFN5c0ZyZWVTdHJpbmcoaG9zdCk7
Ci0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0
OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gZ1Rlc3RSdW5uZXItPmRhdGFiYXNlRGVm
YXVsdFF1b3RhKCk7CiAgICAgaWYgKHRlc3REZWZhdWx0UXVvdGEgPj0gMCkKQEAgLTYzMywxMSAr
NTM1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpleAogICAgIHJl
dHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmVt
YmVkZGVkVmlld1dpdGhBcmd1bWVudHMoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRl
ciwKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUsCi0gICAgLyogW2luXSAqLyBJUHJv
cGVydHlCYWcgKmFyZ3VtZW50cywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIElXZWJFbWJlZGRl
ZFZpZXcgKip2aWV3KQorSFJFU1VMVCBVSURlbGVnYXRlOjplbWJlZGRlZFZpZXdXaXRoQXJndW1l
bnRzKElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViRnJhbWUqIC8qZnJhbWUqLywgSVByb3BlcnR5
QmFnKiAvKmFyZ3VtZW50cyovLCBJV2ViRW1iZWRkZWRWaWV3KiogdmlldykKIHsKICAgICBpZiAo
IXZpZXcpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CkBAIC02NDUsNTQgKzU0Myw1MCBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmVtCiAgICAgcmV0dXJuIEVfTk9U
SU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjp3ZWJWaWV3
Q2xvc2luZyggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBVSURl
bGVnYXRlOjp3ZWJWaWV3Q2xvc2luZyhJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICByZXR1
cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6
OndlYlZpZXdTZXRDdXJzb3IoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRlciwKLSAg
ICAvKiBbaW5dICovIE9MRV9IQU5ETEUgY3Vyc29yKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJW
aWV3U2V0Q3Vyc29yKElXZWJWaWV3KiAvKnNlbmRlciovLCBPTEVfSEFORExFIC8qY3Vyc29yKi8p
CiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBVSURlbGVnYXRlOjp3ZWJWaWV3RGlkSW52YWxpZGF0ZSggCi0gICAgLyogW2luXSAqLyBJV2Vi
VmlldyAqc2VuZGVyKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJWaWV3RGlkSW52YWxpZGF0ZShJ
V2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnNldFN0YXR1c1RleHQoSVdlYlZpZXcq
LCBCU1RSIHRleHQpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnNldFN0YXR1c1RleHQoSVdlYlZpZXcq
LCBCU1RSIHRleHQpCiB7IAogICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFN0YXR1c0NhbGxiYWNr
cygpKQotICAgICAgICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3Rh
dHVzVGV4dDolc1xuIiwgdGV4dCA/IHRvVVRGOCh0ZXh0KS5jX3N0cigpIDogIiIpOworICAgICAg
ICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDolU1xu
IiwgdGV4dCA/IHRleHQgOiBMIiIpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUo
SVdlYkRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUqKiByZXN1bHQpCitIUkVTVUxUIFVJRGVs
ZWdhdGU6OmRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUoSVdlYkRlc2t0b3BOb3RpZmljYXRp
b25zRGVsZWdhdGUqKiByZXN1bHQpCiB7CiAgICAgbV9kZXNrdG9wTm90aWZpY2F0aW9ucy5jb3B5
UmVmVG8ocmVzdWx0KTsKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBVSURlbGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QoSVdlYlZpZXcqIHNl
bmRlciwgSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsIElQcm9wZXJ0eUJhZyogd2luZG93RmVhdHVy
ZXMsIElXZWJWaWV3KiogbmV3V2ViVmlldykKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6Y3JlYXRlV2Vi
Vmlld1dpdGhSZXF1ZXN0KElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViVVJMUmVxdWVzdCogLypy
ZXF1ZXN0Ki8sIElQcm9wZXJ0eUJhZyogLyp3aW5kb3dGZWF0dXJlcyovLCBJV2ViVmlldyoqIC8q
bmV3V2ViVmlldyovKQogewogICAgIHJldHVybiBFX05PVElNUEw7CiB9CiAKLUhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6ZHJhd0JhY2tncm91bmQoSVdlYlZpZXcqIHNlbmRl
ciwgT0xFX0hBTkRMRSBoZGMsIGNvbnN0IFJFQ1QqIGRpcnR5UmVjdCkKK0hSRVNVTFQgVUlEZWxl
Z2F0ZTo6ZHJhd0JhY2tncm91bmQoSVdlYlZpZXcqIC8qc2VuZGVyKi8sIE9MRV9IQU5ETEUgaGRj
LCBjb25zdCBSRUNUKiBkaXJ0eVJlY3QpCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAot
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkZWNpZGVQb2xpY3lGb3JHZW9s
b2NhdGlvblJlcXVlc3QoSVdlYlZpZXcqIHNlbmRlciwgSVdlYkZyYW1lKiBmcmFtZSwgSVdlYlNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIElXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyKiBsaXN0
ZW5lcikKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1
ZXN0KElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViRnJhbWUqIGZyYW1lLCBJV2ViU2VjdXJpdHlP
cmlnaW4qIC8qb3JpZ2luKi8sIElXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyKiAvKmxpc3Rl
bmVyKi8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBVSURlbGVnYXRlOjpkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b24oSURPTUVsZW1l
bnQqIGVsZW1lbnQpCitIUkVTVUxUIFVJRGVsZWdhdGU6OmRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1
dHRvbihJRE9NRWxlbWVudCogLyplbGVtZW50Ki8pCiB7CiAgICAgcHJpbnRmKCJNSVNTSU5HIFBM
VUdJTiBCVVRUT04gUFJFU1NFRFxuIik7CiAgICAgcmV0dXJuIFNfT0s7CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vV29ya1F1ZXVlSXRlbVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL1dvcmtRdWV1ZUl0ZW1XaW4uY3BwCShyZXZpc2lvbiAxNjcw
MjIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vV29ya1F1ZXVlSXRlbVdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKIAorI2luY2x1ZGUgPGNvbXV0aWwuaD4KICNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0L1dlYktpdC5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXRDT01BUEkuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmQ0YuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtNTMsMjggKzU1LDIwIEBAIHN0YXRpYyB3c3RyaW5nIGpzU3RyaW5nUmVmVG9X
U3RyaW5nKEpTU3QKIAogYm9vbCBMb2FkSXRlbTo6aW52b2tlKCkgY29uc3QKIHsKLSAgICB3c3Ry
aW5nIHRhcmdldFN0cmluZyA9IGpzU3RyaW5nUmVmVG9XU3RyaW5nKG1fdGFyZ2V0LmdldCgpKTsK
KyAgICBfYnN0cl90IHRhcmdldEJTVFIoSlNTdHJpbmdDb3B5QlNUUihtX3RhcmdldC5nZXQoKSks
IGZhbHNlKTsKIAogICAgIENPTVB0cjxJV2ViRnJhbWU+IHRhcmdldEZyYW1lOwotICAgIGlmICh0
YXJnZXRTdHJpbmcuZW1wdHkoKSkKKyAgICBpZiAoIXRhcmdldEJTVFIubGVuZ3RoKCkpCiAgICAg
ICAgIHRhcmdldEZyYW1lID0gZnJhbWU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEJTVFIgdGFyZ2V0
QlNUUiA9IFN5c0FsbG9jU3RyaW5nKHRhcmdldFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgYm9v
bCBmYWlsZWQgPSBGQUlMRUQoZnJhbWUtPmZpbmRGcmFtZU5hbWVkKHRhcmdldEJTVFIsICZ0YXJn
ZXRGcmFtZSkpOwotICAgICAgICBTeXNGcmVlU3RyaW5nKHRhcmdldEJTVFIpOwotICAgICAgICBp
ZiAoZmFpbGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBlbHNlIGlm
IChGQUlMRUQoZnJhbWUtPmZpbmRGcmFtZU5hbWVkKHRhcmdldEJTVFIsICZ0YXJnZXRGcmFtZSkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBDT01QdHI8SVdlYlVSTFJlcXVlc3Q+IHJl
cXVlc3Q7CiAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJVUkxS
ZXF1ZXN0LCAwLCBJSURfSVdlYlVSTFJlcXVlc3QsICh2b2lkKiopJnJlcXVlc3QpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgd3N0cmluZyB1cmxTdHJpbmcgPSBqc1N0cmluZ1JlZlRv
V1N0cmluZyhtX3VybC5nZXQoKSk7Ci0gICAgQlNUUiB1cmxCU1RSID0gU3lzQWxsb2NTdHJpbmco
dXJsU3RyaW5nLmNfc3RyKCkpOwotICAgIGJvb2wgZmFpbGVkID0gRkFJTEVEKHJlcXVlc3QtPmlu
aXRXaXRoVVJMKHVybEJTVFIsIFdlYlVSTFJlcXVlc3RVc2VQcm90b2NvbENhY2hlUG9saWN5LCA2
MCkpOwotICAgIFN5c0ZyZWVTdHJpbmcodXJsQlNUUik7Ci0gICAgaWYgKGZhaWxlZCkKKyAgICBf
YnN0cl90IHVybEJTVFIoSlNTdHJpbmdDb3B5QlNUUihtX3VybC5nZXQoKSksIGZhbHNlKTsKKyAg
ICBpZiAoRkFJTEVEKHJlcXVlc3QtPmluaXRXaXRoVVJMKHVybEJTVFIsIFdlYlVSTFJlcXVlc3RV
c2VQcm90b2NvbENhY2hlUG9saWN5LCA2MCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICB0YXJnZXRGcmFtZS0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CkBAIC04MywyNyArNzcs
MTcgQEAgYm9vbCBMb2FkSXRlbTo6aW52b2tlKCkgY29uc3QKIAogYm9vbCBMb2FkSFRNTFN0cmlu
Z0l0ZW06Omludm9rZSgpIGNvbnN0CiB7Ci0gICAgd3N0cmluZyBjb250ZW50ID0ganNTdHJpbmdS
ZWZUb1dTdHJpbmcobV9jb250ZW50LmdldCgpKTsKLSAgICB3c3RyaW5nIGJhc2VVUkwgPSBqc1N0
cmluZ1JlZlRvV1N0cmluZyhtX2Jhc2VVUkwuZ2V0KCkpOwotCi0gICAgQlNUUiBjb250ZW50QlNU
UiA9IFN5c0FsbG9jU3RyaW5nKGNvbnRlbnQuY19zdHIoKSk7Ci0gICAgQlNUUiBiYXNlVVJMQlNU
UiA9IFN5c0FsbG9jU3RyaW5nKGJhc2VVUkwuY19zdHIoKSk7CisgICAgX2JzdHJfdCBjb250ZW50
QlNUUihKU1N0cmluZ0NvcHlCU1RSKG1fY29udGVudC5nZXQoKSksIGZhbHNlKTsKKyAgICBfYnN0
cl90IGJhc2VVUkxCU1RSKEpTU3RyaW5nQ29weUJTVFIobV9iYXNlVVJMLmdldCgpKSwgZmFsc2Up
OwogCiAgICAgaWYgKG1fdW5yZWFjaGFibGVVUkwpIHsKLSAgICAgICAgd3N0cmluZyB1bnJlYWNo
YWJsZVVSTCA9IGpzU3RyaW5nUmVmVG9XU3RyaW5nKG1fdW5yZWFjaGFibGVVUkwuZ2V0KCkpOwot
ICAgICAgICBCU1RSIHVucmVhY2hhYmxlVVJMQlNUUiA9IFN5c0FsbG9jU3RyaW5nKHVucmVhY2hh
YmxlVVJMLmNfc3RyKCkpOworICAgICAgICBfYnN0cl90IHVucmVhY2hhYmxlVVJMQlNUUihKU1N0
cmluZ0NvcHlCU1RSKG1fdW5yZWFjaGFibGVVUkwuZ2V0KCkpLCBmYWxzZSk7CiAgICAgICAgIGZy
YW1lLT5sb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhjb250ZW50QlNUUiwgYmFzZVVSTEJTVFIsIHVu
cmVhY2hhYmxlVVJMQlNUUik7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcoY29udGVudEJTVFIpOwot
ICAgICAgICBTeXNGcmVlU3RyaW5nKGJhc2VVUkxCU1RSKTsKLSAgICAgICAgU3lzRnJlZVN0cmlu
Zyh1bnJlYWNoYWJsZVVSTEJTVFIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoY29udGVudEJTVFIsIGJhc2VVUkxCU1RSKTsKIAotICAg
IFN5c0ZyZWVTdHJpbmcoY29udGVudEJTVFIpOwotICAgIFN5c0ZyZWVTdHJpbmcoYmFzZVVSTEJT
VFIpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEyNywxMyArMTExLDEwIEBAIGJvb2wg
U2NyaXB0SXRlbTo6aW52b2tlKCkgY29uc3QKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3
KCZ3ZWJWaWV3KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHdzdHJpbmcgc2NyaXB0
U3RyaW5nID0ganNTdHJpbmdSZWZUb1dTdHJpbmcobV9zY3JpcHQuZ2V0KCkpOworICAgIF9ic3Ry
X3Qgc2NyaXB0QlNUUihKU1N0cmluZ0NvcHlCU1RSKG1fc2NyaXB0LmdldCgpKSwgZmFsc2UpOwog
Ci0gICAgQlNUUiByZXN1bHQ7Ci0gICAgQlNUUiBzY3JpcHRCU1RSID0gU3lzQWxsb2NTdHJpbmco
c2NyaXB0U3RyaW5nLmNfc3RyKCkpOwotICAgIHdlYlZpZXctPnN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHRGcm9tU3RyaW5nKHNjcmlwdEJTVFIsICZyZXN1bHQpOwotICAgIFN5c0ZyZWVTdHJp
bmcocmVzdWx0KTsKLSAgICBTeXNGcmVlU3RyaW5nKHNjcmlwdEJTVFIpOworICAgIF9ic3RyX3Qg
cmVzdWx0OworICAgIHdlYlZpZXctPnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nKHNjcmlwdEJTVFIsICZyZXN1bHQuR2V0QlNUUigpKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228976</attachid>
            <date>2014-04-09 13:11:06 -0700</date>
            <delta_ts>2014-04-09 13:17:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131446-20140409131045.patch</filename>
            <type>text/plain</type>
            <size>101237</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2NzAyMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3MCBAQAorMjAxNC0wNC0wOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBbV2luXSBWYXJpb3VzIER1bXBSZW5kZXJUcmVlIEZpeGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNDQ2LgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGUpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpTU3RyaW5nQ3Jl
YXRlV2l0aEJTVFIuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlv
bik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQpOiBE
aXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVk
KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5
VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGVza3RvcE5v
dGlmaWNhdGlvblByZXNlbnRlci5jcHA6CisgICAgICAgIChEUlREZXNrdG9wTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpRdWVyeUludGVyZmFjZSk6IEdldCByaWQgb2YgdW5lZWRlZCBTVERNRVRIT0RD
QUxMVFlQRSBkZWNsYXJhdGlvbi4KKyAgICAgICAgKERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OkFkZFJlZik6IERpdHRvLgorICAgICAgICAoRFJURGVza3RvcE5vdGlmaWNhdGlvblBy
ZXNlbnRlcjo6UmVsZWFzZSk6IERpdHRvLgorICAgICAgICAoRFJURGVza3RvcE5vdGlmaWNhdGlv
blByZXNlbnRlcjo6c2hvd0Rlc2t0b3BOb3RpZmljYXRpb24pOiBTd2l0Y2ggdG8gX2JzdHJfdC4g
VXNlIEpTU3RyaW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChEUlREZXNrdG9wTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpjYW5jZWxEZXNrdG9wTm90aWZpY2F0aW9uKTogRGl0dG8uCisgICAgICAg
IChEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyOjpub3RpZmljYXRpb25EZXN0cm95ZWQp
OiBEaXR0by4KKyAgICAgICAgKERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OmNoZWNr
Tm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAgICAgICAoRFJURGVza3RvcE5vdGlm
aWNhdGlvblByZXNlbnRlcjo6cmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBEaXR0by4K
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNl
bnRlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6
CisgICAgICAgIChkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoZHVt
cEZyYW1lc0FzVGV4dCk6IERpdHRvLgorICAgICAgICAoY29tcGFyZUhpc3RvcnlJdGVtcyk6IERp
dHRvLgorICAgICAgICAoZHVtcEhpc3RvcnlJdGVtKTogRGl0dG8uCisgICAgICAgIChkdW1wKTog
RGl0dG8uCisgICAgICAgIChyZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKTogRGl0dG8u
CisgICAgICAgIChyZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcpOiBE
aXR0by4KKyAgICAgICAgKHJ1blRlc3QpOiBEaXR0by4KKyAgICAgICAgKGNyZWF0ZVdlYlZpZXdB
bmRPZmZzY3JlZW5XaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
RWRpdGluZ0RlbGVnYXRlLmNwcDoKKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6UXVlcnlJbnRl
cmZhY2UpOiBHZXQgcmlkIG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRpb24u
CisgICAgICAgIChFZGl0aW5nRGVsZWdhdGU6OkFkZFJlZik6IERpdHRvLgorICAgICAgICAoRWRp
dGluZ0RlbGVnYXRlOjpSZWxlYXNlKTogRGl0dG8uCisgICAgICAgIChkdW1wUGF0aCk6IFN3aXRj
aCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNUUgorICAgICAgICAoRWRpdGlu
Z0RlbGVnYXRlOjpzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlKTogR2V0IHJpZCBvZiB1bmVl
ZGVkIFNURE1FVEhPRENBTExUWVBFIGRlY2xhcmF0aW9uLgorICAgICAgICAoRWRpdGluZ0RlbGVn
YXRlOjpzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZSk6IERpdHRvLgorICAgICAgICAoRWRpdGlu
Z0RlbGVnYXRlOjpzaG91bGRJbnNlcnROb2RlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVs
ZWdhdGU6OnNob3VsZEluc2VydFRleHQpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0
ZTo6c2hvdWxkRGVsZXRlRE9NUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0
ZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSk6IERpdHRvLgorICAgICAgICAoRWRpdGlu
Z0RlbGVnYXRlOjpzaG91bGRBcHBseVN0eWxlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVs
ZWdhdGU6OnNob3VsZENoYW5nZVR5cGluZ1N0eWxlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5n
RGVsZWdhdGU6OmRvUGxhdGZvcm1Db21tYW5kKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVs
ZWdhdGU6OndlYlZpZXdEaWRCZWdpbkVkaXRpbmcpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpT
U3RyaW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChFZGl0aW5nRGVsZWdhdGU6OndlYlZpZXdE
aWRDaGFuZ2UpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZEVu
ZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZENo
YW5nZVR5cGluZ1N0eWxlKTogRGl0dG8uCisgICAgICAgIChFZGl0aW5nRGVsZWdhdGU6OndlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKEVkaXRpbmdEZWxlZ2F0ZTo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
d2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKGRlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KTogU3dpdGNoIHRvIF9ic3RyX3QuIFVzZSBKU1N0cmluZ0NyZWF0ZVdpdGhC
U1RSLgorICAgICAgICAoRnJhbWVMb2FkRGVsZWdhdGU6OkZyYW1lTG9hZERlbGVnYXRlKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UpOiBHZXQgcmlk
IG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRpb24uCisgICAgICAgIChGcmFt
ZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKTogRGl0dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0
ZTo6UmVsZWFzZSk6IERpdHRvLgorICAgICAgICAoRnJhbWVMb2FkRGVsZWdhdGU6OmRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpTU3RyaW5n
Q3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAg
KEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKTog
RGl0dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVRpdGxlKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ2hhbmdlSWNvbnMpOiBEaXR0by4K
KyAgICAgICAgKGRlbGVnYXRlc1dpdGhEZWxheWVkV29yayk6IERpdHRvLgorICAgICAgICAoRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSk6IERpdHRvLgorICAgICAgICAo
RnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZhaWxMb2FkV2l0aEVycm9yKTogRGl0dG8uCisgICAgICAg
IChGcmFtZUxvYWREZWxlZ2F0ZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMKTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RG
b3JGcmFtZSk6IERpdHRvLgorICAgICAgICAoRnJhbWVMb2FkRGVsZWdhdGU6OndpbGxDbG9zZUZy
YW1lKTogRGl0dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWRI
YW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZSk6IERpdHRvLgorICAgICAgICAoRnJhbWVMb2FkRGVs
ZWdhdGU6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEluRnJhbWUpOiBEaXR0by4KKyAg
ICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KTogRGl0
dG8uCisgICAgICAgIChGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50KTog
RGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmg6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0hpc3RvcnlEZWxlZ2F0ZS5jcHA6CisgICAg
ICAgIChIaXN0b3J5RGVsZWdhdGU6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKTogU3dp
dGNoIHRvIF9ic3RyX3QuIFVzZSBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RSLgorICAgICAgICAoSGlz
dG9yeURlbGVnYXRlOjp1cGRhdGVIaXN0b3J5VGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEhpc3Rv
cnlEZWxlZ2F0ZTo6cG9wdWxhdGVWaXNpdGVkTGlua3NGb3JXZWJWaWV3KTogRGl0dG8uCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcDoKKyAgICAgICAgKGR1
bXBQYXRoKToKKyAgICAgICAgKFBvbGljeURlbGVnYXRlOjpRdWVyeUludGVyZmFjZSk6IEdldCBy
aWQgb2YgdW5lZWRlZCBTVERNRVRIT0RDQUxMVFlQRSBkZWNsYXJhdGlvbi4KKyAgICAgICAgKFBv
bGljeURlbGVnYXRlOjpBZGRSZWYpOiBEaXR0by4KKyAgICAgICAgKFBvbGljeURlbGVnYXRlOjpS
ZWxlYXNlKTogRGl0dG8uCisgICAgICAgIChQb2xpY3lEZWxlZ2F0ZTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbik6IFN3aXRjaCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVX
aXRoQlNUUi4KKyAgICAgICAgKFBvbGljeURlbGVnYXRlOjp1bmFibGVUb0ltcGxlbWVudFBvbGlj
eVdpdGhFcnJvcik6IERpdHRvLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJj
ZUxvYWREZWxlZ2F0ZS5jcHA6CisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBTd2l0Y2ggdG8gX2JzdHJfdC4gVXNlIEpTU3Ry
aW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6UXVlcnlJ
bnRlcmZhY2UpOiBHZXQgcmlkIG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRp
b24uCisgICAgICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKTogRGl0dG8uCisgICAg
ICAgIChSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6UmVsZWFzZSk6IERpdHRvLgorICAgICAgICAoUmVz
b3VyY2VMb2FkRGVsZWdhdGU6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCk6IFN3aXRjaCB0
byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNUUi4KKyAgICAgICAgKFJlc291cmNl
TG9hZERlbGVnYXRlOjpyZW1vdmVJZGVudGlmaWVyRm9yUmVxdWVzdCk6IERpdHRvLgorICAgICAg
ICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCk6IERpdHRvLgorICAgICAg
ICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSk6IERpdHRvLgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNw
b25zZSk6IERpdHRvLgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaExv
YWRpbmdGcm9tRGF0YVNvdXJjZSk6IERpdHRvLgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdh
dGU6OmRpZEZhaWxMb2FkaW5nV2l0aEVycm9yKTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZCk6IFN3aXRjaCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNU
Ui4KKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChU
ZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UpOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5u
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTogRGl0dG8uCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL1RleHRJbnB1dENvbnRyb2xsZXJXaW4uY3BwOiBEaXR0by4KKyAgICAg
ICAgKFRleHRJbnB1dENvbnRyb2xsZXI6OnNldE1hcmtlZFRleHQpOiBTd2l0Y2ggdG8gX2JzdHJf
dC4gVXNlIEpTU3RyaW5nQ3JlYXRlV2l0aEJTVFIuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9s
bGVyOjppbnNlcnRUZXh0KTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1VJ
RGVsZWdhdGUuY3BwOgorICAgICAgICAoVUlEZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UpOiBHZXQg
cmlkIG9mIHVuZWVkZWQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjbGFyYXRpb24uCisgICAgICAgIChV
SURlbGVnYXRlOjpBZGRSZWYpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OlJlbGVhc2Up
OiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6Omhhc0N1c3RvbU1lbnVJbXBsZW1lbnRhdGlv
bik6IFN3aXRjaCB0byBfYnN0cl90LiBVc2UgSlNTdHJpbmdDcmVhdGVXaXRoQlNUUi4KKyAgICAg
ICAgKFVJRGVsZWdhdGU6OnRyYWNrQ3VzdG9tUG9wdXBNZW51KTogRGl0dG8uCisgICAgICAgIChV
SURlbGVnYXRlOjpyZWdpc3RlclVuZG9XaXRoVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChVSURl
bGVnYXRlOjpyZW1vdmVBbGxBY3Rpb25zV2l0aFRhcmdldCk6IERpdHRvLgorICAgICAgICAoVUlE
ZWxlZ2F0ZTo6c2V0QWN0aW9uVGl0bGUpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnVu
ZG8pOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnJlZG8pOiBEaXR0by4KKyAgICAgICAg
KFVJRGVsZWdhdGU6OmNhblVuZG8pOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmNhblJl
ZG8pOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnByaW50RnJhbWUpOiBEaXR0by4KKyAg
ICAgICAgKFVJRGVsZWdhdGU6OmZ0cERpcmVjdG9yeVRlbXBsYXRlUGF0aCk6IERpdHRvLgorICAg
ICAgICAoVUlEZWxlZ2F0ZTo6d2ViVmlld0hlYWRlckhlaWdodCk6IERpdHRvLgorICAgICAgICAo
VUlEZWxlZ2F0ZTo6d2ViVmlld0Zvb3RlckhlaWdodCk6IERpdHRvLgorICAgICAgICAoVUlEZWxl
Z2F0ZTo6ZHJhd0hlYWRlckluUmVjdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6ZHJh
d0Zvb3RlckluUmVjdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6d2ViVmlld1ByaW50
aW5nTWFyZ2luUmVjdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6Y2FuUnVuTW9kYWwp
OiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmNyZWF0ZU1vZGFsRGlhbG9nKTogRGl0dG8u
CisgICAgICAgIChVSURlbGVnYXRlOjpydW5Nb2RhbCk6IERpdHRvLgorICAgICAgICAoVUlEZWxl
Z2F0ZTo6aXNNZW51QmFyVmlzaWJsZSk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6c2V0
TWVudUJhclZpc2libGUpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnJ1bkRhdGFiYXNl
U2l6ZUxpbWl0UHJvbXB0KTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjpwYWludEN1c3Rv
bVNjcm9sbGJhcik6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cGFpbnRDdXN0b21TY3Jv
bGxDb3JuZXIpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OnNldEZyYW1lKTogRGl0dG8u
CisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFVJ
RGVsZWdhdGU6OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UpOiBEaXR0by4KKyAg
ICAgICAgKFVJRGVsZWdhdGU6OnJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVs
V2l0aFByb21wdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6Ondl
YlZpZXdBZGRNZXNzYWdlVG9Db25zb2xlKTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjpk
b0RyYWdEcm9wKTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3R2V0RGxnQ29k
ZSk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6Y3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0
KTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3Q2xvc2UpOiBEaXR0by4KKyAg
ICAgICAgKFVJRGVsZWdhdGU6OndlYlZpZXdGb2N1cyk6IERpdHRvLgorICAgICAgICAoVUlEZWxl
Z2F0ZTo6d2ViVmlld1VuZm9jdXMpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OndlYlZp
ZXdQYWludGVkKTogRGl0dG8uCisgICAgICAgIChVSURlbGVnYXRlOjpleGNlZWRlZERhdGFiYXNl
UXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmVtYmVkZGVkVmlld1dpdGhBcmd1
bWVudHMpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OndlYlZpZXdDbG9zaW5nKTogRGl0
dG8uCisgICAgICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3U2V0Q3Vyc29yKTogRGl0dG8uCisgICAg
ICAgIChVSURlbGVnYXRlOjp3ZWJWaWV3RGlkSW52YWxpZGF0ZSk6IERpdHRvLgorICAgICAgICAo
VUlEZWxlZ2F0ZTo6c2V0U3RhdHVzVGV4dCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6
ZGVza3RvcE5vdGlmaWNhdGlvbnNEZWxlZ2F0ZSk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0
ZTo6ZHJhd0JhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFVJRGVsZWdhdGU6OmRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoVUlEZWxlZ2F0ZTo6
ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uKTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvd2luL1dvcmtRdWV1ZUl0ZW1XaW4uY3BwOiBEaXR0by4KKyAgICAgICAgKExvYWRJdGVt
OjppbnZva2UpOiAgU3dpdGNoIHRvIF9ic3RyX3QuIFVzZSBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RS
LgorICAgICAgICAoTG9hZEhUTUxTdHJpbmdJdGVtOjppbnZva2UpOiBEaXR0by4KKyAgICAgICAg
KFNjcmlwdEl0ZW06Omludm9rZSk6IERpdHRvLgorCiAyMDE0LTA0LTA5ICBHZXJnbyBCYWxvZ2gg
IDxnYmFsb2doLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAKICAgICAgICAgU3R5bGVj
aGVja2VyOiBGYWxzZSBwb3NpdGl2ZSBvbiBpbmxpbmUgYXNtIGNvZGUuCkBAIC0xMzksNiArMzA2
LDE3IEBACiAKIDIwMTQtMDQtMDggIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CiAKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5l
ZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6
CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorCisyMDE0LTA0LTA4ICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQgZ2Fy
ZGVuaW5nIChUYWtlIDIpOiBQcmV2ZW50IHVzZXJzIGZyb20gYXR0ZW1wdGluZwogICAgICAgICB0
byBidWlsZCB3aXRoIGtub3duIGludmFsaWQgY1VSTC4gCiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAJKHJl
dmlzaW9uIDE2NzAyMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkRGVsZWdh
dGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogI2luY2x1ZGUgPGNvbXV0aWwuaD4KICNpbmNsdWRlIDx0Y2hhci5oPgpAQCAt
Mjk2LDEyICsyOTcsMTEgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0
bAogICAgIGlmICghbV9lbGVtZW50KQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKIAotICAgIEJTVFIgdGl0bGVCU1RSOwotICAgIGlmIChGQUlMRUQo
bV9lbGVtZW50LT5nZXRfYWNjTmFtZShzZWxmKCksICZ0aXRsZUJTVFIpKSB8fCAhdGl0bGVCU1RS
KQorICAgIF9ic3RyX3QgdGl0bGVCU1RSOworICAgIGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRf
YWNjTmFtZShzZWxmKCksICZ0aXRsZUJTVFIuR2V0QlNUUigpKSkgfHwgIXRpdGxlQlNUUi5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci0gICAgd3N0cmluZyB0aXRsZSh0aXRsZUJTVFIsIFN5c1N0cmluZ0xlbih0aXRsZUJTVFIpKTsK
LSAgICA6OlN5c0ZyZWVTdHJpbmcodGl0bGVCU1RSKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycyh0aXRsZS5kYXRhKCksIHRpdGxlLmxlbmd0aCgpKTsKKworICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RSKHRpdGxlQlNUUik7CiB9CiAKIEpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTMwOSwxMiArMzA5LDEw
IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2MKICAgICBpZiAoIW1f
ZWxlbWVudCkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7CiAKLSAgICBCU1RSIGRlc2NyaXB0aW9uQlNUUjsKLSAgICBpZiAoRkFJTEVEKG1fZWxlbWVu
dC0+Z2V0X2FjY0Rlc2NyaXB0aW9uKHNlbGYoKSwgJmRlc2NyaXB0aW9uQlNUUikpIHx8ICFkZXNj
cmlwdGlvbkJTVFIpCisgICAgX2JzdHJfdCBkZXNjcmlwdGlvbkJTVFI7CisgICAgaWYgKEZBSUxF
RChtX2VsZW1lbnQtPmdldF9hY2NEZXNjcmlwdGlvbihzZWxmKCksICZkZXNjcmlwdGlvbkJTVFIu
R2V0QlNUUigpKSkgfHwgIWRlc2NyaXB0aW9uQlNUUi5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0gICAgd3N0cmluZyBkZXNjcmlw
dGlvbihkZXNjcmlwdGlvbkJTVFIsIFN5c1N0cmluZ0xlbihkZXNjcmlwdGlvbkJTVFIpKTsKLSAg
ICA6OlN5c0ZyZWVTdHJpbmcoZGVzY3JpcHRpb25CU1RSKTsKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycyhkZXNjcmlwdGlvbi5kYXRhKCksIGRlc2NyaXB0aW9uLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQlNUUihkZXNjcmlwdGlvbkJTVFIp
OwogfQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgp
CkBAIC0zMzIsMTIgKzMzMCwxMCBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoZWxwCiAgICAgaWYgKCFtX2VsZW1lbnQpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCi0gICAgQlNUUiBoZWxwVGV4dEJTVFI7Ci0gICAgaWYg
KEZBSUxFRChtX2VsZW1lbnQtPmdldF9hY2NIZWxwKHNlbGYoKSwgJmhlbHBUZXh0QlNUUikpIHx8
ICFoZWxwVGV4dEJTVFIpCisgICAgX2JzdHJfdCBoZWxwVGV4dEJTVFI7CisgICAgaWYgKEZBSUxF
RChtX2VsZW1lbnQtPmdldF9hY2NIZWxwKHNlbGYoKSwgJmhlbHBUZXh0QlNUUi5HZXRCU1RSKCkp
KSB8fCAhaGVscFRleHRCU1RSLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLSAgICB3c3RyaW5nIGhlbHBUZXh0KGhlbHBUZXh0QlNU
UiwgU3lzU3RyaW5nTGVuKGhlbHBUZXh0QlNUUikpOwotICAgIDo6U3lzRnJlZVN0cmluZyhoZWxw
VGV4dEJTVFIpOwotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGhlbHBU
ZXh0LmRhdGEoKSwgaGVscFRleHQubGVuZ3RoKCkpOworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhCU1RSKGhlbHBUZXh0QlNUUik7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp4KCkKQEAgLTQ3MiwxMyArNDY4LDEyIEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbnRWYWx1ZSgKICAgICBpZiAoIW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBCU1RSIHZhbHVlQlNUUjsKLSAgICBpZiAoRkFJTEVEKG1fZWxlbWVudC0+Z2V0X2FjY1Zh
bHVlKHNlbGYoKSwgJnZhbHVlQlNUUikpIHx8ICF2YWx1ZUJTVFIpCisgICAgX2JzdHJfdCB2YWx1
ZUJTVFI7CisgICAgaWYgKEZBSUxFRChtX2VsZW1lbnQtPmdldF9hY2NWYWx1ZShzZWxmKCksICZ2
YWx1ZUJTVFIuR2V0QlNUUigpKSkgfHwgIXZhbHVlQlNUUi5sZW5ndGgoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgd3N0cmluZyB2YWx1ZSh2YWx1ZUJTVFIsIFN5c1N0cmluZ0xlbih2YWx1ZUJT
VFIpKTsKLSAgICA6OlN5c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKKwogICAgIFRDSEFSKiBpZ25v
cmVkOwotICAgIHJldHVybiBfdGNzdG9kKHZhbHVlLmRhdGEoKSwgJmlnbm9yZWQpOworICAgIHJl
dHVybiBfdGNzdG9kKHN0YXRpY19jYXN0PFRDSEFSKj4odmFsdWVCU1RSKSwgJmlnbm9yZWQpOwog
fQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUoKQpAQCAtNDk2LDEx
ICs0OTEsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aQogICAg
IGlmICghbV9lbGVtZW50KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEJTVFIgdmFsdWVCU1RS
OwotICAgIGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRfYWNjRGVmYXVsdEFjdGlvbihzZWxmKCks
ICZ2YWx1ZUJTVFIpIHx8ICF2YWx1ZUJTVFIpKQorICAgIF9ic3RyX3QgdmFsdWVCU1RSOworICAg
IGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRfYWNjRGVmYXVsdEFjdGlvbihzZWxmKCksICZ2YWx1
ZUJTVFIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghOjpT
eXNTdHJpbmdMZW4odmFsdWVCU1RSKSkKKyAgICBpZiAoIXZhbHVlQlNUUi5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC03MjUsMTQgKzcyMCwx
MSBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2NlCiAgICAgaWYgKCFt
X2VsZW1lbnQpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOwogCi0gICAgQlNUUiB2YWx1ZUJTVFI7Ci0gICAgaWYgKEZBSUxFRChtX2VsZW1lbnQtPmdl
dF9hY2NWYWx1ZShzZWxmKCksICZ2YWx1ZUJTVFIpKSB8fCAhdmFsdWVCU1RSKQorICAgIF9ic3Ry
X3QgdmFsdWVCU1RSOworICAgIGlmIChGQUlMRUQobV9lbGVtZW50LT5nZXRfYWNjVmFsdWUoc2Vs
ZigpLCAmdmFsdWVCU1RSLkdldEJTVFIoKSkpIHx8ICF2YWx1ZUJTVFIubGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCi0gICAgd3N0
cmluZyB2YWx1ZSh2YWx1ZUJTVFIsIFN5c1N0cmluZ0xlbih2YWx1ZUJTVFIpKTsKLSAgICA6OlN5
c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKHZhbHVlLmRhdGEoKSwgdmFsdWUubGVuZ3RoKCkpOworICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhCU1RSKHZhbHVlQlNUUik7CiB9CiAKIApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0RSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9wTm90aWZpY2F0aW9uUHJl
c2VudGVyLmNwcAkocmV2aXNpb24gMTY3MDIyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0RSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiwx
MSArMzcsMTIgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTm90aWZpY2F0aW9uQ2xpZW50Lmg+CisjaW5jbHVkZSA8Y29tdXRpbC5oPgogCiBEUlREZXNr
dG9wTm90aWZpY2F0aW9uUHJlc2VudGVyOjpEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVy
KCkKICAgICA6IG1fcmVmQ291bnQoMSkge30gCiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCitIUkVTVUxUIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQogewog
ICAgICpwcHZPYmplY3QgPSAwOwogICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVVua25v
d24pKQpAQCAtNTQsMTIgKzU2LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGVz
a3RvcE5vdGkKICAgICByZXR1cm4gU19PSzsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUg
RFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6QWRkUmVmKCkKK1VMT05HIERSVERlc2t0
b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OkFkZFJlZigpCiB7CiAgICAgcmV0dXJuICsrbV9yZWZD
b3VudDsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGVza3RvcE5vdGlmaWNhdGlv
blByZXNlbnRlcjo6UmVsZWFzZSgpCitVTE9ORyBEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOjpSZWxlYXNlKCkKIHsKICAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CiAgICAg
aWYgKCFuZXdSZWYpCkBAIC02OCwyMyArNzAsMTkgQEAgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUg
RFJURGVza3RvcE5vdGlmaQogICAgIHJldHVybiBuZXdSZWY7CiB9CiAKLUhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvd0Rlc2t0b3BO
b3RpZmljYXRpb24oCi0gICAgLyogW2luXSAqLyBJV2ViRGVza3RvcE5vdGlmaWNhdGlvbiogbm90
aWZpY2F0aW9uKQorSFJFU1VMVCBEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93
RGVza3RvcE5vdGlmaWNhdGlvbihJV2ViRGVza3RvcE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9u
KQogewotICAgIEJTVFIgdGl0bGUsIHRleHQsIHVybDsKKyAgICBfYnN0cl90IHRpdGxlLCB0ZXh0
LCB1cmw7CiAgICAgQk9PTCBodG1sOwogCiAgICAgaWYgKCFub3RpZmljYXRpb24tPmlzSFRNTCgm
aHRtbCkgJiYgaHRtbCkgewotICAgICAgICBub3RpZmljYXRpb24tPmNvbnRlbnRzVVJMKCZ1cmwp
OyAgICAKLSAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTjogY29udGVudHMgYXQg
JVNcbiIsIHVybCA/IHVybCA6IEwiIik7CisgICAgICAgIG5vdGlmaWNhdGlvbi0+Y29udGVudHNV
UkwoJnVybC5HZXRCU1RSKCkpOyAgICAKKyAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNB
VElPTjogY29udGVudHMgYXQgJVNcbiIsIHN0YXRpY19jYXN0PHdjaGFyX3QqPih1cmwpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBub3RpZmljYXRpb24tPmljb25VUkwoJnVybCk7Ci0gICAgICAg
IG5vdGlmaWNhdGlvbi0+dGl0bGUoJnRpdGxlKTsKLSAgICAgICAgbm90aWZpY2F0aW9uLT50ZXh0
KCZ0ZXh0KTsKLSAgICAgICAgcHJpbnRmKCJERVNLVE9QIE5PVElGSUNBVElPTjogaWNvbiAlUywg
dGl0bGUgJVMsIHRleHQgJVNcbiIsIAotICAgICAgICAgICAgdXJsID8gdXJsIDogTCIiLCAKLSAg
ICAgICAgICAgIHRpdGxlID8gdGl0bGUgOiBMIiIsIAotICAgICAgICAgICAgdGV4dCA/IHRleHQg
OiBMIiIpOworICAgICAgICBub3RpZmljYXRpb24tPmljb25VUkwoJnVybC5HZXRCU1RSKCkpOwor
ICAgICAgICBub3RpZmljYXRpb24tPnRpdGxlKCZ0aXRsZS5HZXRCU1RSKCkpOworICAgICAgICBu
b3RpZmljYXRpb24tPnRleHQoJnRleHQuR2V0QlNUUigpKTsKKyAgICAgICAgcHJpbnRmKCJERVNL
VE9QIE5PVElGSUNBVElPTjogaWNvbiAlUywgdGl0bGUgJVMsIHRleHQgJVNcbiIsIHN0YXRpY19j
YXN0PHdjaGFyX3QqPih1cmwpLCBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4odGl0bGUpLCBzdGF0aWNf
Y2FzdDx3Y2hhcl90Kj4odGV4dCkpOwogICAgIH0KIAogICAgIC8vIEluIHRoaXMgc3R1YiBpbXBs
ZW1lbnRhdGlvbiwgdGhlIG5vdGlmaWNhdGlvbiBpcyBkaXNwbGF5ZWQgaW1tZWRpYXRlbHk7CkBA
IC05NCwzNCArOTIsMzAgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEUlREZXNrdG9wTm90
aQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERSVERl
c2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OmNhbmNlbERlc2t0b3BOb3RpZmljYXRpb24oCi0g
ICAgLyogW2luXSAqLyBJV2ViRGVza3RvcE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQorSFJF
U1VMVCBEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyOjpjYW5jZWxEZXNrdG9wTm90aWZp
Y2F0aW9uKElXZWJEZXNrdG9wTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7Ci0gICAgQlNU
UiBpZGVudGlmaWVyOworICAgIF9ic3RyX3QgaWRlbnRpZmllcjsKICAgICBCT09MIGh0bWw7CiAg
ICAgbm90aWZpY2F0aW9uLT5pc0hUTUwoJmh0bWwpOwogICAgIGlmIChodG1sKQotICAgICAgICBu
b3RpZmljYXRpb24tPmNvbnRlbnRzVVJMKCZpZGVudGlmaWVyKTsKKyAgICAgICAgbm90aWZpY2F0
aW9uLT5jb250ZW50c1VSTCgmaWRlbnRpZmllci5HZXRCU1RSKCkpOwogICAgIGVsc2UKLSAgICAg
ICAgbm90aWZpY2F0aW9uLT50aXRsZSgmaWRlbnRpZmllcik7CisgICAgICAgIG5vdGlmaWNhdGlv
bi0+dGl0bGUoJmlkZW50aWZpZXIuR2V0QlNUUigpKTsKIAotICAgIHByaW50ZigiREVTS1RPUCBO
T1RJRklDQVRJT04gQ0xPU0VEOiAlU1xuIiwgaWRlbnRpZmllciA/IGlkZW50aWZpZXIgOiBMIiIp
OworICAgIHByaW50ZigiREVTS1RPUCBOT1RJRklDQVRJT04gQ0xPU0VEOiAlU1xuIiwgc3RhdGlj
X2Nhc3Q8d2NoYXJfdCo+KGlkZW50aWZpZXIpKTsKICAgICBub3RpZmljYXRpb24tPm5vdGlmeUNs
b3NlKGZhbHNlKTsKIAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6Om5vdGlmaWNhdGlvbkRlc3Ry
b3llZCgKLSAgICAvKiBbaW5dICovIElXZWJEZXNrdG9wTm90aWZpY2F0aW9uKiBub3RpZmljYXRp
b24pCitIUkVTVUxUIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6Om5vdGlmaWNhdGlv
bkRlc3Ryb3llZChJV2ViRGVza3RvcE5vdGlmaWNhdGlvbiogLypub3RpZmljYXRpb24qLykKIHsK
ICAgICAvLyBTaW5jZSBpbiB0aGVzZSB0ZXN0cyBldmVudHMgaGFwcGVuIGltbWVkaWF0ZWx5LCB3
ZSBkb24ndCBob2xkIG9uIHRvCiAgICAgLy8gTm90aWZpY2F0aW9uIHBvaW50ZXJzLiAgU28gdGhl
cmUncyBubyBjbGVhbnVwIHRvIGRvLgogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OmNoZWNrTm90
aWZpY2F0aW9uUGVybWlzc2lvbigKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIG9yaWdpbiwgCi0g
ICAgICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gaW50KiByZXN1bHQpCitIUkVTVUxUIERSVERlc2t0
b3BOb3RpZmljYXRpb25QcmVzZW50ZXI6OmNoZWNrTm90aWZpY2F0aW9uUGVybWlzc2lvbihCU1RS
IC8qb3JpZ2luKi8sIGludCogLypyZXN1bHQqLykKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9O
UykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQogICAgIEpTU3RyaW5nUmVmIGpzT3Jp
Z2luID0gSlNTdHJpbmdDcmVhdGVXaXRoQlNUUihvcmlnaW4pOwpAQCAtMTM3LDggKzEzMSw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGVza3RvcE5vdGkKICAgICByZXR1cm4gU19P
SzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEUlREZXNrdG9wTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpyZXF1ZXN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbigKLSAgICAgICAgLyogW2lu
XSAqLyBCU1RSIG9yaWdpbikKK0hSRVNVTFQgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRl
cjo6cmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24oQlNUUiBvcmlnaW4pCiB7CiAgICAgcHJp
bnRmKCJERVNLVE9QIE5PVElGSUNBVElPTiBQRVJNSVNTSU9OIFJFUVVFU1RFRDogJVNcbiIsIG9y
aWdpbiA/IG9yaWdpbiA6IEwiIik7CiAgICAgcmV0dXJuIFNfT0s7CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9wTm90aWZpY2F0aW9uUHJl
c2VudGVyLmgJKHJldmlzaW9uIDE2NzAyMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9E
UlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDYgQEAKICNkZWZpbmUgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcl9oCiAKICNp
bmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHdpbmRlZi5oPgogCiBjbGFzcyBEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyIDog
cHVibGljIElXZWJEZXNrdG9wTm90aWZpY2F0aW9uc0RlbGVnYXRlIHsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTY3MDIyKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAyLDExICs0MDIsMTAgQEAgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihJ
V2ViRnJhbWUqCiAgICAgICAgIGlmIChGQUlMRUQoZnJhbWUtPnBhcmVudEZyYW1lKCZwYXJlbnQp
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHBhcmVudCkgewotICAgICAgICAg
ICAgQlNUUiBuYW1lOwotICAgICAgICAgICAgaWYgKEZBSUxFRChmcmFtZS0+bmFtZSgmbmFtZSkp
KQorICAgICAgICAgICAgX2JzdHJfdCBuYW1lOworICAgICAgICAgICAgaWYgKEZBSUxFRChmcmFt
ZS0+bmFtZSgmbmFtZS5HZXRCU1RSKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBwcmludGYoImZyYW1lICclUycgIiwgbmFtZSA/IG5hbWUgOiBMIiIpOwotICAgICAg
ICAgICAgU3lzRnJlZVN0cmluZyhuYW1lKTsKKyAgICAgICAgICAgIHByaW50ZigiZnJhbWUgJyVT
JyAiLCBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4obmFtZSkpOwogICAgICAgICB9CiAgICAgICAgIHBy
aW50Zigic2Nyb2xsZWQgdG8gJS5mLCUuZlxuIiwgKGRvdWJsZSlzY3JvbGxQb3NpdGlvbi5jeCwg
KGRvdWJsZSlzY3JvbGxQb3NpdGlvbi5jeSk7CiAgICAgfQpAQCAtNDQ3LDI3ICs0NDYsMjMgQEAg
c3RhdGljIHdzdHJpbmcgZHVtcEZyYW1lc0FzVGV4dChJV2ViRnJhbQogICAgIGlmIChGQUlMRUQo
ZnJhbWUtPnBhcmVudEZyYW1lKCZwYXJlbnQpKSkKICAgICAgICAgcmV0dXJuIEwiIjsKICAgICBp
ZiAocGFyZW50KSB7Ci0gICAgICAgIEJTVFIgbmFtZSA9IEwiIjsKLSAgICAgICAgaWYgKEZBSUxF
RChmcmFtZS0+bmFtZSgmbmFtZSkpKQorICAgICAgICBfYnN0cl90IG5hbWU7CisgICAgICAgIGlm
IChGQUlMRUQoZnJhbWUtPm5hbWUoJm5hbWUuR2V0QlNUUigpKSkpCiAgICAgICAgICAgICByZXR1
cm4gTCIiOwogCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoTCJcbi0tLS0tLS0tXG5GcmFtZTogJyIp
OwotICAgICAgICByZXN1bHQuYXBwZW5kKG5hbWUgPyBuYW1lIDogTCIiLCBTeXNTdHJpbmdMZW4o
bmFtZSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PHdjaGFyX3QqPihuYW1l
KSwgbmFtZS5sZW5ndGgoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoTCInXG4tLS0tLS0tLVxu
Iik7Ci0KLSAgICAgICAgU3lzRnJlZVN0cmluZyhuYW1lKTsKICAgICB9CiAKLSAgICBCU1RSIGlu
bmVyVGV4dCA9IDA7CisgICAgX2JzdHJfdCBpbm5lclRleHQ7CiAgICAgQ09NUHRyPElET01FbGVt
ZW50UHJpdmF0ZT4gZG9jUHJpdmF0ZTsKICAgICBpZiAoU1VDQ0VFREVEKGRvY3VtZW50RWxlbWVu
dC0+UXVlcnlJbnRlcmZhY2UoJmRvY1ByaXZhdGUpKSkKLSAgICAgICAgZG9jUHJpdmF0ZS0+aW5u
ZXJUZXh0KCZpbm5lclRleHQpOworICAgICAgICBkb2NQcml2YXRlLT5pbm5lclRleHQoJmlubmVy
VGV4dC5HZXRCU1RSKCkpOwogCi0gICAgcmVzdWx0LmFwcGVuZChpbm5lclRleHQgPyBpbm5lclRl
eHQgOiBMIiIsIFN5c1N0cmluZ0xlbihpbm5lclRleHQpKTsKKyAgICByZXN1bHQuYXBwZW5kKHN0
YXRpY19jYXN0PHdjaGFyX3QqPihpbm5lclRleHQpLCBpbm5lclRleHQubGVuZ3RoKCkpOwogICAg
IHJlc3VsdC5hcHBlbmQoTCJcbiIpOwogCi0gICAgU3lzRnJlZVN0cmluZyhpbm5lclRleHQpOwot
CiAgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpKSB7CiAgICAg
ICAgIENPTVB0cjxJRW51bVZBUklBTlQ+IGVudW1LaWRzOwogICAgICAgICBpZiAoRkFJTEVEKGZy
YW1lLT5jaGlsZEZyYW1lcygmZW51bUtpZHMpKSkKQEAgLTQ5NiwyMCArNDkxLDE1IEBAIHN0YXRp
YyBpbnQgY29tcGFyZUhpc3RvcnlJdGVtcyhjb25zdCB2b2kKICAgICBpZiAoRkFJTEVEKCgqKENP
TVB0cjxJVW5rbm93bj4qKWl0ZW0yKS0+UXVlcnlJbnRlcmZhY2UoJml0ZW1CKSkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgQlNUUiB0YXJnZXRBOwotICAgIGlmIChGQUlMRUQoaXRlbUEtPnRh
cmdldCgmdGFyZ2V0QSkpKQorICAgIF9ic3RyX3QgdGFyZ2V0QTsKKyAgICBpZiAoRkFJTEVEKGl0
ZW1BLT50YXJnZXQoJnRhcmdldEEuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgQlNUUiB0YXJnZXRCOwotICAgIGlmIChGQUlMRUQoaXRlbUItPnRhcmdldCgmdGFyZ2V0Qikp
KSB7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcodGFyZ2V0QSk7CisgICAgX2JzdHJfdCB0YXJnZXRC
OworICAgIGlmIChGQUlMRUQoaXRlbUItPnRhcmdldCgmdGFyZ2V0Qi5HZXRCU1RSKCkpKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCi0gICAgaW50IHJlc3VsdCA9IHdjc2ljbXAod3N0cmlu
Zyh0YXJnZXRBLCBTeXNTdHJpbmdMZW4odGFyZ2V0QSkpLmNfc3RyKCksIHdzdHJpbmcodGFyZ2V0
QiwgU3lzU3RyaW5nTGVuKHRhcmdldEIpKS5jX3N0cigpKTsKLSAgICBTeXNGcmVlU3RyaW5nKHRh
cmdldEEpOwotICAgIFN5c0ZyZWVTdHJpbmcodGFyZ2V0Qik7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gd2NzaWNtcChzdGF0aWNfY2FzdDx3Y2hhcl90Kj4odGFyZ2V0QSksIHN0YXRp
Y19jYXN0PHdjaGFyX3QqPih0YXJnZXRCKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBIaXN0b3J5
SXRlbShJV2ViSGlzdG9yeUl0ZW0qIGl0ZW0sIGludCBpbmRlbnQsIGJvb2wgY3VycmVudCkKQEAg
LTUyNCw0MCArNTE0LDM3IEBAIHN0YXRpYyB2b2lkIGR1bXBIaXN0b3J5SXRlbShJV2ViSGlzdG9y
eUkKICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBpbmRlbnQ7IGkrKykKICAgICAgICAgcHV0
Y2hhcignICcpOwogCi0gICAgQlNUUiB1cmw7Ci0gICAgaWYgKEZBSUxFRChpdGVtLT5VUkxTdHJp
bmcoJnVybCkpKQorICAgIF9ic3RyX3QgdXJsOworICAgIGlmIChGQUlMRUQoaXRlbS0+VVJMU3Ry
aW5nKCZ1cmwuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh3Y3NzdHIo
dXJsLCBMImZpbGU6LyIpID09IHVybCkgeworICAgIGlmICh3Y3NzdHIoc3RhdGljX2Nhc3Q8d2No
YXJfdCo+KHVybCksIEwiZmlsZTovIikgPT0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KHVybCkpIHsK
ICAgICAgICAgc3RhdGljIHdjaGFyX3QqIGxheW91dFRlc3RzU3RyaW5nID0gTCIvTGF5b3V0VGVz
dHMvIjsKICAgICAgICAgc3RhdGljIHdjaGFyX3QqIGZpbGVUZXN0U3RyaW5nID0gTCIoZmlsZSB0
ZXN0KToiOwogICAgICAgICAKLSAgICAgICAgd2NoYXJfdCogcmVzdWx0ID0gd2Nzc3RyKHVybCwg
bGF5b3V0VGVzdHNTdHJpbmcpOworICAgICAgICB3Y2hhcl90KiByZXN1bHQgPSB3Y3NzdHIoc3Rh
dGljX2Nhc3Q8d2NoYXJfdCo+KHVybCksIGxheW91dFRlc3RzU3RyaW5nKTsKICAgICAgICAgaWYg
KHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB3Y2hhcl90KiBz
dGFydCA9IHJlc3VsdCArIHdjc2xlbihsYXlvdXRUZXN0c1N0cmluZyk7CiAKLSAgICAgICAgQlNU
UiBuZXdVUkwgPSBTeXNBbGxvY1N0cmluZ0xlbihOVUxMLCBTeXNTdHJpbmdMZW4odXJsKSk7Ci0g
ICAgICAgIHdjc2NweShuZXdVUkwsIGZpbGVUZXN0U3RyaW5nKTsKLSAgICAgICAgd2NzY3B5KG5l
d1VSTCArIHdjc2xlbihmaWxlVGVzdFN0cmluZyksIHN0YXJ0KTsKKyAgICAgICAgX2JzdHJfdCBu
ZXdVUkwoU3lzQWxsb2NTdHJpbmdMZW4oMCwgU3lzU3RyaW5nTGVuKHVybCkpLCBmYWxzZSk7Cisg
ICAgICAgIHdjc2NweShzdGF0aWNfY2FzdDx3Y2hhcl90Kj4obmV3VVJMKSwgZmlsZVRlc3RTdHJp
bmcpOworICAgICAgICB3Y3NjcHkoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KG5ld1VSTCkgKyB3Y3Ns
ZW4oZmlsZVRlc3RTdHJpbmcpLCBzdGFydCk7CiAKLSAgICAgICAgU3lzRnJlZVN0cmluZyh1cmwp
OwogICAgICAgICB1cmwgPSBuZXdVUkw7CiAgICAgfQogCi0gICAgcHJpbnRmKCIlUyIsIHVybCA/
IHVybCA6IEwiIik7Ci0gICAgU3lzRnJlZVN0cmluZyh1cmwpOworICAgIHByaW50ZigiJVMiLCBz
dGF0aWNfY2FzdDx3Y2hhcl90Kj4odXJsKSk7CiAKICAgICBDT01QdHI8SVdlYkhpc3RvcnlJdGVt
UHJpdmF0ZT4gaXRlbVByaXZhdGU7CiAgICAgaWYgKEZBSUxFRChpdGVtLT5RdWVyeUludGVyZmFj
ZSgmaXRlbVByaXZhdGUpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQlNUUiB0YXJnZXQ7Ci0g
ICAgaWYgKEZBSUxFRChpdGVtUHJpdmF0ZS0+dGFyZ2V0KCZ0YXJnZXQpKSkKKyAgICBfYnN0cl90
IHRhcmdldDsKKyAgICBpZiAoRkFJTEVEKGl0ZW1Qcml2YXRlLT50YXJnZXQoJnRhcmdldC5HZXRC
U1RSKCkpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChTeXNTdHJpbmdMZW4odGFyZ2V0KSkK
LSAgICAgICAgcHJpbnRmKCIgKGluIGZyYW1lIFwiJVNcIikiLCB0YXJnZXQpOwotICAgIFN5c0Zy
ZWVTdHJpbmcodGFyZ2V0KTsKKyAgICBpZiAodGFyZ2V0Lmxlbmd0aCgpKQorICAgICAgICBwcmlu
dGYoIiAoaW4gZnJhbWUgXCIlU1wiKSIsIHN0YXRpY19jYXN0PHdjaGFyX3QqPih0YXJnZXQpKTsK
ICAgICBCT09MIGlzVGFyZ2V0SXRlbSA9IEZBTFNFOwogICAgIGlmIChGQUlMRUQoaXRlbVByaXZh
dGUtPmlzVGFyZ2V0SXRlbSgmaXNUYXJnZXRJdGVtKSkpCiAgICAgICAgIHJldHVybjsKQEAgLTY5
OCw1MiArNjg1LDQ5IEBAIHZvaWQgZHVtcCgpCiAgICAgaWYgKFNVQ0NFRURFRChmcmFtZS0+ZGF0
YVNvdXJjZSgmZGF0YVNvdXJjZSkpKSB7CiAgICAgICAgIENPTVB0cjxJV2ViVVJMUmVzcG9uc2U+
IHJlc3BvbnNlOwogICAgICAgICBpZiAoU1VDQ0VFREVEKGRhdGFTb3VyY2UtPnJlc3BvbnNlKCZy
ZXNwb25zZSkpICYmIHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICBCU1RSIG1pbWVUeXBlOwotICAg
ICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXNwb25zZS0+TUlNRVR5cGUoJm1pbWVUeXBlKSkgJiYg
IV90Y3NjbXAobWltZVR5cGUsIFRFWFQoInRleHQvcGxhaW4iKSkpIHsKKyAgICAgICAgICAgIF9i
c3RyX3QgbWltZVR5cGU7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3BvbnNlLT5NSU1F
VHlwZSgmbWltZVR5cGUuR2V0QlNUUigpKSkgJiYgIV90Y3NjbXAoc3RhdGljX2Nhc3Q8VENIQVIq
PihtaW1lVHlwZSksIFRFWFQoInRleHQvcGxhaW4iKSkpIHsKICAgICAgICAgICAgICAgICA6OmdU
ZXN0UnVubmVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwogICAgICAgICAgICAgICAgIDo6Z1Rlc3RS
dW5uZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFN5c0ZyZWVTdHJpbmcobWltZVR5cGUpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgQlNUUiByZXN1bHRTdHJpbmcgPSAwOworICAgIF9ic3RyX3QgcmVzdWx0U3RyaW5nOwogCiAg
ICAgaWYgKGR1bXBUcmVlKSB7CiAgICAgICAgIDo6SW52YWxpZGF0ZVJlY3Qod2ViVmlld1dpbmRv
dywgMCwgVFJVRSk7CiAgICAgICAgIDo6U2VuZE1lc3NhZ2Uod2ViVmlld1dpbmRvdywgV01fUEFJ
TlQsIDAsIDApOwogCiAgICAgICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkpIHsK
LSAgICAgICAgICAgIHdzdHJpbmcgcmVzdWx0ID0gZHVtcEZyYW1lc0FzVGV4dChmcmFtZSk7Ci0g
ICAgICAgICAgICByZXN1bHRTdHJpbmcgPSBTeXNBbGxvY1N0cmluZ0xlbihyZXN1bHQuZGF0YSgp
LCByZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9IGR1bXBGcmFtZXNB
c1RleHQoZnJhbWUpLmRhdGEoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENPTVB0
cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGU7CiAgICAgICAgICAgICBpZiAoRkFJTEVE
KGZyYW1lLT5RdWVyeUludGVyZmFjZSgmZnJhbWVQcml2YXRlKSkpCiAgICAgICAgICAgICAgICAg
Z290byBmYWlsOwotICAgICAgICAgICAgZnJhbWVQcml2YXRlLT5yZW5kZXJUcmVlQXNFeHRlcm5h
bFJlcHJlc2VudGF0aW9uKGdUZXN0UnVubmVyLT5pc1ByaW50aW5nKCksICZyZXN1bHRTdHJpbmcp
OworICAgICAgICAgICAgZnJhbWVQcml2YXRlLT5yZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKGdUZXN0UnVubmVyLT5pc1ByaW50aW5nKCksICZyZXN1bHRTdHJpbmcuR2V0QlNUUigp
KTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1bHRTdHJpbmcpCi0gICAg
ICAgICAgICBwcmludGYoIkVSUk9SOiBuaWwgcmVzdWx0IGZyb20gJXMiLCA6OmdUZXN0UnVubmVy
LT5kdW1wQXNUZXh0KCkgPyAiSURPTUVsZW1lbnQ6OmlubmVyVGV4dCIgOiAiSUZyYW1lVmlld1By
aXZhdGU6OnJlbmRlclRyZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb24iKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdHJpbmdMZW5ndGggPSBTeXNTdHJpbmdMZW4ocmVz
dWx0U3RyaW5nKTsKKworICAgICAgICBpZiAocmVzdWx0U3RyaW5nLmxlbmd0aCgpKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzdHJpbmdMZW5ndGggPSByZXN1bHRTdHJpbmcubGVuZ3RoKCk7CiAg
ICAgICAgICAgICBpbnQgYnVmZmVyU2l6ZSA9IDo6V2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4
LCAwLCByZXN1bHRTdHJpbmcsIHN0cmluZ0xlbmd0aCwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAg
ICBjaGFyKiBidWZmZXIgPSAoY2hhciopbWFsbG9jKGJ1ZmZlclNpemUgKyAxKTsKICAgICAgICAg
ICAgIDo6V2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCByZXN1bHRTdHJpbmcsIHN0cmlu
Z0xlbmd0aCwgYnVmZmVyLCBidWZmZXJTaXplICsgMSwgMCwgMCk7CiAgICAgICAgICAgICBmd3Jp
dGUoYnVmZmVyLCAxLCBidWZmZXJTaXplLCBzdGRvdXQpOwogICAgICAgICAgICAgZnJlZShidWZm
ZXIpOwotICAgICAgICAgICAgaWYgKCE6OmdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkpCisKKyAg
ICAgICAgICAgIGlmICghOjpnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4dCgpICYmICE6OmdUZXN0UnVu
bmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgITo6Z1Rlc3RSdW5uZXItPmR1bXBTb3VyY2VB
c1dlYkFyY2hpdmUoKSAmJiAhOjpnVGVzdFJ1bm5lci0+ZHVtcEFzQXVkaW8oKSkKICAgICAgICAg
ICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihmcmFtZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKSkKLSAgICAgICAgICAg
IGR1bXBCYWNrRm9yd2FyZExpc3RGb3JBbGxXaW5kb3dzKCk7Ci0gICAgfQogCi0gICAgaWYgKHBy
aW50U2VwYXJhdG9ycykgewotICAgICAgICBwdXRzKCIjRU9GIik7ICAgLy8gdGVybWluYXRlIHRo
ZSBjb250ZW50IGJsb2NrCi0gICAgICAgIGZwdXRzKCIjRU9GXG4iLCBzdGRlcnIpOwotICAgICAg
ICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICBp
ZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEJhY2tGb3J3YXJkTGlzdCgpKQorICAgICAgICAgICAgICAg
IGR1bXBCYWNrRm9yd2FyZExpc3RGb3JBbGxXaW5kb3dzKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgcHJpbnRmKCJFUlJPUjogbmlsIHJlc3VsdCBmcm9tICVzIiwgOjpnVGVzdFJ1bm5l
ci0+ZHVtcEFzVGV4dCgpID8gIklET01FbGVtZW50Ojppbm5lclRleHQiIDogIklGcmFtZVZpZXdQ
cml2YXRlOjpyZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uIik7CisKKyAgICAgICAg
aWYgKHByaW50U2VwYXJhdG9ycykgeworICAgICAgICAgICAgcHV0cygiI0VPRiIpOyAvLyB0ZXJt
aW5hdGUgdGhlIGNvbnRlbnQgYmxvY2sKKyAgICAgICAgICAgIGZwdXRzKCIjRU9GXG4iLCBzdGRl
cnIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVz
dApAQCAtNzU0LDYgKzczOCw3IEBAIHZvaWQgZHVtcCgpCiAKICAgICBwcmludGYoIiNFT0ZcbiIp
OyAgIC8vIHRlcm1pbmF0ZSB0aGUgKHBvc3NpYmx5IGVtcHR5KSBwaXhlbHMgYmxvY2sKICAgICBm
Zmx1c2goc3Rkb3V0KTsKKyAgICBmZmx1c2goc3RkZXJyKTsKIAogZmFpbDoKICAgICBTeXNGcmVl
U3RyaW5nKHJlc3VsdFN0cmluZyk7CkBAIC03ODUsMTkgKzc3MCwxOSBAQCBzdGF0aWMgYm9vbCBz
aG91bGRFbmFibGVEZXZlbG9wZXJFeHRyYXMoCiBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9D
b25zaXN0ZW50VmFsdWVzKElXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMpCiB7CiAjaWZkZWYg
VVNFX01BQ19GT05UUwotICAgIHN0YXRpYyBCU1RSIHN0YW5kYXJkRmFtaWx5ID0gU3lzQWxsb2NT
dHJpbmcoVEVYVCgiVGltZXMiKSk7Ci0gICAgc3RhdGljIEJTVFIgZml4ZWRGYW1pbHkgPSBTeXNB
bGxvY1N0cmluZyhURVhUKCJDb3VyaWVyIikpOwotICAgIHN0YXRpYyBCU1RSIHNhbnNTZXJpZkZh
bWlseSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIkhlbHZldGljYSIpKTsKLSAgICBzdGF0aWMgQlNU
UiBjdXJzaXZlRmFtaWx5ID0gU3lzQWxsb2NTdHJpbmcoVEVYVCgiQXBwbGUgQ2hhbmNlcnkiKSk7
Ci0gICAgc3RhdGljIEJTVFIgZmFudGFzeUZhbWlseSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIlBh
cHlydXMiKSk7Ci0gICAgc3RhdGljIEJTVFIgcGljdG9ncmFwaEZhbWlseSA9IFN5c0FsbG9jU3Ry
aW5nKFRFWFQoIkFwcGxlIENvbG9yIEVtb2ppIikpOworICAgIHN0YXRpYyBfYnN0cl90IHN0YW5k
YXJkRmFtaWx5KFRFWFQoIlRpbWVzIikpOworICAgIHN0YXRpYyBfYnN0cl90IGZpeGVkRmFtaWx5
KFRFWFQoIkNvdXJpZXIiKSk7CisgICAgc3RhdGljIF9ic3RyX3Qgc2Fuc1NlcmlmRmFtaWx5KFRF
WFQoIkhlbHZldGljYSIpKTsKKyAgICBzdGF0aWMgX2JzdHJfdCBjdXJzaXZlRmFtaWx5KFRFWFQo
IkFwcGxlIENoYW5jZXJ5IikpOworICAgIHN0YXRpYyBfYnN0cl90IGZhbnRhc3lGYW1pbHkoVEVY
VCgiUGFweXJ1cyIpKTsKKyAgICBzdGF0aWMgX2JzdHJfdCBwaWN0b2dyYXBoRmFtaWx5KFRFWFQo
IkFwcGxlIENvbG9yIEVtb2ppIikpOwogI2Vsc2UKLSAgICBzdGF0aWMgQlNUUiBzdGFuZGFyZEZh
bWlseSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIlRpbWVzIE5ldyBSb21hbiIpKTsKLSAgICBzdGF0
aWMgQlNUUiBmaXhlZEZhbWlseSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIkNvdXJpZXIgTmV3Iikp
OwotICAgIHN0YXRpYyBCU1RSIHNhbnNTZXJpZkZhbWlseSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQo
IkFyaWFsIikpOwotICAgIHN0YXRpYyBCU1RSIGN1cnNpdmVGYW1pbHkgPSBTeXNBbGxvY1N0cmlu
ZyhURVhUKCJDb21pYyBTYW5zIE1TIikpOyAvLyBOb3QgYWN0dWFsbHkgY3Vyc2l2ZSwgYnV0IGl0
J3Mgd2hhdCBJRSBhbmQgRmlyZWZveCB1c2UuCi0gICAgc3RhdGljIEJTVFIgZmFudGFzeUZhbWls
eSA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIlRpbWVzIE5ldyBSb21hbiIpKTsKLSAgICBzdGF0aWMg
QlNUUiBwaWN0b2dyYXBoRmFtaWx5ID0gU3lzQWxsb2NTdHJpbmcoVEVYVCgiVGltZXMgTmV3IFJv
bWFuIikpOworICAgIHN0YXRpYyBfYnN0cl90IHN0YW5kYXJkRmFtaWx5KFRFWFQoIlRpbWVzIE5l
dyBSb21hbiIpKTsKKyAgICBzdGF0aWMgX2JzdHJfdCBmaXhlZEZhbWlseShURVhUKCJDb3VyaWVy
IE5ldyIpKTsKKyAgICBzdGF0aWMgX2JzdHJfdCBzYW5zU2VyaWZGYW1pbHkoVEVYVCgiQXJpYWwi
KSk7CisgICAgc3RhdGljIF9ic3RyX3QgY3Vyc2l2ZUZhbWlseShURVhUKCJDb21pYyBTYW5zIE1T
IikpOyAvLyBOb3QgYWN0dWFsbHkgY3Vyc2l2ZSwgYnV0IGl0J3Mgd2hhdCBJRSBhbmQgRmlyZWZv
eCB1c2UuCisgICAgc3RhdGljIF9ic3RyX3QgZmFudGFzeUZhbWlseShURVhUKCJUaW1lcyBOZXcg
Um9tYW4iKSk7CisgICAgc3RhdGljIF9ic3RyX3QgcGljdG9ncmFwaEZhbWlseShURVhUKCJUaW1l
cyBOZXcgUm9tYW4iKSk7CiAjZW5kaWYKIAogICAgIHByZWZlcmVuY2VzLT5zZXRTdGFuZGFyZEZv
bnRGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwpAQCAtODMyLDkgKzgxNyw4IEBAIHN0YXRpYyB2b2lk
IHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWwKICAgICBpZiAocGVyc2lzdGVudFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24pIHsKICAgICAgICAgVmVjdG9yPHdjaGFyX3Q+IHVybENoYXJhY3RlcnMo
Q0ZTdHJpbmdHZXRMZW5ndGgocGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkp
KTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHBlcnNpc3RlbnRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0aChwZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKSkpLCAoVW5pQ2hhciAqKXVybENoYXJhY3Rl
cnMuZGF0YSgpKTsKLSAgICAgICAgQlNUUiB1cmwgPSBTeXNBbGxvY1N0cmluZ0xlbih1cmxDaGFy
YWN0ZXJzLmRhdGEoKSwgdXJsQ2hhcmFjdGVycy5zaXplKCkpOworICAgICAgICBfYnN0cl90IHVy
bCh1cmxDaGFyYWN0ZXJzLmRhdGEoKSk7CiAgICAgICAgIHByZWZlcmVuY2VzLT5zZXRVc2VyU3R5
bGVTaGVldExvY2F0aW9uKHVybCk7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcodXJsKTsKICAgICAg
ICAgcHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChUUlVFKTsKICAgICB9IGVs
c2UKICAgICAgICAgcHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChGQUxTRSk7
CkBAIC05MDEsMTEgKzg4NSw5IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVu
dFN0YXQKICAgICB3ZWJWaWV3UHJpdmF0ZS0+Y2xlYXJNYWluRnJhbWVOYW1lKCk7CiAgICAgd2Vi
Vmlld1ByaXZhdGUtPnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygpOwogCi0gICAgQlNUUiBn
cm91cE5hbWU7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJWaWV3LT5ncm91cE5hbWUoJmdyb3VwTmFt
ZSkpKSB7CisgICAgX2JzdHJfdCBncm91cE5hbWU7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJWaWV3
LT5ncm91cE5hbWUoJmdyb3VwTmFtZS5HZXRCU1RSKCkpKSkKICAgICAgICAgd2ViVmlld1ByaXZh
dGUtPnJlbW92ZUFsbFVzZXJDb250ZW50RnJvbUdyb3VwKGdyb3VwTmFtZSk7Ci0gICAgICAgIFN5
c0ZyZWVTdHJpbmcoZ3JvdXBOYW1lKTsKLSAgICB9CiAKICAgICBzaGFyZWRVSURlbGVnYXRlLT5y
ZXNldFVuZG9NYW5hZ2VyKCk7CiAKQEAgLTEwMDQsMTQgKzk4NiwxNCBAQCBzdGF0aWMgdm9pZCBy
ZW1vdmVGb250RmFsbGJhY2tJZlByZXNlbnQoCiAKIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiBpbnB1dExpbmUpCiB7CisgICAgQVNTRVJUKCFpbnB1dExpbmUuZW1wdHkoKSk7CisK
ICAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKICAg
ICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOwogICAgIGR1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8fCBkdW1wUGl4
ZWxzRm9yQWxsVGVzdHM7CiAKLSAgICBzdGF0aWMgQlNUUiBtZXRob2RCU3RyID0gU3lzQWxsb2NT
dHJpbmcoVEVYVCgiR0VUIikpOworICAgIHN0YXRpYyBfYnN0cl90IG1ldGhvZEJTdHIoVEVYVCgi
R0VUIikpOwogCi0gICAgQlNUUiB1cmxCU3RyOwotIAogICAgIENGU3RyaW5nUmVmIHN0ciA9IENG
U3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLmNfc3RyKCksIGtDRlN0cmluZ0Vu
Y29kaW5nV2luZG93c0xhdGluMSk7CiAgICAgQ0ZVUkxSZWYgdXJsID0gQ0ZVUkxDcmVhdGVXaXRo
U3RyaW5nKDAsIHN0ciwgMCk7CiAKQEAgLTEwMjUsMTcgKzEwMDcsMjAgQEAgc3RhdGljIHZvaWQg
cnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogICAgIHN0ciA9IENGVVJMR2V0U3RyaW5nKHVy
bCk7CiAKICAgICBDRkluZGV4IGxlbmd0aCA9IENGU3RyaW5nR2V0TGVuZ3RoKHN0cik7Ci0gICAg
VW5pQ2hhciogYnVmZmVyID0gbmV3IFVuaUNoYXJbbGVuZ3RoXTsKKyAgICBVbmlDaGFyKiBidWZm
ZXIgPSBuZXcgVW5pQ2hhcltsZW5ndGggKyAxXTsKIAogICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVy
cyhzdHIsIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCksIGJ1ZmZlcik7Ci0gICAgdXJsQlN0ciA9IFN5
c0FsbG9jU3RyaW5nTGVuKChPTEVDSEFSKilidWZmZXIsIGxlbmd0aCk7CisgICAgYnVmZmVyW2xl
bmd0aF0gPSAwOworCisgICAgX2JzdHJfdCB1cmxCU3RyKChPTEVDSEFSKilidWZmZXIpOworICAg
IEFTU0VSVCh1cmxCU3RyLmxlbmd0aCgpID09IGxlbmd0aCk7CiAgICAgZGVsZXRlW10gYnVmZmVy
OwogCiAgICAgQ0ZSZWxlYXNlKHVybCk7CiAKICAgICA6OmdUZXN0UnVubmVyID0gVGVzdFJ1bm5l
cjo6Y3JlYXRlKHBhdGhPclVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7Ci0gICAgZG9u
ZSA9IGZhbHNlOwogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CisgICAgZG9uZSA9IGZhbHNlOwog
CiAgICAgYWRkRm9udEZhbGxiYWNrSWZQcmVzZW50KGZhbGxiYWNrUGF0aCk7CiAKQEAgLTEwNjIs
MTIgKzEwNDcsMTIgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAog
CiAgICAgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCk7CiAKLSAg
ICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHBhdGhPclVSTC5jX3N0cigpKSkKKyAg
ICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHBhdGhPclVSTC5jX3N0cigpKSkgewog
ICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLQot
ICAgIGlmIChzaG91bGREdW1wQXNUZXh0KHBhdGhPclVSTC5jX3N0cigpKSkgewotICAgICAgICBn
VGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKLSAgICAgICAgZ1Rlc3RSdW5uZXItPnNl
dEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKKyAgICAgICAgaWYgKHNob3VsZER1bXBBc1Rl
eHQocGF0aE9yVVJMLmNfc3RyKCkpKSB7CisgICAgICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVt
cEFzVGV4dCh0cnVlKTsKKyAgICAgICAgICAgIGdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVs
UmVzdWx0cyhmYWxzZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcmV2VGVzdEJGSXRlbSA9
IDA7CkBAIC0xMTM1LDcgKzExMjAsNiBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmlu
ZyYgaW5wdXRMCiAKIGV4aXQ6CiAgICAgcmVtb3ZlRm9udEZhbGxiYWNrSWZQcmVzZW50KGZhbGxi
YWNrUGF0aCk7Ci0gICAgU3lzRnJlZVN0cmluZyh1cmxCU3RyKTsKICAgICA6OmdUZXN0UnVubmVy
LmNsZWFyKCk7CiAKICAgICByZXR1cm47CkBAIC0xMTczLDEwICsxMTU3LDggQEAgSVdlYlZpZXcq
IGNyZWF0ZVdlYlZpZXdBbmRPZmZzY3JlZW5XaW5kbwogCiAgICAgUkVDVCBjbGllbnRSZWN0Owog
ICAgIGNsaWVudFJlY3QuYm90dG9tID0gY2xpZW50UmVjdC5sZWZ0ID0gY2xpZW50UmVjdC50b3Ag
PSBjbGllbnRSZWN0LnJpZ2h0ID0gMDsKLSAgICBCU1RSIGdyb3VwTmFtZSA9IFN5c0FsbG9jU3Ry
aW5nKEwib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIpOwotICAgIGJvb2wgZmFpbGVkID0gRkFJ
TEVEKHdlYlZpZXctPmluaXRXaXRoRnJhbWUoY2xpZW50UmVjdCwgMCwgZ3JvdXBOYW1lKSk7Ci0g
ICAgU3lzRnJlZVN0cmluZyhncm91cE5hbWUpOwotICAgIGlmIChmYWlsZWQpCisgICAgX2JzdHJf
dCBncm91cE5hbWUoTCJvcmcud2Via2l0LkR1bXBSZW5kZXJUcmVlIik7CisgICAgaWYgKEZBSUxF
RCh3ZWJWaWV3LT5pbml0V2l0aEZyYW1lKGNsaWVudFJlY3QsIDAsIGdyb3VwTmFtZSkpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2YXRl
OwpAQCAtMTE4NiwxMiArMTE2OCwxMCBAQCBJV2ViVmlldyogY3JlYXRlV2ViVmlld0FuZE9mZnNj
cmVlbldpbmRvCiAgICAgdmlld1ByaXZhdGUtPnNldFNob3VsZEFwcGx5TWFjRm9udEFzY2VudEhh
Y2soVFJVRSk7CiAgICAgdmlld1ByaXZhdGUtPnNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQ
YXRoKGZvcmNlQ29tcGxleFRleHQpOwogCi0gICAgQlNUUiBwbHVnaW5QYXRoID0gU3lzQWxsb2NT
dHJpbmdMZW4oMCwgZXhlUGF0aCgpLmxlbmd0aCgpICsgX3Rjc2xlbihUZXN0UGx1Z2luRGlyKSk7
Ci0gICAgX3Rjc2NweShwbHVnaW5QYXRoLCBleGVQYXRoKCkuY19zdHIoKSk7Ci0gICAgX3Rjc2Nh
dChwbHVnaW5QYXRoLCBUZXN0UGx1Z2luRGlyKTsKLSAgICBmYWlsZWQgPSBGQUlMRUQodmlld1By
aXZhdGUtPmFkZEFkZGl0aW9uYWxQbHVnaW5EaXJlY3RvcnkocGx1Z2luUGF0aCkpOwotICAgIFN5
c0ZyZWVTdHJpbmcocGx1Z2luUGF0aCk7Ci0gICAgaWYgKGZhaWxlZCkKKyAgICBfYnN0cl90IHBs
dWdpblBhdGgoU3lzQWxsb2NTdHJpbmdMZW4oMCwgZXhlUGF0aCgpLmxlbmd0aCgpICsgX3Rjc2xl
bihUZXN0UGx1Z2luRGlyKSksIGZhbHNlKTsKKyAgICBfdGNzY3B5KHN0YXRpY19jYXN0PFRDSEFS
Kj4ocGx1Z2luUGF0aCksIGV4ZVBhdGgoKS5jX3N0cigpKTsKKyAgICBfdGNzY2F0KHN0YXRpY19j
YXN0PFRDSEFSKj4ocGx1Z2luUGF0aCksIFRlc3RQbHVnaW5EaXIpOworICAgIGlmIChGQUlMRUQo
dmlld1ByaXZhdGUtPmFkZEFkZGl0aW9uYWxQbHVnaW5EaXJlY3RvcnkocGx1Z2luUGF0aCkpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIEhXTkQgdmlld1dpbmRvdzsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9FZGl0aW5nRGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9FZGl0aW5nRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxNjcwMjIp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVnYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RWRpdGluZ0RlbGVnYXRlLmgiCiAKKyNpbmNsdWRlIDxjb211dGlsLmg+CiAjaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9DT01QdHIuaD4KQEAgLTQ2LDcgKzQ3LDcgQEAgRWRpdGluZ0RlbGVnYXRlOjpFZGl0aW5nRGVs
ZWdhdGUoKQogfQogCiAvLyBJVW5rbm93bgotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0
aW5nRGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0
KQorSFJFU1VMVCBFZGl0aW5nRGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KQogewogICAgICpwcHZPYmplY3QgPSAwOwogICAgIGlmIChJc0VxdWFs
R1VJRChyaWlkLCBJSURfSVVua25vd24pKQpAQCAtNjAsMTIgKzYxLDEyIEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICByZXR1cm4gU19PSzsKIH0KIAotVUxP
TkcgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjpBZGRSZWYodm9pZCkKK1VMT05H
IEVkaXRpbmdEZWxlZ2F0ZTo6QWRkUmVmKHZvaWQpCiB7CiAgICAgcmV0dXJuICsrbV9yZWZDb3Vu
dDsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjpSZWxlYXNl
KHZvaWQpCitVTE9ORyBFZGl0aW5nRGVsZWdhdGU6OlJlbGVhc2Uodm9pZCkKIHsKICAgICBVTE9O
RyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CiAgICAgaWYgKCFuZXdSZWYpCkBAIC04MCwxMSArODEs
MTAgQEAgc3RhdGljIHdzdHJpbmcgZHVtcFBhdGgoSURPTU5vZGUqIG5vZGUpCiAKICAgICB3c3Ry
aW5nIHJlc3VsdDsKIAotICAgIEJTVFIgbmFtZTsKLSAgICBpZiAoRkFJTEVEKG5vZGUtPm5vZGVO
YW1lKCZuYW1lKSkpCisgICAgX2JzdHJfdCBuYW1lOworICAgIGlmIChGQUlMRUQobm9kZS0+bm9k
ZU5hbWUoJm5hbWUuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmVz
dWx0LmFzc2lnbihuYW1lLCBTeXNTdHJpbmdMZW4obmFtZSkpOwotICAgIFN5c0ZyZWVTdHJpbmco
bmFtZSk7CisgICAgcmVzdWx0LmFzc2lnbihzdGF0aWNfY2FzdDx3Y2hhcl90Kj4obmFtZSksIG5h
bWUubGVuZ3RoKCkpOwogCiAgICAgQ09NUHRyPElET01Ob2RlPiBwYXJlbnQ7CiAgICAgaWYgKFNV
Q0NFRURFRChub2RlLT5wYXJlbnROb2RlKCZwYXJlbnQpKSkKQEAgLTExOCwxMCArMTE4LDcgQEAg
c3RhdGljIHdzdHJpbmcgZHVtcChJRE9NUmFuZ2UqIHJhbmdlKQogICAgIHJldHVybiBidWZmZXI7
CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGRC
ZWdpbkVkaXRpbmdJbkRPTVJhbmdlKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3
LAotICAgIC8qIFtpbl0gKi8gSURPTVJhbmdlKiByYW5nZSwKLSAgICAvKiBbcmV0dmFsXVtvdXRd
ICovIEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGRCZWdpbkVk
aXRpbmdJbkRPTVJhbmdlKElXZWJWaWV3KiAvKndlYlZpZXcqLywgSURPTVJhbmdlKiByYW5nZSwg
Qk9PTCogcmVzdWx0KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMTM1LDEwICsxMzIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEVkaXRpbmdEZWxlZ2F0CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZSggCi0g
ICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElET01SYW5n
ZSogcmFuZ2UsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxU
IEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2UoSVdlYlZpZXcqIC8q
d2ViVmlldyovLCBJRE9NUmFuZ2UqIHJhbmdlLCBCT09MKiByZXN1bHQpCiB7CiAgICAgaWYgKCFy
ZXN1bHQpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNTIsMTEgKzE0Niw3
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICByZXR1cm4g
U19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdGU6OnNo
b3VsZEluc2VydE5vZGUoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCi0gICAg
LyogW2luXSAqLyBJRE9NTm9kZSogbm9kZSwKLSAgICAvKiBbaW5dICovIElET01SYW5nZSogcmFu
Z2UsCi0gICAgLyogW2luXSAqLyBXZWJWaWV3SW5zZXJ0QWN0aW9uIGFjdGlvbikKK0hSRVNVTFQg
RWRpdGluZ0RlbGVnYXRlOjpzaG91bGRJbnNlcnROb2RlKElXZWJWaWV3KiAvKndlYlZpZXcqLywg
SURPTU5vZGUqIG5vZGUsIElET01SYW5nZSogcmFuZ2UsIFdlYlZpZXdJbnNlcnRBY3Rpb24gYWN0
aW9uKQogewogICAgIHN0YXRpYyBMUENUU1RSIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewogICAg
ICAgICBURVhUKCJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQiKSwKQEAgLTE3MCwxMiArMTYwLDcg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdAogICAgIHJldHVybiBT
X09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6c2hv
dWxkSW5zZXJ0VGV4dCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAv
KiBbaW5dICovIEJTVFIgdGV4dCwKLSAgICAvKiBbaW5dICovIElET01SYW5nZSogcmFuZ2UsCi0g
ICAgLyogW2luXSAqLyBXZWJWaWV3SW5zZXJ0QWN0aW9uIGFjdGlvbiwKLSAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGRJ
bnNlcnRUZXh0KElXZWJWaWV3KiAvKndlYlZpZXcqLywgQlNUUiB0ZXh0LCBJRE9NUmFuZ2UqIHJh
bmdlLCBXZWJWaWV3SW5zZXJ0QWN0aW9uIGFjdGlvbiwgQk9PTCogcmVzdWx0KQogewogICAgIGlm
ICghcmVzdWx0KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk1LDEwICsx
ODAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRl
OjpzaG91bGREZWxldGVET01SYW5nZSggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmll
dywKLSAgICAvKiBbaW5dICovIElET01SYW5nZSogcmFuZ2UsCi0gICAgLyogW3JldHZhbF1bb3V0
XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6c2hvdWxkRGVsZXRl
RE9NUmFuZ2UoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBJRE9NUmFuZ2UqIHJhbmdlLCBCT09MKiBy
ZXN1bHQpCiB7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0yMTIsMTMgKzE5NCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGlu
Z0RlbGVnYXQKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBFZGl0aW5nRGVsZWdhdGU6OnNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UoIAotICAgIC8q
IFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCi0gICAgLyogW2luXSAqLyBJRE9NUmFuZ2UqIGN1
cnJlbnRSYW5nZSwKLSAgICAvKiBbaW5dICovIElET01SYW5nZSogcHJvcG9zZWRSYW5nZSwKLSAg
ICAvKiBbaW5dICovIFdlYlNlbGVjdGlvbkFmZmluaXR5IHNlbGVjdGlvbkFmZmluaXR5LAotICAg
IC8qIFtpbl0gKi8gQk9PTCBzdGlsbFNlbGVjdGluZywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICov
IEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlKElXZWJWaWV3KiAvKndlYlZpZXcqLywgSURPTVJhbmdlKiBjdXJyZW50UmFu
Z2UsIElET01SYW5nZSogcHJvcG9zZWRSYW5nZSwKKyAgICBXZWJTZWxlY3Rpb25BZmZpbml0eSBz
ZWxlY3Rpb25BZmZpbml0eSwgQk9PTCBzdGlsbFNlbGVjdGluZywgQk9PTCogcmVzdWx0KQogewog
ICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjQx
LDExICsyMTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0Rl
bGVnYXRlOjpzaG91bGRBcHBseVN0eWxlKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJW
aWV3LAotICAgIC8qIFtpbl0gKi8gSURPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLAotICAg
IC8qIFtpbl0gKi8gSURPTVJhbmdlKiByYW5nZSwKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJP
T0wqIHJlc3VsdCkKK0hSRVNVTFQgRWRpdGluZ0RlbGVnYXRlOjpzaG91bGRBcHBseVN0eWxlKElX
ZWJWaWV3KiAvKndlYlZpZXcqLywgSURPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJRE9N
UmFuZ2UqIHJhbmdlLCBCT09MKiByZXN1bHQpCiB7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNTksMTEgKzIzMiw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdGU6OnNob3VsZENoYW5nZVR5cGlu
Z1N0eWxlKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAotICAgIC8qIFtpbl0g
Ki8gSURPTUNTU1N0eWxlRGVjbGFyYXRpb24qIGN1cnJlbnRTdHlsZSwKLSAgICAvKiBbaW5dICov
IElET01DU1NTdHlsZURlY2xhcmF0aW9uKiBwcm9wb3NlZFN0eWxlLAotICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gQk9PTCogcmVzdWx0KQorSFJFU1VMVCBFZGl0aW5nRGVsZWdhdGU6OnNob3VsZENo
YW5nZVR5cGluZ1N0eWxlKElXZWJWaWV3KiAvKndlYlZpZXcqLywgSURPTUNTU1N0eWxlRGVjbGFy
YXRpb24qIGN1cnJlbnRTdHlsZSwgSURPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHByb3Bvc2VkU3R5
bGUsIEJPT0wqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTI3NywxMCArMjQ2LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBFZGl0aW5nRGVsZWdhdAogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6ZG9QbGF0Zm9ybUNvbW1hbmQoIAotICAgIC8q
IFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgLyogW2luXSAqLyBCU1RSIGNvbW1hbmQs
Ci0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MICpyZXN1bHQpCitIUkVTVUxUIEVkaXRpbmdE
ZWxlZ2F0ZTo6ZG9QbGF0Zm9ybUNvbW1hbmQoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBCU1RSIGNv
bW1hbmQsIEJPT0wqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5NCw2MiArMjYwLDUyIEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdGU6OndlYlZpZXdEaWRCZWdpbkVkaXRpbmco
IAotICAgIC8qIFtpbl0gKi8gSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQorSFJFU1VM
VCBFZGl0aW5nRGVsZWdhdGU6OndlYlZpZXdEaWRCZWdpbkVkaXRpbmcoSVdlYk5vdGlmaWNhdGlv
biogbm90aWZpY2F0aW9uKQogewogICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0Nh
bGxiYWNrcygpICYmICFkb25lKSB7Ci0gICAgICAgIEJTVFIgbmFtZTsKLSAgICAgICAgbm90aWZp
Y2F0aW9uLT5uYW1lKCZuYW1lKTsKLSAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzolc1xuIiksIG5hbWUgPyBuYW1lIDogVEVYVCgi
IikpOwotICAgICAgICBTeXNGcmVlU3RyaW5nKG5hbWUpOworICAgICAgICBfYnN0cl90IG5hbWU7
CisgICAgICAgIG5vdGlmaWNhdGlvbi0+bmFtZSgmbmFtZS5HZXRCU1RSKCkpOworICAgICAgICBf
dHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiVz
XG4iKSwgc3RhdGljX2Nhc3Q8VENIQVIqPihuYW1lKSk7CiAgICAgfQogICAgIHJldHVybiBTX09L
OwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmll
d0RpZENoYW5nZSggCi0gICAgLyogW2luXSAqLyBJV2ViTm90aWZpY2F0aW9uICpub3RpZmljYXRp
b24pCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZENoYW5nZShJV2ViTm90aWZp
Y2F0aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0
aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKLSAgICAgICAgQlNUUiBuYW1lOwotICAgICAgICBu
b3RpZmljYXRpb24tPm5hbWUoJm5hbWUpOwotICAgICAgICBfdHByaW50ZihURVhUKCJFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiVzXG4iKSwgbmFtZSA/IG5hbWUgOiBU
RVhUKCIiKSk7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcobmFtZSk7CisgICAgICAgIF9ic3RyX3Qg
bmFtZTsKKyAgICAgICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lLkdldEJTVFIoKSk7CisgICAg
ICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRp
bmc6JXNcbiIpLCBzdGF0aWNfY2FzdDxUQ0hBUio+KG5hbWUpKTsKICAgICB9CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjp3
ZWJWaWV3RGlkRW5kRWRpdGluZyggCi0gICAgLyogW2luXSAqLyBJV2ViTm90aWZpY2F0aW9uICpu
b3RpZmljYXRpb24pCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZEVuZEVkaXRp
bmcoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogewogICAgIGlmICg6OmdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKSB7Ci0gICAgICAgIEJTVFIgbmFt
ZTsKLSAgICAgICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lKTsKLSAgICAgICAgX3RwcmludGYo
VEVYVCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6JXNcbiIpLCBuYW1l
ID8gbmFtZSA6IFRFWFQoIiIpKTsKLSAgICAgICAgU3lzRnJlZVN0cmluZyhuYW1lKTsKKyAgICAg
ICAgX2JzdHJfdCBuYW1lOworICAgICAgICBub3RpZmljYXRpb24tPm5hbWUoJm5hbWUuR2V0QlNU
UigpKTsKKyAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZEVuZEVkaXRpbmc6JXNcbiIpLCBzdGF0aWNfY2FzdDxUQ0hBUio+KG5hbWUpKTsKICAgICB9CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0Rl
bGVnYXRlOjp3ZWJWaWV3RGlkQ2hhbmdlVHlwaW5nU3R5bGUoIAotICAgIC8qIFtpbl0gKi8gSVdl
Yk5vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKQorSFJFU1VMVCBFZGl0aW5nRGVsZWdhdGU6Ondl
YlZpZXdEaWRDaGFuZ2VUeXBpbmdTdHlsZShJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24p
CiB7CiAgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRv
bmUpIHsKLSAgICAgICAgQlNUUiBuYW1lOwotICAgICAgICBub3RpZmljYXRpb24tPm5hbWUoJm5h
bWUpOwotICAgICAgICBfdHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlVHlwaW5nU3R5bGU6JXNcbiIpLCBuYW1lID8gbmFtZSA6IFRFWFQoIiIpKTsKLSAgICAg
ICAgU3lzRnJlZVN0cmluZyhuYW1lKTsKKyAgICAgICAgX2JzdHJfdCBuYW1lOworICAgICAgICBu
b3RpZmljYXRpb24tPm5hbWUoJm5hbWUuR2V0QlNUUigpKTsKKyAgICAgICAgX3RwcmludGYoVEVY
VCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVR5cGluZ1N0eWxlOiVzXG4iKSwg
c3RhdGljX2Nhc3Q8VENIQVIqPihuYW1lKSk7CiAgICAgfQogICAgIHJldHVybiBTX09LOwogfQog
Ci1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZENo
YW5nZVNlbGVjdGlvbiggCi0gICAgLyogW2luXSAqLyBJV2ViTm90aWZpY2F0aW9uICpub3RpZmlj
YXRpb24pCitIUkVTVUxUIEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bihJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7CiAgICAgaWYgKDo6Z1Rlc3RSdW5u
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKLSAgICAgICAgQlNUUiBuYW1l
OwotICAgICAgICBub3RpZmljYXRpb24tPm5hbWUoJm5hbWUpOwotICAgICAgICBfdHByaW50ZihU
RVhUKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiVzXG4iKSwg
bmFtZSA/IG5hbWUgOiBURVhUKCIiKSk7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcobmFtZSk7Cisg
ICAgICAgIF9ic3RyX3QgbmFtZTsKKyAgICAgICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lLkdl
dEJTVFIoKSk7CisgICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb246JXNcbiIpLCBzdGF0aWNfY2FzdDxUQ0hBUio+KG5hbWUpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNzAsNyArMzI2LDcgQEAgc3RhdGljIGlu
dCB3b3JkTGVuZ3RoKGNvbnN0IFRDSEFSKiB0ZXh0KQogICAgIHJldHVybiBjdXJzb3IgLSB0ZXh0
OwogfTsKIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdGU6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZygKK0hSRVNVTFQgRWRpdGluZ0RlbGVnYXRlOjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoCiAgICAgICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB2aWV3LAogICAgICAg
ICAgICAgLyogW2luXSAqLyBMUENUU1RSIHRleHQsCiAgICAgICAgICAgICAvKiBbaW5dICovIGlu
dCBsZW5ndGgsCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWRE
ZWxlZ2F0ZS5jcHAJKHJldmlzaW9uIDE2NzAyMikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9h
ZERlbGVnYXRlLmgiCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgPGNvbXV0aWwuaD4KICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUg
IkV2ZW50U2VuZGVyLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCkBAIC00NSw3ICs0Niw3
IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgc3Rk
OjpzdHJpbmc7CkBAIC02MiwyMiArNjMsMjEgQEAgc3RyaW5nIGRlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KAogICAgIGlmIChGQUlMRUQod2ViVmlldy0+bWFpbkZyYW1lKCZtYWluRnJh
bWUpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZygpOwogCi0gICAgQlNUUiBmcmFtZU5hbWVCU1RS
OwotICAgIGlmIChGQUlMRUQod2ViRnJhbWUtPm5hbWUoJmZyYW1lTmFtZUJTVFIpKSB8fCB0b1VU
RjgoZnJhbWVOYW1lQlNUUikuZW1wdHkoKSkKKyAgICBfYnN0cl90IGZyYW1lTmFtZUJTVFI7Cisg
ICAgaWYgKEZBSUxFRCh3ZWJGcmFtZS0+bmFtZSgmZnJhbWVOYW1lQlNUUi5HZXRCU1RSKCkpKSB8
fCAhZnJhbWVOYW1lQlNUUi5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuICh3ZWJGcmFtZSA9PSBt
YWluRnJhbWUpID8gIm1haW4gZnJhbWUiIDogc3RyaW5nKCk7CiAKICAgICBzdHJpbmcgZnJhbWVO
YW1lID0gKHdlYkZyYW1lID09IG1haW5GcmFtZSkgPyAibWFpbiBmcmFtZSIgOiAiZnJhbWUiOwog
ICAgIGZyYW1lTmFtZSArPSAiIFwiIiArIHRvVVRGOChmcmFtZU5hbWVCU1RSKSArICJcIiI7IAog
Ci0gICAgU3lzRnJlZVN0cmluZyhmcmFtZU5hbWVCU1RSKTsgCiAgICAgcmV0dXJuIGZyYW1lTmFt
ZTsKIH0KIAogRnJhbWVMb2FkRGVsZWdhdGU6OkZyYW1lTG9hZERlbGVnYXRlKCkKICAgICA6IG1f
cmVmQ291bnQoMSkKLSAgICAsIG1fZ2NDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBHQ0NvbnRyb2xs
ZXIpKQotICAgICwgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcihhZG9wdFB0cihuZXcgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpKQotICAgICwgbV90ZXh0SW5wdXRDb250cm9sbGVyKGFkb3B0UHRy
KG5ldyBUZXh0SW5wdXRDb250cm9sbGVyKSkKKyAgICAsIG1fZ2NDb250cm9sbGVyKHN0ZDo6bWFr
ZV91bmlxdWU8R0NDb250cm9sbGVyPigpKQorICAgICwgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cihzdGQ6Om1ha2VfdW5pcXVlPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPigpKQorICAgICwgbV90
ZXh0SW5wdXRDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8VGV4dElucHV0Q29udHJvbGxlcj4o
KSkKIHsKIH0KIApAQCAtODUsNyArODUsNyBAQCBGcmFtZUxvYWREZWxlZ2F0ZTo6fkZyYW1lTG9h
ZERlbGVnYXRlKCkKIHsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWRE
ZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCitI
UkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9p
ZCoqIHBwdk9iamVjdCkKIHsKICAgICAqcHB2T2JqZWN0ID0gMDsKICAgICBpZiAoSXNFcXVhbEdV
SUQocmlpZCwgSUlEX0lVbmtub3duKSkKQEAgLTEwMywxMiArMTAzLDEyIEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1cm4gU19PSzsKIH0KIAotVUxP
TkcgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OkFkZFJlZih2b2lkKQorVUxP
TkcgRnJhbWVMb2FkRGVsZWdhdGU6OkFkZFJlZih2b2lkKQogewogICAgIHJldHVybiArK21fcmVm
Q291bnQ7CiB9CiAKLVVMT05HIFNURE1FVEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRlOjpS
ZWxlYXNlKHZvaWQpCitVTE9ORyBGcmFtZUxvYWREZWxlZ2F0ZTo6UmVsZWFzZSh2b2lkKQogewog
ICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3VudDsKICAgICBpZiAoIW5ld1JlZikKQEAgLTEx
OCw5ICsxMTgsNyBAQCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0CiB9
CiAKIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2Vi
VmlldywKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSogZnJhbWUpIAorSFJFU1VMVCBGcmFtZUxv
YWREZWxlZ2F0ZTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShJV2ViVmlldyogLyp3
ZWJWaWV3Ki8sIElXZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVz
dFJlc3VsdChmcmFtZSkuY19zdHIoKSk7CkBAIC0xMzMsOSArMTMxLDcgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogICAgIHJldHVybiBTX09LOyAKIH0KIAotSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoIAotICAgIC8qIFtpbl0gKi8gSVdl
YlZpZXcgKndlYlZpZXcsCi0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQorSFJFU1VM
VCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBJV2ViRnJhbWUqIGZyYW1lKQog
eyAKICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTG9hZEZvckZyYW1lXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChm
cmFtZSkuY19zdHIoKSk7CkBAIC0xNDMsMTAgKzEzOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdp
dGhFcnJvciggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBbaW5d
ICovIElXZWJFcnJvciAqZXJyb3IsCi0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQor
SFJFU1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJv
cihJV2ViVmlldyogLyp3ZWJWaWV3Ki8sIElXZWJFcnJvciogZXJyb3IsIElXZWJGcmFtZSogZnJh
bWUpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVy
cm9yXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSkuY19zdHIoKSk7
CkBAIC0xNTUsOSArMTQ4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWRE
ZWxlZwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZy
YW1lTG9hZERlbGVnYXRlOjpkaWRDb21taXRMb2FkRm9yRnJhbWUoIAotICAgIC8qIFtpbl0gKi8g
SVdlYlZpZXcgKndlYlZpZXcsCi0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQorSFJF
U1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKElXZWJWaWV3KiB3
ZWJWaWV3LCBJV2ViRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkQ29t
bWl0TG9hZEZvckZyYW1lXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFt
ZSkuY19zdHIoKSk7CkBAIC0xNzEsMTAgKzE2Miw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZVRpdGxlKCAKLSAgICAvKiBb
aW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gQlNUUiB0aXRsZSwKLSAg
ICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRl
OjpkaWRSZWNlaXZlVGl0bGUoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBCU1RSIHRpdGxlLCBJV2Vi
RnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVRpdGxlOiAl
U1xuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpLmNfc3RyKCksIHRp
dGxlKTsKQEAgLTE4NCw3ICsxNzIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZyYW1l
TG9hZERlbGVnCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZENoYW5nZUljb25zKAorSFJFU1VMVCBGcmFtZUxvYWRE
ZWxlZ2F0ZTo6ZGlkQ2hhbmdlSWNvbnMoCiAgICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmll
dywKICAgICAvKiBbaW5dICovIElXZWJGcmFtZSogZnJhbWUpCiB7CkBAIC0yMTMsNyArMjAxLDcg
QEAgdm9pZCBGcmFtZUxvYWREZWxlZ2F0ZTo6cmVzZXRUb0NvbnNpc3RlbgogdHlwZWRlZiBWZWN0
b3I8Q09NUHRyPEZyYW1lTG9hZERlbGVnYXRlPiA+IERlbGVnYXRlVmVjdG9yOwogc3RhdGljIERl
bGVnYXRlVmVjdG9yJiBkZWxlZ2F0ZXNXaXRoRGVsYXllZFdvcmsoKQogewotICAgIERFUFJFQ0FU
RURfREVGSU5FX1NUQVRJQ19MT0NBTChEZWxlZ2F0ZVZlY3RvciwgZGVsZWdhdGVzLCAoKSk7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlbGVnYXRlVmVjdG9yPiBkZWxlZ2F0ZXM7CiAgICAg
cmV0dXJuIGRlbGVnYXRlczsKIH0KIApAQCAtMjUzLDkgKzI0MSw3IEBAIHZvaWQgRnJhbWVMb2Fk
RGVsZWdhdGU6OmxvY2F0aW9uQ2hhbmdlRG8KICAgICBkdW1wKCk7CiB9CiAKLUhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSgg
Ci0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElXZWJG
cmFtZSogZnJhbWUpCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGaW5pc2hMb2FkRm9y
RnJhbWUoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBJV2ViRnJhbWUqIGZyYW1lKQogewogICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAg
ICBwcmludGYoIiVzIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lXG4iLCBkZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChmcmFtZSkuY19zdHIoKSk7CkBAIC0yNjQsMTAgKzI1MCw3IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1cm4gU19PSzsK
IH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRmFp
bExvYWRXaXRoRXJyb3IoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCi0gICAg
LyogW2luXSAqLyBJV2ViRXJyb3IqIGVycm9yLAotICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBm
cmFtZSkKK0hSRVNVTFQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZhaWxMb2FkV2l0aEVycm9yKElX
ZWJWaWV3KiAvKndlYlZpZXcqLywgSVdlYkVycm9yKiBlcnJvciwgSVdlYkZyYW1lKiBmcmFtZSkK
IHsKICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZhaWxMb2FkV2l0aEVycm9yXG4iLCBkZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSkuY19zdHIoKSk7CkBAIC0yNzYsMTIgKzI1
OSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1
cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0
ZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMKCAKLSAgICAvKiBbaW5dICovIElXZWJW
aWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gQlNUUiB1cmwsICAKLSAgICAvKiBbaW5dICov
IGRvdWJsZSBkZWxheVNlY29uZHMsCi0gICAgLyogW2luXSAqLyBEQVRFIGZpcmVEYXRlLAotICAg
IC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkKK0hSRVNVTFQgRnJhbWVMb2FkRGVsZWdhdGU6
OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTChJV2ViVmlldyogLyp3ZWJWaWV3Ki8sIEJT
VFIgdXJsLCBkb3VibGUgLypkZWxheVNlY29uZHMqLywgREFURSAvKmZpcmVEYXRlKi8sIElXZWJG
cmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSB3aWxsUGVyZm9ybUNsaWVudFJl
ZGlyZWN0VG9VUkw6ICVTIFxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJh
bWUpLmNfc3RyKCksCkBAIC0yOTAsOSArMjY4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBGcmFtZUxvYWREZWxlZwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZy
YW1lKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8g
SVdlYkZyYW1lICpmcmFtZSkKK0hSRVNVTFQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZENhbmNlbENs
aWVudFJlZGlyZWN0Rm9yRnJhbWUoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBJV2ViRnJhbWUqIGZy
YW1lKQogewogICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JG
cmFtZVxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpLmNfc3RyKCkp
OwpAQCAtMzAxLDkgKzI3Nyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2Fk
RGVsZWcKIH0KIAogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRl
Ojp3aWxsQ2xvc2VGcmFtZSggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAg
ICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRl
Ojp3aWxsQ2xvc2VGcmFtZShJV2ViVmlldyogLyp3ZWJWaWV3Ki8sIElXZWJGcmFtZSogLypmcmFt
ZSovKQogewogICAgIHJldHVybiBFX05PVElNUEw7CiB9CkBAIC0zODAsOSArMzU0LDcgQEAgdm9p
ZCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ2xlYXJXaW5kb3dPYgogICAgIFdlYkNvcmVUZXN0U3Vw
cG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwogfQogCi1IUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZSggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAotICAgIC8qIFtpbl0gKi8g
SVdlYkZyYW1lICpmcmFtZSkKK0hSRVNVTFQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaERv
Y3VtZW50TG9hZEZvckZyYW1lKElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViRnJhbWUqIGZyYW1l
KQogewogICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNr
cygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVc
biIsCkBAIC00MDQsOSArMzc2LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxv
YWREZWxlZwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEZyYW1lTG9hZERlbGVnYXRlOjpkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZSggCi0gICAg
LyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAotICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpm
cmFtZSkKK0hSRVNVTFQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZEhhbmRsZU9ubG9hZEV2ZW50c0Zv
ckZyYW1lKElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViRnJhbWUqIGZyYW1lKQogewogICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAg
ICBwcmludGYoIiVzIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWVcbiIsCkBAIC00MTUs
MTUgKzM4NSwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnCiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2Fk
RGVsZWdhdGU6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEluRnJhbWUoIAotICAgIC8q
IFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRlciwKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJh
bWUpCitIUkVTVUxUIEZyYW1lTG9hZERlbGVnYXRlOjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRJbkZyYW1lKElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViRnJhbWUqIC8qZnJhbWUqLykK
IHsKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFt
ZUxvYWREZWxlZ2F0ZTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCggCi0gICAgLyogW2luXSAq
LyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkRGlzcGxh
eUluc2VjdXJlQ29udGVudChJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICBpZiAoIWRvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRm
KCJkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50XG4iKTsKQEAgLTQzMSwxMyArMzk4LDEwIEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICByZXR1cm4gU19PSzsK
IH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkUnVu
SW5zZWN1cmVDb250ZW50KCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3ICpzZW5kZXIsCi0gICAg
LyogW2luXSAqLyBJV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbikKK0hSRVNVTFQgRnJhbWVMb2Fk
RGVsZWdhdGU6OmRpZFJ1bkluc2VjdXJlQ29udGVudChJV2ViVmlldyogLypzZW5kZXIqLywgSVdl
YlNlY3VyaXR5T3JpZ2luKiAvKm9yaWdpbiovKQogewogICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoImRpZFJ1bklu
c2VjdXJlQ29udGVudFxuIik7CiAKICAgICByZXR1cm4gU19PSzsKIH0KLQpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmgJKHJldmlzaW9uIDE2NzAy
MikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjZGVmaW5lIEZyYW1lTG9hZERlbGVnYXRlX2gK
IAogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAK
IGNsYXNzIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOwogY2xhc3MgVGV4dElucHV0Q29udHJvbGxl
cjsKQEAgLTE2OSw5ICsxNjgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgbG9jYXRpb25DaGFuZ2VE
b25lKElXZWJFcnJvciosIElXZWJGcmFtZSopOwogCiAgICAgVUxPTkcgbV9yZWZDb3VudDsKLSAg
ICBPd25QdHI8R0NDb250cm9sbGVyPiBtX2djQ29udHJvbGxlcjsKLSAgICBPd25QdHI8QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7Ci0gICAgT3duUHRy
PFRleHRJbnB1dENvbnRyb2xsZXI+IG1fdGV4dElucHV0Q29udHJvbGxlcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8R0NDb250cm9sbGVyPiBtX2djQ29udHJvbGxlcjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFRleHRJbnB1dENvbnRyb2xsZXI+IG1fdGV4dElucHV0Q29udHJv
bGxlcjsKIH07CiAKICNlbmRpZiAvLyBGcmFtZUxvYWREZWxlZ2F0ZV9oCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vSGlzdG9yeURlbGVnYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vSGlzdG9yeURlbGVnYXRlLmNwcAkocmV2aXNpb24gMTY3MDIy
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0hpc3RvcnlEZWxlZ2F0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAj
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWVXaW4uaCIKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCisj
aW5jbHVkZSA8Y29tdXRpbC5oPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxXZWJLaXQv
V2ViS2l0Lmg+CiAKQEAgLTgzLDMzICs4NCwyNCBAQCBIUkVTVUxUIEhpc3RvcnlEZWxlZ2F0ZTo6
ZGlkTmF2aWdhdGVXaXRoCiAgICAgaWYgKCFnVGVzdFJ1bm5lci0+ZHVtcEhpc3RvcnlEZWxlZ2F0
ZUNhbGxiYWNrcygpKQogICAgICAgICByZXR1cm4gU19PSzsKIAotICAgIEJTVFIgdXJsQlNUUjsK
LSAgICBpZiAoRkFJTEVEKG5hdmlnYXRpb25EYXRhLT51cmwoJnVybEJTVFIpKSkKKyAgICBfYnN0
cl90IHVybEJTVFI7CisgICAgaWYgKEZBSUxFRChuYXZpZ2F0aW9uRGF0YS0+dXJsKCZ1cmxCU1RS
LkdldEJTVFIoKSkpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogICAgIHdzdHJpbmcgdXJsOwot
ICAgIGlmICh1cmxCU1RSKQorICAgIGlmICh1cmxCU1RSLmxlbmd0aCgpKQogICAgICAgICB1cmwg
PSB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQod3N0cmluZ0Zyb21CU1RSKHVybEJTVFIpKTsKLSAg
ICBTeXNGcmVlU3RyaW5nKHVybEJTVFIpOwogCi0gICAgQlNUUiB0aXRsZUJTVFI7Ci0gICAgaWYg
KEZBSUxFRChuYXZpZ2F0aW9uRGF0YS0+dGl0bGUoJnRpdGxlQlNUUikpKQorICAgIF9ic3RyX3Qg
dGl0bGVCU1RSOworICAgIGlmIChGQUlMRUQobmF2aWdhdGlvbkRhdGEtPnRpdGxlKCZ0aXRsZUJT
VFIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7Ci0gICAgd3N0cmluZyB0aXRs
ZTsKLSAgICBpZiAodGl0bGVCU1RSKQotICAgICAgICB0aXRsZSA9IHdzdHJpbmdGcm9tQlNUUih0
aXRsZUJTVFIpOwotICAgIFN5c0ZyZWVTdHJpbmcodGl0bGVCU1RSKTsKIAogICAgIENPTVB0cjxJ
V2ViVVJMUmVxdWVzdD4gcmVxdWVzdDsKICAgICBpZiAoRkFJTEVEKG5hdmlnYXRpb25EYXRhLT5v
cmlnaW5hbFJlcXVlc3QoJnJlcXVlc3QpKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAg
IEJTVFIgaHR0cE1ldGhvZEJTVFI7Ci0gICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5IVFRQTWV0aG9k
KCZodHRwTWV0aG9kQlNUUikpKQorICAgIF9ic3RyX3QgaHR0cE1ldGhvZEJTVFI7CisgICAgaWYg
KEZBSUxFRChyZXF1ZXN0LT5IVFRQTWV0aG9kKCZodHRwTWV0aG9kQlNUUi5HZXRCU1RSKCkpKSkK
ICAgICAgICAgcmV0dXJuIEVfRkFJTDsKLSAgICB3c3RyaW5nIGh0dHBNZXRob2Q7Ci0gICAgaWYg
KGh0dHBNZXRob2RCU1RSKQotICAgICAgICBodHRwTWV0aG9kID0gd3N0cmluZ0Zyb21CU1RSKGh0
dHBNZXRob2RCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKGh0dHBNZXRob2RCU1RSKTsKIAogICAg
IENPTVB0cjxJV2ViVVJMUmVzcG9uc2U+IHJlc3BvbnNlOwogICAgIGlmIChGQUlMRUQobmF2aWdh
dGlvbkRhdGEtPnJlc3BvbnNlKCZyZXNwb25zZSkpKQpAQCAtMTI3LDIxICsxMTksMjAgQEAgSFJF
U1VMVCBIaXN0b3J5RGVsZWdhdGU6OmRpZE5hdmlnYXRlV2l0aAogICAgIGlmIChGQUlMRUQobmF2
aWdhdGlvbkRhdGEtPmhhc1N1YnN0aXR1dGVEYXRhKCZoYXNTdWJzdGl0dXRlRGF0YSkpKQogICAg
ICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgQlNUUiBjbGllbnRSZWRpcmVjdFNvdXJjZUJTVFI7
Ci0gICAgaWYgKEZBSUxFRChuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50UmVkaXJlY3RTb3VyY2UoJmNs
aWVudFJlZGlyZWN0U291cmNlQlNUUikpKQorICAgIF9ic3RyX3QgY2xpZW50UmVkaXJlY3RTb3Vy
Y2VCU1RSOworICAgIGlmIChGQUlMRUQobmF2aWdhdGlvbkRhdGEtPmNsaWVudFJlZGlyZWN0U291
cmNlKCZjbGllbnRSZWRpcmVjdFNvdXJjZUJTVFIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVy
biBFX0ZBSUw7Ci0gICAgYm9vbCBoYXNDbGllbnRSZWRpcmVjdCA9IGNsaWVudFJlZGlyZWN0U291
cmNlQlNUUiAmJiBTeXNTdHJpbmdMZW4oY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSKTsKKyAgICBi
b29sIGhhc0NsaWVudFJlZGlyZWN0ID0gY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSLmxlbmd0aCgp
OwogICAgIHdzdHJpbmcgcmVkaXJlY3RTb3VyY2U7Ci0gICAgaWYgKGNsaWVudFJlZGlyZWN0U291
cmNlQlNUUikKKyAgICBpZiAoY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSLmxlbmd0aCgpKQogICAg
ICAgICByZWRpcmVjdFNvdXJjZSA9IHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3c3RyaW5nRnJv
bUJTVFIoY2xpZW50UmVkaXJlY3RTb3VyY2VCU1RSKSk7Ci0gICAgU3lzRnJlZVN0cmluZyhjbGll
bnRSZWRpcmVjdFNvdXJjZUJTVFIpOwogCiAgICAgYm9vbCB3YXNGYWlsdXJlID0gaGFzU3Vic3Rp
dHV0ZURhdGEgfHwgKGh0dHBSZXNwb25zZSAmJiBzdGF0dXNDb2RlID49IDQwMCk7CiAgICAgICAg
IAogICAgIHByaW50ZigiV2ViVmlldyBuYXZpZ2F0ZWQgdG8gdXJsIFwiJVNcIiB3aXRoIHRpdGxl
IFwiJVNcIiB3aXRoIEhUVFAgZXF1aXZhbGVudCBtZXRob2QgXCIlU1wiLiAgVGhlIG5hdmlnYXRp
b24gd2FzICVzIGFuZCB3YXMgJXMlUy5cbiIsIAogICAgICAgICB1cmwuY19zdHIoKSwgCi0gICAg
ICAgIHRpdGxlLmNfc3RyKCksIAotICAgICAgICBodHRwTWV0aG9kLmNfc3RyKCksCisgICAgICAg
IHN0YXRpY19jYXN0PHdjaGFyX3QqPih0aXRsZUJTVFIpLAorICAgICAgICBzdGF0aWNfY2FzdDx3
Y2hhcl90Kj4oaHR0cE1ldGhvZEJTVFIpLAogICAgICAgICB3YXNGYWlsdXJlID8gImEgZmFpbHVy
ZSIgOiAic3VjY2Vzc2Z1bCIsIAogICAgICAgICBoYXNDbGllbnRSZWRpcmVjdCA/ICJhIGNsaWVu
dCByZWRpcmVjdCBmcm9tICIgOiAibm90IGEgY2xpZW50IHJlZGlyZWN0IiwgCiAgICAgICAgIHJl
ZGlyZWN0U291cmNlLmNfc3RyKCkpOwpAQCAtMTkyLDExICsxODMsNyBAQCBIUkVTVUxUIEhpc3Rv
cnlEZWxlZ2F0ZTo6dXBkYXRlSGlzdG9yeVRpCiAgICAgaWYgKHVybEJTVFIpCiAgICAgICAgIHVy
bCA9IHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3c3RyaW5nRnJvbUJTVFIodXJsQlNUUikpOwog
Ci0gICAgd3N0cmluZyB0aXRsZTsKLSAgICBpZiAodGl0bGVCU1RSKQotICAgICAgICB0aXRsZSA9
IHdzdHJpbmdGcm9tQlNUUih0aXRsZUJTVFIpOwotCi0gICAgcHJpbnRmKCJXZWJWaWV3IHVwZGF0
ZWQgdGhlIHRpdGxlIGZvciBoaXN0b3J5IFVSTCBcIiVTXCIgdG8gXCIlU1wiLlxuIiwgdXJsLmNf
c3RyKCksIHRpdGxlLmNfc3RyKCkpOworICAgIHByaW50ZigiV2ViVmlldyB1cGRhdGVkIHRoZSB0
aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIlU1wiIHRvIFwiJVNcIi5cbiIsIHVybC5jX3N0cigpLCB0
aXRsZUJTVFIgPyB0aXRsZUJTVFIgOiBMIiIpOwogICAgIHJldHVybiBTX09LOwogfQogICAgIApA
QCAtMjA1LDE0ICsxOTIsMTMgQEAgSFJFU1VMVCBIaXN0b3J5RGVsZWdhdGU6OnBvcHVsYXRlVmlz
aXRlZAogICAgIGlmICghZ1Rlc3RSdW5uZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3Mo
KSkKICAgICAgICAgcmV0dXJuIFNfT0s7CiAKLSAgICBCU1RSIHVybEJTVFI7Ci0gICAgaWYgKEZB
SUxFRCh3ZWJWaWV3LT5tYWluRnJhbWVVUkwoJnVybEJTVFIpKSkKKyAgICBfYnN0cl90IHVybEJT
VFI7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5tYWluRnJhbWVVUkwoJnVybEJTVFIuR2V0QlNU
UigpKSkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICB3c3RyaW5nIHVybDsKLSAgICBp
ZiAodXJsQlNUUikKKyAgICBpZiAodXJsQlNUUi5sZW5ndGgoKSkKICAgICAgICAgdXJsID0gdXJs
U3VpdGFibGVGb3JUZXN0UmVzdWx0KHdzdHJpbmdGcm9tQlNUUih1cmxCU1RSKSk7Ci0gICAgU3lz
RnJlZVN0cmluZyh1cmxCU1RSKTsKIAogICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFZpc2l0ZWRM
aW5rc0NhbGxiYWNrKCkpCiAgICAgICAgIHByaW50ZigiQXNrZWQgdG8gcG9wdWxhdGUgdmlzaXRl
ZCBsaW5rcyBmb3IgV2ViVmlldyBcIiVTXCJcbiIsIHVybC5jX3N0cigpKTsKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9Qb2xpY3lEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcAkocmV2aXNpb24gMTY3MDIy
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCisjaW5jbHVkZSA8Y29tdXRpbC5oPgog
I2luY2x1ZGUgPHN0cmluZz4KIAogdXNpbmcgc3RkOjp3c3RyaW5nOwpAQCAtNDEsMTEgKzQyLDEw
IEBAIHN0YXRpYyB3c3RyaW5nIGR1bXBQYXRoKElET01Ob2RlKiBub2RlKQogCiAgICAgd3N0cmlu
ZyByZXN1bHQ7CiAKLSAgICBCU1RSIG5hbWU7Ci0gICAgaWYgKEZBSUxFRChub2RlLT5ub2RlTmFt
ZSgmbmFtZSkpKQorICAgIF9ic3RyX3QgbmFtZTsKKyAgICBpZiAoRkFJTEVEKG5vZGUtPm5vZGVO
YW1lKCZuYW1lLkdldEJTVFIoKSkpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJlc3Vs
dC5hc3NpZ24obmFtZSwgU3lzU3RyaW5nTGVuKG5hbWUpKTsKLSAgICBTeXNGcmVlU3RyaW5nKG5h
bWUpOworICAgIHJlc3VsdC5hc3NpZ24obmFtZSwgbmFtZS5sZW5ndGgoKSk7CiAKICAgICBDT01Q
dHI8SURPTU5vZGU+IHBhcmVudDsKICAgICBpZiAoU1VDQ0VFREVEKG5vZGUtPnBhcmVudE5vZGUo
JnBhcmVudCkpKQpAQCAtNjIsNyArNjIsNyBAQCBQb2xpY3lEZWxlZ2F0ZTo6UG9saWN5RGVsZWdh
dGUoKQogfQogCiAvLyBJVW5rbm93bgotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBQb2xpY3lE
ZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCitI
UkVTVUxUIFBvbGljeURlbGVnYXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoq
IHBwdk9iamVjdCkKIHsKICAgICAqcHB2T2JqZWN0ID0gMDsKICAgICBpZiAoSXNFcXVhbEdVSUQo
cmlpZCwgSUlEX0lVbmtub3duKSkKQEAgLTc2LDEyICs3NiwxMiBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFBvbGljeURlbGVnYXRlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLVVMT05HIFNU
RE1FVEhPRENBTExUWVBFIFBvbGljeURlbGVnYXRlOjpBZGRSZWYodm9pZCkKK1VMT05HIFBvbGlj
eURlbGVnYXRlOjpBZGRSZWYodm9pZCkKIHsKICAgICByZXR1cm4gKyttX3JlZkNvdW50OwogfQog
Ci1VTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBQb2xpY3lEZWxlZ2F0ZTo6UmVsZWFzZSh2b2lkKQor
VUxPTkcgUG9saWN5RGVsZWdhdGU6OlJlbGVhc2Uodm9pZCkKIHsKICAgICBVTE9ORyBuZXdSZWYg
PSAtLW1fcmVmQ291bnQ7CiAgICAgaWYgKCFuZXdSZWYpCkBAIC05MCwxNiArOTAsMTYgQEAgVUxP
TkcgU1RETUVUSE9EQ0FMTFRZUEUgUG9saWN5RGVsZWdhdGU6OgogICAgIHJldHVybiBuZXdSZWY7
CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUG9saWN5RGVsZWdhdGU6OmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oCitIUkVTVUxUIFBvbGljeURlbGVnYXRlOjpkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKAogICAgIC8qW2luXSovIElXZWJWaWV3KiAvKndlYlZp
ZXcqLywgCiAgICAgLypbaW5dKi8gSVByb3BlcnR5QmFnKiBhY3Rpb25JbmZvcm1hdGlvbiwgCiAg
ICAgLypbaW5dKi8gSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsIAogICAgIC8qW2luXSovIElXZWJG
cmFtZSogZnJhbWUsIAogICAgIC8qW2luXSovIElXZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyKiBs
aXN0ZW5lcikKIHsKLSAgICBCU1RSIHVybDsKLSAgICByZXF1ZXN0LT5VUkwoJnVybCk7Ci0gICAg
d3N0cmluZyB3dXJsID0gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdzdHJpbmcodXJsLCBTeXNT
dHJpbmdMZW4odXJsKSkpOworICAgIF9ic3RyX3QgdXJsOworICAgIHJlcXVlc3QtPlVSTCgmdXJs
LkdldEJTVFIoKSk7CisgICAgd3N0cmluZyB3dXJsID0gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0
KHdzdHJpbmcodXJsLCB1cmwubGVuZ3RoKCkpKTsKIAogICAgIGludCBuYXZUeXBlID0gMDsKICAg
ICBWQVJJQU5UIHZhcjsKQEAgLTE0Niw4ICsxNDYsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFBvbGljeURlbGVnYXRlCiAKICAgICBwcmludGYoIiVTXG4iLCBtZXNzYWdlLmNfc3RyKCkp
OwogCi0gICAgU3lzRnJlZVN0cmluZyh1cmwpOwotCiAgICAgaWYgKG1fcGVybWlzc2l2ZURlbGVn
YXRlKQogICAgICAgICBsaXN0ZW5lci0+dXNlKCk7CiAgICAgZWxzZQpAQCAtMTYyLDI2ICsxNjAs
MjEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBQb2xpY3lEZWxlZ2F0ZQogfQogCiAKLUhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUG9saWN5RGVsZWdhdGU6OnVuYWJsZVRvSW1wbGVtZW50
UG9saWN5V2l0aEVycm9yKAorSFJFU1VMVCBQb2xpY3lEZWxlZ2F0ZTo6dW5hYmxlVG9JbXBsZW1l
bnRQb2xpY3lXaXRoRXJyb3IoCiAgICAgLypbaW5dKi8gSVdlYlZpZXcqIC8qd2ViVmlldyovLCAK
ICAgICAvKltpbl0qLyBJV2ViRXJyb3IqIGVycm9yLCAKICAgICAvKltpbl0qLyBJV2ViRnJhbWUq
IGZyYW1lKQogewotICAgIEJTVFIgZG9tYWluU3RyOwotICAgIGVycm9yLT5kb21haW4oJmRvbWFp
blN0cik7Ci0gICAgd3N0cmluZyBkb21haW5NZXNzYWdlID0gZG9tYWluU3RyOworICAgIF9ic3Ry
X3QgZG9tYWluU3RyOworICAgIGVycm9yLT5kb21haW4oJmRvbWFpblN0ci5HZXRCU1RSKCkpOwog
CiAgICAgaW50IGNvZGU7CiAgICAgZXJyb3ItPmNvZGUoJmNvZGUpOwogICAgIAotICAgIEJTVFIg
ZnJhbWVOYW1lOwotICAgIGZyYW1lLT5uYW1lKCZmcmFtZU5hbWUpOwotICAgIHdzdHJpbmcgZnJh
bWVOYW1lTWVzc2FnZSA9IGZyYW1lTmFtZTsKLSAgICAKLSAgICBwcmludGYoIlBvbGljeSBkZWxl
Z2F0ZTogdW5hYmxlIHRvIGltcGxlbWVudCBwb2xpY3kgd2l0aCBlcnJvciBkb21haW4gJyVTJywg
ZXJyb3IgY29kZSAlZCwgaW4gZnJhbWUgJyVTJyIsIGRvbWFpbk1lc3NhZ2UuY19zdHIoKSwgY29k
ZSwgZnJhbWVOYW1lTWVzc2FnZS5jX3N0cigpKTsKKyAgICBfYnN0cl90IGZyYW1lTmFtZTsKKyAg
ICBmcmFtZS0+bmFtZSgmZnJhbWVOYW1lLkdldEJTVFIoKSk7CiAgICAgCi0gICAgU3lzRnJlZVN0
cmluZyhkb21haW5TdHIpOwotICAgIFN5c0ZyZWVTdHJpbmcoZnJhbWVOYW1lKTsKKyAgICBwcmlu
dGYoIlBvbGljeSBkZWxlZ2F0ZTogdW5hYmxlIHRvIGltcGxlbWVudCBwb2xpY3kgd2l0aCBlcnJv
ciBkb21haW4gJyVTJywgZXJyb3IgY29kZSAlZCwgaW4gZnJhbWUgJyVTJyIsIHN0YXRpY19jYXN0
PHdjaGFyX3QqPihkb21haW5TdHIpLCBjb2RlLCBzdGF0aWNfY2FzdDxUQ0hBUio+KGZyYW1lTmFt
ZSkpOwogICAgIAogICAgIHJldHVybiBTX09LOwogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxNjcwMjIp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc0LDI4ICs3NCwyMyBAQCB3c3RyaW5nIFJlc291cmNlTG9hZERlbGVn
YXRlOjpkZXNjcmlwdGlvCiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm4gTCIobnVs
bCkiOwogCi0gICAgQlNUUiB1cmxCU1RSOwotICAgIGlmIChGQUlMRUQocmVxdWVzdC0+VVJMKCZ1
cmxCU1RSKSkpCisgICAgX2JzdHJfdCB1cmxCU1RSOworICAgIGlmIChGQUlMRUQocmVxdWVzdC0+
VVJMKCZ1cmxCU1RSLkdldEJTVFIoKSkpKQogICAgICAgICByZXR1cm4gd3N0cmluZygpOwogICAg
IAogICAgIHdzdHJpbmcgdXJsID0gdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdzdHJpbmdGcm9t
QlNUUih1cmxCU1RSKSk7Ci0gICAgOjpTeXNGcmVlU3RyaW5nKHVybEJTVFIpOwogICAgIAotICAg
IEJTVFIgbWFpbkRvY3VtZW50VVJMQlNUUjsKLSAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPm1haW5E
b2N1bWVudFVSTCgmbWFpbkRvY3VtZW50VVJMQlNUUikpKQorICAgIF9ic3RyX3QgbWFpbkRvY3Vt
ZW50VVJMQlNUUjsKKyAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPm1haW5Eb2N1bWVudFVSTCgmbWFp
bkRvY3VtZW50VVJMQlNUUi5HZXRCU1RSKCkpKSkKICAgICAgICAgcmV0dXJuIHdzdHJpbmcoKTsK
ICAgICAKICAgICB3c3RyaW5nIG1haW5Eb2N1bWVudFVSTCA9IHVybFN1aXRhYmxlRm9yVGVzdFJl
c3VsdCh3c3RyaW5nRnJvbUJTVFIobWFpbkRvY3VtZW50VVJMQlNUUikpOwotICAgIDo6U3lzRnJl
ZVN0cmluZyhtYWluRG9jdW1lbnRVUkxCU1RSKTsKICAgICAKLSAgICBCU1RSIGh0dHBNZXRob2RC
U1RSOwotICAgIGlmIChGQUlMRUQocmVxdWVzdC0+SFRUUE1ldGhvZCgmaHR0cE1ldGhvZEJTVFIp
KSkKKyAgICBfYnN0cl90IGh0dHBNZXRob2RCU1RSOworICAgIGlmIChGQUlMRUQocmVxdWVzdC0+
SFRUUE1ldGhvZCgmaHR0cE1ldGhvZEJTVFIuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybiB3
c3RyaW5nKCk7CiAgICAgCi0gICAgd3N0cmluZyBodHRwTWV0aG9kID0gd3N0cmluZ0Zyb21CU1RS
KGh0dHBNZXRob2RCU1RSKTsKLSAgICA6OlN5c0ZyZWVTdHJpbmcoaHR0cE1ldGhvZEJTVFIpOwot
Ci0gICAgcmV0dXJuIEwiPE5TVVJMUmVxdWVzdCBVUkwgIiArIHVybCArIEwiLCBtYWluIGRvY3Vt
ZW50IFVSTCAiICsgbWFpbkRvY3VtZW50VVJMICsgTCIsIGh0dHAgbWV0aG9kICIgKyBodHRwTWV0
aG9kICsgTCI+IjsKKyAgICByZXR1cm4gTCI8TlNVUkxSZXF1ZXN0IFVSTCAiICsgdXJsICsgTCIs
IG1haW4gZG9jdW1lbnQgVVJMICIgKyBtYWluRG9jdW1lbnRVUkwgKyBMIiwgaHR0cCBtZXRob2Qg
IiArIHN0YXRpY19jYXN0PHdjaGFyX3QqPihodHRwTWV0aG9kQlNUUikgKyBMIj4iOwogfQogCiB3
c3RyaW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChJV2ViVVJMUmVzcG9uc2UqIHJlc3BvbnNlKQpAQCAtMTAzLDEyICs5OCwxMSBAQCB3c3Ry
aW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvCiAgICAgaWYgKCFyZXNwb25zZSkK
ICAgICAgICAgcmV0dXJuIEwiKG51bGwpIjsKIAotICAgIEJTVFIgdXJsQlNUUjsKLSAgICBpZiAo
RkFJTEVEKHJlc3BvbnNlLT5VUkwoJnVybEJTVFIpKSkKKyAgICBfYnN0cl90IHVybEJTVFI7Cisg
ICAgaWYgKEZBSUxFRChyZXNwb25zZS0+VVJMKCZ1cmxCU1RSLkdldEJTVFIoKSkpKQogICAgICAg
ICByZXR1cm4gd3N0cmluZygpOwogICAgIAogICAgIHdzdHJpbmcgdXJsID0gdXJsU3VpdGFibGVG
b3JUZXN0UmVzdWx0KHdzdHJpbmdGcm9tQlNUUih1cmxCU1RSKSk7Ci0gICAgOjpTeXNGcmVlU3Ry
aW5nKHVybEJTVFIpOwogCiAgICAgaW50IHN0YXR1c0NvZGUgPSAwOwogICAgIENPTVB0cjxJV2Vi
SFRUUFVSTFJlc3BvbnNlPiBodHRwUmVzcG9uc2U7CkBAIC0xMjIsMTIgKzExNiwxMSBAQCB3c3Ry
aW5nIFJlc291cmNlTG9hZERlbGVnYXRlOjpkZXNjcmlwdGlvCiB7CiAgICAgd3N0cmluZyByZXN1
bHQgPSBMIjxOU0Vycm9yICI7CiAKLSAgICBCU1RSIGRvbWFpblNUUjsKLSAgICBpZiAoRkFJTEVE
KGVycm9yLT5kb21haW4oJmRvbWFpblNUUikpKQorICAgIF9ic3RyX3QgZG9tYWluU1RSOworICAg
IGlmIChGQUlMRUQoZXJyb3ItPmRvbWFpbigmZG9tYWluU1RSLkdldEJTVFIoKSkpKQogICAgICAg
ICByZXR1cm4gd3N0cmluZygpOwogCiAgICAgd3N0cmluZyBkb21haW4gPSB3c3RyaW5nRnJvbUJT
VFIoZG9tYWluU1RSKTsKLSAgICA6OlN5c0ZyZWVTdHJpbmcoZG9tYWluU1RSKTsKIAogICAgIGlu
dCBjb2RlOwogICAgIGlmIChGQUlMRUQoZXJyb3ItPmNvZGUoJmNvZGUpKSkKQEAgLTE1MCwxNCAr
MTQzLDEyIEBAIHdzdHJpbmcgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRlc2NyaXB0aW8KICAgICBy
ZXN1bHQgKz0gTCJkb21haW4gIiArIGRvbWFpbjsKICAgICByZXN1bHQgKz0gTCIsIGNvZGUgIiAr
IHdzdHJpbmdGcm9tSW50KGNvZGUpOwogCi0gICAgQlNUUiBmYWlsaW5nVVJMU1RSOwotICAgIGlm
IChGQUlMRUQoZXJyb3ItPmZhaWxpbmdVUkwoJmZhaWxpbmdVUkxTVFIpKSkKKyAgICBfYnN0cl90
IGZhaWxpbmdVUkxTVFI7CisgICAgaWYgKEZBSUxFRChlcnJvci0+ZmFpbGluZ1VSTCgmZmFpbGlu
Z1VSTFNUUi5HZXRCU1RSKCkpKSkKICAgICAgICAgcmV0dXJuIHdzdHJpbmcoKTsKIAotICAgIGlm
IChmYWlsaW5nVVJMU1RSKSB7CisgICAgaWYgKGZhaWxpbmdVUkxTVFIubGVuZ3RoKCkpCiAgICAg
ICAgIHJlc3VsdCArPSBMIiwgZmFpbGluZyBVUkwgXCIiICsgdXJsU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHdzdHJpbmdGcm9tQlNUUihmYWlsaW5nVVJMU1RSKSkgKyBMIlwiIjsKLSAgICAgICAgOjpT
eXNGcmVlU3RyaW5nKGZhaWxpbmdVUkxTVFIpOwotICAgIH0KIAogICAgIHJlc3VsdCArPSBMIj4i
OwogCkBAIC0xNzMsNyArMTY0LDcgQEAgUmVzb3VyY2VMb2FkRGVsZWdhdGU6On5SZXNvdXJjZUxv
YWREZWxlZwogewogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERl
bGVnYXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK0hS
RVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KQogewogICAgICpwcHZPYmplY3QgPSAwOwogICAgIGlmIChJc0VxdWFs
R1VJRChyaWlkLCBJSURfSVVua25vd24pKQpAQCAtMTg5LDEyICsxODAsMTIgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAgIHJldHVybiBTX09LOwogfQogCi1V
TE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKHZvaWQp
CitVTE9ORyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6QWRkUmVmKHZvaWQpCiB7CiAgICAgcmV0dXJu
ICsrbV9yZWZDb3VudDsKIH0KIAotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2Fk
RGVsZWdhdGU6OlJlbGVhc2Uodm9pZCkKK1VMT05HIFJlc291cmNlTG9hZERlbGVnYXRlOjpSZWxl
YXNlKHZvaWQpCiB7CiAgICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OwogICAgIGlmICgh
bmV3UmVmKQpAQCAtMjAzLDE1ICsxOTQsMTEgQEAgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVz
b3VyY2VMb2FkRGVsZQogICAgIHJldHVybiBuZXdSZWY7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVz
dCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAvKiBbaW5dICovIElX
ZWJVUkxSZXF1ZXN0KiByZXF1ZXN0LAotICAgIC8qIFtpbl0gKi8gSVdlYkRhdGFTb3VyY2UqIGRh
dGFTb3VyY2UsCi0gICAgLyogW2luXSAqLyB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCitIUkVT
VUxUIFJlc291cmNlTG9hZERlbGVnYXRlOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoSVdl
YlZpZXcqIHdlYlZpZXcsIElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0LCBJV2ViRGF0YVNvdXJjZSog
ZGF0YVNvdXJjZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogeyAKICAgICBpZiAoIWRvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBC
U1RSIHVybFN0cjsKLSAgICAgICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5VUkwoJnVybFN0cikpKQor
ICAgICAgICBfYnN0cl90IHVybFN0cjsKKyAgICAgICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5VUkwo
JnVybFN0ci5HZXRCU1RSKCkpKSkKICAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICAg
ICAgQVNTRVJUKCF1cmxNYXAoKS5jb250YWlucyhpZGVudGlmaWVyKSk7CkBAIC0yMjEsNyArMjA4
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAgIHJldHVy
biBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERlbGVn
YXRlOjpyZW1vdmVJZGVudGlmaWVyRm9yUmVxdWVzdCgKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVs
ZWdhdGU6OnJlbW92ZUlkZW50aWZpZXJGb3JSZXF1ZXN0KAogICAgIC8qIFtpbl0gKi8gSVdlYlZp
ZXcqIHdlYlZpZXcsCiAgICAgLyogW2luXSAqLyB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7
CkBAIC0yMzAsMTMgKzIxNyw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VM
b2FkRGUKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBS
ZXNvdXJjZUxvYWREZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KCAKLSAgICAvKiBbaW5dICovIElX
ZWJWaWV3KiB3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LAotICAgIC8qIFtpbl0gKi8gSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsCi0gICAgLyogW2luXSAq
LyBJV2ViVVJMUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UsCi0gICAgLyogW2luXSAqLyBJV2Vi
RGF0YVNvdXJjZSogZGF0YVNvdXJjZSwKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIElXZWJVUkxS
ZXF1ZXN0ICoqbmV3UmVxdWVzdCkKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OndpbGxT
ZW5kUmVxdWVzdChJV2ViVmlldyogd2ViVmlldywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBJ
V2ViVVJMUmVxdWVzdCogcmVxdWVzdCwKKyAgICBJV2ViVVJMUmVzcG9uc2UqIHJlZGlyZWN0UmVz
cG9uc2UsIElXZWJEYXRhU291cmNlKiBkYXRhU291cmNlLCBJV2ViVVJMUmVxdWVzdCoqIG5ld1Jl
cXVlc3QpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRmKCIlUyAtIHdpbGxTZW5kUmVxdWVzdCAlUyBy
ZWRpcmVjdFJlc3BvbnNlICVTXG4iLCAKQEAgLTI2NywyMCArMjQ5LDE1IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGUKICAgICByZXF1ZXN0LT5tdXRhYmxlQ29weSgm
cmVxdWVzdENvcHkpOwogICAgIGNvbnN0IHNldDxzdHJpbmc+JiBjbGVhckhlYWRlcnMgPSBnVGVz
dFJ1bm5lci0+d2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzKCk7CiAgICAgZm9yIChzZXQ8c3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaGVhZGVyID0gY2xlYXJIZWFkZXJzLmJlZ2luKCk7IGhlYWRl
ciAhPSBjbGVhckhlYWRlcnMuZW5kKCk7ICsraGVhZGVyKSB7Ci0gICAgICBCU1RSIGJzdHJIZWFk
ZXIgPSBCU1RSRnJvbVN0cmluZygqaGVhZGVyKTsKLSAgICAgIHJlcXVlc3RDb3B5LT5zZXRWYWx1
ZSgwLCBic3RySGVhZGVyKTsKLSAgICAgIFN5c0ZyZWVTdHJpbmcoYnN0ckhlYWRlcik7CisgICAg
ICAgIF9ic3RyX3QgYnN0ckhlYWRlcihoZWFkZXItPmRhdGEoKSk7CisgICAgICAgIHJlcXVlc3RD
b3B5LT5zZXRWYWx1ZSgwLCBic3RySGVhZGVyKTsKICAgICB9CiAKICAgICAqbmV3UmVxdWVzdCA9
IHJlcXVlc3RDb3B5OwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFJlc291cmNlTG9hZERlbGVnYXRlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgLyogW2luXSAq
LyB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCi0gICAgLyogW2luXSAqLyBJV2ViVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwKLSAgICAvKiBbaW5dICovIElXZWJEYXRhU291
cmNlICpkYXRhU291cmNlKQorSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKElXZWJWaWV3KiB3ZWJWaWV3LCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIElXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSogY2hhbGxlbmdlLCBJ
V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKIHsKICAgICBDT01QdHI8SVdlYlVSTEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlU2VuZGVyPiBzZW5kZXI7CiAgICAgaWYgKCFjaGFsbGVuZ2UgfHwgRkFJ
TEVEKGNoYWxsZW5nZS0+c2VuZGVyKCZzZW5kZXIpKSkKQEAgLTMwNiw3ICsyODMsNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERlCiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJl
Y2VpdmVSZXNwb25zZSgKK0hSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZFJlY2VpdmVS
ZXNwb25zZSgKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LCAKICAgICAvKiBbaW5d
ICovIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgCiAgICAgLyogW2luXSAqLyBJV2ViVVJMUmVz
cG9uc2UqIHJlc3BvbnNlLCAKQEAgLTMxOCwzMSArMjk1LDI0IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgUmVzb3VyY2VMb2FkRGUKICAgICAgICAgICAgIGRlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KHJlc3BvbnNlKS5jX3N0cigpKTsKICAgICB9CiAgICAgaWYgKCFkb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKSB7Ci0gICAgICAg
IEJTVFIgbWltZVR5cGVCU1RSOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3BvbnNlLT5NSU1FVHlw
ZSgmbWltZVR5cGVCU1RSKSkpCisgICAgICAgIF9ic3RyX3QgbWltZVR5cGVCU1RSOworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3BvbnNlLT5NSU1FVHlwZSgmbWltZVR5cGVCU1RSLkdldEJTVFIoKSkp
KQogICAgICAgICAgICAgRV9GQUlMOwogICAgIAotICAgICAgICB3c3RyaW5nIG1pbWVUeXBlID0g
d3N0cmluZ0Zyb21CU1RSKG1pbWVUeXBlQlNUUik7Ci0gICAgICAgIDo6U3lzRnJlZVN0cmluZyht
aW1lVHlwZUJTVFIpOwotCi0gICAgICAgIEJTVFIgdXJsQlNUUjsKLSAgICAgICAgaWYgKEZBSUxF
RChyZXNwb25zZS0+VVJMKCZ1cmxCU1RSKSkpCisgICAgICAgIF9ic3RyX3QgdXJsQlNUUjsKKyAg
ICAgICAgaWYgKEZBSUxFRChyZXNwb25zZS0+VVJMKCZ1cmxCU1RSLkdldEJTVFIoKSkpKQogICAg
ICAgICAgICAgRV9GQUlMOwogICAgIAogICAgICAgICB3c3RyaW5nIHVybCA9IHdzdHJpbmdGcm9t
QlNUUih1cmxCU1RSKTsKLSAgICAgICAgOjpTeXNGcmVlU3RyaW5nKHVybEJTVFIpOwogCi0gICAg
ICAgIHByaW50ZigiJVMgaGFzIE1JTUUgdHlwZSAlU1xuIiwgbGFzdFBhdGhDb21wb25lbnQodXJs
KS5jX3N0cigpLCBtaW1lVHlwZS5jX3N0cigpKTsKKyAgICAgICAgcHJpbnRmKCIlUyBoYXMgTUlN
RSB0eXBlICVTXG4iLCBsYXN0UGF0aENvbXBvbmVudCh1cmwpLmNfc3RyKCksIHN0YXRpY19jYXN0
PHdjaGFyX3QqPihtaW1lVHlwZUJTVFIpKTsKICAgICB9CiAKICAgICByZXR1cm4gU19PSzsKIH0K
IAogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlc291cmNlTG9hZERlbGVnYXRlOjpkaWRG
aW5pc2hMb2FkaW5nRnJvbURhdGFTb3VyY2UoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdl
YlZpZXcsCi0gICAgLyogW2luXSAqLyB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCi0gICAgLyog
W2luXSAqLyBJV2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKK0hSRVNVTFQgUmVzb3VyY2VMb2Fk
RGVsZWdhdGU6OmRpZEZpbmlzaExvYWRpbmdGcm9tRGF0YVNvdXJjZShJV2ViVmlldyogd2ViVmll
dywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBJV2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkK
IHsKICAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFj
a3MoKSkgewogICAgICAgICBwcmludGYoIiVTIC0gZGlkRmluaXNoTG9hZGluZ1xuIiwKQEAgLTM1
NCwxMSArMzI0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZQog
ICAgIHJldHVybiBTX09LOwogfQogICAgICAgICAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
UmVzb3VyY2VMb2FkRGVsZWdhdGU6OmRpZEZhaWxMb2FkaW5nV2l0aEVycm9yKCAKLSAgICAvKiBb
aW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLAotICAgIC8qIFtpbl0gKi8gSVdlYkVycm9yKiBlcnJvciwKLSAgICAvKiBbaW5d
ICovIElXZWJEYXRhU291cmNlKiBkYXRhU291cmNlKQorSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxl
Z2F0ZTo6ZGlkRmFpbExvYWRpbmdXaXRoRXJyb3IoSVdlYlZpZXcqIHdlYlZpZXcsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgSVdlYkVycm9yKiBlcnJvciwgSVdlYkRhdGFTb3VyY2UqIGRhdGFT
b3VyY2UpCiB7CiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRmKCIlUyAtIGRpZEZhaWxMb2FkaW5nV2l0aEVy
cm9yOiAlU1xuIiwgCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJX
aW4uY3BwCShyZXZpc2lvbiAxNjcwMjIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVz
dFJ1bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMywxMSArMjMzLDEwIEBAIHZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHUKICAgICBpZiAoRkFJTEVEKGRhdGFT
b3VyY2UtPnJlc3BvbnNlKCZyZXNwb25zZSkpIHx8ICFyZXNwb25zZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQlNUUiByZXNwb25zZVVSTEJTVFI7Ci0gICAgaWYgKEZBSUxFRChyZXNwb25zZS0+
VVJMKCZyZXNwb25zZVVSTEJTVFIpKSkKKyAgICBfYnN0cl90IHJlc3BvbnNlVVJMQlNUUjsKKyAg
ICBpZiAoRkFJTEVEKHJlc3BvbnNlLT5VUkwoJnJlc3BvbnNlVVJMQlNUUi5HZXRCU1RSKCkpKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIHdzdHJpbmcgcmVzcG9uc2VVUkwocmVzcG9uc2VVUkxCU1RS
LCBTeXNTdHJpbmdMZW4ocmVzcG9uc2VVUkxCU1RSKSk7Ci0gICAgU3lzRnJlZVN0cmluZyhyZXNw
b25zZVVSTEJTVFIpOworICAgIHdzdHJpbmcgcmVzcG9uc2VVUkwocmVzcG9uc2VVUkxCU1RSLCBy
ZXNwb25zZVVSTEJTVFIubGVuZ3RoKCkpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBy
ZWFsIHJlbGF0aXZlIFVSTCByZXNvbHV0aW9uIGhlcmUuCiAgICAgaW50IGxhc3RTbGFzaCA9IHJl
c3BvbnNlVVJMLnJmaW5kKCcvJyk7CkBAIC02NTYsOSArNjU1LDggQEAgdm9pZCBUZXN0UnVubmVy
OjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aQogCiAgICAgcmVzdWx0UGF0aCA9IGNmU3RyaW5nUmVm
VG9XU3RyaW5nKENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSkpOwogCi0gICAgQlNUUiByZXN1bHRQ
YXRoQlNUUiA9IFN5c0FsbG9jU3RyaW5nTGVuKHJlc3VsdFBhdGguZGF0YSgpLCByZXN1bHRQYXRo
LnNpemUoKSk7CisgICAgX2JzdHJfdCByZXN1bHRQYXRoQlNUUihyZXN1bHRQYXRoLmRhdGEoKSk7
CiAgICAgcHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24ocmVzdWx0UGF0aEJT
VFIpOwotICAgIFN5c0ZyZWVTdHJpbmcocmVzdWx0UGF0aEJTVFIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBl
bGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTczOCw5ICs3MzYsNiBAQCBpbnQgVGVzdFJ1
bm5lcjo6d2luZG93Q291bnQoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3Ry
aW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQogewotICAgIHdzdHJpbmcgd05hbWUgPSBq
c1N0cmluZ1JlZlRvV1N0cmluZyhuYW1lKTsKLSAgICB3c3RyaW5nIHdWYWx1ZSA9IGpzU3RyaW5n
UmVmVG9XU3RyaW5nKHZhbHVlKTsKLQogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAg
ICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCiAgICAgICAgIHJldHVybjsK
QEAgLTc0OSwxMiArNzQ0LDkgQEAgdm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChKU1N0cmlu
Z1JlZgogICAgIGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdQcml2YXRl
KSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEJTVFIgbmFtZUJTVFIgPSBTeXNBbGxvY1N0cmlu
Z0xlbigoT0xFQ0hBUiopd05hbWUuY19zdHIoKSwgd05hbWUubGVuZ3RoKCkpOwotICAgIEJTVFIg
dmFsdWVCU1RSID0gU3lzQWxsb2NTdHJpbmdMZW4oKE9MRUNIQVIqKXdWYWx1ZS5jX3N0cigpLCB3
VmFsdWUubGVuZ3RoKCkpOworICAgIF9ic3RyX3QgbmFtZUJTVFIoSlNTdHJpbmdDb3B5QlNUUihu
YW1lKSwgZmFsc2UpOworICAgIF9ic3RyX3QgdmFsdWVCU1RSKEpTU3RyaW5nQ29weUJTVFIodmFs
dWUpLCBmYWxzZSk7CiAgICAgdmlld1ByaXZhdGUtPmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShu
YW1lQlNUUiwgdmFsdWVCU1RSKTsKLQotICAgIFN5c0ZyZWVTdHJpbmcobmFtZUJTVFIpOwotICAg
IFN5c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3Ry
aW5nKEpTQ29udGV4dFJlZiAvKiBjb250ZXh0ICovLCBKU1N0cmluZ1JlZiAvKiB0YXJnZXQgKi8s
IEpTT2JqZWN0UmVmIC8qIG9wdGlvbnNBcnJheSAqLykKQEAgLTgyMiwxMSArODE0LDkgQEAgdm9p
ZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdAogICAgIGlmICghcHJlZnNQcml2
YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBCU1RSIGtleUJTVFIgPSBKU1N0cmluZ0NvcHlC
U1RSKGtleSk7Ci0gICAgQlNUUiB2YWx1ZUJTVFIgPSBKU1N0cmluZ0NvcHlCU1RSKHZhbHVlKTsK
KyAgICBfYnN0cl90IGtleUJTVFIoSlNTdHJpbmdDb3B5QlNUUihrZXkpLCBmYWxzZSk7CisgICAg
X2JzdHJfdCB2YWx1ZUJTVFIoSlNTdHJpbmdDb3B5QlNUUih2YWx1ZSksIGZhbHNlKTsKICAgICBw
cmVmc1ByaXZhdGUtPnNldFByZWZlcmVuY2VGb3JUZXN0KGtleUJTVFIsIHZhbHVlQlNUUik7Ci0g
ICAgU3lzRnJlZVN0cmluZyhrZXlCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKHZhbHVlQlNUUik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxv
bmcgcXVvdGEpCkBAIC0xMDM2LDEwICsxMDI2LDkgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZQogICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdDsKICAgICB9CiAKLSAg
ICBCU1RSIHJlc3VsdDsKLSAgICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0ZS0+c3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdEluU2NyaXB0V29ybGQod29ybGQuZ2V0KCksIGdsb2JhbE9iamVjdCwg
YnN0clQoc2NyaXB0KS5HZXRCU1RSKCksICZyZXN1bHQpKSkKKyAgICBfYnN0cl90IHJlc3VsdDsK
KyAgICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0ZS0+c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEluU2NyaXB0V29ybGQod29ybGQuZ2V0KCksIGdsb2JhbE9iamVjdCwgYnN0clQoc2NyaXB0KS5H
ZXRCU1RSKCksICZyZXN1bHQuR2V0QlNUUigpKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBTeXNG
cmVlU3RyaW5nKHJlc3VsdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRl
ZExpbmtzKCkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9s
bGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGV4dElu
cHV0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDE2NzAyMikKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKIAogI2luY2x1
ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdS
ZWZCU1RSLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQv
V2ViS2l0Lmg+CiAjaW5jbHVkZSA8Y29tdXRpbC5oPgpAQCAtNDcsNyArNDgsNyBAQCB2b2lkIFRl
eHRJbnB1dENvbnRyb2xsZXI6OnNldE1hcmtlZFRleHQoCiAgICAgaWYgKEZBSUxFRCh3ZWJWaWV3
LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
X2JzdHJfdCBic3RyKHdzdHJpbmcoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHRleHQpLCBKU1N0
cmluZ0dldExlbmd0aCh0ZXh0KSkuZGF0YSgpKTsKKyAgICBfYnN0cl90IGJzdHIoSlNTdHJpbmdD
b3B5QlNUUih0ZXh0KSwgZmFsc2UpOwogCiAgICAgdmlld1ByaXZhdGUtPnNldENvbXBvc2l0aW9u
Rm9yVGVzdGluZyhic3RyLCBmcm9tLCBsZW5ndGgpOwogfQpAQCAtMTE1LDcgKzExNiw3IEBAIHZv
aWQgVGV4dElucHV0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChKU1MKICAgICBpZiAoRkFJTEVEKHdl
YlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQogICAgICAgICByZXR1cm47CiAg
Ci0gICAgX2JzdHJfdCBic3RyKHdzdHJpbmcoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHRleHQp
LCBKU1N0cmluZ0dldExlbmd0aCh0ZXh0KSkuZGF0YSgpKTsKKyAgICBfYnN0cl90IGJzdHIoSlNT
dHJpbmdDb3B5QlNUUih0ZXh0KSwgZmFsc2UpOwogCiAgICAgdmlld1ByaXZhdGUtPmNvbmZpcm1D
b21wb3NpdGlvbkZvclRlc3RpbmcoYnN0cik7CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVUlEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL1VJRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxNjcwMjIpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KICNpbmNsdWRl
IDxXZWJLaXQvV2ViS2l0Q09NQVBJLmg+CisjaW5jbHVkZSA8Y29tdXRpbC5oPgogI2luY2x1ZGUg
PHN0ZGlvLmg+CiAKIHVzaW5nIHN0ZDo6d3N0cmluZzsKQEAgLTE3MCw3ICsxNzEsNyBAQCB2b2lk
IFVJRGVsZWdhdGU6OnJlc2V0VW5kb01hbmFnZXIoKQogICAgIG1fdW5kb01hbmFnZXIgPSBhZG9w
dFB0cihuZXcgRFJUVW5kb01hbmFnZXIpOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0
KQorSFJFU1VMVCBVSURlbGVnYXRlOjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoq
IHBwdk9iamVjdCkKIHsKICAgICAqcHB2T2JqZWN0ID0gMDsKICAgICBpZiAoSXNFcXVhbEdVSUQo
cmlpZCwgSUlEX0lVbmtub3duKSkKQEAgLTE5MiwxMiArMTkzLDEyIEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6UXUKICAgICByZXR1cm4gU19PSzsKIH0KIAotVUxPTkcg
U1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6QWRkUmVmKCkKK1VMT05HIFVJRGVsZWdhdGU6
OkFkZFJlZigpCiB7CiAgICAgcmV0dXJuICsrbV9yZWZDb3VudDsKIH0KIAotVUxPTkcgU1RETUVU
SE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6UmVsZWFzZSgpCitVTE9ORyBVSURlbGVnYXRlOjpSZWxl
YXNlKCkKIHsKICAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CiAgICAgaWYgKCFuZXdS
ZWYpCkBAIC0yMDYsNjEgKzIwNyw1MSBAQCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVn
YXRlOjpSZWxlCiAgICAgcmV0dXJuIG5ld1JlZjsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBVSURlbGVnYXRlOjpoYXNDdXN0b21NZW51SW1wbGVtZW50YXRpb24oIAotICAgICAgICAv
KiBbcmV0dmFsXVtvdXRdICovIEJPT0wgKmhhc0N1c3RvbU1lbnVzKQorSFJFU1VMVCBVSURlbGVn
YXRlOjpoYXNDdXN0b21NZW51SW1wbGVtZW50YXRpb24oQk9PTCogaGFzQ3VzdG9tTWVudXMpCiB7
CiAgICAgKmhhc0N1c3RvbU1lbnVzID0gVFJVRTsKIAogICAgIHJldHVybiBTX09LOwogfQogCi1I
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnRyYWNrQ3VzdG9tUG9wdXBNZW51
KCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAotICAgICAgICAvKiBbaW5d
ICovIE9MRV9IQU5ETEUgbWVudSwKLSAgICAgICAgLyogW2luXSAqLyBMUFBPSU5UIHBvaW50KQor
SFJFU1VMVCBVSURlbGVnYXRlOjp0cmFja0N1c3RvbVBvcHVwTWVudShJV2ViVmlldyogLypzZW5k
ZXIqLywgT0xFX0hBTkRMRSAvKm1lbnUqLywgTFBQT0lOVCAvKnBvaW50Ki8pCiB7CiAgICAgLy8g
RG8gbm90aGluZwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFVJRGVsZWdhdGU6OnJlZ2lzdGVyVW5kb1dpdGhUYXJnZXQoCi0gICAgICAgIC8qIFtpbl0g
Ki8gSVdlYlVuZG9UYXJnZXQqIHRhcmdldCwKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIGFjdGlv
bk5hbWUsCi0gICAgICAgIC8qIFtpbl0gKi8gSVVua25vd24qIGFjdGlvbkFyZykKK0hSRVNVTFQg
VUlEZWxlZ2F0ZTo6cmVnaXN0ZXJVbmRvV2l0aFRhcmdldChJV2ViVW5kb1RhcmdldCogdGFyZ2V0
LCBCU1RSIGFjdGlvbk5hbWUsIElVbmtub3duKiBhY3Rpb25BcmcpCiB7CiAgICAgbV91bmRvTWFu
YWdlci0+cmVnaXN0ZXJVbmRvV2l0aFRhcmdldCh0YXJnZXQsIGFjdGlvbk5hbWUsIGFjdGlvbkFy
Zyk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlE
ZWxlZ2F0ZTo6cmVtb3ZlQWxsQWN0aW9uc1dpdGhUYXJnZXQoCi0gICAgICAgIC8qIFtpbl0gKi8g
SVdlYlVuZG9UYXJnZXQqKQorSFJFU1VMVCBVSURlbGVnYXRlOjpyZW1vdmVBbGxBY3Rpb25zV2l0
aFRhcmdldChJV2ViVW5kb1RhcmdldCopCiB7CiAgICAgbV91bmRvTWFuYWdlci0+cmVtb3ZlQWxs
QWN0aW9ucygpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFVJRGVsZWdhdGU6OnNldEFjdGlvblRpdGxlKAotICAgICAgICAvKiBbaW5dICovIEJTVFIg
YWN0aW9uVGl0bGUpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnNldEFjdGlvblRpdGxlKEJTVFIgLyph
Y3Rpb25UaXRsZSovKQogewogICAgIC8vIEl0IGlzIG5vdCBuZWNjZXNzYXJ5IHRvIGltcGxlbWVu
dCB0aGlzIGZvciBEUlQgYmVjYXVzZSB0aGVyZSBpcwogICAgIC8vIG1lbnUgdG8gd3JpdGUgb3V0
IHRoZSB0aXRsZSB0by4KICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBVSURlbGVnYXRlOjp1bmRvKCkKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6dW5kbygpCiB7
CiAgICAgbV91bmRvTWFuYWdlci0+dW5kbygpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJlZG8oKQorSFJFU1VMVCBVSURlbGVn
YXRlOjpyZWRvKCkKIHsKICAgICBtX3VuZG9NYW5hZ2VyLT5yZWRvKCk7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6Y2FuVW5kbygK
LSAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxUIFVJRGVs
ZWdhdGU6OmNhblVuZG8oQk9PTCogcmVzdWx0KQogewogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwpAQCAtMjY5LDggKzI2MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgVUlEZWxlZ2F0ZTo6Y2EKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjYW5SZWRvKAotICAgICAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6Y2FuUmVkbyhCT09M
KiByZXN1bHQpCiB7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CkBAIC0yNzksMTYgKzI2OSwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdh
dGU6OmNhCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
VUlEZWxlZ2F0ZTo6cHJpbnRGcmFtZSggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmll
dywKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpCitIUkVTVUxUIFVJRGVsZWdhdGU6
OnByaW50RnJhbWUoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBJV2ViRnJhbWUqIC8qZnJhbWUqLykK
IHsKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OmZ0cERpcmVjdG9yeVRlbXBsYXRlUGF0aCggCi0gICAgLyogW2luXSAqLyBJ
V2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIgKnBhdGgpCitI
UkVTVUxUIFVJRGVsZWdhdGU6OmZ0cERpcmVjdG9yeVRlbXBsYXRlUGF0aChJV2ViVmlldyogLyp3
ZWJWaWV3Ki8sIEJTVFIqIHBhdGgpCiB7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOwpAQCAtMjk3LDkgKzI4Myw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
VUlEZWxlZ2F0ZTo6ZnQKIH0KIAogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdh
dGU6OndlYlZpZXdIZWFkZXJIZWlnaHQoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZp
ZXcsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBmbG9hdCAqcmVzdWx0KQorSFJFU1VMVCBVSURl
bGVnYXRlOjp3ZWJWaWV3SGVhZGVySGVpZ2h0KElXZWJWaWV3KiAvKndlYlZpZXcqLywgZmxvYXQq
IHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsK
QEAgLTMwNyw5ICsyOTEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6
OndlCiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBVSURlbGVnYXRlOjp3ZWJWaWV3Rm9vdGVySGVpZ2h0KCAKLSAgICAvKiBbaW5dICovIElXZWJW
aWV3ICp3ZWJWaWV3LAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gZmxvYXQgKnJlc3VsdCkKK0hS
RVNVTFQgVUlEZWxlZ2F0ZTo6d2ViVmlld0Zvb3RlckhlaWdodChJV2ViVmlldyogLyp3ZWJWaWV3
Ki8sIGZsb2F0KiByZXN1bHQpCiB7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CkBAIC0zMTcsNTUgKzI5OSwzNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OndlCiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkcmF3SGVhZGVySW5SZWN0KCAKLSAgICAvKiBbaW5d
ICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gUkVDVCAqcmVjdCwKLSAgICAv
KiBbaW5dICovIE9MRV9IQU5ETEUgZHJhd2luZ0NvbnRleHQpCitIUkVTVUxUIFVJRGVsZWdhdGU6
OmRyYXdIZWFkZXJJblJlY3QoSVdlYlZpZXcqIC8qd2ViVmlldyovLCBSRUNUKiAvKnJlY3QqLywg
T0xFX0hBTkRMRSAvKmRyYXdpbmdDb250ZXh0Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsK
IH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkcmF3Rm9vdGVySW5S
ZWN0KCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8g
UkVDVCAqcmVjdCwKLSAgICAvKiBbaW5dICovIE9MRV9IQU5ETEUgZHJhd2luZ0NvbnRleHQsCi0g
ICAgLyogW2luXSAqLyBVSU5UIHBhZ2VJbmRleCwKLSAgICAvKiBbaW5dICovIFVJTlQgcGFnZUNv
dW50KQorSFJFU1VMVCBVSURlbGVnYXRlOjpkcmF3Rm9vdGVySW5SZWN0KElXZWJWaWV3KiAvKndl
YlZpZXcqLywgUkVDVCogLypyZWN0Ki8sIE9MRV9IQU5ETEUgLypkcmF3aW5nQ29udGV4dCovLCBV
SU5UIC8qcGFnZUluZGV4Ki8sIFVJTlQgLypwYWdlQ291bnQqLykKIHsKICAgICByZXR1cm4gRV9O
T1RJTVBMOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZp
ZXdQcmludGluZ01hcmdpblJlY3QoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcs
Ci0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBSRUNUICpyZWN0KQorSFJFU1VMVCBVSURlbGVnYXRl
Ojp3ZWJWaWV3UHJpbnRpbmdNYXJnaW5SZWN0KElXZWJWaWV3KiAvKndlYlZpZXcqLywgUkVDVCog
LypyZWN0Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjYW5SdW5Nb2RhbCggCi0gICAgLyogW2luXSAqLyBJV2Vi
VmlldyAqd2ViVmlldywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wgKmNhblJ1bkJvb2xl
YW4pCitIUkVTVUxUIFVJRGVsZWdhdGU6OmNhblJ1bk1vZGFsKElXZWJWaWV3KiAvKndlYlZpZXcq
LywgQk9PTCogLypjYW5SdW5Cb29sZWFuKi8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjcmVhdGVNb2RhbERpYWxv
ZyggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAotICAgIC8qIFtpbl0gKi8gSVdl
YlVSTFJlcXVlc3QgKnJlcXVlc3QsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBJV2ViVmlldyAq
Km5ld1dlYlZpZXcpCitIUkVTVUxUIFVJRGVsZWdhdGU6OmNyZWF0ZU1vZGFsRGlhbG9nKElXZWJW
aWV3KiAvKnNlbmRlciovLCBJV2ViVVJMUmVxdWVzdCogLypyZXF1ZXN0Ki8sIElXZWJWaWV3Kiog
LypuZXdXZWJWaWV3Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydW5Nb2RhbCggCi0gICAgLyogW2luXSAqLyBJ
V2ViVmlldyAqd2ViVmlldykKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6cnVuTW9kYWwoSVdlYlZpZXcq
IC8qd2ViVmlldyovKQogewogICAgIHJldHVybiBFX05PVElNUEw7CiB9CiAKLUhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6aXNNZW51QmFyVmlzaWJsZSggCi0gICAgLyogW2lu
XSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wgKnZp
c2libGUpCitIUkVTVUxUIFVJRGVsZWdhdGU6OmlzTWVudUJhclZpc2libGUoSVdlYlZpZXcqIC8q
d2ViVmlldyovLCBCT09MKiB2aXNpYmxlKQogewogICAgIGlmICghdmlzaWJsZSkKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKQEAgLTM3MywxOCArMzM3LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgVUlEZWxlZ2F0ZTo6aXMKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnNldE1lbnVCYXJWaXNpYmxlKCAKLSAg
ICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gQk9PTCB2aXNp
YmxlKQorSFJFU1VMVCBVSURlbGVnYXRlOjpzZXRNZW51QmFyVmlzaWJsZShJV2ViVmlldyogLyp3
ZWJWaWV3Ki8sIEJPT0wgLyp2aXNpYmxlKi8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydW5EYXRhYmFzZVNpemVM
aW1pdFByb21wdCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAvKiBb
aW5dICovIEJTVFIgZGlzcGxheU5hbWUsCi0gICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmluaXRp
YXRlZEJ5RnJhbWUsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MICphbGxvd2VkKQorSFJF
U1VMVCBVSURlbGVnYXRlOjpydW5EYXRhYmFzZVNpemVMaW1pdFByb21wdChJV2ViVmlldyogLyp3
ZWJWaWV3Ki8sIEJTVFIgLypkaXNwbGF5TmFtZSovLCBJV2ViRnJhbWUqIC8qaW5pdGlhdGVkQnlG
cmFtZSovLCBCT09MKiBhbGxvd2VkKQogewogICAgIGlmICghYWxsb3dlZCkKICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKQEAgLTM5Miw0OCArMzUwLDMwIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgVUlEZWxlZ2F0ZTo6cnUKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKCAKLSAg
ICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgIC8qIFtpbl0gKi8gSERDIGhEQywK
LSAgICAvKiBbaW5dICovIFJFQ1QgcmVjdCwKLSAgICAvKiBbaW5dICovIFdlYlNjcm9sbEJhckNv
bnRyb2xTaXplIHNpemUsCi0gICAgLyogW2luXSAqLyBXZWJTY3JvbGxiYXJDb250cm9sU3RhdGUg
c3RhdGUsCi0gICAgLyogW2luXSAqLyBXZWJTY3JvbGxiYXJDb250cm9sUGFydCBwcmVzc2VkUGFy
dCwKLSAgICAvKiBbaW5dICovIEJPT0wgdmVydGljYWwsCi0gICAgLyogW2luXSAqLyBmbG9hdCB2
YWx1ZSwKLSAgICAvKiBbaW5dICovIGZsb2F0IHByb3BvcnRpb24sCi0gICAgLyogW2luXSAqLyBX
ZWJTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgcGFydHMpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnBh
aW50Q3VzdG9tU2Nyb2xsYmFyKElXZWJWaWV3KiAvKndlYlZpZXcqLywgSERDIC8qaERDKi8sIFJF
Q1QgLypyZWN0Ki8sIFdlYlNjcm9sbEJhckNvbnRyb2xTaXplIC8qc2l6ZSovLCBXZWJTY3JvbGxi
YXJDb250cm9sU3RhdGUgLypzdGF0ZSovLAorICAgIFdlYlNjcm9sbGJhckNvbnRyb2xQYXJ0IC8q
cHJlc3NlZFBhcnQqLywgQk9PTCAvKnZlcnRpY2FsKi8sIGZsb2F0IC8qdmFsdWUqLywgZmxvYXQg
Lypwcm9wb3J0aW9uKi8sIFdlYlNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayAvKnBhcnRzKi8pCiB7
CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBV
SURlbGVnYXRlOjpwYWludEN1c3RvbVNjcm9sbENvcm5lciggCi0gICAgLyogW2luXSAqLyBJV2Vi
VmlldyAqd2ViVmlldywKLSAgICAvKiBbaW5dICovIEhEQyBoREMsCi0gICAgLyogW2luXSAqLyBS
RUNUIHJlY3QpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKElX
ZWJWaWV3KiAvKndlYlZpZXcqLywgSERDIC8qaERDKi8sIFJFQ1QgLypyZWN0Ki8pCiB7CiAgICAg
cmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVn
YXRlOjpzZXRGcmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIC8qc2VuZGVyKi8s
Ci0gICAgICAgIC8qIFtpbl0gKi8gUkVDVCogZnJhbWUpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnNl
dEZyYW1lKElXZWJWaWV3KiAvKnNlbmRlciovLCBSRUNUKiBmcmFtZSkKIHsKICAgICBtX2ZyYW1l
ID0gKmZyYW1lOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFVJRGVsZWdhdGU6OndlYlZpZXdGcmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZp
ZXcqIC8qc2VuZGVyKi8sCi0gICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gUkVDVCogZnJhbWUp
CitIUkVTVUxUIFVJRGVsZWdhdGU6OndlYlZpZXdGcmFtZShJV2ViVmlldyogLypzZW5kZXIqLywg
UkVDVCogZnJhbWUpCiB7CiAgICAgKmZyYW1lID0gbV9mcmFtZTsKICAgICByZXR1cm4gU19PSzsK
IH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydW5KYXZhU2NyaXB0
QWxlcnRQYW5lbFdpdGhNZXNzYWdlKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyogLypz
ZW5kZXIqLywKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIG1lc3NhZ2UpCitIUkVTVUxUIFVJRGVs
ZWdhdGU6OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2UoSVdlYlZpZXcqIC8qc2Vu
ZGVyKi8sIEJTVFIgbWVzc2FnZSkKIHsKICAgICBwcmludGYoIkFMRVJUOiAlU1xuIiwgbWVzc2Fn
ZSA/IG1lc3NhZ2UgOiBMIiIpOwogICAgIGZmbHVzaChzdGRvdXQpOwpAQCAtNDQxLDEwICszODEs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJ1CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6cnVuSmF2
YVNjcmlwdENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3
KiBzZW5kZXIsCi0gICAgLyogW2luXSAqLyBCU1RSIG1lc3NhZ2UsCi0gICAgLyogW3JldHZhbF1b
b3V0XSAqLyBCT09MKiByZXN1bHQpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnJ1bkphdmFTY3JpcHRD
b25maXJtUGFuZWxXaXRoTWVzc2FnZShJV2ViVmlldyogLypzZW5kZXIqLywgQlNUUiBtZXNzYWdl
LCBCT09MKiByZXN1bHQpCiB7CiAgICAgcHJpbnRmKCJDT05GSVJNOiAlU1xuIiwgbWVzc2FnZSA/
IG1lc3NhZ2UgOiBMIiIpOwogICAgICpyZXN1bHQgPSBUUlVFOwpAQCAtNDUyLDExICszODksNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJ1CiAgICAgcmV0dXJuIFNf
T0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6cnVuSmF2YVNj
cmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdCggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAq
c2VuZGVyLAotICAgIC8qIFtpbl0gKi8gQlNUUiBtZXNzYWdlLAotICAgIC8qIFtpbl0gKi8gQlNU
UiBkZWZhdWx0VGV4dCwKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIgKnJlc3VsdCkKK0hS
RVNVTFQgVUlEZWxlZ2F0ZTo6cnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdChJ
V2ViVmlldyogLypzZW5kZXIqLywgQlNUUiBtZXNzYWdlLCBCU1RSIGRlZmF1bHRUZXh0LCBCU1RS
KiByZXN1bHQpCiB7CiAgICAgcHJpbnRmKCJQUk9NUFQ6ICVTLCBkZWZhdWx0IHRleHQ6ICVTXG4i
LCBtZXNzYWdlID8gbWVzc2FnZSA6IEwiIiwgZGVmYXVsdFRleHQgPyBkZWZhdWx0VGV4dCA6IEwi
Iik7CiAgICAgKnJlc3VsdCA9IFN5c0FsbG9jU3RyaW5nKGRlZmF1bHRUZXh0KTsKQEAgLTQ2NCwx
MSArMzk3LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpydQogICAg
IHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6
OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlKCAKLSAgICAvKiBbaW5dICov
IElXZWJWaWV3KiAvKnNlbmRlciovLAotICAgIC8qIFtpbl0gKi8gQlNUUiBtZXNzYWdlLAotICAg
IC8qIFtpbl0gKi8gSVdlYkZyYW1lKiAvKmluaXRpYXRlZEJ5RnJhbWUqLywKLSAgICAvKiBbcmV0
dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6cnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2UoSVdlYlZpZXcqIC8qc2VuZGVyKi8sIEJTVFIg
bWVzc2FnZSwgSVdlYkZyYW1lKiAvKmluaXRpYXRlZEJ5RnJhbWUqLywgQk9PTCogcmVzdWx0KQog
ewogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwpAQCAtNDc3LDEy
ICs0MDYsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnJ1CiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6
d2ViVmlld0FkZE1lc3NhZ2VUb0NvbnNvbGUoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHNl
bmRlciwKLSAgICAvKiBbaW5dICovIEJTVFIgbWVzc2FnZSwKLSAgICAvKiBbaW5dICovIGludCBs
aW5lTnVtYmVyLAotICAgIC8qIFtpbl0gKi8gQlNUUiB1cmwsCi0gICAgLyogW2luXSAqLyBCT09M
IGlzRXJyb3IpCitIUkVTVUxUIFVJRGVsZWdhdGU6OndlYlZpZXdBZGRNZXNzYWdlVG9Db25zb2xl
KElXZWJWaWV3KiAvKnNlbmRlciovLCBCU1RSIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBCU1RS
IHVybCwgQk9PTCBpc0Vycm9yKQogewogICAgIHdzdHJpbmcgbmV3TWVzc2FnZTsKICAgICBpZiAo
bWVzc2FnZSkgewpAQCAtNDk5LDEyICs0MjMsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OndlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgVUlEZWxlZ2F0ZTo6ZG9EcmFnRHJvcCggCi0gICAgLyogW2luXSAqLyBJV2ViVmll
dyogc2VuZGVyLAotICAgIC8qIFtpbl0gKi8gSURhdGFPYmplY3QqIG9iamVjdCwKLSAgICAvKiBb
aW5dICovIElEcm9wU291cmNlKiBzb3VyY2UsCi0gICAgLyogW2luXSAqLyBEV09SRCBva0VmZmVj
dCwKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIERXT1JEKiBwZXJmb3JtZWRFZmZlY3QpCitIUkVT
VUxUIFVJRGVsZWdhdGU6OmRvRHJhZ0Ryb3AoSVdlYlZpZXcqIC8qc2VuZGVyKi8sIElEYXRhT2Jq
ZWN0KiBvYmplY3QsIElEcm9wU291cmNlKiBzb3VyY2UsIERXT1JEIC8qb2tFZmZlY3QqLywgRFdP
UkQqIHBlcmZvcm1lZEVmZmVjdCkKIHsKICAgICBpZiAoIXBlcmZvcm1lZEVmZmVjdCkKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKQEAgLTUyMiwxMCArNDQxLDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkbwogICAgIHJldHVybiBvbGVEcmFnQW5kRHJvcFJldHVy
blZhbHVlOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZp
ZXdHZXREbGdDb2RlKCAKLSAgICAvKiBbaW5dICovIElXZWJWaWV3KiAvKnNlbmRlciovLAotICAg
IC8qIFtpbl0gKi8gVUlOVCAvKmtleUNvZGUqLywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExP
TkdfUFRSICpjb2RlKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJWaWV3R2V0RGxnQ29kZShJV2Vi
VmlldyogLypzZW5kZXIqLywgVUlOVCAvKmtleUNvZGUqLywgTE9OR19QVFIqIGNvZGUpCiB7CiAg
ICAgaWYgKCFjb2RlKQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwpAQCAtNTMzLDEwICs0NDks
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlCiAgICAgcmV0dXJu
IEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpj
cmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICpz
ZW5kZXIsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlVSTFJlcXVlc3QgKnJlcXVlc3QsCi0gICAg
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYlZpZXcgKipuZXdXZWJWaWV3KQorSFJFU1VMVCBV
SURlbGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QoSVdlYlZpZXcqIC8qc2VuZGVyKi8s
IElXZWJVUkxSZXF1ZXN0KiAvKnJlcXVlc3QqLywgSVdlYlZpZXcqKiBuZXdXZWJWaWV3KQogewog
ICAgIGlmICghOjpnVGVzdFJ1bm5lci0+Y2FuT3BlbldpbmRvd3MoKSkKICAgICAgICAgcmV0dXJu
IEVfRkFJTDsKQEAgLTU0NCw4ICs0NTcsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJ
RGVsZWdhdGU6OmNyCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgVUlEZWxlZ2F0ZTo6d2ViVmlld0Nsb3NlKAotICAgICAgICAvKiBbaW5dICovIElXZWJW
aWV3ICpzZW5kZXIpCitIUkVTVUxUIFVJRGVsZWdhdGU6OndlYlZpZXdDbG9zZShJV2ViVmlldyog
c2VuZGVyKQogewogICAgIEhXTkQgaG9zdFdpbmRvdzsKICAgICBzZW5kZXItPmhvc3RXaW5kb3co
cmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFKj4oJmhvc3RXaW5kb3cpKTsKQEAgLTU1Myw4ICs0
NjUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlCiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6d2Vi
Vmlld0ZvY3VzKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VM
VCBVSURlbGVnYXRlOjp3ZWJWaWV3Rm9jdXMoSVdlYlZpZXcqIHNlbmRlcikKIHsKICAgICBIV05E
IGhvc3RXaW5kb3c7CiAgICAgc2VuZGVyLT5ob3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xF
X0hBTkRMRSo+KCZob3N0V2luZG93KSk7CkBAIC01NjIsMzkgKzQ3MywzMCBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlCiAgICAgcmV0dXJuIFNfT0s7IAogfQogCi1I
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZpZXdVbmZvY3VzKCAKLSAg
ICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3
ZWJWaWV3VW5mb2N1cyhJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICBTZXRGb3JlZ3JvdW5k
V2luZG93KEdldERlc2t0b3BXaW5kb3coKSk7CiAgICAgcmV0dXJuIFNfT0s7IAogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OndlYlZpZXdQYWludGVkKCAKLSAgICAg
ICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJW
aWV3UGFpbnRlZChJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICByZXR1cm4gU19PSzsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpleGNlZWRlZERhdGFiYXNl
UXVvdGEoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICpzZW5kZXIsCi0gICAgICAgIC8q
IFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSwKLSAgICAgICAgLyogW2luXSAqLyBJV2ViU2VjdXJp
dHlPcmlnaW4gKm9yaWdpbiwKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIGRhdGFiYXNlSWRlbnRp
ZmllcikKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKElXZWJWaWV3
KiBzZW5kZXIsIElXZWJGcmFtZSogZnJhbWUsIElXZWJTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBC
U1RSIGRhdGFiYXNlSWRlbnRpZmllcikKIHsKLSAgICBCU1RSIHByb3RvY29sOwotICAgIEJTVFIg
aG9zdDsKKyAgICBfYnN0cl90IHByb3RvY29sOworICAgIF9ic3RyX3QgaG9zdDsKICAgICB1bnNp
Z25lZCBzaG9ydCBwb3J0OwogCi0gICAgb3JpZ2luLT5wcm90b2NvbCgmcHJvdG9jb2wpOwotICAg
IG9yaWdpbi0+aG9zdCgmaG9zdCk7CisgICAgb3JpZ2luLT5wcm90b2NvbCgmcHJvdG9jb2wuR2V0
QlNUUigpKTsKKyAgICBvcmlnaW4tPmhvc3QoJmhvc3QuR2V0QlNUUigpKTsKICAgICBvcmlnaW4t
PnBvcnQoJnBvcnQpOwogCiAgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRGF0YWJh
c2VDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxM
QkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46eyVTLCAlUywgJWl9
IGRhdGFiYXNlOiVTXG4iLCBwcm90b2NvbCwgaG9zdCwgcG9ydCwgZGF0YWJhc2VJZGVudGlmaWVy
KTsKIAotICAgIFN5c0ZyZWVTdHJpbmcocHJvdG9jb2wpOwotICAgIFN5c0ZyZWVTdHJpbmcoaG9z
dCk7Ci0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAx
MDI0OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gZ1Rlc3RSdW5uZXItPmRhdGFiYXNl
RGVmYXVsdFF1b3RhKCk7CiAgICAgaWYgKHRlc3REZWZhdWx0UXVvdGEgPj0gMCkKQEAgLTYzMywx
MSArNTM1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpleAogICAg
IHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6
OmVtYmVkZGVkVmlld1dpdGhBcmd1bWVudHMoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKnNl
bmRlciwKLSAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUsCi0gICAgLyogW2luXSAqLyBJ
UHJvcGVydHlCYWcgKmFyZ3VtZW50cywKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIElXZWJFbWJl
ZGRlZFZpZXcgKip2aWV3KQorSFJFU1VMVCBVSURlbGVnYXRlOjplbWJlZGRlZFZpZXdXaXRoQXJn
dW1lbnRzKElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViRnJhbWUqIC8qZnJhbWUqLywgSVByb3Bl
cnR5QmFnKiAvKmFyZ3VtZW50cyovLCBJV2ViRW1iZWRkZWRWaWV3KiogdmlldykKIHsKICAgICBp
ZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CkBAIC02NDUsNTQgKzU0Myw1MCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmVtCiAgICAgcmV0dXJuIEVf
Tk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjp3ZWJW
aWV3Q2xvc2luZyggCi0gICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBV
SURlbGVnYXRlOjp3ZWJWaWV3Q2xvc2luZyhJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICBy
ZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdh
dGU6OndlYlZpZXdTZXRDdXJzb3IoIAotICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRlciwK
LSAgICAvKiBbaW5dICovIE9MRV9IQU5ETEUgY3Vyc29yKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3
ZWJWaWV3U2V0Q3Vyc29yKElXZWJWaWV3KiAvKnNlbmRlciovLCBPTEVfSEFORExFIC8qY3Vyc29y
Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBVSURlbGVnYXRlOjp3ZWJWaWV3RGlkSW52YWxpZGF0ZSggCi0gICAgLyogW2luXSAqLyBJ
V2ViVmlldyAqc2VuZGVyKQorSFJFU1VMVCBVSURlbGVnYXRlOjp3ZWJWaWV3RGlkSW52YWxpZGF0
ZShJV2ViVmlldyogLypzZW5kZXIqLykKIHsKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1I
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnNldFN0YXR1c1RleHQoSVdlYlZp
ZXcqLCBCU1RSIHRleHQpCitIUkVTVUxUIFVJRGVsZWdhdGU6OnNldFN0YXR1c1RleHQoSVdlYlZp
ZXcqLCBCU1RSIHRleHQpCiB7IAogICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFN0YXR1c0NhbGxi
YWNrcygpKQotICAgICAgICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0
U3RhdHVzVGV4dDolc1xuIiwgdGV4dCA/IHRvVVRGOCh0ZXh0KS5jX3N0cigpIDogIiIpOworICAg
ICAgICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDol
U1xuIiwgdGV4dCA/IHRleHQgOiBMIiIpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdh
dGUoSVdlYkRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUqKiByZXN1bHQpCitIUkVTVUxUIFVJ
RGVsZWdhdGU6OmRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUoSVdlYkRlc2t0b3BOb3RpZmlj
YXRpb25zRGVsZWdhdGUqKiByZXN1bHQpCiB7CiAgICAgbV9kZXNrdG9wTm90aWZpY2F0aW9ucy5j
b3B5UmVmVG8ocmVzdWx0KTsKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QoSVdlYlZpZXcq
IHNlbmRlciwgSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsIElQcm9wZXJ0eUJhZyogd2luZG93RmVh
dHVyZXMsIElXZWJWaWV3KiogbmV3V2ViVmlldykKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6Y3JlYXRl
V2ViVmlld1dpdGhSZXF1ZXN0KElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViVVJMUmVxdWVzdCog
LypyZXF1ZXN0Ki8sIElQcm9wZXJ0eUJhZyogLyp3aW5kb3dGZWF0dXJlcyovLCBJV2ViVmlldyoq
IC8qbmV3V2ViVmlldyovKQogewogICAgIHJldHVybiBFX05PVElNUEw7CiB9CiAKLUhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6ZHJhd0JhY2tncm91bmQoSVdlYlZpZXcqIHNl
bmRlciwgT0xFX0hBTkRMRSBoZGMsIGNvbnN0IFJFQ1QqIGRpcnR5UmVjdCkKK0hSRVNVTFQgVUlE
ZWxlZ2F0ZTo6ZHJhd0JhY2tncm91bmQoSVdlYlZpZXcqIC8qc2VuZGVyKi8sIE9MRV9IQU5ETEUg
aGRjLCBjb25zdCBSRUNUKiBkaXJ0eVJlY3QpCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkZWNpZGVQb2xpY3lGb3JH
ZW9sb2NhdGlvblJlcXVlc3QoSVdlYlZpZXcqIHNlbmRlciwgSVdlYkZyYW1lKiBmcmFtZSwgSVdl
YlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIElXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyKiBs
aXN0ZW5lcikKK0hSRVNVTFQgVUlEZWxlZ2F0ZTo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25S
ZXF1ZXN0KElXZWJWaWV3KiAvKnNlbmRlciovLCBJV2ViRnJhbWUqIGZyYW1lLCBJV2ViU2VjdXJp
dHlPcmlnaW4qIC8qb3JpZ2luKi8sIElXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyKiAvKmxp
c3RlbmVyKi8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b24oSURPTUVs
ZW1lbnQqIGVsZW1lbnQpCitIUkVTVUxUIFVJRGVsZWdhdGU6OmRpZFByZXNzTWlzc2luZ1BsdWdp
bkJ1dHRvbihJRE9NRWxlbWVudCogLyplbGVtZW50Ki8pCiB7CiAgICAgcHJpbnRmKCJNSVNTSU5H
IFBMVUdJTiBCVVRUT04gUFJFU1NFRFxuIik7CiAgICAgcmV0dXJuIFNfT0s7CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vV29ya1F1ZXVlSXRlbVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1dvcmtRdWV1ZUl0ZW1XaW4uY3BwCShyZXZpc2lvbiAx
NjcwMjIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vV29ya1F1ZXVlSXRlbVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKIAorI2luY2x1ZGUgPGNvbXV0aWwuaD4KICNpbmNs
dWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5j
bHVkZSA8V2ViS2l0L1dlYktpdC5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXRDT01BUEkuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmQ0YuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNTMsMjggKzU1LDIwIEBAIHN0YXRpYyB3c3RyaW5nIGpzU3RyaW5nUmVm
VG9XU3RyaW5nKEpTU3QKIAogYm9vbCBMb2FkSXRlbTo6aW52b2tlKCkgY29uc3QKIHsKLSAgICB3
c3RyaW5nIHRhcmdldFN0cmluZyA9IGpzU3RyaW5nUmVmVG9XU3RyaW5nKG1fdGFyZ2V0LmdldCgp
KTsKKyAgICBfYnN0cl90IHRhcmdldEJTVFIoSlNTdHJpbmdDb3B5QlNUUihtX3RhcmdldC5nZXQo
KSksIGZhbHNlKTsKIAogICAgIENPTVB0cjxJV2ViRnJhbWU+IHRhcmdldEZyYW1lOwotICAgIGlm
ICh0YXJnZXRTdHJpbmcuZW1wdHkoKSkKKyAgICBpZiAoIXRhcmdldEJTVFIubGVuZ3RoKCkpCiAg
ICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEJTVFIgdGFy
Z2V0QlNUUiA9IFN5c0FsbG9jU3RyaW5nKHRhcmdldFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAg
Ym9vbCBmYWlsZWQgPSBGQUlMRUQoZnJhbWUtPmZpbmRGcmFtZU5hbWVkKHRhcmdldEJTVFIsICZ0
YXJnZXRGcmFtZSkpOwotICAgICAgICBTeXNGcmVlU3RyaW5nKHRhcmdldEJTVFIpOwotICAgICAg
ICBpZiAoZmFpbGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBlbHNl
IGlmIChGQUlMRUQoZnJhbWUtPmZpbmRGcmFtZU5hbWVkKHRhcmdldEJTVFIsICZ0YXJnZXRGcmFt
ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBDT01QdHI8SVdlYlVSTFJlcXVlc3Q+
IHJlcXVlc3Q7CiAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJV
UkxSZXF1ZXN0LCAwLCBJSURfSVdlYlVSTFJlcXVlc3QsICh2b2lkKiopJnJlcXVlc3QpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgd3N0cmluZyB1cmxTdHJpbmcgPSBqc1N0cmluZ1Jl
ZlRvV1N0cmluZyhtX3VybC5nZXQoKSk7Ci0gICAgQlNUUiB1cmxCU1RSID0gU3lzQWxsb2NTdHJp
bmcodXJsU3RyaW5nLmNfc3RyKCkpOwotICAgIGJvb2wgZmFpbGVkID0gRkFJTEVEKHJlcXVlc3Qt
PmluaXRXaXRoVVJMKHVybEJTVFIsIFdlYlVSTFJlcXVlc3RVc2VQcm90b2NvbENhY2hlUG9saWN5
LCA2MCkpOwotICAgIFN5c0ZyZWVTdHJpbmcodXJsQlNUUik7Ci0gICAgaWYgKGZhaWxlZCkKKyAg
ICBfYnN0cl90IHVybEJTVFIoSlNTdHJpbmdDb3B5QlNUUihtX3VybC5nZXQoKSksIGZhbHNlKTsK
KyAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPmluaXRXaXRoVVJMKHVybEJTVFIsIFdlYlVSTFJlcXVl
c3RVc2VQcm90b2NvbENhY2hlUG9saWN5LCA2MCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICB0YXJnZXRGcmFtZS0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CkBAIC04MywyNyAr
NzcsMTcgQEAgYm9vbCBMb2FkSXRlbTo6aW52b2tlKCkgY29uc3QKIAogYm9vbCBMb2FkSFRNTFN0
cmluZ0l0ZW06Omludm9rZSgpIGNvbnN0CiB7Ci0gICAgd3N0cmluZyBjb250ZW50ID0ganNTdHJp
bmdSZWZUb1dTdHJpbmcobV9jb250ZW50LmdldCgpKTsKLSAgICB3c3RyaW5nIGJhc2VVUkwgPSBq
c1N0cmluZ1JlZlRvV1N0cmluZyhtX2Jhc2VVUkwuZ2V0KCkpOwotCi0gICAgQlNUUiBjb250ZW50
QlNUUiA9IFN5c0FsbG9jU3RyaW5nKGNvbnRlbnQuY19zdHIoKSk7Ci0gICAgQlNUUiBiYXNlVVJM
QlNUUiA9IFN5c0FsbG9jU3RyaW5nKGJhc2VVUkwuY19zdHIoKSk7CisgICAgX2JzdHJfdCBjb250
ZW50QlNUUihKU1N0cmluZ0NvcHlCU1RSKG1fY29udGVudC5nZXQoKSksIGZhbHNlKTsKKyAgICBf
YnN0cl90IGJhc2VVUkxCU1RSKEpTU3RyaW5nQ29weUJTVFIobV9iYXNlVVJMLmdldCgpKSwgZmFs
c2UpOwogCiAgICAgaWYgKG1fdW5yZWFjaGFibGVVUkwpIHsKLSAgICAgICAgd3N0cmluZyB1bnJl
YWNoYWJsZVVSTCA9IGpzU3RyaW5nUmVmVG9XU3RyaW5nKG1fdW5yZWFjaGFibGVVUkwuZ2V0KCkp
OwotICAgICAgICBCU1RSIHVucmVhY2hhYmxlVVJMQlNUUiA9IFN5c0FsbG9jU3RyaW5nKHVucmVh
Y2hhYmxlVVJMLmNfc3RyKCkpOworICAgICAgICBfYnN0cl90IHVucmVhY2hhYmxlVVJMQlNUUihK
U1N0cmluZ0NvcHlCU1RSKG1fdW5yZWFjaGFibGVVUkwuZ2V0KCkpLCBmYWxzZSk7CiAgICAgICAg
IGZyYW1lLT5sb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhjb250ZW50QlNUUiwgYmFzZVVSTEJTVFIs
IHVucmVhY2hhYmxlVVJMQlNUUik7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcoY29udGVudEJTVFIp
OwotICAgICAgICBTeXNGcmVlU3RyaW5nKGJhc2VVUkxCU1RSKTsKLSAgICAgICAgU3lzRnJlZVN0
cmluZyh1bnJlYWNoYWJsZVVSTEJTVFIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICAgICBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoY29udGVudEJTVFIsIGJhc2VVUkxCU1RSKTsKIAot
ICAgIFN5c0ZyZWVTdHJpbmcoY29udGVudEJTVFIpOwotICAgIFN5c0ZyZWVTdHJpbmcoYmFzZVVS
TEJTVFIpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEyNywxMyArMTExLDEwIEBAIGJv
b2wgU2NyaXB0SXRlbTo6aW52b2tlKCkgY29uc3QKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJW
aWV3KCZ3ZWJWaWV3KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHdzdHJpbmcgc2Ny
aXB0U3RyaW5nID0ganNTdHJpbmdSZWZUb1dTdHJpbmcobV9zY3JpcHQuZ2V0KCkpOworICAgIF9i
c3RyX3Qgc2NyaXB0QlNUUihKU1N0cmluZ0NvcHlCU1RSKG1fc2NyaXB0LmdldCgpKSwgZmFsc2Up
OwogCi0gICAgQlNUUiByZXN1bHQ7Ci0gICAgQlNUUiBzY3JpcHRCU1RSID0gU3lzQWxsb2NTdHJp
bmcoc2NyaXB0U3RyaW5nLmNfc3RyKCkpOwotICAgIHdlYlZpZXctPnN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nKHNjcmlwdEJTVFIsICZyZXN1bHQpOwotICAgIFN5c0ZyZWVT
dHJpbmcocmVzdWx0KTsKLSAgICBTeXNGcmVlU3RyaW5nKHNjcmlwdEJTVFIpOworICAgIF9ic3Ry
X3QgcmVzdWx0OworICAgIHdlYlZpZXctPnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9t
U3RyaW5nKHNjcmlwdEJTVFIsICZyZXN1bHQuR2V0QlNUUigpKTsKIAogICAgIHJldHVybiB0cnVl
OwogfQo=
</data>
<flag name="review"
          id="253327"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>