<?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>62069</bug_id>
          
          <creation_ts>2011-06-03 16:48:43 -0700</creation_ts>
          <short_desc>Move file-choosing and icon-loading management to FileInputType</short_desc>
          <delta_ts>2011-06-22 23:04:59 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>62748</dependson>
    
    <dependson>62756</dependson>
    
    <dependson>62931</dependson>
    
    <dependson>63039</dependson>
    
    <dependson>63222</dependson>
    
    <dependson>63224</dependson>
          <blocked>62153</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>jianli</cc>
    
    <cc>keishi</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>415286</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-03 16:48:43 -0700</bug_when>
    <thetext>Make FileInputType a FileChooserClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415289</commentid>
    <comment_count>1</comment_count>
      <attachid>95988</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-03 16:49:46 -0700</bug_when>
    <thetext>Created attachment 95988
WIP: First stab.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415294</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-03 16:51:29 -0700</bug_when>
    <thetext>RenderObject seems like a bad candidate to be a FileChooserClient -- its lifetime is just too volatile. What if we just made FileInputType the FileChooserClient?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415297</commentid>
    <comment_count>3</comment_count>
      <attachid>95988</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-03 16:56:04 -0700</bug_when>
    <thetext>Comment on attachment 95988
WIP: First stab.

Attachment 95988 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8766120</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415337</commentid>
    <comment_count>4</comment_count>
      <attachid>95988</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-03 17:52:09 -0700</bug_when>
    <thetext>Comment on attachment 95988
WIP: First stab.

Attachment 95988 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8763272</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415770</commentid>
    <comment_count>5</comment_count>
      <attachid>95988</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-06-06 03:48:38 -0700</bug_when>
    <thetext>Comment on attachment 95988
WIP: First stab.

View in context: https://bugs.webkit.org/attachment.cgi?id=95988&amp;action=review

&gt; Source/WebCore/html/FileInputType.cpp:48
&gt; +// FIXME: Doesn&apos;t look like I need this code?!

The purpose of this is to pass already-selected files to a FileChooser.
The FileChooser can open a directory in which the selected files is, or provide a UI to remove a part of the selected files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415889</commentid>
    <comment_count>6</comment_count>
      <attachid>95988</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-06 10:42:24 -0700</bug_when>
    <thetext>Comment on attachment 95988
WIP: First stab.

View in context: https://bugs.webkit.org/attachment.cgi?id=95988&amp;action=review

&gt;&gt; Source/WebCore/html/FileInputType.cpp:48
&gt;&gt; +// FIXME: Doesn&apos;t look like I need this code?!
&gt; 
&gt; The purpose of this is to pass already-selected files to a FileChooser.
&gt; The FileChooser can open a directory in which the selected files is, or provide a UI to remove a part of the selected files.

But if the lifetime of FileChooser is now tied to FileInputType. How can there be already-selected files in a newly-constructed FileInputType?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416027</commentid>
    <comment_count>7</comment_count>
      <attachid>96128</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-06 14:50:20 -0700</bug_when>
    <thetext>Created attachment 96128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416112</commentid>
    <comment_count>8</comment_count>
      <attachid>95988</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-06-06 16:33:46 -0700</bug_when>
    <thetext>Comment on attachment 95988
WIP: First stab.

View in context: https://bugs.webkit.org/attachment.cgi?id=95988&amp;action=review

&gt;&gt;&gt; Source/WebCore/html/FileInputType.cpp:48
&gt;&gt;&gt; +// FIXME: Doesn&apos;t look like I need this code?!
&gt;&gt; 
&gt;&gt; The purpose of this is to pass already-selected files to a FileChooser.
&gt;&gt; The FileChooser can open a directory in which the selected files is, or provide a UI to remove a part of the selected files.
&gt; 
&gt; But if the lifetime of FileChooser is now tied to FileInputType. How can there be already-selected files in a newly-constructed FileInputType?

Yes.  IMO, we should
 * Follow the assumption that a FileChooser instance is created when we need to open a file chooser dialog, not in FileInputType constructor, or
 * Remove FileChooser::m_filenames.  It&apos;s redundant because we have FileInputType::m_fileList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416114</commentid>
    <comment_count>9</comment_count>
      <attachid>96128</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-06-06 16:37:51 -0700</bug_when>
    <thetext>Comment on attachment 96128
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=96128&amp;action=review

&gt; Source/WebCore/html/FileInputType.cpp:309
&gt; +    element()-&gt;dispatchFormControlChangeEvent();
&gt; + 
&gt; +    repaint();

dispatchFormControlChangeEvent() dispatches a synchronous event, a JavaScript code might run in an event handler, and it might change the type of the &lt;input&gt;.
So this FileInputType might be deleted after dispatchFromControlChangeEvent().  We should not call repaint().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416577</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 09:50:27 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 96128 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96128&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/FileInputType.cpp:309
&gt; &gt; +    element()-&gt;dispatchFormControlChangeEvent();
&gt; &gt; + 
&gt; &gt; +    repaint();
&gt; 
&gt; dispatchFormControlChangeEvent() dispatches a synchronous event, a JavaScript code might run in an event handler, and it might change the type of the &lt;input&gt;.
&gt; So this FileInputType might be deleted after dispatchFromControlChangeEvent().  We should not call repaint().

Oooh. good point. Let me think on this a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416637</commentid>
    <comment_count>11</comment_count>
      <attachid>96128</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 10:57:55 -0700</bug_when>
    <thetext>Comment on attachment 96128
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=96128&amp;action=review

&gt;&gt;&gt; Source/WebCore/html/FileInputType.cpp:309

&gt;&gt; 
&gt;&gt; dispatchFormControlChangeEvent() dispatches a synchronous event, a JavaScript code might run in an event handler, and it might change the type of the &lt;input&gt;.
&gt;&gt; So this FileInputType might be deleted after dispatchFromControlChangeEvent().  We should not call repaint().
&gt; 
&gt; Oooh. good point. Let me think on this a bit.

This one is easy. I can just move dispatchFormControlChangeEvent to the end of this function. However, we should probably consider switching change event to become a scoped event, to avoid this in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416684</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 11:49:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 95988 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95988&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/html/FileInputType.cpp:48
&gt; &gt;&gt;&gt; +// FIXME: Doesn&apos;t look like I need this code?!
&gt; &gt;&gt; 
&gt; &gt;&gt; The purpose of this is to pass already-selected files to a FileChooser.
&gt; &gt;&gt; The FileChooser can open a directory in which the selected files is, or provide a UI to remove a part of the selected files.
&gt; &gt; 
&gt; &gt; But if the lifetime of FileChooser is now tied to FileInputType. How can there be already-selected files in a newly-constructed FileInputType?
&gt; 
&gt; Yes.  IMO, we should
&gt;  * Follow the assumption that a FileChooser instance is created when we need to open a file chooser dialog, not in FileInputType constructor, or

I tried this first. You can&apos;t really do this elegantly, since fileChooser() is queried by RenderFileUploadControl (to draw icon and text), so it has to exist longer than that. Perhaps once we switch to purely CSS rendering, we could take this step, but at the moment it&apos;s not really possible.

&gt;  * Remove FileChooser::m_filenames.  It&apos;s redundant because we have FileInputType::m_fileList.

I tried this next. Once again, the entanglement with rendering spoils everything. In this case, loadIcon and basenameForWidth need to know about the list of files, and adding filenames as parameter seems inelegant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416873</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 15:52:18 -0700</bug_when>
    <thetext>Perhaps what I need to do first is decouple concerns of rendering from FileChooser. It&apos;s wrong for it to be providing rendering feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425963</commentid>
    <comment_count>14</comment_count>
      <attachid>98314</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-22 22:45:09 -0700</bug_when>
    <thetext>Created attachment 98314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425966</commentid>
    <comment_count>15</comment_count>
      <attachid>98314</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-06-22 22:59:00 -0700</bug_when>
    <thetext>Comment on attachment 98314
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=98314&amp;action=review

&gt; Source/WebCore/html/HTMLInputElement.cpp:1273
&gt; +    ASSERT(m_inputType-&gt;isFileUpload());
&gt; +    m_inputType-&gt;receiveDroppedFiles(filenames);

InputType::receiveDroppedFiles() has ASSERT_NOT_REACHED().  So the assertion here is redundant.

&gt; Source/WebCore/html/HTMLInputElement.cpp:1279
&gt; +    ASSERT(m_inputType-&gt;isFileUpload());
&gt; +    return m_inputType-&gt;icon();

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425969</commentid>
    <comment_count>16</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-22 23:04:14 -0700</bug_when>
    <thetext>Thanks for review! Will fix nits upon landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425970</commentid>
    <comment_count>17</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-22 23:04:59 -0700</bug_when>
    <thetext>Committed r89535: &lt;http://trac.webkit.org/changeset/89535&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95988</attachid>
            <date>2011-06-03 16:49:46 -0700</date>
            <delta_ts>2011-06-06 16:33:46 -0700</delta_ts>
            <desc>WIP: First stab.</desc>
            <filename>bug-62069-20110603164945.patch</filename>
            <type>text/plain</type>
            <size>26829</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgwNDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ODBmMDEwNDhkOTdkYjBh
NThhMGE1N2U1MDdjOWYyYTU3MGNjYjRiLi5lYzlmMGQ5Y2Y2OTI1MTc0ZDdhNzJjZGM3ZjljNDlh
MzRiMjU5MzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTEtMDYtMDMgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEZpbGVJbnB1dFR5cGUgYSBGaWxlQ2hv
b3NlckNsaWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYyMDY5CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBo
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
RmlsZUlucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjp+RmlsZUlu
cHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVDaG9vc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6c2V0RmlsZUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6Y2hyb21lKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVJbnB1dFR5cGU6OmNsZWFyRmlsZUNob29zZXJJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6aWNvbkxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5w
dXRUeXBlOjphbGxvd3NNdWx0aXBsZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1
dFR5cGU6OmFsbG93c0RpcmVjdG9yeVVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5w
dXRUeXBlOjphY2NlcHRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpj
aG9vc2VJY29uRm9yRmlsZXMpOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5oOgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpmaWxlQ2hvb3Nlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpyZWNlaXZlRHJvcHBlZEZpbGVzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dFR5cGU6OmZpbGVDaG9vc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlw
ZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAg
ICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdD
b250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6aWNvbkxvYWRlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp+UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVwZGF0ZUZyb21FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjptYXhGaWxlbmFt
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWlu
dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Zmls
ZVRleHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
ZmlsZUNob29zZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5oOgorCiAyMDExLTA2LTAzICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5jcHAKaW5kZXggZTdkY2Q1YzEyZTFhZDllOWI3ZjA3MmVhODJkMWY0MDJiMDZkNzZmYS4u
ODc1MjkwMjA2ZTM0Mzk4NWJjNDk0NGVlYTYxNzlkNWY0YTMwYjZkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwCkBAIC0yMiwxNCArMjIsMTcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGaWxlSW5wdXRUeXBlLmgiCiAKKyNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJGaWxlTGlz
dC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTQyLDYgKzQ1LDE5IEBAIGlubGluZSBGaWxlSW5wdXRUeXBlOjpGaWxlSW5wdXRUeXBlKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBCYXNlQnV0dG9uSW5wdXRUeXBlKGVsZW1lbnQp
CiAgICAgLCBtX2ZpbGVMaXN0KEZpbGVMaXN0OjpjcmVhdGUoKSkKIHsKKy8vIEZJWE1FOiBEb2Vz
bid0IGxvb2sgbGlrZSBJIG5lZWQgdGhpcyBjb2RlPyEKKy8vICAgIEZpbGVMaXN0KiBsaXN0ID0g
aW5wdXQtPmZpbGVzKCk7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOworLy8gICAgdW5z
aWduZWQgbGVuZ3RoID0gbGlzdCA/IGxpc3QtPmxlbmd0aCgpIDogMDsKKy8vICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKy8vICAgICAgICBmaWxlbmFtZXMuYXBwZW5k
KGxpc3QtPml0ZW0oaSktPnBhdGgoKSk7CisgICAgbV9maWxlQ2hvb3NlciA9IEZpbGVDaG9vc2Vy
OjpjcmVhdGUodGhpcywgZmlsZW5hbWVzKTsKK30KKworRmlsZUlucHV0VHlwZTo6fkZpbGVJbnB1
dFR5cGUoKQoreworICAgIC8vIEZJWE1FOiBEbyBJIG5lZWQgdGhpcyBhbnltb3JlPyEKKyAgICBt
X2ZpbGVDaG9vc2VyLT5kaXNjb25uZWN0Q2xpZW50KCk7CiB9CiAKIFBhc3NPd25QdHI8SW5wdXRU
eXBlPiBGaWxlSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKQEAg
LTk3LDcgKzExMywxMSBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZl
bnQoRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChlbGVtZW50KCktPmRpc2FibGVkKCkgfHwgIWVs
ZW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHRvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2woZWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Y2xpY2soKTsKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGNhbGwgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCkuCisgICAgaWYgKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50KCkt
PmRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
KSB7CisgICAgICAgIGlmIChDaHJvbWUqIGNocm9tZVBvaW50ZXIgPSBjaHJvbWUoKSkKKyAgICAg
ICAgICAgIGNocm9tZVBvaW50ZXItPnJ1bk9wZW5QYW5lbChlbGVtZW50KCktPmRvY3VtZW50KCkt
PmZyYW1lKCksIG1fZmlsZUNob29zZXIpOworICAgIH0KICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKIH0KIApAQCAtMTIxLDExICsxNDEsMzEgQEAgYm9vbCBGaWxlSW5wdXRUeXBlOjpj
YW5DaGFuZ2VGcm9tQW5vdGhlclR5cGUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
RmlsZUNob29zZXIqIEZpbGVJbnB1dFR5cGU6OmZpbGVDaG9vc2VyKCkKK3sKKyAgICByZXR1cm4g
bV9maWxlQ2hvb3Nlci5nZXQoKTsKK30KKwogRmlsZUxpc3QqIEZpbGVJbnB1dFR5cGU6OmZpbGVz
KCkKIHsKICAgICByZXR1cm4gbV9maWxlTGlzdC5nZXQoKTsKIH0KIAordm9pZCBGaWxlSW5wdXRU
eXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sK
KyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBpZiAoYWxsb3dzRGlyZWN0b3J5VXBs
b2FkKCkpIHsKKyAgICAgICAgcmVjZWl2ZURyb3BGb3JEaXJlY3RvcnlVcGxvYWQocGF0aHMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoYWxsb3dzTXVsdGlwbGVG
aWxlcygpKQorICAgICAgICBtX2ZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlcyhwYXRocyk7CisgICAg
ZWxzZQorICAgICAgICBtX2ZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlKHBhdGhzWzBdKTsKK30KKwog
Ym9vbCBGaWxlSW5wdXRUeXBlOjpjYW5TZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewog
ICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCB3ZSBkb24ndCBhbGxvdyBzZXR0aW5nIHRoZSBm
aWxlbmFtZSwgYnV0IHdlIGRvIGFsbG93IGNsZWFyaW5nIGl0LgpAQCAtMTgwLDEyICsyMjAsMTQg
QEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRGaWxlTGlzdChjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGF0aHMpCiAgICAgICAgICAgICBTdHJpbmcgcmVsYXRpdmVQYXRoID0gcGF0aHNbaV0uc3Vic3Ry
aW5nKDEgKyByb290UGF0aC5sZW5ndGgoKSkucmVwbGFjZSgnXFwnLCAnLycpOwogICAgICAgICAg
ICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgocGF0aHNb
aV0sIHJlbGF0aXZlUGF0aCkpOwogICAgICAgICB9CisgICAgICAgIGNsZWFyRmlsZUNob29zZXJJ
Zk5lZWRlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZp
bGU6OmNyZWF0ZShwYXRoc1tpXSkpOworICAgIGNsZWFyRmlsZUNob29zZXJJZk5lZWRlZCgpOwog
fQogCiBib29sIEZpbGVJbnB1dFR5cGU6OmlzRmlsZVVwbG9hZCgpIGNvbnN0CkBAIC0xOTMsNCAr
MjM1LDg5IEBAIGJvb2wgRmlsZUlucHV0VHlwZTo6aXNGaWxlVXBsb2FkKCkgY29uc3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorQ2hyb21lKiBGaWxlSW5wdXRUeXBlOjpjaHJvbWUoKSBjb25zdAor
eworICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBw
YWdlLT5jaHJvbWUoKTsKK30KKworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQordm9pZCBG
aWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcEZvckRpcmVjdG9yeVVwbG9hZChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpCit7CisgICAgaWYgKENocm9tZSogY2hyb21lUG9pbnRlciA9IGNocm9t
ZSgpKQorICAgICAgICBjaHJvbWVQb2ludGVyLT5lbnVtZXJhdGVDaG9zZW5EaXJlY3RvcnkocGF0
aHNbMF0sIG1fZmlsZUNob29zZXIuZ2V0KCkpOworfQorI2VuZGlmCisKK3ZvaWQgRmlsZUlucHV0
VHlwZTo6Y2xlYXJGaWxlQ2hvb3NlcklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fZmlsZUxpc3Qt
PmlzRW1wdHkoKSB8fCBtX2ZpbGVDaG9vc2VyLT5maWxlbmFtZXMoKS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fZmlsZUNob29zZXItPmNsZWFyKCk7CisgICAgLy8gRklYTUU6
IEVYVEVSTUlOQVRFISEhcworICAgIGlmIChlbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAg
IGVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworfQorCit2b2lkIEZpbGVJbnB1dFR5
cGU6OnZhbHVlQ2hhbmdlZCgpCit7CisgICAgLy8gZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2
ZW50IG1heSBkZXN0cm95IHRoaXMgcmVuZGVyZXIKKyAgICAvLyBGSVhNRTogV0hBVCBET0VTIFRI
RSBDT01NRU5UIEFCT1ZFIE1FQU4gTk9XPyEKKyAgICBSZWZQdHI8RmlsZUNob29zZXI+IGZpbGVD
aG9vc2VyID0gbV9maWxlQ2hvb3NlcjsKKworICAgIHNldEZpbGVMaXN0KGZpbGVDaG9vc2VyLT5m
aWxlbmFtZXMoKSk7CisKKyAgICBlbGVtZW50KCktPnNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVz
UmVuZGVyZXIodHJ1ZSk7CisgICAgZWxlbWVudCgpLT5ub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7
CisgICAgZWxlbWVudCgpLT5zZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKworICAgIGVsZW1lbnQo
KS0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CisgCisgICAgLy8gb25seSByZXBh
aW50IGlmIGl0IGRvZXNuJ3Qgc2VlbSB3ZSBoYXZlIGJlZW4gZGVzdHJveWVkCisgICAgaWYgKGVs
ZW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICAgICAgZWxlbWVudCgpLT5yZW5kZXJlcigpLT5yZXBh
aW50KCk7Cit9CisKK3ZvaWQgRmlsZUlucHV0VHlwZTo6aWNvbkxvYWRlZCgpCit7CisgICAgLy8g
RklYTUU6IFRISVMgU0hPVUxEIEJFIEJFVFRFUiEKKyAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJl
cigpKQorICAgICAgICBlbGVtZW50KCktPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKK30KKworYm9v
bCBGaWxlSW5wdXRUeXBlOjphbGxvd3NNdWx0aXBsZUZpbGVzKCkKK3sKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKKyAgICBpZiAoYWxsb3dzRGlyZWN0b3J5VXBsb2FkKCkpCisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGVsZW1lbnQoKS0+ZmFzdEhhc0F0dHJp
YnV0ZShtdWx0aXBsZUF0dHIpOworfQorCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCiti
b29sIEZpbGVJbnB1dFR5cGU6OmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpCit7CisgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICByZXR1cm4gaW5wdXQtPmZhc3RIYXNBdHRyaWJ1dGUod2Via2l0ZGlyZWN0b3J5QXR0
cik7Cit9CisjZW5kaWYKKworU3RyaW5nIEZpbGVJbnB1dFR5cGU6OmFjY2VwdFR5cGVzKCkKK3sK
KyAgICByZXR1cm4gZWxlbWVudCgpLT5hY2NlcHQoKTsKK30KKwordm9pZCBGaWxlSW5wdXRUeXBl
OjpjaG9vc2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqIGNob29zZXIsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgaWYgKENocm9tZSogY2hyb21lUG9pbnRlciA9IGNo
cm9tZSgpKQorICAgICAgICBjaHJvbWVQb2ludGVyLT5jaG9vc2VJY29uRm9yRmlsZXMoZmlsZW5h
bWVzLCBjaG9vc2VyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ZpbGVJbnB1dFR5cGUuaAppbmRleCA2ZDc5ZWNkYzc1YzdkOWZhYjhjNjRkMjBmNzdlYTYzZWM4
ODk5Nzc4Li5lZGY2MDFlMGRiOTg1NmYzZjU4NTVhYTA0MWE4ZTA1MzdlMDkxZDk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaApAQCAtMzMsMTUgKzMzLDE4IEBACiAjZGVmaW5lIEZp
bGVJbnB1dFR5cGVfaAogCiAjaW5jbHVkZSAiQmFzZUJ1dHRvbklucHV0VHlwZS5oIgorI2luY2x1
ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIENocm9tZTsKIGNsYXNzIEZpbGVMaXN0OwogCi1jbGFzcyBGaWxl
SW5wdXRUeXBlIDogcHVibGljIEJhc2VCdXR0b25JbnB1dFR5cGUgeworY2xhc3MgRmlsZUlucHV0
VHlwZSA6IHB1YmxpYyBCYXNlQnV0dG9uSW5wdXRUeXBlLCBwcml2YXRlIEZpbGVDaG9vc2VyQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShI
VE1MSW5wdXRFbGVtZW50Kik7CisgICAgdmlydHVhbCB+RmlsZUlucHV0VHlwZSgpOwogCiBwcml2
YXRlOgogICAgIEZpbGVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOwpAQCAtNTMsMTQgKzU2
LDMyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
U2V0U3RyaW5nVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2hhbmdlRnJvbUFu
b3RoZXJUeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBGaWxlQ2hvb3NlciogZmlsZUNob29zZXIo
KTsKICAgICB2aXJ0dWFsIEZpbGVMaXN0KiBmaWxlcygpOworICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlRHJvcHBlZEZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgdmlydHVhbCBib29s
IGNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUeXBlU3Bl
Y2lmaWNWYWx1ZShTdHJpbmcmKTsgLy8gQ2hlY2tlZCBmaXJzdCwgYmVmb3JlIGludGVybmFsIHN0
b3JhZ2Ugb3IgdGhlIHZhbHVlIGF0dHJpYnV0ZS4KICAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFs
dWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUxpc3Qo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlVXBs
b2FkKCkgY29uc3Q7CiAKKyAgICBDaHJvbWUqIGNocm9tZSgpIGNvbnN0OworI2lmIEVOQUJMRShE
SVJFQ1RPUllfVVBMT0FEKQorICAgIHZvaWQgcmVjZWl2ZURyb3BGb3JEaXJlY3RvcnlVcGxvYWQo
Y29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKyNlbmRpZgorICAgIHZvaWQgY2xlYXJGaWxlQ2hvb3Nl
cklmTmVlZGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKCk7CisgICAgdmly
dHVhbCB2b2lkIGljb25Mb2FkZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzTXVsdGlwbGVG
aWxlcygpOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIHZpcnR1YWwgYm9vbCBh
bGxvd3NEaXJlY3RvcnlVcGxvYWQoKTsKKyNlbmRpZgorICAgIHZpcnR1YWwgU3RyaW5nIGFjY2Vw
dFR5cGVzKCk7CisgICAgdmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hvb3Nl
ciosIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKICAgICBSZWZQdHI8RmlsZUxpc3Q+IG1fZmls
ZUxpc3Q7CisgICAgUmVmUHRyPEZpbGVDaG9vc2VyPiBtX2ZpbGVDaG9vc2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggOTQxNjc1NDZhZmUxOTNiMGVmZDFiNmU4NjgzNDZjZGFhZDgxYjFmYS4uMzQxMmFj
OWI0MzZmYjY1ZWRkZmVmYWE2MjcwMjUxNWZkN2I2NTRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCkBAIC0xMDU4LDcgKzEw
NTksNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0
Y2hlZCgpIGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVy
ZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAvLyBGaWxlIHVwbG9hZCBjb250cm9scyB3
aWxsIGFsd2F5cyB1c2Ugc2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIuCisgICAgLy8gRmlsZSB1cGxv
YWQgY29udHJvbHMgZG8gbm90IHVzZSB0aGlzIGxvZ2ljLgogICAgIEFTU0VSVCghaXNGaWxlVXBs
b2FkKCkpOwogCiAgICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmluZygpOwpAQCAtMTA4NiwxNSAr
MTA4Nyw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRBdXRvZmlsbGVkKGZhbHNlKTsKIH0KIAotdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJlcihjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpCi17Ci0gICAgbV9pbnB1dFR5cGUtPnNldEZpbGVMaXN0KHBhdGhzKTsKLQot
ICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7Ci0gICAgbm90aWZ5
Rm9ybVN0YXRlQ2hhbmdlZCgpOwotICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwotfQotCiB2
b2lkKiBIVE1MSW5wdXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2
ZW50ICYmIG1faW5wdXRUeXBlLT5zaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KSkgewpAQCAt
MTI3MSwxMSArMTI2MywyMSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQo
Ym9vbCBhdXRvZmlsbGVkKQogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAorRmlsZUNo
b29zZXIqIEhUTUxJbnB1dEVsZW1lbnQ6OmZpbGVDaG9vc2VyKCkKK3sKKyAgICByZXR1cm4gbV9p
bnB1dFR5cGUtPmZpbGVDaG9vc2VyKCk7Cit9CisKIEZpbGVMaXN0KiBIVE1MSW5wdXRFbGVtZW50
OjpmaWxlcygpCiB7CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5maWxlcygpOwogfQogCit2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzKQoreworICAgIG1faW5wdXRUeXBlLT5yZWNlaXZlRHJvcHBlZEZpbGVzKHBhdGhz
KTsKK30KKwogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT52aXNpYmxlVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggZTNkMGMzNzY5MTAyODM2Y2EyZjQ1YjkyZDI3YTlk
YTA5NmJhZWRjMC4uMGYzZWRjZmU2MzE2NDE0ODEwYjc5ZTFlYzc0OTUwYzFmMDFlM2JiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxlQ2hvb3NlcjsKIGNsYXNzIEZpbGVMaXN0
OwogY2xhc3MgSFRNTERhdGFMaXN0RWxlbWVudDsKIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50OwpA
QCAtMTYyLDcgKzE2Myw2IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdmFsdWVXaXRoRGVmYXVsdCgp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7
CiAKICAgICBib29sIGNhbkhhdmVTZWxlY3Rpb24oKSBjb25zdDsKIApAQCAtMjAwLDcgKzIwMCw5
IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNB
dXRvZmlsbGVkOyB9CiAgICAgdm9pZCBzZXRBdXRvZmlsbGVkKGJvb2wgPSB0cnVlKTsKIAorICAg
IEZpbGVDaG9vc2VyKiBmaWxlQ2hvb3NlcigpOwogICAgIEZpbGVMaXN0KiBmaWxlcygpOworICAg
IHZvaWQgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCiAgICAg
dm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKICAgICB2b2lkIG9uU2VhcmNoKCk7CkBAIC0yMTksNiAr
MjIxLDggQEAgcHVibGljOgogICAgIC8vIE90aGVyd2lzZSwgdGhleSB3b3VsZCBiZSBwcml2YXRl
LgogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMmIGNoZWNrZWRSYWRpb0J1dHRvbnMoKSBjb25zdDsK
ICAgICB2b2lkIHVwZGF0ZUNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKKyAgICB2b2lkIG5vdGlmeUZv
cm1TdGF0ZUNoYW5nZWQoKTsKKwogI2lmIEVOQUJMRShXQ1NTKQogICAgIGJvb2wgaXNDb25mb3Jt
VG9JbnB1dE1hc2soY29uc3QgU3RyaW5nJikgY29uc3Q7CiAjZW5kaWYKQEAgLTMxNyw3ICszMjEs
NiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBIVE1MRGF0YUxpc3RFbGVt
ZW50KiBkYXRhTGlzdCgpIGNvbnN0OwogI2VuZGlmCi0gICAgdm9pZCBub3RpZnlGb3JtU3RhdGVD
aGFuZ2VkKCk7CiAgICAgdm9pZCBwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsK
ICAgICB2b2lkIHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsKICNpZiBFTkFCTEUoV0NTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCA5YjZmZTFiYmMwOWNjODFkOGQwYzhiMTE3YjkzYmZk
YjhlZjRlMWZiLi4zNmNkMzc1NWRlNDU0ZTE0M2RjMDBjZDg0NmJhZjQ0NGJmYTZiMjg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC00NjMsMTEgKzQ2MywyMSBAQCBib29sIElucHV0
VHlwZTo6cmVuZGVyZXJJc05lZWRlZCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0ZpbGVDaG9v
c2VyKiBJbnB1dFR5cGU6OmZpbGVDaG9vc2VyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwogRmls
ZUxpc3QqIElucHV0VHlwZTo6ZmlsZXMoKQogewogICAgIHJldHVybiAwOwogfQogCit2b2lkIElu
cHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpCit7Cit9
CisKKwogYm9vbCBJbnB1dFR5cGU6OmdldFR5cGVTcGVjaWZpY1ZhbHVlKFN0cmluZyYpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5
cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggNzFlMmEwOGVmMDY1
MWQ1YTcyOWM4ZTJiNGY0MGUwMzRlNjU2OTQ0Yi4uNTViNzE1MjcyZDIxMjliNDJkMTAwODc5OGNl
ZWU2YWI2ODhmOTk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC00Myw2ICs0Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OwogY2xh
c3MgRGF0ZUNvbXBvbmVudHM7CiBjbGFzcyBFdmVudDsKK2NsYXNzIEZpbGVDaG9vc2VyOwogY2xh
c3MgRmlsZUxpc3Q7CiBjbGFzcyBGb3JtRGF0YUxpc3Q7CiBjbGFzcyBIVE1MRWxlbWVudDsKQEAg
LTIwOCw3ICsyMDksOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCgp
OwogICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0QWxpZ25BdHRyaWJ1dGUoKTsKKyAgICB2aXJ0dWFsIEZp
bGVDaG9vc2VyKiBmaWxlQ2hvb3NlcigpOwogICAgIHZpcnR1YWwgRmlsZUxpc3QqIGZpbGVzKCk7
CisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKTsKICAgICAvLyBTaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcmVu
ZGVyZXIgZm9yIGEgdHlwZSBjYW4gZGlzcGxheSBhIHN1Z2dlc3RlZCB2YWx1ZS4KICAgICB2aXJ0
dWFsIGJvb2wgY2FuU2V0U3VnZ2VzdGVkVmFsdWUoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
U2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCA0NmU3NDg2YzU5MzQzZmZhMGJmYWU0N2VmYTAzZjI0MjYy
YTg3MTgzLi5lZGE5MmNiMmQ2ZmI5MjFlZWI2YTUxZDUwYzAzZGI0MGQ0MDkwMTgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNDI3LDE0ICs0MjcsNyBAQCBib29s
IERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhKiBkcmFnRGF0YSkKICAg
ICAgICAgaWYgKGZpbGVuYW1lcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgLy8gVWdseS4gRm9yIHNlY3VyaXR5IG5vbmUgb2YgdGhlIEFQSXMgYXZhaWxh
YmxlIHRvIHVzIGNhbiBzZXQgdGhlIGlucHV0IHZhbHVlCi0gICAgICAgIC8vIG9uIGZpbGUgaW5w
dXRzLiBFdmVuIGZvcmNpbmcgYSBjaGFuZ2UgaW4gSFRNTElucHV0RWxlbWVudCBkb2Vzbid0IHdv
cmsgYXMKLSAgICAgICAgLy8gUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wgY2xlYXJzIHRoZSBmaWxl
IHdoZW4gZG9pbmcgdXBkYXRlRnJvbUVsZW1lbnQoKS4KLSAgICAgICAgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbChmaWxlSW5wdXQt
PnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIHJlbmRlcmVyLT5yZWNlaXZlRHJvcHBlZEZpbGVzKGZpbGVuYW1l
cyk7CisgICAgICAgIGZpbGVJbnB1dC0+cmVjZWl2ZURyb3BwZWRGaWxlcyhmaWxlbmFtZXMpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVD
aG9vc2VyLmNwcAppbmRleCA3ZTZkNGFlZThlMDM1MzBiYjg3ZWFlNDQ4OTI5OTZkYTU2YTllZmJm
Li44MTgxYzc5OWU1YmZkY2QyY2I2MTY4NWFiZTAyYjMwNDYxZTdjYjhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgRmlsZUNo
b29zZXI6Omljb25Mb2FkZWQoUGFzc1JlZlB0cjxJY29uPiBpY29uKQogewogICAgIG1faWNvbiA9
IGljb247CiAgICAgaWYgKCFtX2lzSW5pdGlhbGl6aW5nICYmIG1faWNvbiAmJiBtX2NsaWVudCkK
LSAgICAgICAgbV9jbGllbnQtPnJlcGFpbnQoKTsKKyAgICAgICAgbV9jbGllbnQtPmljb25Mb2Fk
ZWQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKaW5kZXggYWM1
ZTBlNjBiYzNmNzU1M2E5YjFiMjU0ZWVjYmI5YTlhMDFkMTQ0MC4uZWUzYTZlYmU0ZDRkYjRiMjE4
MDIwNGZiOWJhYTVlZmU2MmEzNjM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUNob29zZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5oCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIEljb247CiBjbGFzcyBGaWxlQ2hvb3NlckNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVwYWludCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaWNvbkxvYWRlZCgp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpID0gMDsKICNpZiBF
TkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzRGlyZWN0b3J5
VXBsb2FkKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpbGVVcGxvYWRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5jcHAKaW5kZXggNzkwY2UwOTkxZDJkN2I0NGQwNmFhMGQ5MTkyZmU5
MWQyMDY2MmUwNS4uZmEwNWRjZGVmNjlmNDZmNzU0ODg4YjZlM2E1ZmJhMDAwYmJjN2U3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCkBAIC04MSwxOSArODEsMTIgQEAgVXBsb2FkQnV0dG9uOjpVcGxvYWRCdXR0b24oSFRN
TElucHV0RWxlbWVudCogc2hhZG93UGFyZW50KQogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OlJl
bmRlckZpbGVVcGxvYWRDb250cm9sKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0KQogICAgIDogUmVu
ZGVyQmxvY2soaW5wdXQpCiB7Ci0gICAgRmlsZUxpc3QqIGxpc3QgPSBpbnB1dC0+ZmlsZXMoKTsK
LSAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbGlz
dCA/IGxpc3QtPmxlbmd0aCgpIDogMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgIGZpbGVuYW1lcy5hcHBlbmQobGlzdC0+aXRlbShpKS0+cGF0aCgp
KTsKLSAgICBtX2ZpbGVDaG9vc2VyID0gRmlsZUNob29zZXI6OmNyZWF0ZSh0aGlzLCBmaWxlbmFt
ZXMpOwogfQogCiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZpbGVVcGxvYWRDb250
cm9sKCkKIHsKICAgICBpZiAobV9idXR0b24pCiAgICAgICAgIG1fYnV0dG9uLT5kZXRhY2goKTsK
LSAgICBtX2ZpbGVDaG9vc2VyLT5kaXNjb25uZWN0Q2xpZW50KCk7CiB9CiAKIHZvaWQgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCkBAIC0xMDMsNzYgKzk2LDYgQEAgdm9pZCBSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclMKICAgICAgICAgbV9idXR0b24tPnJlbmRlcmVyKCktPnNldFN0eWxlKGNy
ZWF0ZUJ1dHRvblN0eWxlKHN0eWxlKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6dmFsdWVDaGFuZ2VkKCkKLXsKLSAgICAvLyBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdl
RXZlbnQgbWF5IGRlc3Ryb3kgdGhpcyByZW5kZXJlcgotICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4g
ZmlsZUNob29zZXIgPSBtX2ZpbGVDaG9vc2VyOwotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAg
aW5wdXRFbGVtZW50LT5zZXRGaWxlTGlzdEZyb21SZW5kZXJlcihmaWxlQ2hvb3Nlci0+ZmlsZW5h
bWVzKCkpOwotICAgIGlucHV0RWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50
KCk7Ci0gCi0gICAgLy8gb25seSByZXBhaW50IGlmIGl0IGRvZXNuJ3Qgc2VlbSB3ZSBoYXZlIGJl
ZW4gZGVzdHJveWVkCi0gICAgaWYgKCFmaWxlQ2hvb3Nlci0+ZGlzY29ubmVjdGVkKCkpCi0gICAg
ICAgIHJlcGFpbnQoKTsKLX0KLQotYm9vbCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dz
TXVsdGlwbGVGaWxlcygpCi17Ci0jaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgaWYg
KGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpKQotICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KG5vZGUoKSk7Ci0gICAgcmV0dXJuIGlucHV0LT5mYXN0SGFzQXR0cmlidXRlKG11bHRpcGxl
QXR0cik7Ci19Ci0KLSNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLWJvb2wgUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpCi17Ci0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsK
LSAgICByZXR1cm4gaW5wdXQtPmZhc3RIYXNBdHRyaWJ1dGUod2Via2l0ZGlyZWN0b3J5QXR0cik7
Ci19Ci0KLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnJlY2VpdmVEcm9wRm9yRGlyZWN0
b3J5VXBsb2FkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBpZiAoQ2hyb21l
KiBjaHJvbWVQb2ludGVyID0gY2hyb21lKCkpCi0gICAgICAgIGNocm9tZVBvaW50ZXItPmVudW1l
cmF0ZUNob3NlbkRpcmVjdG9yeShwYXRoc1swXSwgbV9maWxlQ2hvb3Nlci5nZXQoKSk7Ci19Ci0j
ZW5kaWYKLQotU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphY2NlcHRUeXBlcygpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5hY2Nl
cHQoKTsKLX0KLQotdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2hvb3NlSWNvbkZvckZp
bGVzKEZpbGVDaG9vc2VyKiBjaG9vc2VyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVz
KQotewotICAgIGlmIChDaHJvbWUqIGNocm9tZVBvaW50ZXIgPSBjaHJvbWUoKSkKLSAgICAgICAg
Y2hyb21lUG9pbnRlci0+Y2hvb3NlSWNvbkZvckZpbGVzKGZpbGVuYW1lcywgY2hvb3Nlcik7Ci19
Ci0KLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNsaWNrKCkKLXsKLSAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGNhbGwgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCkuCi0gICAgaWYgKCFmcmFtZSgpIHx8ICFmcmFtZSgpLT5sb2FkZXIoKS0+aXNQcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChDaHJvbWUqIGNocm9tZVBv
aW50ZXIgPSBjaHJvbWUoKSkKLSAgICAgICAgY2hyb21lUG9pbnRlci0+cnVuT3BlblBhbmVsKGZy
YW1lKCksIG1fZmlsZUNob29zZXIpOwotfQotCi1DaHJvbWUqIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpjaHJvbWUoKSBjb25zdAotewotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUoKS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBQ
YWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBwYWdlLT5jaHJvbWUoKTsKLX0KLQogdm9pZCBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOwpA
QCAtMTk1LDIwICsxMTgsMjEgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBkYXRl
RnJvbUVsZW1lbnQoKQogCiAgICAgbV9idXR0b24tPnNldERpc2FibGVkKCF0aGVtZSgpLT5pc0Vu
YWJsZWQodGhpcykpOwogCi0gICAgLy8gVGhpcyBvbmx5IHN1cHBvcnRzIGNsZWFyaW5nIG91dCB0
aGUgZmlsZXMsIGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSBmb3IKLSAgICAvLyBzZWN1cml0eSByZWFz
b25zIHRoYXQncyB0aGUgb25seSBjaGFuZ2UgdGhlIERPTSBpcyBhbGxvd2VkIHRvIG1ha2UuCi0g
ICAgRmlsZUxpc3QqIGZpbGVzID0gaW5wdXRFbGVtZW50LT5maWxlcygpOwotICAgIEFTU0VSVChm
aWxlcyk7Ci0gICAgaWYgKGZpbGVzICYmIGZpbGVzLT5pc0VtcHR5KCkgJiYgIW1fZmlsZUNob29z
ZXItPmZpbGVuYW1lcygpLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZpbGVDaG9vc2VyLT5jbGVh
cigpOwotICAgICAgICByZXBhaW50KCk7Ci0gICAgfQorLy8gRklYTUU6IEdPTk5BIE1BS0UgSVQg
Q0hBTkdFIFdIRU4gU0VUVElORyBGSUxFIExJU1QuIExFVCdTIElGIFNUVUZGIEJSRUFLUyEKKy8v
ICAgIC8vIFRoaXMgb25seSBzdXBwb3J0cyBjbGVhcmluZyBvdXQgdGhlIGZpbGVzLCBidXQgdGhh
dCdzIE9LIGJlY2F1c2UgZm9yCisvLyAgICAvLyBzZWN1cml0eSByZWFzb25zIHRoYXQncyB0aGUg
b25seSBjaGFuZ2UgdGhlIERPTSBpcyBhbGxvd2VkIHRvIG1ha2UuCisvLyAgICBGaWxlTGlzdCog
ZmlsZXMgPSBpbnB1dEVsZW1lbnQtPmZpbGVzKCk7CisvLyAgICBBU1NFUlQoZmlsZXMpOworLy8g
ICAgaWYgKGZpbGVzICYmIGZpbGVzLT5pc0VtcHR5KCkgJiYgIW1fZmlsZUNob29zZXItPmZpbGVu
YW1lcygpLmlzRW1wdHkoKSkgeworLy8gICAgICAgIG1fZmlsZUNob29zZXItPmNsZWFyKCk7Cisv
LyAgICAgICAgcmVwYWludCgpOworLy8gICAgfQogfQogCiBpbnQgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6Om1heEZpbGVuYW1lV2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBtYXgoMCwgY29u
dGVudFdpZHRoKCkgLSBtX2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRoKCkgLSBhZnRlckJ1dHRv
blNwYWNpbmcKLSAgICAgICAgLSAobV9maWxlQ2hvb3Nlci0+aWNvbigpID8gaWNvbldpZHRoICsg
aWNvbkZpbGVuYW1lU3BhY2luZyA6IDApKTsKKyAgICAgICAgLSAoZmlsZUNob29zZXIoKS0+aWNv
bigpID8gaWNvbldpZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6IDApKTsKIH0KIAogUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNyZWF0ZUJ1dHRvblN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKQEAgLTIzMSw4ICsxNTUs
NyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdChQYWludEluZm8m
IHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fZmlsZUNob29z
ZXIpOwotICAgIAorCiAgICAgLy8gUHVzaCBhIGNsaXAuCiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCwgZmFsc2UpOwogICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpIHsKQEAgLTI1Miw3ICsxNzUsNyBA
QCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdChQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgICAgIC8vIERldGVybWluZSB3aGVyZSB0aGUg
ZmlsZW5hbWUgc2hvdWxkIGJlIHBsYWNlZAogICAgICAgICBpbnQgY29udGVudExlZnQgPSB0eCAr
IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgICAgIGludCBidXR0b25BbmRJY29u
V2lkdGggPSBtX2J1dHRvbi0+cmVuZGVyQm94KCktPndpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNp
bmcKLSAgICAgICAgICAgICsgKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGlj
b25GaWxlbmFtZVNwYWNpbmcgOiAwKTsKKyAgICAgICAgICAgICsgKGZpbGVDaG9vc2VyKCktPmlj
b24oKSA/IGljb25XaWR0aCArIGljb25GaWxlbmFtZVNwYWNpbmcgOiAwKTsKICAgICAgICAgaW50
IHRleHRYOwogICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQog
ICAgICAgICAgICAgdGV4dFggPSBjb250ZW50TGVmdCArIGJ1dHRvbkFuZEljb25XaWR0aDsKQEAg
LTI2OSw3ICsxOTIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVj
dChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgICAgIC8vIERyYXcg
dGhlIGZpbGVuYW1lCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3QmlkaVRleHQoZm9u
dCwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CiAgICAgICAgIAotICAgICAgICBp
ZiAobV9maWxlQ2hvb3Nlci0+aWNvbigpKSB7CisgICAgICAgIGlmIChmaWxlQ2hvb3NlcigpLT5p
Y29uKCkpIHsKICAgICAgICAgICAgIC8vIERldGVybWluZSB3aGVyZSB0aGUgaWNvbiBzaG91bGQg
YmUgcGxhY2VkCiAgICAgICAgICAgICBpbnQgaWNvblkgPSB0eSArIGJvcmRlclRvcCgpICsgcGFk
ZGluZ1RvcCgpICsgKGNvbnRlbnRIZWlnaHQoKSAtIGljb25IZWlnaHQpIC8gMjsKICAgICAgICAg
ICAgIGludCBpY29uWDsKQEAgLTI3OSw3ICsyMDIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
CiAgICAgICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCArIGNvbnRlbnRXaWR0aCgpIC0g
bV9idXR0b24tPnJlbmRlckJveCgpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0b25TcGFjaW5nIC0gaWNv
bldpZHRoOwogCiAgICAgICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24KLSAgICAgICAgICAg
IG1fZmlsZUNob29zZXItPmljb24oKS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3Qo
aWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKKyAgICAgICAgICAgIGZpbGVD
aG9vc2VyKCktPmljb24oKS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoaWNvblgs
IGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MzMzLDIxICsyNTYsNiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKQogICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsKIH0KIAotdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cmVjZWl2ZURyb3Bw
ZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0jaWYgRU5BQkxFKERJUkVD
VE9SWV9VUExPQUQpCi0gICAgaWYgKGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpKSB7Ci0gICAgICAg
IHJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2FkKHBhdGhzKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKGFsbG93c011bHRpcGxlRmlsZXMoKSkKLSAgICAgICAg
bV9maWxlQ2hvb3Nlci0+Y2hvb3NlRmlsZXMocGF0aHMpOwotICAgIGVsc2UKLSAgICAgICAgbV9m
aWxlQ2hvb3Nlci0+Y2hvb3NlRmlsZShwYXRoc1swXSk7Ci19Ci0KIFN0cmluZyBSZW5kZXJGaWxl
VXBsb2FkQ29udHJvbDo6YnV0dG9uVmFsdWUoKQogewogICAgIGlmICghbV9idXR0b24pCkBAIC0z
NTgsNyArMjY2LDE2IEBAIFN0cmluZyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YnV0dG9uVmFs
dWUoKQogCiBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVUZXh0VmFsdWUoKSBj
b25zdAogewotICAgIHJldHVybiBtX2ZpbGVDaG9vc2VyLT5iYXNlbmFtZUZvcldpZHRoKHN0eWxl
KCktPmZvbnQoKSwgbWF4RmlsZW5hbWVXaWR0aCgpKTsKKyAgICByZXR1cm4gZmlsZUNob29zZXIo
KS0+YmFzZW5hbWVGb3JXaWR0aChzdHlsZSgpLT5mb250KCksIG1heEZpbGVuYW1lV2lkdGgoKSk7
CiB9Ci0gICAgCisKK0ZpbGVDaG9vc2VyKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6ZmlsZUNo
b29zZXIoKSBjb25zdAoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChpbnB1dEVs
ZW1lbnQtPmlzRmlsZVVwbG9hZCgpKTsKKyAgICBGaWxlQ2hvb3NlciogY2hvb3NlciA9IGlucHV0
RWxlbWVudC0+ZmlsZUNob29zZXIoKTsKKyAgICBBU1NFUlQoY2hvb3Nlcik7CisgICAgcmV0dXJu
IGNob29zZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgKaW5kZXggZTlmYjdmMGVl
M2FjMzU0NWI0NGQ5N2Y2MDRhZjllMjJjNjI3Y2E3Yy4uYzUzMjhkOGVhM2JiOTNiMzI2MWEyMGM3
OTNhYWEyYTZlNDE0MWY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmgKQEAgLTMzLDE3ICszMywxMyBAQCBjbGFzcyBIVE1MSW5w
dXRFbGVtZW50OwogLy8gc3VmZmljaWVudCBzcGFjZSB0byBkcmF3IGEgZmlsZSBpY29uIGFuZCBm
aWxlbmFtZS4gVGhlIFJlbmRlckJ1dHRvbiBoYXMgYSBzaGFkb3cgbm9kZQogLy8gYXNzb2NpYXRl
ZCB3aXRoIGl0IHRvIHJlY2VpdmUgY2xpY2svaG92ZXIgZXZlbnRzLgogCi1jbGFzcyBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbCA6IHB1YmxpYyBSZW5kZXJCbG9jaywgcHJpdmF0ZSBGaWxlQ2hvb3Nl
ckNsaWVudCB7CitjbGFzcyBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCA6IHB1YmxpYyBSZW5kZXJC
bG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2woSFRNTElucHV0RWxl
bWVudCopOwogICAgIHZpcnR1YWwgflJlbmRlckZpbGVVcGxvYWRDb250cm9sKCk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNGaWxlVXBsb2FkQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZvaWQgY2xpY2soKTsKLQotICAgIHZvaWQgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYpOwotCiAgICAgU3RyaW5nIGJ1dHRvblZhbHVlKCk7CiAgICAgU3Ry
aW5nIGZpbGVUZXh0VmFsdWUoKSBjb25zdDsKICAgICAKQEAgLTU4LDI1ICs1NCwxNCBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIC8vIEZpbGVDaG9vc2VyQ2xpZW50
IG1ldGhvZHMuCi0gICAgdm9pZCB2YWx1ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHJlcGFpbnQoKSB7
IFJlbmRlckJsb2NrOjpyZXBhaW50KCk7IH0KLSAgICBib29sIGFsbG93c011bHRpcGxlRmlsZXMo
KTsKLSNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICBib29sIGFsbG93c0RpcmVjdG9y
eVVwbG9hZCgpOwotICAgIHZvaWQgcmVjZWl2ZURyb3BGb3JEaXJlY3RvcnlVcGxvYWQoY29uc3Qg
VmVjdG9yPFN0cmluZz4mKTsKLSNlbmRpZgotICAgIFN0cmluZyBhY2NlcHRUeXBlcygpOwotICAg
IHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKTsKLQotICAgIENocm9tZSogY2hyb21lKCkgY29uc3Q7CiAgICAgaW50IG1heEZpbGVuYW1l
V2lkdGgoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVCdXR0b25T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0OwogICAgIAogICAgIHZp
cnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
IAorICAgIEZpbGVDaG9vc2VyKiBmaWxlQ2hvb3NlcigpIGNvbnN0OworCiAgICAgUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IG1fYnV0dG9uOwotICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxl
Q2hvb3NlcjsKIH07CiAKIGlubGluZSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogdG9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbChSZW5kZXJPYmplY3QqIG9iamVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96128</attachid>
            <date>2011-06-06 14:50:20 -0700</date>
            <delta_ts>2011-06-22 22:45:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62069-20110606145019.patch</filename>
            <type>text/plain</type>
            <size>28773</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgxNjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYTFkNDE0ZjgzNGI0ZmU0
ZjU5NzRlNzE5NGMwZjBjNmI3MDZmYzFkLi44MjE0MzdmOGU3NWM1Y2JhZDAwMWQ2Njc1NGIyOGNj
MjhiYzBiMDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDYtMDYgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEZpbGVJbnB1dFR5cGUgYSBGaWxlQ2hv
b3NlckNsaWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYyMDY5CisKKyAgICAgICAgUmVmYWN0b3JpbmcsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6RmlsZUlucHV0VHlwZSk6IEFkZGVkIGluaXRpYWxpemVkIGZvciBt
X2ZpbGVDaG9vc2VyLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6fkZpbGVJbnB1
dFR5cGUpOiBBZGRlZCBkaXNjb25uZWN0aW5nIHRoZSBjbGllbnQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KTogTW92ZWQgY2xpY2sgZXZl
bnQgaGFuZGxpbmcgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVD
aG9vc2VyKTogQWRkZWQgYWNjZXNzb3IuCisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBl
OjpyZWNlaXZlRHJvcHBlZEZpbGVzKTogTW92ZWQgZnJvbSBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnNldEZpbGVMaXN0KTogQWRkZWQg
Y2xlYXJpbmcgb2YgdGhlIGZpbGVDaG9vc2VyLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0
VHlwZTo6Y2hyb21lKTogTW92ZWQgZnJvbSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2Fk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpyZXBhaW50KTogQWRk
ZWQgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6ZmlsZXNDaG9zZW4p
OiAgTW92ZWQgZnJvbSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCwgcmVuYW1lZCBmb3IgY2xhcml0
eS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6Omljb25Mb2FkZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmFsbG93c011bHRpcGxlRmlsZXMpOiBN
b3ZlZCBmcm9tIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUlucHV0VHlwZTo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKTogTW92ZWQgZnJvbSBSZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmFjY2VwdFR5
cGVzKTogTW92ZWQgZnJvbSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVJbnB1dFR5cGU6OmNob29zZUljb25Gb3JGaWxlcyk6IE1vdmVkIGZyb20gUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuCisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmg6IE1vZGlm
aWVkIGRlZnMgYWNjb3JkaW5nbHkuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRl
cmVyKTogQ2hhbmdlZCB0aGUgY29tbWVudCB0byByZWZsZWN0IG5ldyByZWFsaXR5LgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZmlsZUNob29zZXIpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnJlY2VpdmVEcm9wcGVkRmlsZXMpOiBBZGRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDogTW9kaWZpZWQgZGVmcyBhY2Nv
cmRpbmdseS4KKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OmZpbGVDaG9vc2VyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnB1
dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0lucHV0
VHlwZS5oOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBDaGFuZ2VkIHRvIHVzZSBm
aWxlSW5wdXQsIG5vdCByZW5kZXJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIpOiBDaGFuZ2Vk
IHRvIHVzZSBuZXcgbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjcmVhdGUp
OiBSZW1vdmVkIGluaXRpYWwgbGlzdCBwYXJhbSwgYmVjYXVzZSBpdCdzIG5vdCB1c2VmdWwgYW55
bW9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6IFJlbmFt
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6aWNvbkxvYWRlZCk6IFJlbmFtZWQu
CisgICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sKTogUmVtb3ZlZCBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6On5SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OnVwZGF0ZUZyb21FbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbDo6bWF4RmlsZW5hbWVXaWR0aCk6IENoYW5nZWQgdG8gdXNlIGZp
bGVDaG9vc2VyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBh
aW50T2JqZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6ZmlsZVRleHRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmZpbGVDaG9vc2VyKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmg6IENoYW5nZWQgZGVmcy4KKwogMjAxMS0wNi0wNiAg
U3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmls
ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCmlu
ZGV4IGQwZDhmOWFiMGIwZThkNGQxN2JmN2Y3NzI0MDRhNDA0NzIwYzk2N2UuLjFhMGE4ZDMxMjg4
NDA2MTUzNDdkOWM2NjhjNzdiN2I0OGViNGU3NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5w
dXRUeXBlLmNwcApAQCAtMjIsMTQgKzIyLDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRmlsZUlucHV0VHlwZS5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jv
b3QuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNzMsNiArNzYsMTIgQEAgaW5s
aW5lIEZpbGVJbnB1dFR5cGU6OkZpbGVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVu
dCkKICAgICA6IEJhc2VCdXR0b25JbnB1dFR5cGUoZWxlbWVudCkKICAgICAsIG1fZmlsZUxpc3Qo
RmlsZUxpc3Q6OmNyZWF0ZSgpKQogeworICAgIG1fZmlsZUNob29zZXIgPSBGaWxlQ2hvb3Nlcjo6
Y3JlYXRlKHRoaXMpOworfQorCitGaWxlSW5wdXRUeXBlOjp+RmlsZUlucHV0VHlwZSgpCit7Cisg
ICAgbV9maWxlQ2hvb3Nlci0+ZGlzY29ubmVjdENsaWVudCgpOwogfQogCiBQYXNzT3duUHRyPElu
cHV0VHlwZT4gRmlsZUlucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQp
CkBAIC0xMjgsNyArMTM3LDExIEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZh
dGVFdmVudChFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGVsZW1lbnQoKS0+ZGlzYWJsZWQoKSB8
fCAhZWxlbWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47Ci0gICAgdG9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbChlbGVtZW50KCktPnJlbmRlcmVyKCkpLT5jbGljaygpOworICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgY2FsbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKS4KKyAgICBpZiAoZWxlbWVudCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpICYmIGVsZW1l
bnQoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmlzUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkpIHsKKyAgICAgICAgaWYgKENocm9tZSogY2hyb21lUG9pbnRlciA9IGNocm9tZSgpKQor
ICAgICAgICAgICAgY2hyb21lUG9pbnRlci0+cnVuT3BlblBhbmVsKGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKSwgbV9maWxlQ2hvb3Nlcik7CisgICAgfQogICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogfQogCkBAIC0xNTIsMTEgKzE2NSwzMSBAQCBib29sIEZpbGVJbnB1dFR5
cGU6OmNhbkNoYW5nZUZyb21Bbm90aGVyVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitGaWxlQ2hvb3NlciogRmlsZUlucHV0VHlwZTo6ZmlsZUNob29zZXIoKQoreworICAgIHJl
dHVybiBtX2ZpbGVDaG9vc2VyLmdldCgpOworfQorCiBGaWxlTGlzdCogRmlsZUlucHV0VHlwZTo6
ZmlsZXMoKQogewogICAgIHJldHVybiBtX2ZpbGVMaXN0LmdldCgpOwogfQogCit2b2lkIEZpbGVJ
bnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQoreworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGlmIChhbGxvd3NEaXJlY3Rv
cnlVcGxvYWQoKSkgeworICAgICAgICByZWNlaXZlRHJvcEZvckRpcmVjdG9yeVVwbG9hZChwYXRo
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChhbGxvd3NNdWx0
aXBsZUZpbGVzKCkpCisgICAgICAgIG1fZmlsZUNob29zZXItPmNob29zZUZpbGVzKHBhdGhzKTsK
KyAgICBlbHNlCisgICAgICAgIG1fZmlsZUNob29zZXItPmNob29zZUZpbGUocGF0aHNbMF0pOwor
fQorCiBib29sIEZpbGVJbnB1dFR5cGU6OmNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7CiAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHdlIGRvbid0IGFsbG93IHNldHRpbmcg
dGhlIGZpbGVuYW1lLCBidXQgd2UgZG8gYWxsb3cgY2xlYXJpbmcgaXQuCkBAIC0xOTcsNyArMjMw
LDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRGaWxlTGlzdChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMpCiAgICAgLy8gSWYgYSBkaXJlY3RvcnkgaXMgYmVpbmcgc2VsZWN0ZWQsIHRoZSBV
SSBhbGxvd3MgYSBkaXJlY3RvcnkgdG8gYmUgY2hvc2VuCiAgICAgLy8gYW5kIHRoZSBwYXRocyBw
cm92aWRlZCBoZXJlIHNoYXJlIGEgcm9vdCBkaXJlY3Rvcnkgc29tZXdoZXJlIHVwIHRoZSB0cmVl
OwogICAgIC8vIHdlIHdhbnQgdG8gc3RvcmUgb25seSB0aGUgcmVsYXRpdmUgcGF0aHMgZnJvbSB0
aGF0IHBvaW50LgotICAgIGlmIChzaXplICYmIGVsZW1lbnQoKS0+ZmFzdEhhc0F0dHJpYnV0ZSh3
ZWJraXRkaXJlY3RvcnlBdHRyKSkgeworICAgIGlmIChzaXplICYmIGFsbG93c0RpcmVjdG9yeVVw
bG9hZCgpKSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIGNvbW1vbiByb290IHBhdGguCiAgICAgICAg
IFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNbMF0pOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IHNpemU7IGkrKykgewpAQCAtMjExLDEyICsyNDQsMTkgQEAgdm9p
ZCBGaWxlSW5wdXRUeXBlOjpzZXRGaWxlTGlzdChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMp
CiAgICAgICAgICAgICBTdHJpbmcgcmVsYXRpdmVQYXRoID0gcGF0aHNbaV0uc3Vic3RyaW5nKDEg
KyByb290UGF0aC5sZW5ndGgoKSkucmVwbGFjZSgnXFwnLCAnLycpOwogICAgICAgICAgICAgbV9m
aWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgocGF0aHNbaV0sIHJl
bGF0aXZlUGF0aCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ugewor
I2VuZGlmCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAg
ICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXSkpOworI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQogICAgIH0KICNlbmRpZgogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpj
cmVhdGUocGF0aHNbaV0pKTsKKyAgICBpZiAoIW1fZmlsZUxpc3QtPmlzRW1wdHkoKSB8fCBtX2Zp
bGVDaG9vc2VyLT5maWxlbmFtZXMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZmlsZUNob29zZXItPmNsZWFyKCk7CisgICAgcmVwYWludCgpOwogfQogCiBib29sIEZpbGVJ
bnB1dFR5cGU6OmlzRmlsZVVwbG9hZCgpIGNvbnN0CkBAIC0yMzAsNCArMjcwLDc2IEBAIHZvaWQg
RmlsZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiAgICAgZWxlbWVudCgpLT5lbnN1
cmVTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKFVwbG9hZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShl
bGVtZW50KCktPmRvY3VtZW50KCkpLCBlYyk7CiB9CiAKK0Nocm9tZSogRmlsZUlucHV0VHlwZTo6
Y2hyb21lKCkgY29uc3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50KCktPmRvY3VtZW50
KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCk7Cit9CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZ
X1VQTE9BRCkKK3ZvaWQgRmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BGb3JEaXJlY3RvcnlVcGxv
YWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIGlmIChDaHJvbWUqIGNocm9t
ZVBvaW50ZXIgPSBjaHJvbWUoKSkKKyAgICAgICAgY2hyb21lUG9pbnRlci0+ZW51bWVyYXRlQ2hv
c2VuRGlyZWN0b3J5KHBhdGhzWzBdLCBtX2ZpbGVDaG9vc2VyLmdldCgpKTsKK30KKyNlbmRpZgor
Cit2b2lkIEZpbGVJbnB1dFR5cGU6OnJlcGFpbnQoKQoreworICAgIC8vIEJlY2F1c2UgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wgZG9lc24ndCB1c2UgbGF5b3V0LCB3ZSBoYXZlIHRvIHRyaWdnZXIg
cmVwYWludCBkaXJlY3RseS4KKyAgICBpZiAoZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgICAg
ICBlbGVtZW50KCktPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKK30KKwordm9pZCBGaWxlSW5wdXRU
eXBlOjpmaWxlc0Nob3NlbigpCit7CisgICAgc2V0RmlsZUxpc3QobV9maWxlQ2hvb3Nlci0+Zmls
ZW5hbWVzKCkpOworCisgICAgZWxlbWVudCgpLT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKHRydWUpOworICAgIGVsZW1lbnQoKS0+bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwor
ICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CisKKyAgICBlbGVtZW50KCkt
PmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOworIAorICAgIHJlcGFpbnQoKTsKK30K
Kwordm9pZCBGaWxlSW5wdXRUeXBlOjppY29uTG9hZGVkKCkKK3sKKyAgICByZXBhaW50KCk7Cit9
CisKK2Jvb2wgRmlsZUlucHV0VHlwZTo6YWxsb3dzTXVsdGlwbGVGaWxlcygpCit7CisjaWYgRU5B
QkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgaWYgKGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpKQor
ICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgIHJldHVybiBlbGVtZW50KCktPmZhc3RI
YXNBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKTsKK30KKworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBM
T0FEKQorYm9vbCBGaWxlSW5wdXRUeXBlOjphbGxvd3NEaXJlY3RvcnlVcGxvYWQoKQoreworICAg
IHJldHVybiBlbGVtZW50KCktPmZhc3RIYXNBdHRyaWJ1dGUod2Via2l0ZGlyZWN0b3J5QXR0cik7
Cit9CisjZW5kaWYKKworU3RyaW5nIEZpbGVJbnB1dFR5cGU6OmFjY2VwdFR5cGVzKCkKK3sKKyAg
ICByZXR1cm4gZWxlbWVudCgpLT5hY2NlcHQoKTsKK30KKwordm9pZCBGaWxlSW5wdXRUeXBlOjpj
aG9vc2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqIGNob29zZXIsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMpCit7CisgICAgaWYgKENocm9tZSogY2hyb21lUG9pbnRlciA9IGNocm9t
ZSgpKQorICAgICAgICBjaHJvbWVQb2ludGVyLT5jaG9vc2VJY29uRm9yRmlsZXMoZmlsZW5hbWVz
LCBjaG9vc2VyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zp
bGVJbnB1dFR5cGUuaAppbmRleCA0YzlkYTA1ZjhmOGI5M2MzYjlmZDA1OTliZmNmZDFkMjA3M2Yy
ZTM1Li44NWM1MmMwMTY4ZDAzOWMwMWQ0NTQxNDIyMGVhZTI5MzNmNmVjM2M1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ZpbGVJbnB1dFR5cGUuaApAQCAtMzMsMTUgKzMzLDE4IEBACiAjZGVmaW5lIEZpbGVJ
bnB1dFR5cGVfaAogCiAjaW5jbHVkZSAiQmFzZUJ1dHRvbklucHV0VHlwZS5oIgorI2luY2x1ZGUg
IkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIENocm9tZTsKIGNsYXNzIEZpbGVMaXN0OwogCi1jbGFzcyBGaWxlSW5w
dXRUeXBlIDogcHVibGljIEJhc2VCdXR0b25JbnB1dFR5cGUgeworY2xhc3MgRmlsZUlucHV0VHlw
ZSA6IHB1YmxpYyBCYXNlQnV0dG9uSW5wdXRUeXBlLCBwcml2YXRlIEZpbGVDaG9vc2VyQ2xpZW50
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1M
SW5wdXRFbGVtZW50Kik7CisgICAgdmlydHVhbCB+RmlsZUlucHV0VHlwZSgpOwogCiBwcml2YXRl
OgogICAgIEZpbGVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOwpAQCAtNTMsNyArNTYsOSBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNldFN0
cmluZ1ZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhbkNoYW5nZUZyb21Bbm90aGVy
VHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRmlsZUNob29zZXIqIGZpbGVDaG9vc2VyKCk7CiAg
ICAgdmlydHVhbCBGaWxlTGlzdCogZmlsZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZURy
b3BwZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5T
ZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VHlwZVNwZWNpZmlj
VmFsdWUoU3RyaW5nJik7IC8vIENoZWNrZWQgZmlyc3QsIGJlZm9yZSBpbnRlcm5hbCBzdG9yYWdl
IG9yIHRoZSB2YWx1ZSBhdHRyaWJ1dGUuCiAgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2Vw
YXJhdGVGcm9tQXR0cmlidXRlKCk7CkBAIC02MSw3ICs2NiwyMyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
U2hhZG93U3VidHJlZSgpOwogCisgICAgQ2hyb21lKiBjaHJvbWUoKSBjb25zdDsKKyNpZiBFTkFC
TEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICB2b2lkIHJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBs
b2FkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisjZW5kaWYKKyAgICB2b2lkIHJlcGFpbnQoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBmaWxlc0Nob3NlbigpOworICAgIHZpcnR1YWwgdm9pZCBpY29u
TG9hZGVkKCk7CisgICAgdmlydHVhbCBib29sIGFsbG93c011bHRpcGxlRmlsZXMoKTsKKyNpZiBF
TkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzRGlyZWN0b3J5
VXBsb2FkKCk7CisjZW5kaWYKKyAgICB2aXJ0dWFsIFN0cmluZyBhY2NlcHRUeXBlcygpOworICAg
IHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYpOworCiAgICAgUmVmUHRyPEZpbGVMaXN0PiBtX2ZpbGVMaXN0OworICAgIFJl
ZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDk0MTY3
NTQ2YWZlMTkzYjBlZmQxYjZlODY4MzQ2Y2RhYWQ4MWIxZmEuLjM0MTJhYzliNDM2ZmI2NWVkZGZl
ZmFhNjI3MDI1MTVmZDdiNjU0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJG
aWxlQ2hvb3Nlci5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgpAQCAtMTA1OCw3ICsxMDU5LDcgQEAgYm9vbCBI
VE1MSW5wdXRFbGVtZW50OjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25zdAog
CiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7Ci0gICAgLy8gRmlsZSB1cGxvYWQgY29udHJvbHMgd2lsbCBhbHdheXMgdXNl
IHNldEZpbGVMaXN0RnJvbVJlbmRlcmVyLgorICAgIC8vIEZpbGUgdXBsb2FkIGNvbnRyb2xzIGRv
IG5vdCB1c2UgdGhpcyBsb2dpYy4KICAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgpKTsKIAogICAg
IG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsKQEAgLTEwODYsMTUgKzEwODcsNiBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgc2V0QXV0b2ZpbGxlZChmYWxzZSk7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQot
ewotICAgIG1faW5wdXRUeXBlLT5zZXRGaWxlTGlzdChwYXRocyk7Ci0KLSAgICBzZXRGb3JtQ29u
dHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwotICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5n
ZWQoKTsKLSAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLX0KLQogdm9pZCogSFRNTElucHV0
RWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBtX2lucHV0
VHlwZS0+c2hvdWxkU3VibWl0SW1wbGljaXRseShldmVudCkpIHsKQEAgLTEyNzEsMTEgKzEyNjMs
MjEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVkKGJvb2wgYXV0b2ZpbGxl
ZCkKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKK0ZpbGVDaG9vc2VyKiBIVE1MSW5w
dXRFbGVtZW50OjpmaWxlQ2hvb3NlcigpCit7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5maWxl
Q2hvb3NlcigpOworfQorCiBGaWxlTGlzdCogSFRNTElucHV0RWxlbWVudDo6ZmlsZXMoKQogewog
ICAgIHJldHVybiBtX2lucHV0VHlwZS0+ZmlsZXMoKTsKIH0KIAordm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sK
KyAgICBtX2lucHV0VHlwZS0+cmVjZWl2ZURyb3BwZWRGaWxlcyhwYXRocyk7Cit9CisKIFN0cmlu
ZyBIVE1MSW5wdXRFbGVtZW50Ojp2aXNpYmxlVmFsdWUoKSBjb25zdAogewogICAgIHJldHVybiBt
X2lucHV0VHlwZS0+dmlzaWJsZVZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCmluZGV4IGUzZDBjMzc2OTEwMjgzNmNhMmY0NWI5MmQyN2E5ZGEwOTZiYWVkYzAuLjBm
M2VkY2ZlNjMxNjQxNDgxMGI3OWUxZWM3NDk1MGMxZjAxZTNiYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgRmlsZUNob29zZXI7CiBjbGFzcyBGaWxlTGlzdDsKIGNsYXNzIEhUTUxE
YXRhTGlzdEVsZW1lbnQ7CiBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKQEAgLTE2Miw3ICsxNjMs
NiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHZhbHVlV2l0aERlZmF1bHQoKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRG
aWxlTGlzdEZyb21SZW5kZXJlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCiAgICAgYm9vbCBj
YW5IYXZlU2VsZWN0aW9uKCkgY29uc3Q7CiAKQEAgLTIwMCw3ICsyMDAsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0b2ZpbGxlZDsgfQog
ICAgIHZvaWQgc2V0QXV0b2ZpbGxlZChib29sID0gdHJ1ZSk7CiAKKyAgICBGaWxlQ2hvb3Nlciog
ZmlsZUNob29zZXIoKTsKICAgICBGaWxlTGlzdCogZmlsZXMoKTsKKyAgICB2b2lkIHJlY2VpdmVE
cm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKIAogICAgIHZvaWQgYWRkU2VhcmNo
UmVzdWx0KCk7CiAgICAgdm9pZCBvblNlYXJjaCgpOwpAQCAtMjE5LDYgKzIyMSw4IEBAIHB1Ymxp
YzoKICAgICAvLyBPdGhlcndpc2UsIHRoZXkgd291bGQgYmUgcHJpdmF0ZS4KICAgICBDaGVja2Vk
UmFkaW9CdXR0b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRh
dGVDaGVja2VkUmFkaW9CdXR0b25zKCk7CisgICAgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2Vk
KCk7CisKICNpZiBFTkFCTEUoV0NTUykKICAgICBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKGNv
bnN0IFN0cmluZyYpIGNvbnN0OwogI2VuZGlmCkBAIC0zMTcsNyArMzIxLDYgQEAgcHJpdmF0ZToK
ICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxpc3Qo
KSBjb25zdDsKICNlbmRpZgotICAgIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwogICAg
IHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdm9pZCB1cGRh
dGVWYWx1ZUlmTmVlZGVkKCk7CiAjaWYgRU5BQkxFKFdDU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlw
ZS5jcHAKaW5kZXggOWI2ZmUxYmJjMDljYzgxZDhkMGM4YjExN2I5M2JmZGI4ZWY0ZTFmYi4uMzZj
ZDM3NTVkZTQ1NGUxNDNkYzAwY2Q4NDZiYWY0NDRiZmE2YjI4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmNwcApAQCAtNDYzLDExICs0NjMsMjEgQEAgYm9vbCBJbnB1dFR5cGU6OnJlbmRlcmVy
SXNOZWVkZWQoKQogICAgIHJldHVybiB0cnVlOwogfQogCitGaWxlQ2hvb3NlciogSW5wdXRUeXBl
OjpmaWxlQ2hvb3NlcigpCit7CisgICAgcmV0dXJuIDA7Cit9CisKIEZpbGVMaXN0KiBJbnB1dFR5
cGU6OmZpbGVzKCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbnB1dFR5cGU6OnJlY2Vp
dmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKQoreworfQorCisKIGJvb2wgSW5w
dXRUeXBlOjpnZXRUeXBlU3BlY2lmaWNWYWx1ZShTdHJpbmcmKQogewogICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCmluZGV4IDcxZTJhMDhlZjA2NTFkNWE3MjljOGUyYjRm
NDBlMDM0ZTY1Njk0NGIuLjU1YjcxNTI3MmQyMTI5YjQyZDEwMDg3OThjZWVlNmFiNjg4Zjk5OWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDsKIGNsYXNzIERhdGVDb21wb25l
bnRzOwogY2xhc3MgRXZlbnQ7CitjbGFzcyBGaWxlQ2hvb3NlcjsKIGNsYXNzIEZpbGVMaXN0Owog
Y2xhc3MgRm9ybURhdGFMaXN0OwogY2xhc3MgSFRNTEVsZW1lbnQ7CkBAIC0yMDgsNyArMjA5LDkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCk7CisgICAgdmlydHVhbCBGaWxlQ2hvb3NlciogZmls
ZUNob29zZXIoKTsKICAgICB2aXJ0dWFsIEZpbGVMaXN0KiBmaWxlcygpOworICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgLy8g
U2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHJlbmRlcmVyIGZvciBhIHR5
cGUgY2FuIGRpc3BsYXkgYSBzdWdnZXN0ZWQgdmFsdWUuCiAgICAgdmlydHVhbCBib29sIGNhblNl
dFN1Z2dlc3RlZFZhbHVlKCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFNlbmRDaGFuZ2VFdmVu
dEFmdGVyQ2hlY2tlZENoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKaW5kZXggMmE2MjNlMDc3Y2E2YjkzYjhlYTIyZmMzNzc0NTA4ZTU4OGM4MmRiYy4uNmZlODgz
Mzk3MGI4NjkyNjQ4M2Y1OWNmZGI3OTlkZjcxMzJkZDc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKQEAgLTQyMCwxNCArNDIwLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEpCiAgICAgICAgIGlmIChmaWxl
bmFtZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIC8v
IFVnbHkuIEZvciBzZWN1cml0eSBub25lIG9mIHRoZSBBUElzIGF2YWlsYWJsZSB0byB1cyBjYW4g
c2V0IHRoZSBpbnB1dCB2YWx1ZQotICAgICAgICAvLyBvbiBmaWxlIGlucHV0cy4gRXZlbiBmb3Jj
aW5nIGEgY2hhbmdlIGluIEhUTUxJbnB1dEVsZW1lbnQgZG9lc24ndCB3b3JrIGFzCi0gICAgICAg
IC8vIFJlbmRlckZpbGVVcGxvYWRDb250cm9sIGNsZWFycyB0aGUgZmlsZSB3aGVuIGRvaW5nIHVw
ZGF0ZUZyb21FbGVtZW50KCkuCi0gICAgICAgIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKiByZW5k
ZXJlciA9IHRvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2woZmlsZUlucHV0LT5yZW5kZXJlcigpKTsK
LSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICByZW5kZXJlci0+cmVjZWl2ZURyb3BwZWRGaWxlcyhmaWxlbmFtZXMpOworICAgICAgICBm
aWxlSW5wdXQtPnJlY2VpdmVEcm9wcGVkRmlsZXMoZmlsZW5hbWVzKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKaW5k
ZXggN2U2ZDRhZWU4ZTAzNTMwYmI4N2VhZTQ0ODkyOTk2ZGE1NmE5ZWZiZi4uNDk2MDliOGE0OTU0
NjQwZDdkNDAwNGMzYWUyYTA4OTY5MTFmMTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVDaG9vc2VyLmNwcApAQCAtMzcsMTEgKzM3LDEwIEBAIEZpbGVDaG9vc2VyQ2xpZW50Ojp+Rmls
ZUNob29zZXJDbGllbnQoKQogewogfQogCi1pbmxpbmUgRmlsZUNob29zZXI6OkZpbGVDaG9vc2Vy
KEZpbGVDaG9vc2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbml0aWFs
RmlsZW5hbWVzKQoraW5saW5lIEZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNs
aWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9pc0luaXRpYWxp
emluZyh0cnVlKQogewotICAgIG1fZmlsZW5hbWVzID0gaW5pdGlhbEZpbGVuYW1lczsKIH0KIAog
dm9pZCBGaWxlQ2hvb3Nlcjo6aW5pdGlhbGl6ZSgpCkBAIC01MCw5ICs0OSw5IEBAIHZvaWQgRmls
ZUNob29zZXI6OmluaXRpYWxpemUoKQogICAgIG1faXNJbml0aWFsaXppbmcgPSBmYWxzZTsKIH0K
IAotUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gRmlsZUNob29zZXI6OmNyZWF0ZShGaWxlQ2hvb3Nl
ckNsaWVudCogY2xpZW50LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5pdGlhbEZpbGVuYW1lcykK
K1Bhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRmlsZUNob29zZXJD
bGllbnQqIGNsaWVudCkKIHsKLSAgICBSZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIoYWRvcHRS
ZWYobmV3IEZpbGVDaG9vc2VyKGNsaWVudCwgaW5pdGlhbEZpbGVuYW1lcykpKTsKKyAgICBSZWZQ
dHI8RmlsZUNob29zZXI+IGNob29zZXIoYWRvcHRSZWYobmV3IEZpbGVDaG9vc2VyKGNsaWVudCkp
KTsKICAgICBjaG9vc2VyLT5pbml0aWFsaXplKCk7CiAgICAgcmV0dXJuIGNob29zZXI7CiB9CkBA
IC04MSw3ICs4MCw3IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgbV9maWxlbmFtZXMgPSBmaWxlbmFtZXM7CiAgICAg
bG9hZEljb24oKTsKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT52YWx1ZUNo
YW5nZWQoKTsKKyAgICAgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKCk7CiB9CiAKIHZvaWQgRmls
ZUNob29zZXI6OmxvYWRJY29uKCkKQEAgLTk0LDcgKzkzLDcgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6
aWNvbkxvYWRlZChQYXNzUmVmUHRyPEljb24+IGljb24pCiB7CiAgICAgbV9pY29uID0gaWNvbjsK
ICAgICBpZiAoIW1faXNJbml0aWFsaXppbmcgJiYgbV9pY29uICYmIG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+cmVwYWludCgpOworICAgICAgICBtX2NsaWVudC0+aWNvbkxvYWRlZCgpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAppbmRleCBhYzVlMGU2MGJj
M2Y3NTUzYTliMWIyNTRlZWNiYjlhOWEwMWQxNDQwLi43NjFkM2VhNTEwOGU1YWNjYTRmYjg3OGE5
MDgyZDAzNWIwYmZjOWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKQEAg
LTQxLDggKzQxLDggQEAgY2xhc3MgSWNvbjsKIAogY2xhc3MgRmlsZUNob29zZXJDbGllbnQgewog
cHVibGljOgotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlcGFpbnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGVzQ2hvc2VuKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBpY29uTG9hZGVkKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBh
bGxvd3NNdWx0aXBsZUZpbGVzKCkgPSAwOwogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQog
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA9IDA7CkBAIC01NCw3ICs1
NCw3IEBAIHB1YmxpYzoKIAogY2xhc3MgRmlsZUNob29zZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxG
aWxlQ2hvb3Nlcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVDaG9vc2Vy
PiBjcmVhdGUoRmlsZUNob29zZXJDbGllbnQqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5pdGlh
bEZpbGVuYW1lcyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IGNyZWF0ZShG
aWxlQ2hvb3NlckNsaWVudCopOwogICAgIH5GaWxlQ2hvb3NlcigpOwogCiAgICAgdm9pZCBkaXNj
b25uZWN0Q2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KQEAgLTgwLDcgKzgwLDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBhY2NlcHRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9j
bGllbnQtPmFjY2VwdFR5cGVzKCkgOiBTdHJpbmcoKTsgfQogCiBwcml2YXRlOgotICAgIEZpbGVD
aG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluaXRpYWxG
aWxlbmFtZXMpOworICAgIEZpbGVDaG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50Kik7CiAgICAgdm9p
ZCBpbml0aWFsaXplKCk7CiAgICAgdm9pZCBsb2FkSWNvbigpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAppbmRleCBiNWU1
YTI2ODRhOGMwZThiMTBkYmUwYzVlNDdjZThiNzBiMTI4NGU4Li5jMjA5MTRlYTBhYjdlNWZhMTE0
NzU4ZjA1OTJlZTBkODYwNGVlMDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKQEAgLTU2LDEwNiArNTYsMTYgQEAgY29u
c3QgaW50IGJ1dHRvblNoYWRvd0hlaWdodCA9IDI7CiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2woSFRNTElucHV0RWxlbWVudCogaW5wdXQpCiAgICAgOiBS
ZW5kZXJCbG9jayhpbnB1dCkKIHsKLSAgICBGaWxlTGlzdCogbGlzdCA9IGlucHV0LT5maWxlcygp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBs
aXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgZmlsZW5hbWVzLmFwcGVuZChsaXN0LT5pdGVtKGkpLT5wYXRo
KCkpOwotICAgIG1fZmlsZUNob29zZXIgPSBGaWxlQ2hvb3Nlcjo6Y3JlYXRlKHRoaXMsIGZpbGVu
YW1lcyk7CiB9CiAKIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp+UmVuZGVyRmlsZVVwbG9hZENv
bnRyb2woKQogewotICAgIG1fZmlsZUNob29zZXItPmRpc2Nvbm5lY3RDbGllbnQoKTsKLX0KLQot
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dmFsdWVDaGFuZ2VkKCkKLXsKLSAgICAvLyBk
aXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQgbWF5IGRlc3Ryb3kgdGhpcyByZW5kZXJlcgot
ICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIgPSBtX2ZpbGVDaG9vc2VyOwotCi0g
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRGaWxlTGlzdEZyb21SZW5k
ZXJlcihmaWxlQ2hvb3Nlci0+ZmlsZW5hbWVzKCkpOwotICAgIGlucHV0RWxlbWVudC0+ZGlzcGF0
Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Ci0gCi0gICAgLy8gb25seSByZXBhaW50IGlmIGl0
IGRvZXNuJ3Qgc2VlbSB3ZSBoYXZlIGJlZW4gZGVzdHJveWVkCi0gICAgaWYgKCFmaWxlQ2hvb3Nl
ci0+ZGlzY29ubmVjdGVkKCkpCi0gICAgICAgIHJlcGFpbnQoKTsKLX0KLQotYm9vbCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzTXVsdGlwbGVGaWxlcygpCi17Ci0jaWYgRU5BQkxFKERJ
UkVDVE9SWV9VUExPQUQpCi0gICAgaWYgKGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpKQotICAgICAg
cmV0dXJuIHRydWU7Ci0jZW5kaWYKLQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgcmV0dXJuIGlucHV0LT5m
YXN0SGFzQXR0cmlidXRlKG11bHRpcGxlQXR0cik7Ci19Ci0KLSNpZiBFTkFCTEUoRElSRUNUT1JZ
X1VQTE9BRCkKLWJvb2wgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c0RpcmVjdG9yeVVw
bG9hZCgpCi17Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKLSAgICByZXR1cm4gaW5wdXQtPmZhc3RIYXNBdHRyaWJ1
dGUod2Via2l0ZGlyZWN0b3J5QXR0cik7Ci19Ci0KLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2w6OnJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2FkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocykKLXsKLSAgICBpZiAoQ2hyb21lKiBjaHJvbWVQb2ludGVyID0gY2hyb21lKCkpCi0gICAg
ICAgIGNocm9tZVBvaW50ZXItPmVudW1lcmF0ZUNob3NlbkRpcmVjdG9yeShwYXRoc1swXSwgbV9m
aWxlQ2hvb3Nlci5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjphY2NlcHRUeXBlcygpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihub2RlKCkpLT5hY2NlcHQoKTsKLX0KLQotdm9pZCBSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6Y2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiBjaG9vc2VyLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQotewotICAgIGlmIChDaHJvbWUqIGNocm9tZVBvaW50
ZXIgPSBjaHJvbWUoKSkKLSAgICAgICAgY2hyb21lUG9pbnRlci0+Y2hvb3NlSWNvbkZvckZpbGVz
KGZpbGVuYW1lcywgY2hvb3Nlcik7Ci19Ci0KLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OmNsaWNrKCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbGwgU2NyaXB0Q29udHJvbGxl
cjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkuCi0gICAgaWYgKCFmcmFtZSgpIHx8ICFmcmFtZSgp
LT5sb2FkZXIoKS0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChDaHJvbWUqIGNocm9tZVBvaW50ZXIgPSBjaHJvbWUoKSkKLSAgICAgICAgY2hyb21l
UG9pbnRlci0+cnVuT3BlblBhbmVsKGZyYW1lKCksIG1fZmlsZUNob29zZXIpOwotfQotCi1DaHJv
bWUqIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjaHJvbWUoKSBjb25zdAotewotICAgIEZyYW1l
KiBmcmFtZSA9IG5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBp
ZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBwYWdlLT5jaHJvbWUoKTsK
IH0KIAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPmlzRmlsZVVw
bG9hZCgpKTsKLQotCiAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbiA9IHVwbG9hZEJ1
dHRvbigpKQogICAgICAgICBidXR0b24tPnNldERpc2FibGVkKCF0aGVtZSgpLT5pc0VuYWJsZWQo
dGhpcykpOwotCi0gICAgLy8gVGhpcyBvbmx5IHN1cHBvcnRzIGNsZWFyaW5nIG91dCB0aGUgZmls
ZXMsIGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSBmb3IKLSAgICAvLyBzZWN1cml0eSByZWFzb25zIHRo
YXQncyB0aGUgb25seSBjaGFuZ2UgdGhlIERPTSBpcyBhbGxvd2VkIHRvIG1ha2UuCi0gICAgRmls
ZUxpc3QqIGZpbGVzID0gaW5wdXRFbGVtZW50LT5maWxlcygpOwotICAgIEFTU0VSVChmaWxlcyk7
Ci0gICAgaWYgKGZpbGVzICYmIGZpbGVzLT5pc0VtcHR5KCkgJiYgIW1fZmlsZUNob29zZXItPmZp
bGVuYW1lcygpLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZpbGVDaG9vc2VyLT5jbGVhcigpOwot
ICAgICAgICByZXBhaW50KCk7Ci0gICAgfQogfQogCiBzdGF0aWMgaW50IG5vZGVXaWR0aChOb2Rl
KiBub2RlKQpAQCAtMTY2LDE1ICs3NiwxNCBAQCBzdGF0aWMgaW50IG5vZGVXaWR0aChOb2RlKiBu
b2RlKQogaW50IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjptYXhGaWxlbmFtZVdpZHRoKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbWF4KDAsIGNvbnRlbnRXaWR0aCgpIC0gbm9kZVdpZHRoKHVwbG9h
ZEJ1dHRvbigpKSAtIGFmdGVyQnV0dG9uU3BhY2luZwotICAgICAgICAtIChtX2ZpbGVDaG9vc2Vy
LT5pY29uKCkgPyBpY29uV2lkdGggKyBpY29uRmlsZW5hbWVTcGFjaW5nIDogMCkpOworICAgICAg
ICAtIChmaWxlQ2hvb3NlcigpLT5pY29uKCkgPyBpY29uV2lkdGggKyBpY29uRmlsZW5hbWVTcGFj
aW5nIDogMCkpOwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVj
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewog
ICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVChtX2ZpbGVDaG9vc2VyKTsKLSAgICAKKwogICAgIC8vIFB1c2ggYSBjbGlw
LgogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQsIGZhbHNlKTsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91
bmRzKSB7CkBAIC0xOTksNyArMTA4LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JgogCiAgICAg
ICAgIGludCBidXR0b25XaWR0aCA9IG5vZGVXaWR0aChidXR0b24pOwogICAgICAgICBpbnQgYnV0
dG9uQW5kSWNvbldpZHRoID0gYnV0dG9uV2lkdGggKyBhZnRlckJ1dHRvblNwYWNpbmcKLSAgICAg
ICAgICAgICsgKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGljb25GaWxlbmFt
ZVNwYWNpbmcgOiAwKTsKKyAgICAgICAgICAgICsgKGZpbGVDaG9vc2VyKCktPmljb24oKSA/IGlj
b25XaWR0aCArIGljb25GaWxlbmFtZVNwYWNpbmcgOiAwKTsKICAgICAgICAgaW50IHRleHRYOwog
ICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAg
ICAgdGV4dFggPSBjb250ZW50TGVmdCArIGJ1dHRvbkFuZEljb25XaWR0aDsKQEAgLTIxNiw3ICsx
MjUsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmCiAgICAgICAgIC8vIERyYXcgdGhlIGZpbGVu
YW1lCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1
biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9maWxl
Q2hvb3Nlci0+aWNvbigpKSB7CisgICAgICAgIGlmIChmaWxlQ2hvb3NlcigpLT5pY29uKCkpIHsK
ICAgICAgICAgICAgIC8vIERldGVybWluZSB3aGVyZSB0aGUgaWNvbiBzaG91bGQgYmUgcGxhY2Vk
CiAgICAgICAgICAgICBpbnQgaWNvblkgPSBwYWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKSArIChjb250ZW50SGVpZ2h0KCkgLSBpY29uSGVpZ2h0KSAvIDI7CiAgICAg
ICAgICAgICBpbnQgaWNvblg7CkBAIC0yMjYsNyArMTM1LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBv
aW50JgogICAgICAgICAgICAgICAgIGljb25YID0gY29udGVudExlZnQgKyBjb250ZW50V2lkdGgo
KSAtIGJ1dHRvbldpZHRoIC0gYWZ0ZXJCdXR0b25TcGFjaW5nIC0gaWNvbldpZHRoOwogCiAgICAg
ICAgICAgICAvLyBEcmF3IHRoZSBmaWxlIGljb24KLSAgICAgICAgICAgIG1fZmlsZUNob29zZXIt
Pmljb24oKS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoaWNvblgsIGljb25ZLCBp
Y29uV2lkdGgsIGljb25IZWlnaHQpKTsKKyAgICAgICAgICAgIGZpbGVDaG9vc2VyKCktPmljb24o
KS0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoaWNvblgsIGljb25ZLCBpY29uV2lk
dGgsIGljb25IZWlnaHQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjkwLDIxICsxOTksNiBA
QCBIVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBsb2FkQnV0dG9u
KCkgY29uc3QKICAgICByZXR1cm4gYnV0dG9uTm9kZSAmJiBidXR0b25Ob2RlLT5pc0hUTUxFbGVt
ZW50KCkgJiYgYnV0dG9uTm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgPyBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oYnV0dG9uTm9kZSkgOiAwOwogfQogCi12b2lkIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocykKLXsKLSNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICBpZiAoYWxsb3dzRGly
ZWN0b3J5VXBsb2FkKCkpIHsKLSAgICAgICAgcmVjZWl2ZURyb3BGb3JEaXJlY3RvcnlVcGxvYWQo
cGF0aHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoYWxsb3dz
TXVsdGlwbGVGaWxlcygpKQotICAgICAgICBtX2ZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlcyhwYXRo
cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2ZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlKHBhdGhzWzBd
KTsKLX0KLQogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpidXR0b25WYWx1ZSgpCiB7
CiAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbiA9IHVwbG9hZEJ1dHRvbigpKQpAQCAt
MzE1LDcgKzIwOSwxNiBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmJ1dHRvblZh
bHVlKCkKIAogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpmaWxlVGV4dFZhbHVlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9maWxlQ2hvb3Nlci0+YmFzZW5hbWVGb3JXaWR0aChzdHls
ZSgpLT5mb250KCksIG1heEZpbGVuYW1lV2lkdGgoKSk7CisgICAgcmV0dXJuIGZpbGVDaG9vc2Vy
KCktPmJhc2VuYW1lRm9yV2lkdGgoc3R5bGUoKS0+Zm9udCgpLCBtYXhGaWxlbmFtZVdpZHRoKCkp
OwogfQotICAgIAorCitGaWxlQ2hvb3NlciogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVD
aG9vc2VyKCkgY29uc3QKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQoaW5wdXRF
bGVtZW50LT5pc0ZpbGVVcGxvYWQoKSk7CisgICAgRmlsZUNob29zZXIqIGNob29zZXIgPSBpbnB1
dEVsZW1lbnQtPmZpbGVDaG9vc2VyKCk7CisgICAgQVNTRVJUKGNob29zZXIpOworICAgIHJldHVy
biBjaG9vc2VyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCmluZGV4IGJjNWFhNWJi
ODc1OGE2ZDkwNDJlYzA0OGNmMTY4MmVjZjYxZjc5YWYuLmYwMjA1Y2YzZmUzYWM3NzMyZWEzNmRk
ZjY4ZGZiZDZiOTBjZTVmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCkBAIC0zMywxNyArMzMsMTMgQEAgY2xhc3MgSFRNTElu
cHV0RWxlbWVudDsKIC8vIHN1ZmZpY2llbnQgc3BhY2UgdG8gZHJhdyBhIGZpbGUgaWNvbiBhbmQg
ZmlsZW5hbWUuIFRoZSBSZW5kZXJCdXR0b24gaGFzIGEgc2hhZG93IG5vZGUKIC8vIGFzc29jaWF0
ZWQgd2l0aCBpdCB0byByZWNlaXZlIGNsaWNrL2hvdmVyIGV2ZW50cy4KIAotY2xhc3MgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wgOiBwdWJsaWMgUmVuZGVyQmxvY2ssIHByaXZhdGUgRmlsZUNob29z
ZXJDbGllbnQgeworY2xhc3MgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wgOiBwdWJsaWMgUmVuZGVy
QmxvY2sgewogcHVibGljOgogICAgIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKEhUTUxJbnB1dEVs
ZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJGaWxlVXBsb2FkQ29udHJvbCgpOwogCiAgICAg
dmlydHVhbCBib29sIGlzRmlsZVVwbG9hZENvbnRyb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICB2b2lkIGNsaWNrKCk7Ci0KLSAgICB2b2lkIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mKTsKLQogICAgIFN0cmluZyBidXR0b25WYWx1ZSgpOwogICAgIFN0
cmluZyBmaWxlVGV4dFZhbHVlKCkgY29uc3Q7CiAgICAgCkBAIC01NiwyNiArNTIsMTMgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJvcGFn
YXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAvLyBGaWxlQ2hvb3NlckNsaWVu
dCBtZXRob2RzLgotICAgIHZvaWQgdmFsdWVDaGFuZ2VkKCk7Ci0gICAgdm9pZCByZXBhaW50KCkg
eyBSZW5kZXJCbG9jazo6cmVwYWludCgpOyB9Ci0gICAgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVz
KCk7Ci0jaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgYm9vbCBhbGxvd3NEaXJlY3Rv
cnlVcGxvYWQoKTsKLSAgICB2b2lkIHJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2FkKGNvbnN0
IFZlY3RvcjxTdHJpbmc+Jik7Ci0jZW5kaWYKLSAgICBTdHJpbmcgYWNjZXB0VHlwZXMoKTsKLSAg
ICB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hvb3NlciosIGNvbnN0IFZlY3RvcjxTdHJp
bmc+Jik7Ci0KLSAgICBDaHJvbWUqIGNocm9tZSgpIGNvbnN0OwogICAgIGludCBtYXhGaWxlbmFt
ZVdpZHRoKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlQnV0dG9u
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdDsKICAgICAKICAgICB2
aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7
CiAKICAgICBIVE1MSW5wdXRFbGVtZW50KiB1cGxvYWRCdXR0b24oKSBjb25zdDsKLQotICAgIFJl
ZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKKyAgICBGaWxlQ2hvb3NlciogZmlsZUNo
b29zZXIoKSBjb25zdDsKIH07CiAKIGlubGluZSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogdG9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbChSZW5kZXJPYmplY3QqIG9iamVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98314</attachid>
            <date>2011-06-22 22:45:09 -0700</date>
            <delta_ts>2011-06-22 22:59:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62069-20110622224508.patch</filename>
            <type>text/plain</type>
            <size>23723</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk1MjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMTg1YzgzYzJlNzNkNTJl
NzUwYzhlNjBlZDgwMTdkZTJhMzRiYTQ5Li4wYWQ5NmM3YTI5MzEwZjYzNTEwMmY1NThiMTNjOTQ5
NzgyOWI2MDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTIgQEAKIDIwMTEtMDYtMjIgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGZpbGUtY2hvb3NpbmcgYW5kIGljb24t
bG9hZGluZyBtYW5hZ2VtZW50IHRvIEZpbGVJbnB1dFR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMDY5CisKKyAgICAgICAgMSkgTW92ZWQgdGhl
IGR1dGllcyBvZiBGaWxlQ2hvb3NlckNsaWVudCBhbmQgRmlsZUljb25Mb2FkZXJDbGllbnQgZnJv
bQorICAgICAgICBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCB0byBGaWxlSW5wdXRUeXBlLCBhbG9u
ZyB3aXRoIGFsbCBvZiB0aGUKKyAgICAgICAgc3VwcG9ydGluZyBmdW5jdGlvbnMuCisKKyAgICAg
ICAgMikgTW92ZWQgSWNvbiBvd25lcnNoaXAgdG8gRmlsZUlucHV0VHlwZSBhbmQgZXhwb3NlZCBh
Y2Nlc3NvciBvbgorICAgICAgICBIVE1JbnB1dEVsZW1lbnQgdG8gYWxsb3cgUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wgdG8gcXVlcnkgY3VycmVudCBpY29uLgorCisgICAgICAgIEFzIGEgcmVzdWx0
LCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCBpcyBub3cgY29tcGxldGVseSBzdGF0ZWxlc3MsIHdo
aWNoIGlzCisgICAgICAgIG5lYXQgYW5kIGNsZWFuLgorCisgICAgICAgIFJlZmFjdG9yaW5nLCBj
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRl
RXZlbnQpOiBNb3ZlZCBsb2dpYyBoZXJlIGZyb20gUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuCisg
ICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpyZXF1ZXN0SWNvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6ZmlsZXNDaG9zZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2Fk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjp1cGRhdGVSZW5kZXJp
bmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmNocm9tZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxl
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6aWNvbik6IEFkZGVk
LgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRW
YWx1ZUZyb21SZW5kZXJlcik6IFVwZGF0ZWQgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnJlY2VpdmVEcm9wcGVkRmlsZXMpOiBBZGRlZCB0byByZXBsYWNlIHNl
dEZpbGVMaXN0RnJvbVJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6aWNvbik6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
cmVjZWl2ZURyb3BwZWRGaWxlcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBl
OjppY29uKTogQWRkZWQuCisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBw
YWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
Ojpjb25jbHVkZUVkaXREcmFnKTogQ2hhbmdlZCB0byB1c2UgSFRNTElucHV0RWxlbWVudC4gQWho
LCBuaWNlIGFuZCBjbGVhbiEKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OlJl
bmRlckZpbGVVcGxvYWRDb250cm9sKTogUmVtb3ZlZCBjb2RlIHRoYXQgaXMgbm8gbG9uZ2VyIG5l
Y2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRh
dGVGcm9tRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6Om1heEZpbGVuYW1lV2lkdGgpOiBDaGFuZ2VkIHRvIHVzZSBIVE1MSW5wdXRFbGVt
ZW50IGljb24gYWNjZXNzb3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6cGFpbnRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuaDoKKworMjAxMS0wNi0yMiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXpr
b3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgogCiAg
ICAgICAgIENvbnZlcnQgRmlsZUljb25Mb2FkZXJDbGllbnQgdG8gInNtYXJ0IGNsaWVudCIgcGF0
dGVybiwganVzdCBsaWtlIEZpbGVDaG9vc2VyQ2xpZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlu
cHV0VHlwZS5jcHAKaW5kZXggZDBkOGY5YWIwYjBlOGQ0ZDE3YmY3Zjc3MjQwNGE0MDQ3MjBjOTY3
ZS4uMGE4NzQxZmUwNDIzYWY0MzA4ZTc5MDk3NzY0MjZkMWU3ODYzOTdkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCkBAIC0yMiwxNSArMjIsMjAgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGaWxlSW5wdXRUeXBlLmgiCiAKKyNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJGaWxl
TGlzdC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3Qu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJT
aGFkb3dSb290LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTEyOCw3ICsxMzMsMjQgQEAgdm9pZCBGaWxlSW5wdXRUeXBl
OjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZWxlbWVu
dCgpLT5kaXNhYmxlZCgpIHx8ICFlbGVtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICB0b1JlbmRlckZpbGVVcGxvYWRDb250cm9sKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSkt
PmNsaWNrKCk7CisKKyAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoQ2hyb21lKiBjaHJvbWUgPSB0aGlz
LT5jaHJvbWUoKSkgeworICAgICAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzOworICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGVsZW1lbnQoKTsKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKKyAgICAgICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3J5VXBsb2FkID0g
aW5wdXQtPmZhc3RIYXNBdHRyaWJ1dGUod2Via2l0ZGlyZWN0b3J5QXR0cik7CisgICAgICAgIHNl
dHRpbmdzLmFsbG93c011bHRpcGxlRmlsZXMgPSBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcnlVcGxv
YWQgfHwgaW5wdXQtPmZhc3RIYXNBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKTsKKyNlbHNlCisgICAg
ICAgIHNldHRpbmdzLmFsbG93c011bHRpcGxlRmlsZXMgPSBpbnB1dC0+ZmFzdEhhc0F0dHJpYnV0
ZShtdWx0aXBsZUF0dHIpOworI2VuZGlmCisgICAgICAgIHNldHRpbmdzLmFjY2VwdFR5cGVzID0g
aW5wdXQtPmFjY2VwdCgpOworICAgICAgICBBU1NFUlQoaW5wdXQtPmZpbGVzKCkpOworICAgICAg
ICBzZXR0aW5ncy5zZWxlY3RlZEZpbGVzID0gaW5wdXQtPmZpbGVzKCktPmZpbGVuYW1lcygpOwor
ICAgICAgICBjaHJvbWUtPnJ1bk9wZW5QYW5lbChpbnB1dC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwg
bmV3RmlsZUNob29zZXIoc2V0dGluZ3MpKTsKKyAgICB9CiAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CiB9CiAKQEAgLTIzMCw0ICsyNTIsODQgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpj
cmVhdGVTaGFkb3dTdWJ0cmVlKCkKICAgICBlbGVtZW50KCktPmVuc3VyZVNoYWRvd1Jvb3QoKS0+
YXBwZW5kQ2hpbGQoVXBsb2FkQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKSksIGVjKTsKIH0KIAordm9pZCBGaWxlSW5wdXRUeXBlOjpyZXF1ZXN0SWNvbihjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIGlmICghZmlsZW5hbWVzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKENocm9tZSogY2hyb21lID0gdGhpcy0+Y2hyb21l
KCkpCisgICAgICAgIGNocm9tZS0+bG9hZEljb25Gb3JGaWxlcyhmaWxlbmFtZXMsIG5ld0ZpbGVJ
Y29uTG9hZGVyKCkpOworfQorCit2b2lkIEZpbGVJbnB1dFR5cGU6OmZpbGVzQ2hvc2VuKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSBlbGVtZW50KCk7CisgICAgc2V0RmlsZUxpc3QoZmlsZW5hbWVzKTsKKworICAgIGlucHV0
LT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOworICAgIGlucHV0LT5u
b3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7CisgICAgaW5wdXQtPnNldE5lZWRzVmFsaWRpdHlDaGVj
aygpOworCisgICAgcmVxdWVzdEljb24oZmlsZW5hbWVzKTsKKworICAgIGlmIChpbnB1dC0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgaW5wdXQtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICAvLyBU
aGlzIGNhbGwgbWF5IGNhdXNlIGRlc3RydWN0aW9uIG9mIHRoaXMgaW5zdGFuY2UgYW5kIHRodXMg
bXVzdCBhbHdheXMgYmUgbGFzdCBpbiB0aGUgZnVuY3Rpb24uCisgICAgaW5wdXQtPmRpc3BhdGNo
Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOworfQorCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExP
QUQpCit2b2lkIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2FkKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBpZiAoQ2hyb21lKiBjaHJvbWUgPSB0
aGlzLT5jaHJvbWUoKSkgeworICAgICAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzOwor
ICAgICAgICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcnlVcGxvYWQgPSB0cnVlOworICAgICAgICBz
ZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gdHJ1ZTsKKyAgICAgICAgc2V0dGluZ3Muc2Vs
ZWN0ZWRGaWxlcy5hcHBlbmQocGF0aHNbMF0pOworICAgICAgICBjaHJvbWUtPmVudW1lcmF0ZUNo
b3NlbkRpcmVjdG9yeShuZXdGaWxlQ2hvb3NlcihzZXR0aW5ncykpOworICAgIH0KK30KKyNlbmRp
ZgorCit2b2lkIEZpbGVJbnB1dFR5cGU6OnVwZGF0ZVJlbmRlcmluZyhQYXNzUmVmUHRyPEljb24+
IGljb24pCit7CisgICAgaWYgKG1faWNvbiA9PSBpY29uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2ljb24gPSBpY29uOworICAgIGlmIChlbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAg
IGVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworfQorCitDaHJvbWUqIEZpbGVJbnB1
dFR5cGU6OmNocm9tZSgpIGNvbnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBlbGVtZW50KCkt
PmRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gZWxlbWVudCgpOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGlmIChp
bnB1dC0+ZmFzdEhhc0F0dHJpYnV0ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKSkgeworICAgICAgICBy
ZWNlaXZlRHJvcEZvckRpcmVjdG9yeVVwbG9hZChwYXRocyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKworICAgIGlmIChpbnB1dC0+ZmFzdEhhc0F0dHJpYnV0ZShtdWx0aXBsZUF0
dHIpKQorICAgICAgICBmaWxlc0Nob3NlbihwYXRocyk7CisgICAgZWxzZSB7CisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGZpcnN0UGF0aE9ubHk7CisgICAgICAgIGZpcnN0UGF0aE9ubHkuYXBwZW5k
KHBhdGhzWzBdKTsKKyAgICAgICAgZmlsZXNDaG9zZW4oZmlyc3RQYXRoT25seSk7CisgICAgfQor
fQorCitJY29uKiBGaWxlSW5wdXRUeXBlOjppY29uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
Y29uLmdldCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmls
ZUlucHV0VHlwZS5oCmluZGV4IDRjOWRhMDVmOGY4YjkzYzNiOWZkMDU5OWJmY2ZkMWQyMDczZjJl
MzUuLjJkZjhjMDk0NTI0YjkyOTgxYTVjMWYzNmQzMzBiNzY4YjJjNjAwYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRmlsZUlucHV0VHlwZS5oCkBAIC0zMywxMyArMzMsMTYgQEAKICNkZWZpbmUgRmlsZUlu
cHV0VHlwZV9oCiAKICNpbmNsdWRlICJCYXNlQnV0dG9uSW5wdXRUeXBlLmgiCisjaW5jbHVkZSAi
RmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDaHJvbWU7CiBjbGFz
cyBGaWxlTGlzdDsKIAotY2xhc3MgRmlsZUlucHV0VHlwZSA6IHB1YmxpYyBCYXNlQnV0dG9uSW5w
dXRUeXBlIHsKK2NsYXNzIEZpbGVJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZUJ1dHRvbklucHV0VHlw
ZSwgcHJpdmF0ZSBGaWxlQ2hvb3NlckNsaWVudCwgcHJpdmF0ZSBGaWxlSWNvbkxvYWRlckNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRN
TElucHV0RWxlbWVudCopOwogCkBAIC01NywxMSArNjAsMjYgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgY2FuU2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBib29sIGdl
dFR5cGVTcGVjaWZpY1ZhbHVlKFN0cmluZyYpOyAvLyBDaGVja2VkIGZpcnN0LCBiZWZvcmUgaW50
ZXJuYWwgc3RvcmFnZSBvciB0aGUgdmFsdWUgYXR0cmlidXRlLgogICAgIHZpcnR1YWwgYm9vbCBz
dG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRG
aWxlTGlzdChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisgICAgdmlydHVhbCBJ
Y29uKiBpY29uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRmlsZVVwbG9hZCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CiAKKyAgICAvLyBGaWxl
Q2hvb3NlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZmlsZXNDaG9z
ZW4oY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKworICAgIC8vIEZpbGVJY29uTG9hZGVyQ2xpZW50
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZW5kZXJpbmcoUGFzc1Jl
ZlB0cjxJY29uPik7CisKKyAgICB2b2lkIHNldEZpbGVMaXN0KGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRocyk7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgdm9pZCByZWNlaXZl
RHJvcEZvckRpcmVjdG9yeVVwbG9hZChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworI2VuZGlmCisg
ICAgdm9pZCByZXF1ZXN0SWNvbihjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIENocm9tZSog
Y2hyb21lKCkgY29uc3Q7CisKICAgICBSZWZQdHI8RmlsZUxpc3Q+IG1fZmlsZUxpc3Q7CisgICAg
UmVmUHRyPEljb24+IG1faWNvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDM1MWE0YWM1YjI4YzE2YWY3
MmIwNTdlZTYwMWEwNDNhMWM4NDNkNGYuLmM1MzU4ZTYxODI0Njg3MTQ1NGY4NjA0NTgyNmUxNWM5
ODlhMzBkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAt
NDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPcHRp
b25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIklj
b24uaCIKICNpbmNsdWRlICJJbnB1dFR5cGUuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgpAQCAtMTA1Nyw3ICsxMDU4LDcgQEAgYm9v
bCBIVE1MSW5wdXRFbGVtZW50OjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25z
dAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7Ci0gICAgLy8gRmlsZSB1cGxvYWQgY29udHJvbHMgd2lsbCBhbHdheXMg
dXNlIHNldEZpbGVMaXN0RnJvbVJlbmRlcmVyLgorICAgIC8vIEZpbGUgdXBsb2FkIGNvbnRyb2xz
IHdpbGwgbmV2ZXIgdXNlIHRoaXMuCiAgICAgQVNTRVJUKCFpc0ZpbGVVcGxvYWQoKSk7CiAKICAg
ICBtX3N1Z2dlc3RlZFZhbHVlID0gU3RyaW5nKCk7CkBAIC0xMDg1LDE1ICsxMDg2LDYgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgIHNldEF1dG9maWxsZWQoZmFsc2UpOwogfQogCi12b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykK
LXsKLSAgICBtX2lucHV0VHlwZS0+c2V0RmlsZUxpc3QocGF0aHMpOwotCi0gICAgc2V0Rm9ybUNv
bnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKLSAgICBub3RpZnlGb3JtU3RhdGVDaGFu
Z2VkKCk7Ci0gICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci19Ci0KIHZvaWQqIEhUTUxJbnB1
dEVsZW1lbnQ6OnByZURpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgbV9pbnB1
dFR5cGUtPnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpKSB7CkBAIC0xMjc1LDYgKzEyNjcs
MTggQEAgRmlsZUxpc3QqIEhUTUxJbnB1dEVsZW1lbnQ6OmZpbGVzKCkKICAgICByZXR1cm4gbV9p
bnB1dFR5cGUtPmZpbGVzKCk7CiB9CiAKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVjZWl2ZURy
b3BwZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIEFTU0VS
VChtX2lucHV0VHlwZS0+aXNGaWxlVXBsb2FkKCkpOworICAgIG1faW5wdXRUeXBlLT5yZWNlaXZl
RHJvcHBlZEZpbGVzKGZpbGVuYW1lcyk7Cit9CisKK0ljb24qIEhUTUxJbnB1dEVsZW1lbnQ6Omlj
b24oKSBjb25zdAoreworICAgIEFTU0VSVChtX2lucHV0VHlwZS0+aXNGaWxlVXBsb2FkKCkpOwor
ICAgIHJldHVybiBtX2lucHV0VHlwZS0+aWNvbigpOworfQorCiBTdHJpbmcgSFRNTElucHV0RWxl
bWVudDo6dmlzaWJsZVZhbHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbnB1dFR5cGUtPnZp
c2libGVWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBj
NTQwNjgzZGY5YmNlYTgxODM0Y2IxYzRiYWJjNWZmZjgwMjk2MjcwLi4wM2Y5M2Y0NjcwYzA5MTU1
ZjAwYTllZTNmNjM4MDFmMzIzMWJkYjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaApAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWxl
TGlzdDsKIGNsYXNzIEhUTUxEYXRhTGlzdEVsZW1lbnQ7CiBjbGFzcyBIVE1MT3B0aW9uRWxlbWVu
dDsKK2NsYXNzIEljb247CiBjbGFzcyBJbnB1dFR5cGU7CiBjbGFzcyBLVVJMOwogCkBAIC0xNjMs
NyArMTY0LDYgQEAgcHVibGljOgogICAgIFN0cmluZyB2YWx1ZVdpdGhEZWZhdWx0KCkgY29uc3Q7
CiAKICAgICB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgc2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKIAogICAg
IGJvb2wgY2FuSGF2ZVNlbGVjdGlvbigpIGNvbnN0OwogCkBAIC0yMDIsNiArMjAyLDggQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0QXV0b2ZpbGxlZChib29sID0gdHJ1ZSk7CiAKICAgICBGaWxlTGlz
dCogZmlsZXMoKTsKKyAgICB2b2lkIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKKyAgICBJY29uKiBpY29uKCkgY29uc3Q7CiAKICAgICB2b2lkIGFkZFNlYXJjaFJl
c3VsdCgpOwogICAgIHZvaWQgb25TZWFyY2goKTsKQEAgLTIyNiw2ICsyMjgsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpIGNvbnN0OwogICAgIHZvaWQgY2Fj
aGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKTsKKyAgICB2b2lkIG5vdGlmeUZvcm1TdGF0
ZUNoYW5nZWQoKTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUxlbmd0aDsKIApAQCAt
MzE4LDcgKzMyMSw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERBVEFMSVNUKQogICAgIEhUTUxE
YXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0KCkgY29uc3Q7CiAjZW5kaWYKLSAgICB2b2lkIG5vdGlm
eUZvcm1TdGF0ZUNoYW5nZWQoKTsKICAgICB2b2lkIHBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogICAgIHZvaWQgdXBkYXRlVmFsdWVJZk5lZWRlZCgpOwogI2lmIEVOQUJMRShX
Q1NTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4IGY2MjNjODY1MWQxNWEyNTZiNDNl
N2NjYzk2Njg0NTRmYzc3MTk2MDkuLmI4YzEyMDA4ZjI2MzNmYTVhY2E3NzMwZWZlMmVkNGM4NTlk
MDI5NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTUzNywxMSArNTM3LDE3IEBA
IGJvb2wgSW5wdXRUeXBlOjpoYXNVbmFjY2VwdGFibGVWYWx1ZSgpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIElucHV0VHlwZTo6c2V0RmlsZUxpc3QoY29uc3QgVmVjdG9yPFN0cmluZz4m
KQordm9pZCBJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitJY29uKiBJbnB1dFR5cGU6
Omljb24oKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCiBib29sIElucHV0VHlwZTo6c2hvdWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbigp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggOTYyMDE2
ODNjOTY0YTg3ZDlkNjY3ZDgwNjA3ZGE5NjQwZjdiOWNjYS4uYmYxN2UxMzY1YzViYjAwYjc2YmYw
YjU0ODg0ODdjYWFjODdjYTczMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC00OCw2ICs0
OCw3IEBAIGNsYXNzIEZvcm1EYXRhTGlzdDsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgSFRN
TEZvcm1FbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKK2NsYXNzIEljb247CiBjbGFz
cyBLZXlib2FyZEV2ZW50OwogY2xhc3MgTW91c2VFdmVudDsKIGNsYXNzIE5vZGU7CkBAIC0yMDks
MTIgKzIxMCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RBbGlnbkF0dHJpYnV0
ZSgpOwogICAgIHZpcnR1YWwgRmlsZUxpc3QqIGZpbGVzKCk7CisgICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKyAgICB2aXJ0dWFsIElj
b24qIGljb24oKSBjb25zdDsKICAgICAvLyBTaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJl
c3BvbmRpbmcgcmVuZGVyZXIgZm9yIGEgdHlwZSBjYW4gZGlzcGxheSBhIHN1Z2dlc3RlZCB2YWx1
ZS4KICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U3VnZ2VzdGVkVmFsdWUoKTsKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCgpOwogICAgIHZp
cnR1YWwgYm9vbCBjYW5TZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wg
c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RmlsZUxpc3QoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkUmVzZXRPbkRvY3VtZW50QWN0aXZhdGlvbigpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0
U3BlZWNoQXR0cmlidXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmlu
ZGV4IDZlZDk2ZTVmYzM5N2E1NTA0ZTk3ZDY4MWZhNjIzMTAzYzM5YzEwYjAuLjY3MWJmMjY5YWFk
YWQwM2UyYTdmMjlmOTY5MjQ2MzE5NmI1ZTY2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCkBAIC00MjAsMTQgKzQyMCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNv
bmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQogICAgICAgICBpZiAoZmlsZW5hbWVz
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAvLyBVZ2x5
LiBGb3Igc2VjdXJpdHkgbm9uZSBvZiB0aGUgQVBJcyBhdmFpbGFibGUgdG8gdXMgY2FuIHNldCB0
aGUgaW5wdXQgdmFsdWUKLSAgICAgICAgLy8gb24gZmlsZSBpbnB1dHMuIEV2ZW4gZm9yY2luZyBh
IGNoYW5nZSBpbiBIVE1MSW5wdXRFbGVtZW50IGRvZXNuJ3Qgd29yayBhcwotICAgICAgICAvLyBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbCBjbGVhcnMgdGhlIGZpbGUgd2hlbiBkb2luZyB1cGRhdGVG
cm9tRWxlbWVudCgpLgotICAgICAgICBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogcmVuZGVyZXIg
PSB0b1JlbmRlckZpbGVVcGxvYWRDb250cm9sKGZpbGVJbnB1dC0+cmVuZGVyZXIoKSk7Ci0gICAg
ICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
cmVuZGVyZXItPnJlY2VpdmVEcm9wcGVkRmlsZXMoZmlsZW5hbWVzKTsKKyAgICAgICAgZmlsZUlu
cHV0LT5yZWNlaXZlRHJvcHBlZEZpbGVzKGZpbGVuYW1lcyk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAKaW5kZXggOTc0YTYyMmI1ZDU2YjQ3MTFmMzBkMDIwMmZkZDkxYzFk
ZDQwOGM5Mi4uZjNiMjZmNmUyZWRlMTdkMjkyODFiNGFjOTIyMDY4YzVhMmFiZDNlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wu
Y3BwCkBAIC0yMSwyNCArMjEsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogCi0jaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVk
ZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVk
ZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0j
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVk
ZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNTcsMTA2ICs1MiwxNiBAQCBj
b25zdCBpbnQgYnV0dG9uU2hhZG93SGVpZ2h0ID0gMjsKIFJlbmRlckZpbGVVcGxvYWRDb250cm9s
OjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCkKICAgICA6
IFJlbmRlckJsb2NrKGlucHV0KQogewotICAgIEFTU0VSVChpbnB1dC0+ZmlsZXMoKSk7Ci0gICAg
cmVxdWVzdEljb24oaW5wdXQtPmZpbGVzKCktPmZpbGVuYW1lcygpKTsKIH0KIAogUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6On5SZW5kZXJGaWxlVXBsb2FkQ29udHJvbCgpCiB7CiB9CiAKLXZvaWQg
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnJlcXVlc3RJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBmaWxlbmFtZXMpCi17Ci0gICAgaWYgKCFmaWxlbmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoQ2hyb21lKiBjaHJvbWUgPSB0aGlzLT5jaHJvbWUoKSkKLSAgICAgICAg
Y2hyb21lLT5sb2FkSWNvbkZvckZpbGVzKGZpbGVuYW1lcywgbmV3RmlsZUljb25Mb2FkZXIoKSk7
Ci19Ci0KLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVzQ2hvc2VuKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCi17Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgaW5w
dXRFbGVtZW50LT5zZXRGaWxlTGlzdEZyb21SZW5kZXJlcihmaWxlbmFtZXMpOwotICAgIHJlcXVl
c3RJY29uKGZpbGVuYW1lcyk7Ci0KLSAgICByZXBhaW50KCk7Ci0gICAgLy8gVGhpcyBjYWxsIG1h
eSBjYXVzZSBkZXN0cnVjdGlvbiBvZiB0aGlzIGluc3RhbmNlIGFuZCB0aHVzIG11c3QgYWx3YXlz
IGJlIGxhc3QgaW4gdGhlIGZ1bmN0aW9uLgotICAgIGlucHV0RWxlbWVudC0+ZGlzcGF0Y2hGb3Jt
Q29udHJvbENoYW5nZUV2ZW50KCk7Ci19Ci0KLSNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkK
LXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBs
b2FkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBpZiAoQ2hyb21lKiBjaHJv
bWUgPSB0aGlzLT5jaHJvbWUoKSkgewotICAgICAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRp
bmdzOwotICAgICAgICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcnlVcGxvYWQgPSB0cnVlOwotICAg
ICAgICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gdHJ1ZTsKLSAgICAgICAgc2V0dGlu
Z3Muc2VsZWN0ZWRGaWxlcy5hcHBlbmQocGF0aHNbMF0pOwotICAgICAgICBjaHJvbWUtPmVudW1l
cmF0ZUNob3NlbkRpcmVjdG9yeShuZXdGaWxlQ2hvb3NlcihzZXR0aW5ncykpOwotICAgIH0KLX0K
LSNlbmRpZgotCi0KLXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVwZGF0ZVJlbmRlcmlu
ZyhQYXNzUmVmUHRyPEljb24+IGljb24pCi17Ci0gICAgaWYgKG1faWNvbiA9PSBpY29uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2ljb24gPSBpY29uOwotICAgIHJlcGFpbnQoKTsKLX0KLQot
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2xpY2soKQotewotICAgIGlmICghU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChDaHJvbWUqIGNocm9tZSA9IHRoaXMtPmNocm9tZSgpKSB7Ci0gICAgICAgIEZpbGVD
aG9vc2VyU2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7Ci0jaWYgRU5BQkxFKERJ
UkVDVE9SWV9VUExPQUQpCi0gICAgICAgIHNldHRpbmdzLmFsbG93c0RpcmVjdG9yeVVwbG9hZCA9
IGlucHV0LT5mYXN0SGFzQXR0cmlidXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpOwotICAgICAgICBz
ZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3J5VXBs
b2FkIHx8IGlucHV0LT5mYXN0SGFzQXR0cmlidXRlKG11bHRpcGxlQXR0cik7Ci0jZWxzZQotICAg
ICAgICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gaW5wdXQtPmZhc3RIYXNBdHRyaWJ1
dGUobXVsdGlwbGVBdHRyKTsKLSNlbmRpZgotICAgICAgICBzZXR0aW5ncy5hY2NlcHRUeXBlcyA9
IGlucHV0LT5hY2NlcHQoKTsKLSAgICAgICAgQVNTRVJUKGlucHV0LT5maWxlcygpKTsKLSAgICAg
ICAgc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9IGlucHV0LT5maWxlcygpLT5maWxlbmFtZXMoKTsK
LSAgICAgICAgY2hyb21lLT5ydW5PcGVuUGFuZWwoZnJhbWUoKSwgbmV3RmlsZUNob29zZXIoc2V0
dGluZ3MpKTsKLSAgICB9Ci19Ci0KLUNocm9tZSogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNo
cm9tZSgpIGNvbnN0Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0gbm9kZSgpLT5kb2N1bWVudCgpLT5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpOwotfQotCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNT
RVJUKGlucHV0RWxlbWVudC0+aXNGaWxlVXBsb2FkKCkpOwotCi0KICAgICBpZiAoSFRNTElucHV0
RWxlbWVudCogYnV0dG9uID0gdXBsb2FkQnV0dG9uKCkpCiAgICAgICAgIGJ1dHRvbi0+c2V0RGlz
YWJsZWQoIXRoZW1lKCktPmlzRW5hYmxlZCh0aGlzKSk7Ci0KLSAgICAvLyBUaGlzIG9ubHkgc3Vw
cG9ydHMgY2xlYXJpbmcgb3V0IHRoZSBmaWxlcywgYnV0IHRoYXQncyBPSyBiZWNhdXNlIGZvcgot
ICAgIC8vIHNlY3VyaXR5IHJlYXNvbnMgdGhhdCdzIHRoZSBvbmx5IGNoYW5nZSB0aGUgRE9NIGlz
IGFsbG93ZWQgdG8gbWFrZS4KLSAgICBGaWxlTGlzdCogZmlsZXMgPSBpbnB1dEVsZW1lbnQtPmZp
bGVzKCk7Ci0gICAgQVNTRVJUKGZpbGVzKTsKLSAgICBpZiAoZmlsZXMgJiYgZmlsZXMtPmlzRW1w
dHkoKSAmJiBtX2ljb24pIHsKLSAgICAgICAgbV9pY29uID0gMDsKLSAgICAgICAgcmVwYWludCgp
OwotICAgIH0KIH0KIAogc3RhdGljIGludCBub2RlV2lkdGgoTm9kZSogbm9kZSkKQEAgLTE2Niw4
ICs3MSw5IEBAIHN0YXRpYyBpbnQgbm9kZVdpZHRoKE5vZGUqIG5vZGUpCiAKIGludCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6bWF4RmlsZW5hbWVXaWR0aCgpIGNvbnN0CiB7CisgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgp
KTsKICAgICByZXR1cm4gbWF4KDAsIGNvbnRlbnRXaWR0aCgpIC0gbm9kZVdpZHRoKHVwbG9hZEJ1
dHRvbigpKSAtIGFmdGVyQnV0dG9uU3BhY2luZwotICAgICAgICAtIChtX2ljb24gPyBpY29uV2lk
dGggKyBpY29uRmlsZW5hbWVTcGFjaW5nIDogMCkpOworICAgICAgICAtIChpbnB1dC0+aWNvbigp
ID8gaWNvbldpZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6IDApKTsKIH0KIAogdm9pZCBSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCkKQEAgLTE5Nyw5ICsxMDMsMTAgQEAgdm9pZCBSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JgogICAgICAgICBpZiAoIWJ1dHRvbikKICAgICAgICAgICAgIHJldHVybjsK
IAorICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihub2RlKCkpOwogICAgICAgICBpbnQgYnV0dG9uV2lkdGggPSBub2RlV2lkdGgo
YnV0dG9uKTsKICAgICAgICAgaW50IGJ1dHRvbkFuZEljb25XaWR0aCA9IGJ1dHRvbldpZHRoICsg
YWZ0ZXJCdXR0b25TcGFjaW5nCi0gICAgICAgICAgICArIChtX2ljb24gPyBpY29uV2lkdGggKyBp
Y29uRmlsZW5hbWVTcGFjaW5nIDogMCk7CisgICAgICAgICAgICArIChpbnB1dC0+aWNvbigpID8g
aWNvbldpZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6IDApOwogICAgICAgICBpbnQgdGV4dFg7
CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAg
ICAgICB0ZXh0WCA9IGNvbnRlbnRMZWZ0ICsgYnV0dG9uQW5kSWNvbldpZHRoOwpAQCAtMjE2LDcg
KzEyMyw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYKICAgICAgICAgLy8gRHJhdyB0aGUgZmls
ZW5hbWUKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0
UnVuLCBJbnRQb2ludCh0ZXh0WCwgdGV4dFkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2lj
b24pIHsKKyAgICAgICAgaWYgKGlucHV0LT5pY29uKCkpIHsKICAgICAgICAgICAgIC8vIERldGVy
bWluZSB3aGVyZSB0aGUgaWNvbiBzaG91bGQgYmUgcGxhY2VkCiAgICAgICAgICAgICBpbnQgaWNv
blkgPSBwYWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIChjb250
ZW50SGVpZ2h0KCkgLSBpY29uSGVpZ2h0KSAvIDI7CiAgICAgICAgICAgICBpbnQgaWNvblg7CkBA
IC0yMjYsNyArMTMzLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JgogICAgICAgICAgICAgICAg
IGljb25YID0gY29udGVudExlZnQgKyBjb250ZW50V2lkdGgoKSAtIGJ1dHRvbldpZHRoIC0gYWZ0
ZXJCdXR0b25TcGFjaW5nIC0gaWNvbldpZHRoOwogCiAgICAgICAgICAgICAvLyBEcmF3IHRoZSBm
aWxlIGljb24KLSAgICAgICAgICAgIG1faWNvbi0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIElu
dFJlY3QoaWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKKyAgICAgICAgICAg
IGlucHV0LT5pY29uKCktPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGljb25YLCBp
Y29uWSwgaWNvbldpZHRoLCBpY29uSGVpZ2h0KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI5
MCwyNSArMTk3LDYgQEAgSFRNTElucHV0RWxlbWVudCogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OnVwbG9hZEJ1dHRvbigpIGNvbnN0CiAgICAgcmV0dXJuIGJ1dHRvbk5vZGUgJiYgYnV0dG9uTm9k
ZS0+aXNIVE1MRWxlbWVudCgpICYmIGJ1dHRvbk5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpID8g
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGJ1dHRvbk5vZGUpIDogMDsKIH0KIAotdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKLSNpZiBFTkFCTEUoRElSRUNUT1JZ
X1VQTE9BRCkKLSAgICBpZiAoaW5wdXQtPmZhc3RIYXNBdHRyaWJ1dGUod2Via2l0ZGlyZWN0b3J5
QXR0cikpIHsKLSAgICAgICAgcmVjZWl2ZURyb3BGb3JEaXJlY3RvcnlVcGxvYWQocGF0aHMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoaW5wdXQtPmZhc3RIYXNB
dHRyaWJ1dGUobXVsdGlwbGVBdHRyKSkKLSAgICAgICAgZmlsZXNDaG9zZW4ocGF0aHMpOwotICAg
IGVsc2UgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBmaXJzdFBhdGhPbmx5OwotICAgICAgICBm
aXJzdFBhdGhPbmx5LmFwcGVuZChwYXRoc1swXSk7Ci0gICAgICAgIGZpbGVzQ2hvc2VuKGZpcnN0
UGF0aE9ubHkpOwotICAgIH0KLX0KLQogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpi
dXR0b25WYWx1ZSgpCiB7CiAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbiA9IHVwbG9h
ZEJ1dHRvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuaAppbmRleCAyNWY5YWM3YjY1OWM3ZTQ0ZjBhMDFjNDg2ZGRjZjI2MDc0NGE5
ODM4Li5jMzZiM2U1ZGNmMGNkYWExYzQ4NzIyM2I0MzI5YzYzNGMyYWNhNTA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaApAQCAt
MjEsMzAgKzIxLDI0IEBACiAjaWZuZGVmIFJlbmRlckZpbGVVcGxvYWRDb250cm9sX2gKICNkZWZp
bmUgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2xfaAogCi0jaW5jbHVkZSAiRmlsZUNob29zZXIuaCIK
LSNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2hyb21lOwogY2xhc3MgSFRNTElucHV0RWxl
bWVudDsKK2NsYXNzIEljb247CiAKIC8vIEVhY2ggUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wgY29u
dGFpbnMgYSBSZW5kZXJCdXR0b24gKGZvciBvcGVuaW5nIHRoZSBmaWxlIGNob29zZXIpLCBhbmQK
IC8vIHN1ZmZpY2llbnQgc3BhY2UgdG8gZHJhdyBhIGZpbGUgaWNvbiBhbmQgZmlsZW5hbWUuIFRo
ZSBSZW5kZXJCdXR0b24gaGFzIGEgc2hhZG93IG5vZGUKIC8vIGFzc29jaWF0ZWQgd2l0aCBpdCB0
byByZWNlaXZlIGNsaWNrL2hvdmVyIGV2ZW50cy4KIAotY2xhc3MgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wgOiBwdWJsaWMgUmVuZGVyQmxvY2ssIHByaXZhdGUgRmlsZUNob29zZXJDbGllbnQsIHBy
aXZhdGUgRmlsZUljb25Mb2FkZXJDbGllbnQgeworY2xhc3MgUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgogICAgIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sKEhUTUxJbnB1dEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzRmlsZVVwbG9hZENvbnRyb2woKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIGNsaWNrKCk7Ci0KLSAgICB2b2lkIHJlY2Vp
dmVEcm9wcGVkRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKLQogICAgIFN0cmluZyBidXR0
b25WYWx1ZSgpOwogICAgIFN0cmluZyBmaWxlVGV4dFZhbHVlKCkgY29uc3Q7CiAgICAgCkBAIC01
NywyNSArNTEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNl
ZFN0eWxlUmVjYWxjUHJvcGFnYXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAv
LyBGaWxlQ2hvb3NlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZmls
ZXNDaG9zZW4oY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKLQotICAgIC8vIEZpbGVJY29uTG9hZGVy
Q2xpZW50IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZW5kZXJpbmco
UGFzc1JlZlB0cjxJY29uPik7Ci0KLSNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICB2
b2lkIHJlY2VpdmVEcm9wRm9yRGlyZWN0b3J5VXBsb2FkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7
Ci0jZW5kaWYKLQotICAgIENocm9tZSogY2hyb21lKCkgY29uc3Q7CiAgICAgaW50IG1heEZpbGVu
YW1lV2lkdGgoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CiAKICAgICBIVE1MSW5wdXRFbGVtZW50KiB1
cGxvYWRCdXR0b24oKSBjb25zdDsKLSAgICB2b2lkIHJlcXVlc3RJY29uKGNvbnN0IFZlY3RvcjxT
dHJpbmc+Jik7Ci0KLSAgICBSZWZQdHI8SWNvbj4gbV9pY29uOwogfTsKIAogaW5saW5lIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sKiB0b1JlbmRlckZpbGVVcGxvYWRDb250cm9sKFJlbmRlck9iamVj
dCogb2JqZWN0KQo=
</data>
<flag name="review"
          id="92506"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>