<?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>80128</bug_id>
          
          <creation_ts>2012-03-02 01:51:28 -0800</creation_ts>
          <short_desc>[Qt] Move QStyle theming code out of WebCore into WebKit1</short_desc>
          <delta_ts>2012-03-02 04:45:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>80147</dependson>
          <blocked>78109</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>kenneth</cc>
    
    <cc>ossy</cc>
    
    <cc>pierre.rossi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>569432</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-02 01:51:28 -0800</bug_when>
    <thetext>[Qt] Move QStyle theming code out of WebCore into WebKit1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569433</commentid>
    <comment_count>1</comment_count>
      <attachid>129846</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-02 01:54:02 -0800</bug_when>
    <thetext>Created attachment 129846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569459</commentid>
    <comment_count>2</comment_count>
      <attachid>129846</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-02 02:15:54 -0800</bug_when>
    <thetext>Comment on attachment 129846
Patch

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

&gt; Source/WebKit/qt/ChangeLog:9
&gt; +        Install the QStyle factory functions in initWebCoreQt.cpp.

InitWebCoreQt.cpp right

&gt; Source/WebCore/platform/qt/RenderThemeQt.cpp:96
&gt; +void RenderThemeQt::setCustomTheme(QtThemeFactoryFunction factory, ScrollbarTheme *customScrollbarTheme)

* placement :-), nit though

&gt; Source/WebCore/platform/qt/RenderThemeQt.cpp:142
&gt; +    // If we are not using a custom theme but the &quot;Mobile Qt&quot; default theme, then we also need
&gt; +    // the extra stylesheet for it.
&gt; +    if (!themeFactory) {

I think it is time we stop calling it Mobile theme :-) but I guess that is for another time 

&quot;When no theme factory is provided we default to using our platform independent &quot;Mobile Qt&quot; theme, which required the following stylesheets.

&gt; Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp:4
&gt; + * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)

time to update? I am sure we made changes after 2008 :-)

&gt; Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp:83
&gt; +inline static void initStyleOption(QWidget *widget, QStyleOption&amp; option)

* placement. Now you are moving the code it might be good to just fix these things...

&gt; Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp:91
&gt; +        /*
&gt; +          If a widget is not directly available for rendering, we fallback to default
&gt; +          value for an active widget.
&gt; +         */

like you real C++ comments //

&gt; Source/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.h:43
&gt; +    virtual bool paint(ScrollbarThemeClient*, GraphicsContext*, const IntRect&amp; damageRect);

dirytRect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569476</commentid>
    <comment_count>3</comment_count>
      <attachid>129846</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-02 02:42:02 -0800</bug_when>
    <thetext>Comment on attachment 129846
Patch

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

&gt;&gt; Source/WebKit/qt/ChangeLog:9
&gt;&gt; +        Install the QStyle factory functions in initWebCoreQt.cpp.
&gt; 
&gt; InitWebCoreQt.cpp right

Oops, yes.

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQt.cpp:96
&gt;&gt; +void RenderThemeQt::setCustomTheme(QtThemeFactoryFunction factory, ScrollbarTheme *customScrollbarTheme)
&gt; 
&gt; * placement :-), nit though

Oops, will also fix before landing.

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQt.cpp:142
&gt;&gt; +    if (!themeFactory) {
&gt; 
&gt; I think it is time we stop calling it Mobile theme :-) but I guess that is for another time 
&gt; 
&gt; &quot;When no theme factory is provided we default to using our platform independent &quot;Mobile Qt&quot; theme, which required the following stylesheets.

Good idea, that sentence sounds better. Will include.

&gt;&gt; Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp:4
&gt;&gt; + * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
&gt; 
&gt; time to update? I am sure we made changes after 2008 :-)

Oops, good catch!

&gt;&gt; Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp:83
&gt;&gt; +inline static void initStyleOption(QWidget *widget, QStyleOption&amp; option)
&gt; 
&gt; * placement. Now you are moving the code it might be good to just fix these things...

Agreed.

&gt;&gt; Source/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.h:43
&gt;&gt; +    virtual bool paint(ScrollbarThemeClient*, GraphicsContext*, const IntRect&amp; damageRect);
&gt; 
&gt; dirytRect?

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569479</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-02 02:43:51 -0800</bug_when>
    <thetext>Committed r109542: &lt;http://trac.webkit.org/changeset/109542&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569528</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-02 04:16:31 -0800</bug_when>
    <thetext>Reopen, because it made almost all tests fail on Qt-WK2: http://build.webkit.sed.hu/results/x86-32%20Linux%20Qt%20Release%20WebKit2/r109542%20%2821021%29/results.html

(Now the test coverage is near 0%)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569558</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-02 04:45:50 -0800</bug_when>
    <thetext>Fixed with bug #80147</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129846</attachid>
            <date>2012-03-02 01:54:02 -0800</date>
            <delta_ts>2012-03-02 02:42:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80128-20120302105418.patch</filename>
            <type>text/plain</type>
            <size>106397</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY2NTZiYjE4MTI0Yjdk
NGZmYzU2N2RiNTYzNjhkN2Q0YjAxYWQ0Zi4uYzJhMzM1YWY2ZDE5NGYzZjczNWNiYWZiZDM1OThk
YzgyZGQzOTM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAzLTAyICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIE1v
dmUgUVN0eWxlIHRoZW1pbmcgY29kZSBvdXQgb2YgV2ViQ29yZSBpbnRvIFdlYktpdDEKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMTI4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgUVN0eWxlIGRl
cGVuZGFudCBjb2RlIGludG8gV2ViS2l0MSwgd2hlcmUgaXQncyBva2F5IHRvIGRlcGVuZCBvbgor
ICAgICAgICBRdFdpZGdldHMvUVN0eWxlLiBBZGRlZCBmYWN0b3J5IGhvb2tzIGludG8gUmVuZGVy
VGhlbWVRdCB0byBhbGxvdyBjaGFuZ2luZworICAgICAgICB0aGUgZGVmYXVsdCAibW9iaWxlIiBz
dHlsZSB0byBRU3R5bGUgb24gc3RhcnQtdXAuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRDdXN0b21UaGVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpjdXN0b21TY3JvbGxiYXJUaGVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6dGhlbWVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmV4dHJh
RGVmYXVsdFN0eWxlU2hlZXQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVuZGVyVGhlbWVRdCk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZTo6bmF0aXZlVGhlbWUpOgorCiAyMDEyLTAzLTAyICBKb2huIEJhdW1hbiAgPGpiYXVtYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU2VuZCBkaWRDb21taXRBbmREcmF3
RnJhbWUgYWZ0ZXIgc3dhcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBmNTUxMzIzMGVjYTZmYjY0OTRmMWNi
MTA0NmRkZGI2NzVlZTIyOGUyLi5jMTRmOGEzMjUyMGJkZGY0MTMyMjdjZWVlNDdlYjBhNGM3M2Ew
OTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTAzLTAyICBTaW1vbiBI
YXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIE1vdmUg
UVN0eWxlIHRoZW1pbmcgY29kZSBvdXQgb2YgV2ViQ29yZSBpbnRvIFdlYktpdDEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMTI4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGhlIGJ1bGsgb2Yg
dGhlIFFTdHlsZSBkZXBlbmRhbnQgY29kZSBoZXJlLCB3aGVyZSBpdCdzIG9rYXkgdG8gZGVwZW5k
IG9uIFF0V2lkZ2V0cy9RU3R5bGUuCisgICAgICAgIEluc3RhbGwgdGhlIFFTdHlsZSBmYWN0b3J5
IGZ1bmN0aW9ucyBpbiBpbml0V2ViQ29yZVF0LmNwcC4KKworICAgICAgICAqIEFwaS9xd2VicGFn
ZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c3dhbGxvd0NvbnRleHRNZW51RXZlbnQpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aW5pdGlhbGl6ZVdlYkNvcmVRdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUmVuZGVy
VGhlbWVRU3R5bGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRU3R5bGUuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjppbml0U3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmdldFN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5
bGU6OlN0eWxlUGFpbnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJR
U3R5bGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6UmVuZGVyVGhlbWVRU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVtZVFT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6ZmFsbGJhY2tTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6cVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpmaW5kRnJhbWVMaW5lV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UG9wdXBQYWRkaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVMaXN0QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpwYWludFNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFT
dHlsZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmgu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJlbmRlclRoZW1lUVN0eWxlKToKKyAgICAg
ICAgKFN0eWxlUGFpbnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJR
U3R5bGU6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpk
cmF3UHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6ZHJh
d0NvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpkcmF3Q29t
cGxleENvbnRyb2wpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0
eWxlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFy
VGhlbWVRdC5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lUVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2NQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVPcHRpb25TbGlkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVRU3R5bGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0
eWxlOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxlOjpz
aG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0
eWxlOjppbnZhbGlkYXRlUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lUVN0eWxlOjp0aHVtYlBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lUVN0eWxlOjp0aHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6dHJhY2tQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6dHJhY2tMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVR
U3R5bGU6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lUVN0eWxlOjpzdHlsZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9s
bGJhclRoZW1lUXQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsYmFyVGhl
bWVRU3R5bGUpOgorCiAyMDEyLTAyLTI3ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8g
IDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XSBNb3ZlIHJlZ2lz
dHJhdGlvbiBvZiBleHBlcmltZW50YWwgdHlwZXMgdG8gdGhlIHByb3BlciBwbHVnaW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCmluZGV4IDEyNWMxNjJkNDQwYTcyYThmMWMzOTE2MDQxMzZjYThlZmYzMzA3YTMuLmUxMTMw
OTc3MDlhMTM0YjZiYzhiYzMwNTBjMzU4MzE3NTBiNDljNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjg2
NSwxMiArMjg2NSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFNPVVJDRVMgKz0geG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlclF0LmNwcAogfQogCi1jb250YWlucyhERUZJTkVTLCBIQVZFX1FTVFlM
RT0xKSB7Ci0gICAgSEVBREVSUyArPSBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIFwK
LSAgICAgICAgICAgICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaAotICAgIFNPVVJD
RVMgKz0gcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCi19Ci0KIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEpIHsKICAgICB3aW4zMi0qfHdpbmNlKiB7
CiAgICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDFlNmQyY2E4NWRlYTVhNjFmMWE1OGViZjdiODk0MjI1
ZTQ5MGMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDgxMSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgotCi0jaW5j
bHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgot
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJCb3guaCIKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotI2luY2x1ZGUgIlJlbmRlclByb2dy
ZXNzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZVF0LmgiCi0jaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLQotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNp
bmNsdWRlIDxRQ29sb3I+Ci0jaW5jbHVkZSA8UUZpbGU+Ci0jaW5jbHVkZSA8UUZvbnRNZXRyaWNz
PgotI2luY2x1ZGUgPFFMaW5lRWRpdD4KLSNpbmNsdWRlIDxRTWFjU3R5bGU+Ci0jaW5jbHVkZSA8
UVBhaW50ZXI+Ci0jaWZuZGVmIFFUX05PX1NUWUxFX1BMQVNUSVFVRQotI2luY2x1ZGUgPFFQbGFz
dGlxdWVTdHlsZT4KLSNlbmRpZgotI2luY2x1ZGUgPFFQdXNoQnV0dG9uPgotI2luY2x1ZGUgPFFT
dHlsZUZhY3Rvcnk+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uQnV0dG9uPgotI2luY2x1ZGUgPFFT
dHlsZU9wdGlvbkZyYW1lVjI+Ci0jaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSNpbmNsdWRlIDxR
U3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyPgotI2VuZGlmCi0jaW5jbHVkZSA8UVN0eWxlT3B0aW9u
U2xpZGVyPgotI2luY2x1ZGUgPFFXaWRnZXQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9w
dGlvbihRV2lkZ2V0ICp3aWRnZXQsIFFTdHlsZU9wdGlvbiYgb3B0aW9uKQotewotICAgIGlmICh3
aWRnZXQpCi0gICAgICAgIG9wdGlvbi5pbml0RnJvbSh3aWRnZXQpOwotICAgIGVsc2UgewotICAg
ICAgICAvKgotICAgICAgICAgIElmIGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUg
Zm9yIHJlbmRlcmluZywgd2UgZmFsbGJhY2sgdG8gZGVmYXVsdAotICAgICAgICAgIHZhbHVlIGZv
ciBhbiBhY3RpdmUgd2lkZ2V0LgotICAgICAgICAgKi8KLSAgICAgICAgb3B0aW9uLnN0YXRlID0g
UVN0eWxlOjpTdGF0ZV9BY3RpdmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQotfQot
Ci0KLVFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gUmVuZGVyVGhlbWVRU3R5bGU6OmdldFN0
eWxlUGFpbnRlcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKLXsKLSAgICByZXR1cm4gUVNo
YXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPihuZXcgU3R5bGVQYWludGVyUVN0eWxlKHRoaXMsIHBh
aW50SW5mbykpOwotfQotCi1TdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShS
ZW5kZXJUaGVtZVFTdHlsZSogdGhlbWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotICAg
IDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCi17Ci0gICAgaW5pdChwYWludEluZm8u
Y29udGV4dCA/IHBhaW50SW5mby5jb250ZXh0IDogMCwgdGhlbWUtPnFTdHlsZSgpKTsKLX0KLQot
U3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRdCog
dGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFN0eWxlUGFpbnRlcigpCi17
Ci0gICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5bGUoKSk7Ci19Ci0KLXZvaWQgU3R5bGVQYWlu
dGVyUVN0eWxlOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVN0eWxlKiB0aGVtZVN0
eWxlKQotewotICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICB3aWRnZXQgPSAwOwotICAgIFFQYWludERldmljZSogZGV2
ID0gMDsKLSAgICBpZiAocGFpbnRlcikKLSAgICAgICAgZGV2ID0gcGFpbnRlci0+ZGV2aWNlKCk7
Ci0gICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OldpZGdldCkKLSAg
ICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+KGRldik7Ci0gICAgc3R5bGUgPSB0
aGVtZVN0eWxlOwotCi0gICAgU3R5bGVQYWludGVyOjppbml0KGNvbnRleHQpOwotfQotCi1QYXNz
UmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVFTdHlsZTo6Y3JlYXRlKFBhZ2UqIHBhZ2Up
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVFTdHlsZShwYWdlKSk7Ci19
Ci0KLVJlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQYWdlKiBwYWdlKQotICAg
IDogUmVuZGVyVGhlbWVRdChwYWdlKQotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgICwgbV9s
aW5lRWRpdCgwKQotI2VuZGlmCi17Ci0gICAgUVB1c2hCdXR0b24gYnV0dG9uOwotICAgIFFGb250
IGRlZmF1bHRCdXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOwotICAgIG1f
YnV0dG9uRm9udEZhbWlseSA9IGRlZmF1bHRCdXR0b25Gb250LmZhbWlseSgpOwotI2lmZGVmIFFf
V1NfTUFDCi0gICAgYnV0dG9uLnNldEF0dHJpYnV0ZShRdDo6V0FfTWFjU21hbGxTaXplKTsKLSAg
ICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQpOwotICAgIG1fYnV0dG9uRm9u
dFBpeGVsU2l6ZSA9IGZvbnRJbmZvLnBpeGVsU2l6ZSgpOwotI2VuZGlmCi0KLSAgICBtX2ZhbGxi
YWNrU3R5bGUgPSBRU3R5bGVGYWN0b3J5OjpjcmVhdGUoUUxhdGluMVN0cmluZygid2luZG93cyIp
KTsKLX0KLQotUmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVtZVFTdHlsZSgpCi17Ci0gICAg
ZGVsZXRlIG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICBkZWxl
dGUgbV9saW5lRWRpdDsKLSNlbmRpZgotfQotCi0KLS8vIGZvciBzb21lIHdpZGdldCBwYWludGlu
Zywgd2UgbmVlZCB0byBmYWxsYmFjayB0byBXaW5kb3dzIHN0eWxlCi1RU3R5bGUqIFJlbmRlclRo
ZW1lUVN0eWxlOjpmYWxsYmFja1N0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fZmFsbGJh
Y2tTdHlsZSkgPyBtX2ZhbGxiYWNrU3R5bGUgOiBRQXBwbGljYXRpb246OnN0eWxlKCk7Ci19Ci0K
LVFTdHlsZSogUmVuZGVyVGhlbWVRU3R5bGU6OnFTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
cGFnZSkgewotICAgICAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9IG1fcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLQotICAgICAgICBpZiAocGFn
ZUNsaWVudCkKLSAgICAgICAgICAgIHJldHVybiBwYWdlQ2xpZW50LT5zdHlsZSgpOwotICAgIH0K
LQotICAgIHJldHVybiBRQXBwbGljYXRpb246OnN0eWxlKCk7Ci19Ci0KLWludCBSZW5kZXJUaGVt
ZVFTdHlsZTo6ZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0jaWZu
ZGVmIFFUX05PX0xJTkVFRElUCi0gICAgaWYgKCFtX2xpbmVFZGl0KQotICAgICAgICBtX2xpbmVF
ZGl0ID0gbmV3IFFMaW5lRWRpdCgpOwotI2VuZGlmCi0KLSAgICBRU3R5bGVPcHRpb25GcmFtZVYy
IG9wdDsKLSAgICBRV2lkZ2V0KiB3aWRnZXQgPSAwOwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAot
ICAgIHdpZGdldCA9IG1fbGluZUVkaXQ7Ci0jZW5kaWYKLSAgICByZXR1cm4gc3R5bGUtPnBpeGVs
TWV0cmljKFFTdHlsZTo6UE1fRGVmYXVsdEZyYW1lV2lkdGgsICZvcHQsIHdpZGdldCk7Ci19Ci0K
LVFSZWN0IFJlbmRlclRoZW1lUVN0eWxlOjppbmZsYXRlQnV0dG9uUmVjdChjb25zdCBRUmVjdCYg
b3JpZ2luYWxSZWN0KSBjb25zdAotewotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247Ci0g
ICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgb3B0aW9uLnJlY3Qg
PSBvcmlnaW5hbFJlY3Q7Ci0KLSAgICBRUmVjdCBsYXlvdXRSZWN0ID0gcVN0eWxlKCktPnN1YkVs
ZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sICZvcHRpb24sIDApOwot
ICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkgewotICAgICAgICBpbnQgcGFkZGluZ0xlZnQg
PSBsYXlvdXRSZWN0LmxlZnQoKSAtIG9yaWdpbmFsUmVjdC5sZWZ0KCk7Ci0gICAgICAgIGludCBw
YWRkaW5nUmlnaHQgPSBvcmlnaW5hbFJlY3QucmlnaHQoKSAtIGxheW91dFJlY3QucmlnaHQoKTsK
LSAgICAgICAgaW50IHBhZGRpbmdUb3AgPSBsYXlvdXRSZWN0LnRvcCgpIC0gb3JpZ2luYWxSZWN0
LnRvcCgpOwotICAgICAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IG9yaWdpbmFsUmVjdC5ib3R0b20o
KSAtIGxheW91dFJlY3QuYm90dG9tKCk7Ci0KLSAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVjdC5h
ZGp1c3RlZCgtcGFkZGluZ0xlZnQsIC1wYWRkaW5nVG9wLCBwYWRkaW5nUmlnaHQsIHBhZGRpbmdC
b3R0b20pOwotICAgIH0KLSAgICByZXR1cm4gb3JpZ2luYWxSZWN0OwotfQotCi12b2lkIFJlbmRl
clRoZW1lUVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVy
U3R5bGUpIGNvbnN0Ci17Ci0gICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBRRm9udE1l
dHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOwotICAgIFFTdHlsZSogc3R5bGUg
PSBxU3R5bGUoKTsKLQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewot
ICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAgIGNh
c2UgVGV4dEZpZWxkUGFydDogewotICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFtZUxpbmVX
aWR0aChzdHlsZSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgo
cGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdSaWdodChM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdU
b3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRk
aW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIElmIHRoZSB3aWR0
aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8g
ZG8uCi0gICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
ICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgQ2hlY2tib3hQ
YXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVP
cHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IGNoZWNrQm94
V2lkdGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9JbmRpY2F0b3JXaWR0aCwgJnN0
eWxlT3B0aW9uKTsKLSAgICAgICAgY2hlY2tCb3hXaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOwotICAgICAgICBzaXplID0gUVNpemUoY2hlY2tCb3hXaWR0aCwgY2hlY2tCb3hX
aWR0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJhZGlvUGFydDogewotICAg
ICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCByYWRpb1dpZHRoID0gc3R5bGUt
PnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRXhjbHVzaXZlSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9w
dGlvbik7Ci0gICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRv
blBhcnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgICAg
ICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBRU2l6
ZSBjb250ZW50U2l6ZSA9IGZtLnNpemUoUXQ6OlRleHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZy
b21MYXRpbjEoIlgiKSk7Ci0gICAgICAgIFFTaXplIHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNp
emVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9QdXNoQnV0dG9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVu
dFNpemUsIDApOwotICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1
dHRvblNpemUud2lkdGgoKSwgcHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOwotICAgICAgICBRUmVj
dCBsYXlvdXRSZWN0ID0gc3R5bGUtPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRv
bkxheW91dEl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKLQotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9y
dHMgbGF5b3V0IHJlY3RzIHdlIHVzZSB0aGF0LCBhbmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkK
LSAgICAgICAgLy8gaW4gcGFpbnRCdXR0b24oKSBiZWxvdy4KLSAgICAgICAgaWYgKCFsYXlvdXRS
ZWN0LmlzTnVsbCgpKQotICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0
b25TaXplLmhlaWdodCgpKTsKLQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNZW51
bGlzdFBhcnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247Ci0g
ICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAg
IGludCBjb250ZW50SGVpZ2h0ID0gcU1heChmbS5saW5lU3BhY2luZygpLCAxNCkgKyAyOwotICAg
ICAgICBRU2l6ZSBtZW51TGlzdFNpemUgPSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6
OkNUX0NvbWJvQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmc3R5bGVPcHRpb24sIFFTaXplKDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKLSAg
ICAgICAgc2l6ZS5zZXRIZWlnaHQobWVudUxpc3RTaXplLmhlaWdodCgpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgv
bWF4LXdpZHRoIGludG8gYWNjb3VudC4KLSAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQotICAgICAgICByZW5kZXJTdHls
ZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAocmVu
ZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwotfQotCi0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Ci17Ci0gICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIo
KTsKLQotI2lmZGVmIFFfV1NfTUFDCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVz
aEJ1dHRvblBhcnQpIHsKLSAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNp
ZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwotICAgICAgICAv
LyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28g
c3BlY2lmaWVkLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZSh0cnVlKTsKLQotI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNpemUgYW5kIGZh
bWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0jZWxzZQotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSNlbmRpZgot
Ci0gICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgIGZvbnRGYW1pbHkuc2V0RmFtaWx5KG1f
YnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShmb250RmFt
aWx5KTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0g
ICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpKTsKLSAgICBz
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0g
ICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7Ci0gICAgc2V0QnV0dG9uUGFkZGluZyhzdHlsZSk7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsKLSAg
ICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgLy8gRmFr
ZSBhIGJ1dHRvbiByZWN0IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcwot
ICAgIFFSZWN0IG9yaWdpbmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOwotICAgIHN0eWxl
T3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7Ci0KLSAgICAvLyBEZWZhdWx0IHBhZGRpbmcgaXMg
YmFzZWQgb24gdGhlIGJ1dHRvbiBtYXJnaW4gcGl4ZWwgbWV0cmljCi0gICAgaW50IGJ1dHRvbk1h
cmdpbiA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbk1hcmdpbiwgJnN0
eWxlT3B0aW9uLCAwKTsKLSAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0b25NYXJnaW47Ci0gICAg
aW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1RvcCA9IGJ1
dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRvbk1hcmdpbjsKLQotICAg
IC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1hcmdpbnMKLSAgICBRUmVj
dCBsYXlvdXRSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1
dHRvbkxheW91dEl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmc3R5bGVPcHRpb24sIDApOwotICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkg
ewotICAgICAgICBRUmVjdCBjb250ZW50c1JlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3Qo
UVN0eWxlOjpTRV9QdXNoQnV0dG9uQ29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOwotICAgICAgICBw
YWRkaW5nTGVmdCA9IGNvbnRlbnRzUmVjdC5sZWZ0KCkgLSBsYXlvdXRSZWN0LmxlZnQoKTsKLSAg
ICAgICAgcGFkZGluZ1JpZ2h0ID0gbGF5b3V0UmVjdC5yaWdodCgpIC0gY29udGVudHNSZWN0LnJp
Z2h0KCk7Ci0gICAgICAgIHBhZGRpbmdUb3AgPSBjb250ZW50c1JlY3QudG9wKCkgLSBsYXlvdXRS
ZWN0LnRvcCgpOwotCi0gICAgICAgIC8vIENhbid0IHVzZSB0aGlzIHJpZ2h0IG5vdyBiZWNhdXNl
IHdlIGRvbid0IGhhdmUgdGhlIGJhc2VsaW5lIHRvIGNvbXBlbnNhdGUKLSAgICAgICAgLy8gcGFk
ZGluZ0JvdHRvbSA9IGxheW91dFJlY3QuYm90dG9tKCkgLSBjb250ZW50c1JlY3QuYm90dG9tKCk7
Ci0gICAgfQotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0LCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nVG9wLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nQm90dG9tLCBG
aXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsKLSAgICBp
bml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwot
ICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgQ29udHJvbFBh
cnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7
Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5jZSA9PSBC
dXR0b25QYXJ0KSB7Ci0gICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3Qob3B0
aW9uLnJlY3QpOwotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHVzaEJ1dHRvbiwg
b3B0aW9uKTsKLSAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9QYXJ0KQotICAgICAg
IHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9SYWRpb0J1dHRvbiwgb3B0aW9uKTsKLSAgICBlbHNl
IGlmIChhcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkKLSAgICAgICBwLmRyYXdDb250cm9sKFFT
dHlsZTo6Q0VfQ2hlY2tCb3gsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFT
dHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBwYW5lbDsKLSAgICBpbml0U3R5bGVPcHRp
b24ocC53aWRnZXQsIHBhbmVsKTsKLSAgICBwYW5lbC5yZWN0ID0gcjsKLSAgICBwYW5lbC5saW5l
V2lkdGggPSBmaW5kRnJhbWVMaW5lV2lkdGgocVN0eWxlKCkpOwotICAgIHBhbmVsLnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxlT3B0aW9u
RnJhbWVWMjo6Tm9uZTsKLQotICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBh
IHRleHQgZmllbGQKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1v
blFTdHlsZU9wdGlvbnMocGFuZWwsIG8pOwotICAgIGlmIChhcHBlYXJhbmNlICE9IFRleHRGaWVs
ZFBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKLSAgICAgICAg
JiYgYXBwZWFyYW5jZSAhPSBUZXh0QXJlYVBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBM
aXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOb3cgcGFpbnQgdGhl
IHRleHQgZmllbGQuCi0gICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxMaW5lRWRp
dCwgcGFuZWwpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHls
ZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGFkanVzdFRleHRG
aWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9IDQ7Ci0g
ICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSB8fCBz
dHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4OwotCi0gICAgc3R5bGUtPnNldFBhZGRp
bmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLQotICAgIFFTdHlsZU9wdGlvbkNv
bWJvQm94IG9wdDsKLSAgICBpbnQgdyA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBN
X0J1dHRvbkljb25TaXplLCAmb3B0LCAwKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExl
bmd0aChwYWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdU
b3AoTGVuZ3RoKDIsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3Ro
KDIsIEZpeGVkKSk7Ci19Ci0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9w
dDsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdCk7Ci0gICAgaW5pdGlhbGl6ZUNv
bW1vblFTdHlsZU9wdGlvbnMob3B0LCBvKTsKLQotICAgIEludFJlY3QgcmVjdCA9IHI7Ci0KLSNp
ZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAgLy8g
UU1hY1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBs
ZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3QuCi0gICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhl
IGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0
IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKLSAgICAvLyBvdmVybGFwcGVkIHdpdGgg
dGhlIHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94
IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRoLgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxl
Kj4ocC5zdHlsZSkpCi0gICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7Ci0jZW5kaWYKLQotICAgIGNv
bnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJh
bnNsYXRlKHRvcExlZnQpOwotICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAg
IG9wdC5yZWN0LnNldFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19Db21ib0JveCwgb3B0KTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgt
dG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxl
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgLy8gV09SS0FST1VO
RCBiZWNhdXNlIGh0bWwuY3NzIHNwZWNpZmllcyAtd2Via2l0LWJvcmRlci1yYWRpdXMgZm9yIDxz
ZWxlY3Q+IHNvIHdlIG92ZXJyaWRlIGl0IGhlcmUKLSAgICAvLyBzZWUgYWxzbyBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM5OQotICAgIHN0eWxlLT5yZXNldEJvcmRl
clJhZGl1cygpOwotCi0gICAgUmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHls
ZShzZWxlY3Rvciwgc3R5bGUsIGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWlu
dE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25Db21ib0JveCBvcHRp
b247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIGluaXRpYWxp
emVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwot
Ci0gICAgLy8gZm9yIGRyYXdpbmcgdGhlIGNvbWJvIGJveCBhcnJvdywgcmVseSBvbmx5IG9uIHRo
ZSBmYWxsYmFjayBzdHlsZQotICAgIHAuc3R5bGUgPSBmYWxsYmFja1N0eWxlKCk7Ci0gICAgb3B0
aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0JveEFycm93OwotICAgIHAuZHJhd0Nv
bXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotZG91YmxlIFJlbmRlclRoZW1l
UVN0eWxlOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiBy
ZW5kZXJQcm9ncmVzcykgY29uc3QKLXsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9u
KCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0Jh
clYyIG9wdGlvbjsKLSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHJlbmRlclByb2dyZXNzLT5zaXpl
KCkpOwotICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20v
YnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCi0gICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFy
ZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgcmV0dXJuIChvcHRpb24u
cmVjdC53aWR0aCgpIC8gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NC
YXJDaHVua1dpZHRoLCAmb3B0aW9uKSkgKiBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKHJlbmRlclByb2dyZXNzKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFp
bnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0
IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKCFvLT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOwotICAgIGlmICgh
cC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9n
cmVzc0JhclYyIG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7
Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLQotICAgIFJl
bmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Ci0gICAg
b3B0aW9uLnJlY3QgPSByOwotICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsKLSAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9uLnByb2dy
ZXNzID0gKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpICogc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSk7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsK
LSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHRpb24ucmVjdC5tb3Zl
VG8oUVBvaW50KDAsIDApKTsKLSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6ZSgpKTsKLQot
ICAgIGlmIChvcHRpb24ucHJvZ3Jlc3MgPCAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVbnRpbCBo
dHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQs
Ci0gICAgICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUg
cHJvZ3Jlc3MgYmFyLgotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NC
YXJHcm9vdmUsIG9wdGlvbik7Ci0gICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0eWxlKCktPnBp
eGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKLSAg
ICAgICAgUUNvbG9yIGNvbG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09IG9wdGlv
bi5wYWxldHRlLmJhY2tncm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6
QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxl
dHRlOjpIaWdobGlnaHQpOwotICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmRp
cmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9u
LnJlY3QucmlnaHQoKSAtIGNodW5rV2lkdGggIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblBy
b2dyZXNzKCkgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVj
dC5oZWlnaHQoKSwgY29sb3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwLnBhaW50ZXIt
PmZpbGxSZWN0KHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJl
Y3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFy
LCBvcHRpb24pOwotCi0gICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
U3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0
aW9uKCk7Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0KLSAgICBRU3R5bGVP
cHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9u
KTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckdyb292ZTsKLSAg
ICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMo
b3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnJlY3QubW92ZVRv
KFFQb2ludCgwLCAwKSk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0
KQotICAgICAgICBvcHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlz
UHJlc3NlZChvKSkKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2Vu
OwotCi0gICAgLy8gc29tZSBzdHlsZXMgbmVlZCB0aGlzIHRvIHNob3cgYSBoaWdobGlnaHQgb24g
b25lIHNpZGUgb2YgdGhlIGdyb292ZQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IG8t
Pm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoc2xpZGVyKSB7Ci0gICAgICAgIG9w
dGlvbi51cHNpZGVEb3duID0gKGFwcGVhcmFuY2UgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpICYm
ICFvLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgICAgIC8vIFVzZSB0
aGUgd2lkdGggYXMgYSBtdWx0aXBsaWVyIGluIGNhc2UgdGhlIHNsaWRlciB2YWx1ZXMgYXJlIDw9
IDEKLSAgICAgICAgY29uc3QgaW50IHdpZHRoID0gci53aWR0aCgpID4gMCA/IHIud2lkdGgoKSA6
IDEwMDsKLSAgICAgICAgb3B0aW9uLm1heGltdW0gPSBzbGlkZXItPm1heGltdW0oKSAqIHdpZHRo
OwotICAgICAgICBvcHRpb24ubWluaW11bSA9IHNsaWRlci0+bWluaW11bSgpICogd2lkdGg7Ci0g
ICAgICAgIGlmICghb3B0aW9uLnVwc2lkZURvd24pCi0gICAgICAgICAgICBvcHRpb24uc2xpZGVy
UG9zaXRpb24gPSBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKSAqIHdpZHRoOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBvcHRpb24ubWluaW11bSArIG9w
dGlvbi5tYXhpbXVtIC0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKLSAgICB9Ci0K
LSAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKLQot
ICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzKSB7Ci0gICAgICAg
IFFTdHlsZU9wdGlvbkZvY3VzUmVjdCBmb2N1c09wdGlvbjsKLSAgICAgICAgZm9jdXNPcHRpb24u
cmVjdCA9IHI7Ci0gICAgICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX0ZyYW1lRm9jdXNS
ZWN0LCBmb2N1c09wdGlvbik7Ci0gICAgfQotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BM
ZWZ0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFk
anVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0
aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50ZXIt
PnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLQotICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Ci0g
ICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5zdWJDb250
cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOwotICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFu
Y2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlv
bi5yZWN0ID0gcjsKLSAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBp
ZiAoYXBwZWFyYW5jZSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgb3B0aW9u
Lm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotICAgIGlmIChpc1ByZXNzZWQobykpIHsKLSAg
ICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7
Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICB9Ci0K
LSAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKLSAg
ICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc2VsZWN0
b3IsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwot
fQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChv
LCBwaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBSZW5k
ZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxl
LCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJj
aEZpZWxkRGVjb3JhdGlvbihvLCBwaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvbihvLCBwaSwgcik7Ci19Ci0KLSNpZm5kZWYgUVRfTk9fU1BJTkJP
WAotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYg
KCFwLmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvblNw
aW5Cb3ggb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAg
ICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hVcCB8IFFTdHlsZTo6U0Nf
U3BpbkJveERvd247Ci0gICAgaWYgKCFpc1JlYWRPbmx5Q29udHJvbChvKSkgewotICAgICAgICBp
ZiAoaXNFbmFibGVkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0ZXBFbmFibGVkID0gUUFic3Ry
YWN0U3BpbkJveDo6U3RlcFVwRW5hYmxlZCB8IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBEb3duRW5h
YmxlZDsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkgewotICAgICAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgICAgICAgICAgaWYgKGlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQobykpCi0gICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRy
b2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93bjsK
LSAgICAgICAgfQotICAgIH0KLSAgICAvLyBSZW5kZXIgdGhlIHNwaW4gYnV0dG9ucyBmb3IgTFRS
IG9yIFJUTCBhY2NvcmRpbmdseS4KLSAgICBvcHRpb24uZGlyZWN0aW9uID0gby0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUXQ6OkxlZnRUb1JpZ2h0IDogUXQ6OlJpZ2h0VG9M
ZWZ0OwotCi0gICAgSW50UmVjdCBidXR0b25SZWN0ID0gcmVjdDsKLSAgICAvLyBEZWZhdWx0IHRv
IG1vdmluZyB0aGUgYnV0dG9ucyBhIGxpdHRsZSBiaXQgd2l0aGluIHRoZSBlZGl0b3IgZnJhbWUu
Ci0gICAgaW50IGluZmxhdGVYID0gLTI7Ci0gICAgaW50IGluZmxhdGVZID0gLTI7Ci0jaWYgZGVm
aW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQotICAgIC8vIFFNYWNT
dHlsZSB3aWxsIHBvc2l0aW9uIHRoZSBhcXVhIGJ1dHRvbnMgZmx1c2ggdG8gdGhlIHJpZ2h0Lgot
ICAgIC8vIFRoaXMgd2lsbCBtb3ZlIHRoZW0gbW9yZSB3aXRoaW4gdGhlIGNvbnRyb2wgZm9yIGJl
dHRlciBzdHlsZSwgYSBsYQotICAgIC8vIENocm9taXVtIGxvb2sgJiBmZWVsLgotICAgIGlmIChx
b2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkpIHsKLSAgICAgICAgaW5mbGF0ZVggPSAt
NDsKLSAgICAgICAgLy8gUmVuZGVyIG1pbmkgYXF1YSBzcGluIGJ1dHRvbnMgZm9yIFFNYWNTdHls
ZSB0byBmaXQgbmljZWx5IGludG8KLSAgICAgICAgLy8gdGhlIGVkaXRvciBhcmVhLCBsaWtlIENo
cm9taXVtLgotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAg
IH0KLSNlbmRpZgotI2lmICFkZWZpbmVkKFFUX05PX1NUWUxFX1BMQVNUSVFVRSkKLSAgICAvLyBR
UGxhc3RpcXVlU3R5bGUgbG9va3MgYmVzdCB3aGVuIHRoZSBzcGluIGJ1dHRvbnMgYXJlIGZsdXNo
IHdpdGggdGhlIGZyYW1lJ3MgZWRnZS4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFQbGFzdGlxdWVT
dHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gMDsKLSAgICAgICAgaW5mbGF0
ZVkgPSAwOwotICAgIH0KLSNlbmRpZgotCi0gICAgYnV0dG9uUmVjdC5pbmZsYXRlWChpbmZsYXRl
WCk7Ci0gICAgYnV0dG9uUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7Ci0gICAgb3B0aW9uLnJlY3Qg
PSBidXR0b25SZWN0OwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGlu
Qm94LCBvcHRpb24pOwotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi1Db250cm9sUGFy
dCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0eWxl
T3B0aW9uJiBvcHRpb24sIFJlbmRlck9iamVjdCogbykgY29uc3QKLXsKLSAgICAvLyBEZWZhdWx0
IGJpdHM6IG5vIGZvY3VzLCBubyBtb3VzZSBvdmVyCi0gICAgb3B0aW9uLnN0YXRlICY9IH4oUVN0
eWxlOjpTdGF0ZV9IYXNGb2N1cyB8IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyKTsKLQotICAgIGlm
IChpc1JlYWRPbmx5Q29udHJvbChvKSkKLSAgICAgICAgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVk
IG9uIHRleHRmaWVsZHMuCi0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1Jl
YWRPbmx5OwotCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpMZWZ0VG9SaWdodDsKLQotICAg
IGlmIChpc0hvdmVyZWQobykpCi0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRl
X01vdXNlT3ZlcjsKLQotICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKG9wdGlv
bi5wYWxldHRlKTsKLQotICAgIGlmICghaXNFbmFibGVkKG8pKSB7Ci0gICAgICAgIG9wdGlvbi5w
YWxldHRlLnNldEN1cnJlbnRDb2xvckdyb3VwKFFQYWxldHRlOjpEaXNhYmxlZCk7Ci0gICAgICAg
IG9wdGlvbi5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIH0KLQotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAg
cmV0dXJuIE5vQ29udHJvbFBhcnQ7Ci0KLSAgICBDb250cm9sUGFydCByZXN1bHQgPSBzdHlsZS0+
YXBwZWFyYW5jZSgpOwotICAgIGlmIChzdXBwb3J0c0ZvY3VzKHJlc3VsdCkgJiYgaXNGb2N1c2Vk
KG8pKSB7Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzOwot
ICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9LZXlib2FyZEZvY3VzQ2hhbmdl
OwotICAgIH0KLQotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6UlRMKQot
ICAgICAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OlJpZ2h0VG9MZWZ0OwotCi0gICAgc3dpdGNo
IChyZXN1bHQpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgU3F1YXJlQnV0
dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25CZXZlbFBhcnQ6
Ci0gICAgY2FzZSBMaXN0SXRlbVBhcnQ6Ci0gICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6Ci0g
ICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmll
bGRDYW5jZWxCdXR0b25QYXJ0OiB7Ci0gICAgICAgIGlmIChpc1ByZXNzZWQobykpCi0gICAgICAg
ICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgICAgIGVsc2Ug
aWYgKHJlc3VsdCA9PSBQdXNoQnV0dG9uUGFydCB8fCByZXN1bHQgPT0gQnV0dG9uUGFydCkKLSAg
ICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1JhaXNlZDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgIGNhc2UgQ2hlY2tib3hQYXJ0
OgotICAgICAgICBvcHRpb24uc3RhdGUgfD0gKGlzQ2hlY2tlZChvKSA/IFFTdHlsZTo6U3RhdGVf
T24gOiBRU3R5bGU6OlN0YXRlX09mZik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb25zdCBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUt
PmFwcGVhcmFuY2UoKTsKLSAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0
IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgUVN0eWxlT3B0
aW9uU2xpZGVyIG9wdGlvbjsKLSAgICAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNh
bFBhcnQpCi0gICAgICAgICAgICBvcHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0K
LSAgICAgICAgUVN0eWxlKiBxc3R5bGUgPSBxU3R5bGUoKTsKLQotICAgICAgICBpbnQgbGVuZ3Ro
ID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlckxlbmd0aCwgJm9wdGlvbik7
Ci0gICAgICAgIGludCB0aGlja25lc3MgPSBxc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
U2xpZGVyVGhpY2tuZXNzLCAmb3B0aW9uKTsKLSAgICAgICAgaWYgKG9wdGlvbi5vcmllbnRhdGlv
biA9PSBRdDo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
dGhpY2tuZXNzLCBGaXhlZCkpOwotICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
bGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAg
ICAgICAgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlKTsKLX0KLQot
fQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4Yjc2
ZjI3MjIwYjdmOTQ1MmZlZjVkMThiMjM5ZDFjYWFhZTIyZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNv
bnRyb2xzIGluIFdlYkNvcmUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0jaWZuZGVmIFJlbmRlclRoZW1l
UVN0eWxlX2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAotCi0jaW5jbHVkZSAiUmVuZGVy
VGhlbWVRdC5oIgotCi0jaW5jbHVkZSA8UVN0eWxlPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLSNp
Zm5kZWYgUVRfTk9fTElORUVESVQKLWNsYXNzIFFMaW5lRWRpdDsKLSNlbmRpZgotY2xhc3MgUVBh
aW50ZXI7Ci1jbGFzcyBRV2lkZ2V0OwotUVRfRU5EX05BTUVTUEFDRQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lUXQ7Ci0KLWNsYXNzIFJlbmRlclRoZW1lUVN0
eWxlIDogcHVibGljIFJlbmRlclRoZW1lUXQgewotcHJpdmF0ZToKLSAgICBSZW5kZXJUaGVtZVFT
dHlsZShQYWdlKik7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhlbWVRU3R5bGUoKTsKLQotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoUGFnZSopOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OwotCi0gICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQot
I2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2Yg
dGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBh
bmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0jaWZuZGVmIFFUX05PX1NQSU5CT1gK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBnZXRTdHlsZVBh
aW50ZXIoY29uc3QgUGFpbnRJbmZvJik7Ci0KLSAgICB2aXJ0dWFsIFFSZWN0IGluZmxhdGVCdXR0
b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2
b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYs
IFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0gICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0KLSAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSopIGNv
bnN0OwotCi0gICAgUVN0eWxlKiBmYWxsYmFja1N0eWxlKCkgY29uc3Q7Ci0KLSNpZmRlZiBRX09T
X01BQwotICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7Ci0jZW5kaWYKLQotICAgIFFTdHls
ZSogbV9mYWxsYmFja1N0eWxlOwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIG11dGFibGUg
UUxpbmVFZGl0KiBtX2xpbmVFZGl0OwotI2VuZGlmCi19OwotCi1jbGFzcyBTdHlsZVBhaW50ZXJR
U3R5bGUgOiBwdWJsaWMgU3R5bGVQYWludGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBTdHls
ZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhlbWVRU3R5bGUqLCBjb25zdCBQYWludEluZm8mKTsKLSAg
ICBleHBsaWNpdCBTdHlsZVBhaW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRdCosIEdyYXBoaWNz
Q29udGV4dCopOwotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYg
U3R5bGVQYWludGVyOjppc1ZhbGlkKCk7IH0KLQotICAgIFFXaWRnZXQqIHdpZGdldDsKLSAgICBR
U3R5bGUqIHN0eWxlOwotCi0gICAgdm9pZCBkcmF3UHJpbWl0aXZlKFFTdHlsZTo6UHJpbWl0aXZl
RWxlbWVudCBwZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd1By
aW1pdGl2ZShwZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbnRy
b2woUVN0eWxlOjpDb250cm9sRWxlbWVudCBjZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0g
ICAgeyBzdHlsZS0+ZHJhd0NvbnRyb2woY2UsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KLSAg
ICB2b2lkIGRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNvbXBsZXhDb250cm9sIGNjLCBjb25z
dCBRU3R5bGVPcHRpb25Db21wbGV4JiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd0NvbXBsZXhDb250
cm9sKGNjLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBp
bml0KEdyYXBoaWNzQ29udGV4dCosIFFTdHlsZSopOwotCi0gICAgUV9ESVNBQkxFX0NPUFkoU3R5
bGVQYWludGVyUVN0eWxlKQotfTsKLQotfQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVRU3R5bGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAppbmRleCAw
MGI4YjFjMWJjZWJkZGI2YzY5MmIwNTNiMjM5ZTRmNDk5YzA1M2Y4Li4wMTJmYjIzNDc1ZDZlYzc1
YzkyYTdjNTQyYzRlZjZjODM1NDBiNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclBy
b2dyZXNzLmgiCiAjZW5kaWYKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJl
bmRlclRoZW1lUXRNb2JpbGUuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1
ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgpAQCAt
ODIsNiArODMsOSBAQCBzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUgPSA5Owogc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TaXplID0gMzA7CiBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7CiAKK3N0YXRpYyBRdFRoZW1lRmFjdG9yeUZ1bmN0
aW9uIHRoZW1lRmFjdG9yeTsKK3N0YXRpYyBTY3JvbGxiYXJUaGVtZSogc2Nyb2xsYmFyVGhlbWU7
CisKIFJlbmRlclRoZW1lUXQ6OlJlbmRlclRoZW1lUXQoUGFnZSogcGFnZSkKICAgICA6IFJlbmRl
clRoZW1lKCkKICAgICAsIG1fcGFnZShwYWdlKQpAQCAtODksMTMgKzkzLDMwIEBAIFJlbmRlclRo
ZW1lUXQ6OlJlbmRlclRoZW1lUXQoUGFnZSogcGFnZSkKICAgICBtX2J1dHRvbkZvbnRGYW1pbHkg
PSBRR3VpQXBwbGljYXRpb246OmZvbnQoKS5mYW1pbHkoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZVF0Ojp1c2VNb2JpbGVUaGVtZSgpCit2b2lkIFJlbmRlclRoZW1lUXQ6OnNldEN1c3RvbVRoZW1l
KFF0VGhlbWVGYWN0b3J5RnVuY3Rpb24gZmFjdG9yeSwgU2Nyb2xsYmFyVGhlbWUgKmN1c3RvbVNj
cm9sbGJhclRoZW1lKQogewotI2lmIEhBVkUoUVNUWUxFKQotICAgIHJldHVybiAhcWdldGVudigi
UVRfV0VCS0lUX1VTRV9NT0JJTEVfVEhFTUUiKS5pc051bGwoKTsKLSNlbHNlCi0gICAgcmV0dXJu
IHRydWU7Ci0jZW5kaWYKKyAgICB0aGVtZUZhY3RvcnkgPSBmYWN0b3J5OworICAgIHNjcm9sbGJh
clRoZW1lID0gY3VzdG9tU2Nyb2xsYmFyVGhlbWU7Cit9CisKK1Njcm9sbGJhclRoZW1lKiBSZW5k
ZXJUaGVtZVF0OjpjdXN0b21TY3JvbGxiYXJUaGVtZSgpCit7CisgICAgcmV0dXJuIHNjcm9sbGJh
clRoZW1lOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlVGhlbWUo
UGFnZSogcGFnZSkKK3sKKyAgICBpZiAodGhlbWVGYWN0b3J5KQorICAgICAgICByZXR1cm4gdGhl
bWVGYWN0b3J5KHBhZ2UpOworICAgIHJldHVybiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUo
cGFnZSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZv
clBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZVRoZW1lKHBhZ2UpOworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogZmFsbGJhY2sgPSBjcmVhdGVU
aGVtZSgwKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGZhbGxiYWNrOwogfQogCiAvLyBSZW1vdmUg
dGhpcyB3aGVuIFNlYXJjaEZpZWxkUGFydCBpcyBzdHlsZS1hYmxlIGluIFJlbmRlclRoZW1lOjpp
c0NvbnRyb2xTdHlsZWQoKQpAQCAtMTE2LDcgKzEzNyw5IEBAIFN0cmluZyBSZW5kZXJUaGVtZVF0
OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
ICAgICByZXN1bHQuYXBwZW5kKFJlbmRlclRoZW1lOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkp
OwotICAgIGlmICh1c2VNb2JpbGVUaGVtZSgpKSB7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB1c2lu
ZyBhIGN1c3RvbSB0aGVtZSBidXQgdGhlICJNb2JpbGUgUXQiIGRlZmF1bHQgdGhlbWUsIHRoZW4g
d2UgYWxzbyBuZWVkCisgICAgLy8gdGhlIGV4dHJhIHN0eWxlc2hlZXQgZm9yIGl0LgorICAgIGlm
ICghdGhlbWVGYWN0b3J5KSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHRoZW1lUXRO
b0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVF0Tm9MaXN0Ym94ZXNV
c2VyQWdlbnRTdHlsZVNoZWV0KSkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZyhtb2Jp
bGVUaGVtZVF0VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1vYmlsZVRoZW1lUXRVc2VyQWdl
bnRTdHlsZVNoZWV0KSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuaAppbmRleCBjZGFhYTk4ZWI3MjQ0OTkzYjBmMzgzNWQyYjNiNDg3ZTQ5YzIxYWE3
Li44M2U3MjlkODhlZDEwMWIzYWU3NGM4MDM2NjdlMzY2MmExMDM0NDk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCkBAIC00MCwxMyArNDAsMTcgQEAgY2xh
c3MgUmVuZGVyUHJvZ3Jlc3M7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIEhUTUxNZWRpYUVs
ZW1lbnQ7CiBjbGFzcyBTdHlsZVBhaW50ZXI7CitjbGFzcyBTY3JvbGxiYXJUaGVtZTsKKwordHlw
ZWRlZiBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiAoKlF0VGhlbWVGYWN0b3J5RnVuY3Rpb24pKFBh
Z2UqIHBhZ2UpOwogCiBjbGFzcyBSZW5kZXJUaGVtZVF0IDogcHVibGljIFJlbmRlclRoZW1lIHsK
IAogcHVibGljOgogICAgIFJlbmRlclRoZW1lUXQoUGFnZSopOwogCi0gICAgc3RhdGljIGJvb2wg
dXNlTW9iaWxlVGhlbWUoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDdXN0b21UaGVtZShRdFRoZW1l
RmFjdG9yeUZ1bmN0aW9uLCBTY3JvbGxiYXJUaGVtZSogY3VzdG9tU2Nyb2xsYmFyVGhlbWUpOwor
ICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZSogY3VzdG9tU2Nyb2xsYmFyVGhlbWUoKTsKIAogICAg
IFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKaW5kZXggYzJmNDIyOGIwMDky
OGU4YjJjMWM0MjdiZDBlN2I4YTc0NzA0MmMxMC4uMjAxYTFiMjA2ODQ0ZTZhZTI5YzcxMzE4ZDky
YzczMDE2ZTAzZmRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdE1vYmlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdE1vYmlsZS5jcHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2VuZGlmCi0jaWYgSEFWRShR
U1RZTEUpCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKLSNlbmRpZgotCiAjaW5jbHVk
ZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFGaWxlPgogI2luY2x1ZGUgPFFGb250TWV0cmljcz4KQEAg
LTU1MCwyMyArNTQ2LDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVRdE1v
YmlsZTo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJU
aGVtZVF0TW9iaWxlKHBhZ2UpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+
IGNyZWF0ZVRoZW1lKFBhZ2UqIHBhZ2UpCi17Ci0jaWYgSEFWRShRU1RZTEUpCi0gICAgaWYgKCFS
ZW5kZXJUaGVtZVF0Ojp1c2VNb2JpbGVUaGVtZSgpKQotICAgICAgICByZXR1cm4gUmVuZGVyVGhl
bWVRU3R5bGU6OmNyZWF0ZShwYWdlKTsKLSNlbmRpZgotICAgIHJldHVybiBSZW5kZXJUaGVtZVF0
TW9iaWxlOjpjcmVhdGUocGFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKLXsKLSAgICBpZiAocGFnZSkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZVRoZW1lKHBhZ2UpOwotICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogZmFs
bGJhY2sgPSBjcmVhdGVUaGVtZSgwKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIGZhbGxiYWNrOwot
fQotCiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpSZW5kZXJUaGVtZVF0TW9iaWxlKFBhZ2UqIHBhZ2Up
CiAgICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwCmluZGV4IGQ0YjU4YjFiMGU1YWYxNzBmOTZlZjgz
NjRiNjliNDg0YTM2MjIyNTYuLjRmNTU3NjY1ZjBlYjc1OTIwNDFiNWFkMjMwZTNmODcyYThhZDI5
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1l
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQu
Y3BwCkBAIC0yNiwyOSArMjYsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
ICFIQVZFKFFTVFlMRSkKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogCi0jZWxzZQotI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1l
UVN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgotI2luY2x1ZGUgIlNj
cm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLQotI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KLSNpZmRlZiBRX1dTX01BQwotI2luY2x1ZGUgPFFNYWNTdHlsZT4KLSNlbmRpZgotI2lu
Y2x1ZGUgPFFNZW51PgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFTdHlsZT4KLSNp
bmNsdWRlIDxRU3R5bGVPcHRpb25TbGlkZXI+Ci0jZW5kaWYgLy8gSEFWRShRU1RZTEUpCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVRdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDIx
OSArMzcsMTEgQEAgU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgp
CiAgICAgc3RhdGljIFNjcm9sbGJhclRoZW1lKiB0aGVtZSA9IDA7CiAgICAgaWYgKHRoZW1lKQog
ICAgICAgICByZXR1cm4gdGhlbWU7Ci0jaWYgSEFWRShRU1RZTEUpCi0gICAgaWYgKCFSZW5kZXJU
aGVtZVF0Ojp1c2VNb2JpbGVUaGVtZSgpKQotICAgICAgICB0aGVtZSA9IG5ldyBTY3JvbGxiYXJU
aGVtZVF0KCk7Ci0gICAgZWxzZQotI2VuZGlmCisgICAgdGhlbWUgPSBSZW5kZXJUaGVtZVF0Ojpj
dXN0b21TY3JvbGxiYXJUaGVtZSgpOworICAgIGlmICghdGhlbWUpCiAgICAgICAgIHRoZW1lID0g
bmV3IFNjcm9sbGJhclRoZW1lKCk7CiAgICAgcmV0dXJuIHRoZW1lOwogfQogCi0jaWYgSEFWRShR
U1RZTEUpCi1TY3JvbGxiYXJUaGVtZVF0Ojp+U2Nyb2xsYmFyVGhlbWVRdCgpCi17Ci19Ci0KLXN0
YXRpYyBRU3R5bGU6OlN1YkNvbnRyb2wgc2NQYXJ0KGNvbnN0IFNjcm9sbGJhclBhcnQmIHBhcnQp
Ci17Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBOb1BhcnQ6Ci0gICAgICAgIHJldHVy
biBRU3R5bGU6OlNDX05vbmU7Ci0gICAgY2FzZSBCYWNrQnV0dG9uU3RhcnRQYXJ0OgotICAgIGNh
c2UgQmFja0J1dHRvbkVuZFBhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJh
clN1YkxpbmU7Ci0gICAgY2FzZSBCYWNrVHJhY2tQYXJ0OgotICAgICAgICByZXR1cm4gUVN0eWxl
OjpTQ19TY3JvbGxCYXJTdWJQYWdlOwotICAgIGNhc2UgVGh1bWJQYXJ0OgotICAgICAgICByZXR1
cm4gUVN0eWxlOjpTQ19TY3JvbGxCYXJTbGlkZXI7Ci0gICAgY2FzZSBGb3J3YXJkVHJhY2tQYXJ0
OgotICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRQYWdlOwotICAgIGNhc2Ug
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydDoKLSAgICBjYXNlIEZvcndhcmRCdXR0b25FbmRQYXJ0Ogot
ICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOwotICAgIH0KLQotICAg
IHJldHVybiBRU3R5bGU6OlNDX05vbmU7Ci19Ci0KLXN0YXRpYyBTY3JvbGxiYXJQYXJ0IHNjcm9s
bGJhclBhcnQoY29uc3QgUVN0eWxlOjpTdWJDb250cm9sJiBzYykKLXsKLSAgICBzd2l0Y2ggKHNj
KSB7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX05vbmU6Ci0gICAgICAgIHJldHVybiBOb1BhcnQ7Ci0g
ICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJhclN1YkxpbmU6Ci0gICAgICAgIHJldHVybiBCYWNr
QnV0dG9uU3RhcnRQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJTdWJQYWdlOgot
ICAgICAgICByZXR1cm4gQmFja1RyYWNrUGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xs
QmFyU2xpZGVyOgotICAgICAgICByZXR1cm4gVGh1bWJQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpT
Q19TY3JvbGxCYXJBZGRQYWdlOgotICAgICAgICByZXR1cm4gRm9yd2FyZFRyYWNrUGFydDsKLSAg
ICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyQWRkTGluZToKLSAgICAgICAgcmV0dXJuIEZvcndh
cmRCdXR0b25TdGFydFBhcnQ7Ci0gICAgfQotICAgIHJldHVybiBOb1BhcnQ7Ci19Ci0KLXN0YXRp
YyBRU3R5bGVPcHRpb25TbGlkZXIqIHN0eWxlT3B0aW9uU2xpZGVyKFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiBzY3JvbGxiYXIsIFFXaWRnZXQqIHdpZGdldCA9IDApCi17Ci0gICAgc3RhdGljIFFTdHls
ZU9wdGlvblNsaWRlciBvcHQ7Ci0gICAgaWYgKHdpZGdldCkKLSAgICAgICAgb3B0LmluaXRGcm9t
KHdpZGdldCk7Ci0gICAgZWxzZQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9B
Y3RpdmU7Ci0KLSAgICBvcHQuc3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7Ci0KLSAg
ICBvcHQucmVjdCA9IHNjcm9sbGJhci0+ZnJhbWVSZWN0KCk7Ci0gICAgaWYgKHNjcm9sbGJhci0+
ZW5hYmxlZCgpKQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9FbmFibGVkOwot
ICAgIGlmIChzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgIT0gUmVndWxhclNjcm9sbGJhcikKLSAg
ICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICBvcHQub3JpZW50YXRp
b24gPSAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IFF0
OjpWZXJ0aWNhbCA6IFF0OjpIb3Jpem9udGFsOwotCi0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0
eWxlOjpTdGF0ZV9Ib3Jpem9udGFsOwotICAgIGVsc2UKLSAgICAgICAgb3B0LnN0YXRlICY9IH5R
U3R5bGU6OlN0YXRlX0hvcml6b250YWw7Ci0KLSAgICBvcHQuc2xpZGVyVmFsdWUgPSBzY3JvbGxi
YXItPnZhbHVlKCk7Ci0gICAgb3B0LnNsaWRlclBvc2l0aW9uID0gb3B0LnNsaWRlclZhbHVlOwot
ICAgIG9wdC5wYWdlU3RlcCA9IHNjcm9sbGJhci0+cGFnZVN0ZXAoKTsKLSAgICBvcHQuc2luZ2xl
U3RlcCA9IHNjcm9sbGJhci0+bGluZVN0ZXAoKTsKLSAgICBvcHQubWluaW11bSA9IDA7Ci0gICAg
b3B0Lm1heGltdW0gPSBxTWF4KDAsIHNjcm9sbGJhci0+bWF4aW11bSgpKTsKLSAgICBTY3JvbGxi
YXJQYXJ0IHByZXNzZWRQYXJ0ID0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpOwotICAgIFNjcm9s
bGJhclBhcnQgaG92ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7Ci0gICAgaWYg
KHByZXNzZWRQYXJ0ICE9IE5vUGFydCkgewotICAgICAgICBvcHQuYWN0aXZlU3ViQ29udHJvbHMg
PSBzY1BhcnQoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKTsKLSAgICAgICAgaWYgKHByZXNzZWRQ
YXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydAotICAgICAgICAgICAgfHwgcHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvbkVuZFBh
cnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQKLSAgICAgICAgICAgIHx8
IHByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkKLSAgICAgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1N1bmtlbjsKLSAgICB9IGVsc2UKLSAgICAgICAgb3B0LmFjdGl2ZVN1YkNvbnRy
b2xzID0gc2NQYXJ0KGhvdmVyZWRQYXJ0KTsKLSAgICBpZiAoaG92ZXJlZFBhcnQgIT0gTm9QYXJ0
KQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0gICAgcmV0
dXJuICZvcHQ7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVRdDo6cGFpbnQoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+dXBk
YXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3Qo
ZGFtYWdlUmVjdCk7Ci0gICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0eWxlUGFp
bnRlclFTdHlsZSBwKHRoaXMsIGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgaWYgKCFwLmlzVmFsaWQo
KSkKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcC5wYWludGVyLT5zYXZlKCk7Ci0gICAgUVN0
eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIsIHAud2lk
Z2V0KTsKLQotICAgIHAucGFpbnRlci0+c2V0Q2xpcFJlY3Qob3B0LT5yZWN0LmludGVyc2VjdGVk
KGRhbWFnZVJlY3QpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7Ci0KLSNpZmRlZiBRX1dTX01BQwotICAg
IC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGdldCBzdHlsZSBidXQgdG9k
YXkgU2Nyb2xsYmFyVGhlbWUgaXMgbm90IGF3YXJlIG9mIHRoZSBwYWdlIHNvIHdlCi0gICAgLy8g
Y2FuJ3QgZ2V0IHRoZSB3aWRnZXQuCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihz
dHlsZSgpKSkKLSAgICAgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxC
YXIsICpvcHQpOwotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgLy8gVGhlIFFTdHls
ZSBleHBlY3RzIHRoZSBiYWNrZ3JvdW5kIHRvIGJlIGFscmVhZHkgZmlsbGVkLgotICAgICAgICBw
LnBhaW50ZXItPmZpbGxSZWN0KG9wdC0+cmVjdCwgb3B0LT5wYWxldHRlLmJhY2tncm91bmQoKSk7
Ci0KLSAgICAgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBvcHQtPnJlY3QudG9wTGVmdCgpOwot
ICAgICAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICAgICAgb3B0LT5yZWN0
Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgICAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5
bGU6OkNDX1Njcm9sbEJhciwgKm9wdCk7Ci0gICAgICAgIG9wdC0+cmVjdC5tb3ZlVG8odG9wTGVm
dCk7Ci0gICAgfQotICAgIHAucGFpbnRlci0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRdDo6aGl0VGVzdChTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKLXsK
LSAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJh
cik7Ci0gICAgY29uc3QgUVBvaW50IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWlu
aW5nV2luZG93KGV2dC5wb3NpdGlvbigpKTsKLSAgICBvcHQtPnJlY3QubW92ZVRvKFFQb2ludCgw
LCAwKSk7Ci0gICAgUVN0eWxlOjpTdWJDb250cm9sIHNjID0gc3R5bGUoKS0+aGl0VGVzdENvbXBs
ZXhDb250cm9sKFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCBvcHQsIHBvcywgMCk7Ci0gICAgcmV0dXJu
IHNjcm9sbGJhclBhcnQoc2MpOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lUXQ6OnNob3VsZENl
bnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2dCkKLXsKLSAgICAvLyBNaWRkbGUgY2xpY2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlm
IHN1cHBvcnRlZCkuCi0gICAgcmV0dXJuIHN0eWxlKCktPnN0eWxlSGludChRU3R5bGU6OlNIX1Nj
cm9sbEJhcl9NaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb24pICYmIGV2dC5idXR0b24oKSA9PSBN
aWRkbGVCdXR0b247Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVRdDo6aW52YWxpZGF0ZVBhcnQo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCkKLXsKLSAgICAv
LyBGSVhNRTogRG8gbW9yZSBwcmVjaXNlIGludmFsaWRhdGlvbi4KLSAgICBzY3JvbGxiYXItPmlu
dmFsaWRhdGUoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUXQ6OnNjcm9sbGJhclRoaWNrbmVz
cyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKLXsKLSAgICBRU3R5bGVPcHRpb25T
bGlkZXIgbzsKLSAgICBvLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotICAgIG8uc3RhdGUg
Jj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKLSAgICBpZiAoY29udHJvbFNpemUgIT0gUmVn
dWxhclNjcm9sbGJhcikKLSAgICAgICAgby5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7Ci0g
ICAgcmV0dXJuIHN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50
LCAmbywgMCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZVF0Ojp0aHVtYlBvc2l0aW9uKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGZsb2F0IHBvcyA9IChmbG9hdClzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSAqICh0cmFja0xlbmd0aChzY3JvbGxiYXIpIC0gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSkgLyBz
Y3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAgICAgcmV0dXJuIChwb3MgPCAxICYmIHBvcyA+IDAp
ID8gMSA6IHBvczsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVt
ZVF0Ojp0aHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAg
IFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsK
LSAgICBJbnRSZWN0IHRodW1iID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19T
Y3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJTbGlkZXIsIDApOwotICAgIHJldHVy
biBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRodW1i
LndpZHRoKCkgOiB0aHVtYi5oZWlnaHQoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRy
YWNrUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBRU3R5
bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhcik7Ci0gICAg
SW50UmVjdCB0cmFjayA9IHN0eWxlKCktPnN1YkNvbnRyb2xSZWN0KFFTdHlsZTo6Q0NfU2Nyb2xs
QmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlLCAwKTsKLSAgICByZXR1cm4gc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0cmFjay54KCkg
LSBzY3JvbGxiYXItPngoKSA6IHRyYWNrLnkoKSAtIHNjcm9sbGJhci0+eSgpOwotfQotCi1pbnQg
U2Nyb2xsYmFyVGhlbWVRdDo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhcikKLXsKLSAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVy
KHNjcm9sbGJhcik7Ci0gICAgSW50UmVjdCB0cmFjayA9IHN0eWxlKCktPnN1YkNvbnRyb2xSZWN0
KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlLCAw
KTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPyB0cmFjay53aWR0aCgpIDogdHJhY2suaGVpZ2h0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
YmFyVGhlbWVRdDo6cGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBjb250ZXh0KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBRU3R5bGVPcHRpb24gb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsK
LSAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbFNjcm9sbEFyZWFDb3JuZXIsIG9w
dGlvbik7Ci19Ci0KLVFTdHlsZSogU2Nyb2xsYmFyVGhlbWVRdDo6c3R5bGUoKSBjb25zdAotewot
ICAgIHJldHVybiBRQXBwbGljYXRpb246OnN0eWxlKCk7Ci19Ci0KLSNlbmRpZiAvLyBIQVZFKFFT
VFlMRSkKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVR
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzM3YmY4MGNjZjY0NmQxOGU4ZjA3
YzRmZTVhY2JhM2FhOTk1MjJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxiYXJUaGVtZVF0X2gKLSNkZWZpbmUg
U2Nyb2xsYmFyVGhlbWVRdF9oCi0KLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotCi0jaW5j
bHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRU3R5
bGU7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Ny
b2xsYmFyVGhlbWVRdCA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZSB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+U2Nyb2xsYmFyVGhlbWVRdCgpOwotCi0gICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKLQotICAgIHZpcnR1
YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVt
YihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Ny
b2xsYmFyUGFydCk7Ci0KLSAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRo
ZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqKTsKLSAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xp
ZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KTsKLQotICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9s
U2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwotCi0gICAgUVN0eWxlKiBzdHlsZSgpIGNvbnN0Owot
fTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggODk4ODk5YmY1
MWUwMDM4YTI1OTk2ODQ4YTk1ZDA2YmFlZWVhZTU5ZS4uMDY2M2Y3ZDU5ZGRkMWE5ZDA1YzBhOWRj
NmEyZTYxMDAwNWQ2YmVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMzI5MCwx
NSArMzI5MCwxMSBAQCBib29sIFFXZWJQYWdlOjpzd2FsbG93Q29udGV4dE1lbnVFdmVudChRQ29u
dGV4dE1lbnVFdmVudCAqZXZlbnQpCiB7CiAgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9s
bGVyKCktPmNsZWFyQ29udGV4dE1lbnUoKTsKIAotI2lmIEhBVkUoUVNUWUxFKQotICAgIGlmICgh
UmVuZGVyVGhlbWVRdDo6dXNlTW9iaWxlVGhlbWUoKSkgewotICAgICAgICBpZiAoUVdlYkZyYW1l
KiB3ZWJGcmFtZSA9IGZyYW1lQXQoZXZlbnQtPnBvcygpKSkgewotICAgICAgICAgICAgRnJhbWUq
IGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZSh3ZWJGcmFtZSk7Ci0gICAgICAgICAgICBp
ZiAoU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBmcmFtZS0+dmlldygpLT5zY3JvbGxiYXJBdFBvaW50
KGNvbnZlcnRNb3VzZUV2ZW50KGV2ZW50LCAxKS5wb3NpdGlvbigpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaGFuZGxlU2Nyb2xsYmFyQ29udGV4dE1lbnVFdmVudChzY3JvbGxiYXIsIGV2ZW50
KTsKLSAgICAgICAgfQorICAgIGlmIChRV2ViRnJhbWUqIHdlYkZyYW1lID0gZnJhbWVBdChldmVu
dC0+cG9zKCkpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUod2ViRnJhbWUpOworICAgICAgICBpZiAoU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBmcmFtZS0+
dmlldygpLT5zY3JvbGxiYXJBdFBvaW50KGNvbnZlcnRNb3VzZUV2ZW50KGV2ZW50LCAxKS5wb3Np
dGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVTY3JvbGxiYXJDb250ZXh0TWVudUV2
ZW50KHNjcm9sbGJhciwgZXZlbnQpOwogICAgIH0KLSNlbmRpZgogCiAgICAgV2ViQ29yZTo6RnJh
bWUqIGZvY3VzZWRGcmFtZSA9IGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKICAgICBmb2N1c2VkRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4
dE1lbnVFdmVudChjb252ZXJ0TW91c2VFdmVudChldmVudCwgMSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKaW5kZXggNWNiZDgyYzU4
NGUzYzQ0Njg4N2ZiYzg5YzZhNmYxMWMyODNhNzVjNi4uMThlNDZmN2RmZjUwNjU2ZDlhZTcyYzlh
NGVkOTg2ODQ3YmMxNzZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9Jbml0V2ViQ29yZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0luaXRXZWJDb3JlUXQuY3BwCkBAIC0zMyw3ICszMyw5IEBACiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llc1F0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKICNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCIKICNpbmNs
dWRlICJTZWN1cml0eVBvbGljeS5oIgogI2lmIFVTRShRVEtJVCkKICNpbmNsdWRlICJXZWJTeXN0
ZW1JbnRlcmZhY2UuaCIKQEAgLTYyLDYgKzY0LDggQEAgdm9pZCBpbml0aWFsaXplV2ViQ29yZVF0
KCkKICAgICBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6aW5pdGlhbGl6ZSgpOwogICAgIFF0V2ViRWxl
bWVudFJ1bnRpbWU6OmluaXRpYWxpemUoKTsKIAorICAgIFJlbmRlclRoZW1lUXQ6OnNldEN1c3Rv
bVRoZW1lKFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUsIG5ldyBTY3JvbGxiYXJUaGVtZVFTdHls
ZSk7CisKICNpZiBVU0UoUVRLSVQpCiAgICAgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UoKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5k
ZXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRl
clRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDVhZmEzMWNlNzM3YmUyMjIyNGExNzlhMjZl
YzZkYzQ2NzJkZGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKQEAgLTAsMCArMSw4MTEgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiAg
ICAgICAgICAgICAgIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiAgICAg
ICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bmRlclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgor
I2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJRV2ViUGFn
ZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2lmIEVOQUJMRShQUk9HUkVTU19U
QUcpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRl
clNsaWRlci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAi
U2xpZGVyVGh1bWJFbGVtZW50LmgiCisjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIK
KworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRQ29sb3I+CisjaW5jbHVkZSA8
UUZpbGU+CisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFMaW5lRWRpdD4KKyNp
bmNsdWRlIDxRTWFjU3R5bGU+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaWZuZGVmIFFUX05PX1NU
WUxFX1BMQVNUSVFVRQorI2luY2x1ZGUgPFFQbGFzdGlxdWVTdHlsZT4KKyNlbmRpZgorI2luY2x1
ZGUgPFFQdXNoQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+CisjaW5jbHVkZSA8UVN0
eWxlT3B0aW9uQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjI+CisjaWYgRU5B
QkxFKFBST0dSRVNTX1RBRykKKyNpbmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyPgor
I2VuZGlmCisjaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVyPgorI2luY2x1ZGUgPFFXaWRnZXQ+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwor
aW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9wdGlvbihRV2lkZ2V0ICp3aWRnZXQsIFFTdHls
ZU9wdGlvbiYgb3B0aW9uKQoreworICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdGlvbi5pbml0
RnJvbSh3aWRnZXQpOworICAgIGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgIElmIGEgd2lk
Z2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgZm9yIHJlbmRlcmluZywgd2UgZmFsbGJhY2sg
dG8gZGVmYXVsdAorICAgICAgICAgIHZhbHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0LgorICAgICAg
ICAgKi8KKyAgICAgICAgb3B0aW9uLnN0YXRlID0gUVN0eWxlOjpTdGF0ZV9BY3RpdmUgfCBRU3R5
bGU6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQorfQorCisKK1FTaGFyZWRQb2ludGVyPFN0eWxlUGFp
bnRlcj4gUmVuZGVyVGhlbWVRU3R5bGU6OmdldFN0eWxlUGFpbnRlcihjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbykKK3sKKyAgICByZXR1cm4gUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPihu
ZXcgU3R5bGVQYWludGVyUVN0eWxlKHRoaXMsIHBhaW50SW5mbykpOworfQorCitTdHlsZVBhaW50
ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShSZW5kZXJUaGVtZVFTdHlsZSogdGhlbWUsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQorICAgIDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWlu
dEluZm8pCit7CisgICAgaW5pdChwYWludEluZm8uY29udGV4dCA/IHBhaW50SW5mby5jb250ZXh0
IDogMCwgdGhlbWUtPnFTdHlsZSgpKTsKK30KKworU3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBh
aW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRU3R5bGUqIHRoZW1lLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQpCisgICAgOiBTdHlsZVBhaW50ZXIoKQoreworICAgIGluaXQoY29udGV4dCwgdGhl
bWUtPnN0eWxlKCkpOworfQorCit2b2lkIFN0eWxlUGFpbnRlclFTdHlsZTo6aW5pdChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIFFTdHlsZSogdGhlbWVTdHlsZSkKK3sKKyAgICBwYWludGVyID0g
c3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
d2lkZ2V0ID0gMDsKKyAgICBRUGFpbnREZXZpY2UqIGRldiA9IDA7CisgICAgaWYgKHBhaW50ZXIp
CisgICAgICAgIGRldiA9IHBhaW50ZXItPmRldmljZSgpOworICAgIGlmIChkZXYgJiYgZGV2LT5k
ZXZUeXBlKCkgPT0gUUludGVybmFsOjpXaWRnZXQpCisgICAgICAgIHdpZGdldCA9IHN0YXRpY19j
YXN0PFFXaWRnZXQqPihkZXYpOworICAgIHN0eWxlID0gdGhlbWVTdHlsZTsKKworICAgIFN0eWxl
UGFpbnRlcjo6aW5pdChjb250ZXh0KTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVu
ZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZShQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVuZGVyVGhlbWVRU3R5bGUocGFnZSkpOworfQorCitSZW5kZXJUaGVtZVFTdHlsZTo6
UmVuZGVyVGhlbWVRU3R5bGUoUGFnZSogcGFnZSkKKyAgICA6IFJlbmRlclRoZW1lUXQocGFnZSkK
KyNpZm5kZWYgUVRfTk9fTElORUVESVQKKyAgICAsIG1fbGluZUVkaXQoMCkKKyNlbmRpZgorewor
ICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKKyAgICBRRm9udCBkZWZhdWx0QnV0dG9uRm9udCA9IFFB
cHBsaWNhdGlvbjo6Zm9udCgmYnV0dG9uKTsKKyAgICBtX2J1dHRvbkZvbnRGYW1pbHkgPSBkZWZh
dWx0QnV0dG9uRm9udC5mYW1pbHkoKTsKKyNpZmRlZiBRX1dTX01BQworICAgIGJ1dHRvbi5zZXRB
dHRyaWJ1dGUoUXQ6OldBX01hY1NtYWxsU2l6ZSk7CisgICAgUUZvbnRJbmZvIGZvbnRJbmZvKGRl
ZmF1bHRCdXR0b25Gb250KTsKKyAgICBtX2J1dHRvbkZvbnRQaXhlbFNpemUgPSBmb250SW5mby5w
aXhlbFNpemUoKTsKKyNlbmRpZgorCisgICAgbV9mYWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9y
eTo6Y3JlYXRlKFFMYXRpbjFTdHJpbmcoIndpbmRvd3MiKSk7Cit9CisKK1JlbmRlclRoZW1lUVN0
eWxlOjp+UmVuZGVyVGhlbWVRU3R5bGUoKQoreworICAgIGRlbGV0ZSBtX2ZhbGxiYWNrU3R5bGU7
CisjaWZuZGVmIFFUX05PX0xJTkVFRElUCisgICAgZGVsZXRlIG1fbGluZUVkaXQ7CisjZW5kaWYK
K30KKworCisvLyBmb3Igc29tZSB3aWRnZXQgcGFpbnRpbmcsIHdlIG5lZWQgdG8gZmFsbGJhY2sg
dG8gV2luZG93cyBzdHlsZQorUVN0eWxlKiBSZW5kZXJUaGVtZVFTdHlsZTo6ZmFsbGJhY2tTdHls
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX2ZhbGxiYWNrU3R5bGUpID8gbV9mYWxsYmFja1N0
eWxlIDogUUFwcGxpY2F0aW9uOjpzdHlsZSgpOworfQorCitRU3R5bGUqIFJlbmRlclRoZW1lUVN0
eWxlOjpxU3R5bGUoKSBjb25zdAoreworICAgIGlmIChtX3BhZ2UpIHsKKyAgICAgICAgUVdlYlBh
Z2VDbGllbnQqIHBhZ2VDbGllbnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZv
cm1QYWdlQ2xpZW50KCk7CisKKyAgICAgICAgaWYgKHBhZ2VDbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm4gcGFnZUNsaWVudC0+c3R5bGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gUUFwcGxpY2F0
aW9uOjpzdHlsZSgpOworfQorCitpbnQgUmVuZGVyVGhlbWVRU3R5bGU6OmZpbmRGcmFtZUxpbmVX
aWR0aChRU3R5bGUqIHN0eWxlKSBjb25zdAoreworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAg
IGlmICghbV9saW5lRWRpdCkKKyAgICAgICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsK
KyNlbmRpZgorCisgICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBvcHQ7CisgICAgUVdpZGdldCogd2lk
Z2V0ID0gMDsKKyNpZm5kZWYgUVRfTk9fTElORUVESVQKKyAgICB3aWRnZXQgPSBtX2xpbmVFZGl0
OworI2VuZGlmCisgICAgcmV0dXJuIHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1
bHRGcmFtZVdpZHRoLCAmb3B0LCB3aWRnZXQpOworfQorCitRUmVjdCBSZW5kZXJUaGVtZVFTdHls
ZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKK3sK
KyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOworICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1NtYWxsOworICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisgICAg
UVJlY3QgbGF5b3V0UmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1
c2hCdXR0b25MYXlvdXRJdGVtLCAmb3B0aW9uLCAwKTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBv
cmlnaW5hbFJlY3QubGVmdCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxS
ZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9w
ID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBh
ZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgp
OworCisgICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAt
cGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0
dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFT
aXplIHNpemUoMCwgMCk7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5m
b250KCkuZm9udCgpKTsKKyAgICBRU3R5bGUqIHN0eWxlID0gcVN0eWxlKCk7CisKKyAgICBzd2l0
Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKKyAgICBjYXNlIFRleHRBcmVhUGFydDoK
KyAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6IHsKKyAg
ICAgICAgaW50IHBhZGRpbmcgPSBmaW5kRnJhbWVMaW5lV2lkdGgoc3R5bGUpOworICAgICAgICBy
ZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAg
ICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
CisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBz
cGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5
bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5h
cHBlYXJhbmNlKCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBRU3R5bGVP
cHRpb24gc3R5bGVPcHRpb247CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfU21hbGw7CisgICAgICAgIGludCBjaGVja0JveFdpZHRoID0gc3R5bGUtPnBpeGVsTWV0
cmljKFFTdHlsZTo6UE1fSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7CisgICAgICAgIGNo
ZWNrQm94V2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgc2l6
ZSA9IFFTaXplKGNoZWNrQm94V2lkdGgsIGNoZWNrQm94V2lkdGgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBSYWRpb1BhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxl
T3B0aW9uOworICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxs
OworICAgICAgICBpbnQgcmFkaW9XaWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBN
X0V4Y2x1c2l2ZUluZGljYXRvcldpZHRoLCAmc3R5bGVPcHRpb24pOworICAgICAgICByYWRpb1dp
ZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIHNpemUgPSBRU2l6
ZShyYWRpb1dpZHRoLCByYWRpb1dpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25QYXJ0OiB7CisgICAgICAgIFFTdHls
ZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXpl
KFF0OjpUZXh0U2hvd01uZW1vbmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOworICAgICAg
ICBRU2l6ZSBwdXNoQnV0dG9uU2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6
Q1RfUHVzaEJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIGNvbnRlbnRTaXplLCAwKTsKKyAgICAgICAgc3R5
bGVPcHRpb24ucmVjdCA9IFFSZWN0KDAsIDAsIHB1c2hCdXR0b25TaXplLndpZHRoKCksIHB1c2hC
dXR0b25TaXplLmhlaWdodCgpKTsKKyAgICAgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5z
dWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7
CisKKyAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHN1cHBvcnRzIGxheW91dCByZWN0cyB3ZSB1c2Ug
dGhhdCwgYW5kICBjb21wZW5zYXRlIGFjY29yZGluZ2x5CisgICAgICAgIC8vIGluIHBhaW50QnV0
dG9uKCkgYmVsb3cuCisgICAgICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkKKyAgICAgICAg
ICAgIHNpemUuc2V0SGVpZ2h0KGxheW91dFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzaXplLnNldEhlaWdodChwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7CisKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTWVudWxpc3RQYXJ0OiB7CisgICAgICAgIFFT
dHlsZU9wdGlvbkNvbWJvQm94IHN0eWxlT3B0aW9uOworICAgICAgICBzdHlsZU9wdGlvbi5zdGF0
ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFN
YXgoZm0ubGluZVNwYWNpbmcoKSwgMTQpICsgMjsKKyAgICAgICAgUVNpemUgbWVudUxpc3RTaXpl
ID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9Db21ib0JveCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9u
LCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0KSwgMCk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KG1l
bnVMaXN0U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2Vk
LCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQu
CisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6
ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChz
aXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhl
aWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKworCisKK3ZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIERpdGNoIHRo
ZSBib3JkZXIuCisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyNpZmRlZiBRX1dTX01BQwor
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KSB7CisgICAgICAg
IC8vIFRoZSBNYWMgcG9ydHMgaWdub3JlIHRoZSBzcGVjaWZpZWQgaGVpZ2h0IGZvciA8aW5wdXQg
dHlwZT0iYnV0dG9uIj4gZWxlbWVudHMKKyAgICAgICAgLy8gdW5sZXNzIGEgYm9yZGVyIGFuZC9v
ciBiYWNrZ3JvdW5kIENTUyBwcm9wZXJ0eSBpcyBhbHNvIHNwZWNpZmllZC4KKyAgICAgICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIH0KKyNlbmRpZgorCisgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisKKyNpZmRlZiBRX1dT
X01BQyAvLyBVc2UgZml4ZWQgZm9udCBzaXplIGFuZCBmYW1pbHkgb24gTWFjIChsaWtlIFNhZmFy
aSBkb2VzKQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG1fYnV0dG9uRm9u
dFBpeGVsU2l6ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShtX2J1dHRv
bkZvbnRQaXhlbFNpemUpOworI2Vsc2UKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVk
U2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CisjZW5kaWYKKworICAgIEZvbnRGYW1pbHkgZm9udEZh
bWlseTsKKyAgICBmb250RmFtaWx5LnNldEZhbWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoZm9udEZhbWlseSk7CisgICAgc3R5bGUtPnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIHN0eWxlLT5mb250KCkudXBkYXRl
KHNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7CisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHNldEJ1dHRvblNpemUoc3R5bGUp
OworICAgIHNldEJ1dHRvblBhZGRpbmcoc3R5bGUpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0
eWxlOjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBR
U3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9TbWFsbDsKKworICAgIC8vIEZha2UgYSBidXR0b24gcmVjdCBoZXJlLCBz
aW5jZSB3ZSdyZSBqdXN0IGNvbXB1dGluZyBkZWx0YXMKKyAgICBRUmVjdCBvcmlnaW5hbFJlY3Qg
PSBRUmVjdCgwLCAwLCAxMDAsIDMwKTsKKyAgICBzdHlsZU9wdGlvbi5yZWN0ID0gb3JpZ2luYWxS
ZWN0OworCisgICAgLy8gRGVmYXVsdCBwYWRkaW5nIGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFy
Z2luIHBpeGVsIG1ldHJpYworICAgIGludCBidXR0b25NYXJnaW4gPSBxU3R5bGUoKS0+cGl4ZWxN
ZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7CisgICAgaW50
IHBhZGRpbmdMZWZ0ID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRkaW5nUmlnaHQgPSBidXR0
b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdUb3AgPSBidXR0b25NYXJnaW47CisgICAgaW50IHBh
ZGRpbmdCb3R0b20gPSBidXR0b25NYXJnaW47CisKKyAgICAvLyBUaGVuIGNoZWNrIGlmIHRoZSBz
dHlsZSB1c2VzIGxheW91dCBtYXJnaW5zCisgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHFTdHlsZSgp
LT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAw
KTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3QgY29udGVu
dHNSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkNv
bnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKKyAgICAgICAgcGFkZGluZ0xlZnQgPSBjb250ZW50c1Jl
Y3QubGVmdCgpIC0gbGF5b3V0UmVjdC5sZWZ0KCk7CisgICAgICAgIHBhZGRpbmdSaWdodCA9IGxh
eW91dFJlY3QucmlnaHQoKSAtIGNvbnRlbnRzUmVjdC5yaWdodCgpOworICAgICAgICBwYWRkaW5n
VG9wID0gY29udGVudHNSZWN0LnRvcCgpIC0gbGF5b3V0UmVjdC50b3AoKTsKKworICAgICAgICAv
LyBDYW4ndCB1c2UgdGhpcyByaWdodCBub3cgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSBiYXNl
bGluZSB0byBjb21wZW5zYXRlCisgICAgICAgIC8vIHBhZGRpbmdCb3R0b20gPSBsYXlvdXRSZWN0
LmJvdHRvbSgpIC0gY29udGVudHNSZWN0LmJvdHRvbSgpOworICAgIH0KKyAgICBzdHlsZS0+c2V0
UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQ
YWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFk
ZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVFTdHlsZTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhp
cywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0
LCBvcHRpb24pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKyAgICBvcHRpb24uc3RhdGUgfD0gUVN0
eWxlOjpTdGF0ZV9TbWFsbDsKKworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFs
aXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOworICAgIGlmIChhcHBlYXJhbmNlID09
IFB1c2hCdXR0b25QYXJ0IHx8IGFwcGVhcmFuY2UgPT0gQnV0dG9uUGFydCkgeworICAgICAgICBv
cHRpb24ucmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KG9wdGlvbi5yZWN0KTsKKyAgICAgICAgcC5k
cmF3Q29udHJvbChRU3R5bGU6OkNFX1B1c2hCdXR0b24sIG9wdGlvbik7CisgICAgfSBlbHNlIGlm
IChhcHBlYXJhbmNlID09IFJhZGlvUGFydCkKKyAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6
Q0VfUmFkaW9CdXR0b24sIG9wdGlvbik7CisgICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVj
a2JveFBhcnQpCisgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX0NoZWNrQm94LCBvcHRp
b24pOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpw
YWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKKyAgICBp
ZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFFTdHlsZU9wdGlv
bkZyYW1lVjIgcGFuZWw7CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBwYW5lbCk7Cisg
ICAgcGFuZWwucmVjdCA9IHI7CisgICAgcGFuZWwubGluZVdpZHRoID0gZmluZEZyYW1lTGluZVdp
ZHRoKHFTdHlsZSgpKTsKKyAgICBwYW5lbC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsK
KyAgICBwYW5lbC5mZWF0dXJlcyA9IFFTdHlsZU9wdGlvbkZyYW1lVjI6Ok5vbmU7CisKKyAgICAv
LyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0ZXh0IGZpZWxkCisgICAgQ29udHJv
bFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKHBhbmVsLCBv
KTsKKyAgICBpZiAoYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0CisgICAgICAgICYmIGFwcGVh
cmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gVGV4dEFy
ZWFQYXJ0CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgorICAgIHAuZHJh
d1ByaW1pdGl2ZShRU3R5bGU6OlBFX1BhbmVsTGluZUVkaXQsIHBhbmVsKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFRleHRBcmVhU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK3sKKyAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGVsZW1lbnQpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRBcmVh
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZVFTdHlsZTo6c2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sK
KyAgICBjb25zdCBpbnQgcGFkZGluZ0xlZnQgPSA0OworICAgIGNvbnN0IGludCBwYWRkaW5nUmln
aHQgPSBzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50
KCkgPyA1IDogODsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xl
ZnQsIEZpeGVkKSk7CisKKyAgICBRU3R5bGVPcHRpb25Db21ib0JveCBvcHQ7CisgICAgaW50IHcg
PSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25JY29uU2l6ZSwgJm9wdCwg
MCk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywg
Rml4ZWQpKTsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOwor
ICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgyLCBGaXhlZCkpOworfQorCisKK2Jv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0
eWxlIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBRU3R5bGVPcHRpb25Db21ib0JveCBvcHQ7CisgICAgaW5pdFN0eWxlT3B0aW9u
KHAud2lkZ2V0LCBvcHQpOworICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdCwg
byk7CisKKyAgICBJbnRSZWN0IHJlY3QgPSByOworCisjaWYgZGVmaW5lZChRX1dTX01BQykgJiYg
IWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHlsZSBtYWtlcyB0aGUgY29t
Ym8gYm94ZXMgYSBsaXR0bGUgYml0IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBmb2N1
cyByZWN0LgorICAgIC8vIEJlY2F1c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0b24gaXMgZHJhd24g
YXQgYSBwb2ludCB0byB0aGUgbGVmdCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0IHRvIGJlIGFuZCBt
YXkgZW5kIHVwCisgICAgLy8gb3ZlcmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBUaGlzIHdpbGwgZm9y
Y2UgUU1hY1N0eWxlIHRvIGRyYXcgdGhlIGNvbWJvIGJveCB3aXRoIHRoZSBleHBlY3RlZCB3aWR0
aC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKQorICAgICAgICBy
ZWN0LmluZmxhdGVYKDMpOworI2VuZGlmCisKKyAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHJl
Y3QubG9jYXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKyAgICBv
cHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQucmVjdC5zZXRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gs
IG9wdCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIC8vIFdPUktBUk9VTkQgYmVjYXVzZSBodG1sLmNzcyBzcGVj
aWZpZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBp
dCBoZXJlCisgICAgLy8gc2VlIGFsc28gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgzOTkKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKKworICAgIFJlbmRl
clRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHls
ZSBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggb3B0aW9uOworICAgIGluaXRTdHlsZU9wdGlv
bihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhv
cHRpb24sIG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKworICAgIC8vIGZvciBkcmF3aW5nIHRo
ZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFsbGJhY2sgc3R5bGUKKyAgICBw
LnN0eWxlID0gZmFsbGJhY2tTdHlsZSgpOworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHls
ZTo6U0NfQ29tYm9Cb3hBcnJvdzsKKyAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkND
X0NvbWJvQm94LCBvcHRpb24pOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5BQkxF
KFBST0dSRVNTX1RBRykKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7
CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisgICAgICAgIHJldHVy
biAwOworCisgICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247CisgICAgb3B0aW9u
LnJlY3Quc2V0U2l6ZShyZW5kZXJQcm9ncmVzcy0+c2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogVW50
aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZp
eGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUg
cHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAob3B0aW9uLnJlY3Qud2lkdGgoKSAvIHFTdHlsZSgp
LT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbikp
ICogYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihyZW5kZXJQcm9ncmVzcyk7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlm
ICghby0+aXNQcm9ncmVzcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0eWxlUGFp
bnRlclFTdHlsZSBwKHRoaXMsIHBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247CisgICAg
aW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOworICAgIGluaXRpYWxpemVDb21tb25R
U3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisKKyAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJv
Z3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKyAgICBv
cHRpb24ubWF4aW11bSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgb3B0
aW9uLm1pbmltdW0gPSAwOworICAgIG9wdGlvbi5wcm9ncmVzcyA9IChyZW5kZXJQcm9ncmVzcy0+
cG9zaXRpb24oKSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworCisgICAgY29u
c3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xh
dGUodG9wTGVmdCk7CisgICAgb3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisgICAg
b3B0aW9uLnJlY3Quc2V0U2l6ZShyLnNpemUoKSk7CisKKyAgICBpZiAob3B0aW9uLnByb2dyZXNz
IDwgMCkgeworICAgICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9r
aWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0
ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAg
cC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyR3Jvb3ZlLCBvcHRpb24pOworICAg
ICAgICBpbnQgY2h1bmtXaWR0aCA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1By
b2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7CisgICAgICAgIFFDb2xvciBjb2xvciA9IChv
cHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkp
ID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hs
aWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0KTsKKyAgICAg
ICAgaWYgKHJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAg
ICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdGlvbi5yZWN0LnJpZ2h0KCkgLSBjaHVua1dp
ZHRoICAtIHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJlY3Qu
d2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChyZW5kZXJQcm9ncmVz
cy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lk
dGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIHAu
ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhciwgb3B0aW9uKTsKKworICAgIHAucGFp
bnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRp
ZgorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRo
aXMsIHBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOworICAgIHAucGFpbnRlci0+
dHJhbnNsYXRlKHRvcExlZnQpOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKKyAg
ICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRy
b2xzID0gUVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5j
ZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgb3B0aW9u
LnJlY3QgPSByOworICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworICAgIGlm
IChhcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAgICAgICAgb3B0aW9uLm9yaWVu
dGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgIG9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKworICAgIC8vIHNvbWUgc3R5bGVz
IG5lZWQgdGhpcyB0byBzaG93IGEgaGlnaGxpZ2h0IG9uIG9uZSBzaWRlIG9mIHRoZSBncm9vdmUK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50
KCk7CisgICAgaWYgKHNsaWRlcikgeworICAgICAgICBvcHRpb24udXBzaWRlRG93biA9IChhcHBl
YXJhbmNlID09IFNsaWRlckhvcml6b250YWxQYXJ0KSAmJiAhby0+c3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpOworICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIGFzIGEgbXVsdGlwbGll
ciBpbiBjYXNlIHRoZSBzbGlkZXIgdmFsdWVzIGFyZSA8PSAxCisgICAgICAgIGNvbnN0IGludCB3
aWR0aCA9IHIud2lkdGgoKSA+IDAgPyByLndpZHRoKCkgOiAxMDA7CisgICAgICAgIG9wdGlvbi5t
YXhpbXVtID0gc2xpZGVyLT5tYXhpbXVtKCkgKiB3aWR0aDsKKyAgICAgICAgb3B0aW9uLm1pbmlt
dW0gPSBzbGlkZXItPm1pbmltdW0oKSAqIHdpZHRoOworICAgICAgICBpZiAoIW9wdGlvbi51cHNp
ZGVEb3duKQorICAgICAgICAgICAgb3B0aW9uLnNsaWRlclBvc2l0aW9uID0gc2xpZGVyLT52YWx1
ZUFzTnVtYmVyKCkgKiB3aWR0aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0aW9uLnNs
aWRlclBvc2l0aW9uID0gb3B0aW9uLm1pbmltdW0gKyBvcHRpb24ubWF4aW11bSAtIHNsaWRlci0+
dmFsdWVBc051bWJlcigpICogd2lkdGg7CisgICAgfQorCisgICAgcC5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7CisKKyAgICBpZiAob3B0aW9uLnN0YXRlICYg
UVN0eWxlOjpTdGF0ZV9IYXNGb2N1cykgeworICAgICAgICBRU3R5bGVPcHRpb25Gb2N1c1JlY3Qg
Zm9jdXNPcHRpb247CisgICAgICAgIGZvY3VzT3B0aW9uLnJlY3QgPSByOworICAgICAgICBwLmRy
YXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgZm9jdXNPcHRpb24pOworICAg
IH0KKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAorewor
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVR
U3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOworICAgIGlmICghcC5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRvcExl
ZnQgPSByLmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisK
KyAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOworICAgIGluaXRTdHlsZU9wdGlvbihwLndp
ZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRl
ckhhbmRsZTsKKyAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFT
dHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7CisgICAgb3B0aW9u
LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisgICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0
aWNhbDsKKyAgICBpZiAoaXNQcmVzc2VkKG8pKSB7CisgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJD
b250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOworICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgfQorCisgICAgcC5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUo
LXRvcExlZnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHls
ZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRo
ZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7Cisg
ICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFT
dHlsZTo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJl
bmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50KiBlKSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGks
IHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxl
KiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywg
cGksIHIpOworfQorCisjaWZuZGVmIFFUX05PX1NQSU5CT1gKKworYm9vbCBSZW5kZXJUaGVtZVFT
dHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBTdHlsZVBhaW50ZXJR
U3R5bGUgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsKKyAgICBpbml0
U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0g
UVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOworICAgIGlmICgh
aXNSZWFkT25seUNvbnRyb2wobykpIHsKKyAgICAgICAgaWYgKGlzRW5hYmxlZChvKSkKKyAgICAg
ICAgICAgIG9wdGlvbi5zdGVwRW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJs
ZWQgfCBRQWJzdHJhY3RTcGluQm94OjpTdGVwRG93bkVuYWJsZWQ7CisgICAgICAgIGlmIChpc1By
ZXNzZWQobykpIHsKKyAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1
bmtlbjsKKyAgICAgICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQorICAg
ICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJv
eFVwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJD
b250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247CisgICAgICAgIH0KKyAgICB9CisgICAg
Ly8gUmVuZGVyIHRoZSBzcGluIGJ1dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCisg
ICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0OjpSaWdodFRvTGVmdDsKKworICAgIEludFJlY3QgYnV0
dG9uUmVjdCA9IHJlY3Q7CisgICAgLy8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBs
aXR0bGUgYml0IHdpdGhpbiB0aGUgZWRpdG9yIGZyYW1lLgorICAgIGludCBpbmZsYXRlWCA9IC0y
OworICAgIGludCBpbmZsYXRlWSA9IC0yOworI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZp
bmVkKFFUX05PX1NUWUxFX01BQykKKyAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUg
YXF1YSBidXR0b25zIGZsdXNoIHRvIHRoZSByaWdodC4KKyAgICAvLyBUaGlzIHdpbGwgbW92ZSB0
aGVtIG1vcmUgd2l0aGluIHRoZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKKyAgICAv
LyBDaHJvbWl1bSBsb29rICYgZmVlbC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+
KHAuc3R5bGUpKSB7CisgICAgICAgIGluZmxhdGVYID0gLTQ7CisgICAgICAgIC8vIFJlbmRlciBt
aW5pIGFxdWEgc3BpbiBidXR0b25zIGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCisg
ICAgICAgIC8vIHRoZSBlZGl0b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4KKyAgICAgICAgb3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKKyAgICB9CisjZW5kaWYKKyNpZiAhZGVmaW5l
ZChRVF9OT19TVFlMRV9QTEFTVElRVUUpCisgICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJl
c3Qgd2hlbiB0aGUgc3BpbiBidXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2Uu
CisgICAgaWYgKHFvYmplY3RfY2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgeworICAg
ICAgICBpbmZsYXRlWCA9IDA7CisgICAgICAgIGluZmxhdGVZID0gMDsKKyAgICB9CisjZW5kaWYK
KworICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOworICAgIGJ1dHRvblJlY3QuaW5m
bGF0ZVkoaW5mbGF0ZVkpOworICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKKworICAgIHAu
ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisjZW5kaWYKKworQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVRU3R5bGU6Omlu
aXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0Cit7CisgICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1cywgbm8gbW91
c2Ugb3ZlcgorICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMgfCBR
U3R5bGU6OlN0YXRlX01vdXNlT3Zlcik7CisKKyAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykp
CisgICAgICAgIC8vIFJlYWRvbmx5IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRzLgorICAgICAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SZWFkT25seTsKKworICAgIG9wdGlvbi5k
aXJlY3Rpb24gPSBRdDo6TGVmdFRvUmlnaHQ7CisKKyAgICBpZiAoaXNIb3ZlcmVkKG8pKQorICAg
ICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7CisKKyAgICBzZXRQ
YWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7CisKKyAgICBpZiAo
IWlzRW5hYmxlZChvKSkgeworICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJyZW50Q29sb3JH
cm91cChRUGFsZXR0ZTo6RGlzYWJsZWQpOworICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHls
ZTo6U3RhdGVfRW5hYmxlZDsKKyAgICB9CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5z
dHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBOb0NvbnRyb2xQYXJ0Owor
CisgICAgQ29udHJvbFBhcnQgcmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBpZiAo
c3VwcG9ydHNGb2N1cyhyZXN1bHQpICYmIGlzRm9jdXNlZChvKSkgeworICAgICAgICBvcHRpb24u
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZTsKKyAgICB9CisKKyAgICBpZiAoc3R5
bGUtPmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlJUTCkKKyAgICAgICAgb3B0aW9uLmRpcmVjdGlv
biA9IFF0OjpSaWdodFRvTGVmdDsKKworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBQ
dXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0
b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgorICAgIGNhc2UgTGlzdEl0ZW1QYXJ0
OgorICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogewor
ICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfU3Vua2VuOworICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRv
blBhcnQgfHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9SYWlzZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFJhZGlvUGFydDoKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgb3B0aW9uLnN0YXRl
IHw9IChpc0NoZWNrZWQobykgPyBRU3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpTdGF0ZV9PZmYp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5
bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7Cisg
ICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYg
KHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KSB7CisgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAg
ICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICAgICAgb3B0
aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworCisgICAgICAgIFFTdHlsZSogcXN0eWxl
ID0gcVN0eWxlKCk7CisKKyAgICAgICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMo
UVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZvcHRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNz
ID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRoaWNrbmVzcywgJm9wdGlv
bik7CisgICAgICAgIGlmIChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7Cisg
ICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBG
aXhlZCkpOworICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tuZXNzLCBG
aXhlZCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIFJlbmRlclRoZW1lUXQ6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhl
bWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVR
U3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNjAxYWMwN2NjMWM3MTljY2RkYTMzMDUxNmQ5ZTg5N2QwMGFj
NzlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9S
ZW5kZXJUaGVtZVFTdHlsZS5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdl
YkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKKyNk
ZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAorCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgor
CisjaW5jbHVkZSA8UVN0eWxlPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKKyNpZm5kZWYgUVRfTk9f
TElORUVESVQKK2NsYXNzIFFMaW5lRWRpdDsKKyNlbmRpZgorY2xhc3MgUVBhaW50ZXI7CitjbGFz
cyBRV2lkZ2V0OworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlOworCitjbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1
YmxpYyBSZW5kZXJUaGVtZVF0IHsKK3ByaXZhdGU6CisgICAgUmVuZGVyVGhlbWVRU3R5bGUoUGFn
ZSopOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lUVN0eWxlKCk7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAg
IFFTdHlsZSogcVN0eWxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RU
ZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyNpZiBFTkFC
TEUoUFJPR1JFU1NfVEFHKQorICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmlt
YXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0
aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworI2lmbmRlZiBRVF9OT19TUElOQk9YCisgICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gZ2V0U3R5bGVQYWludGVyKGNv
bnN0IFBhaW50SW5mbyYpOworCisgICAgdmlydHVhbCBRUmVjdCBpbmZsYXRlQnV0dG9uUmVjdChj
b25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
b3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDb250cm9s
UGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mLCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKKworICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSop
IGNvbnN0OworCisgICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqKSBjb25zdDsKKwor
ICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNvbnN0OworCisjaWZkZWYgUV9PU19NQUMKKyAg
ICBpbnQgbV9idXR0b25Gb250UGl4ZWxTaXplOworI2VuZGlmCisKKyAgICBRU3R5bGUqIG1fZmFs
bGJhY2tTdHlsZTsKKyNpZm5kZWYgUVRfTk9fTElORUVESVQKKyAgICBtdXRhYmxlIFFMaW5lRWRp
dCogbV9saW5lRWRpdDsKKyNlbmRpZgorfTsKKworY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlIDog
cHVibGljIFN0eWxlUGFpbnRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVy
UVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJbmZvJik7CisgICAgZXhwbGlj
aXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiwgR3JhcGhpY3NDb250
ZXh0Kik7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBzdHlsZSAmJiBTdHls
ZVBhaW50ZXI6OmlzVmFsaWQoKTsgfQorCisgICAgUVdpZGdldCogd2lkZ2V0OworICAgIFFTdHls
ZSogc3R5bGU7CisKKyAgICB2b2lkIGRyYXdQcmltaXRpdmUoUVN0eWxlOjpQcmltaXRpdmVFbGVt
ZW50IHBlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKKyAgICB7IHN0eWxlLT5kcmF3UHJpbWl0
aXZlKHBlLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9CisgICAgdm9pZCBkcmF3Q29udHJvbChR
U3R5bGU6OkNvbnRyb2xFbGVtZW50IGNlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKKyAgICB7
IHN0eWxlLT5kcmF3Q29udHJvbChjZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQorICAgIHZv
aWQgZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q29tcGxleENvbnRyb2wgY2MsIGNvbnN0IFFT
dHlsZU9wdGlvbkNvbXBsZXgmIG9wdCkKKyAgICB7IHN0eWxlLT5kcmF3Q29tcGxleENvbnRyb2wo
Y2MsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXQo
R3JhcGhpY3NDb250ZXh0KiwgUVN0eWxlKik7CisKKyAgICBRX0RJU0FCTEVfQ09QWShTdHlsZVBh
aW50ZXJRU3R5bGUpCit9OworCit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZVFTdHlsZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1l
UVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzODI4NGViODg4ZGIxOTMyZTY3ZDAyYzU4NTgwZGYx
OGIwYmU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLiA8aW5m
b0BzdGFpa29zLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lUXRNb2JpbGUuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisj
aW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaWZkZWYg
UV9XU19NQUMKKyNpbmNsdWRlIDxRTWFjU3R5bGU+CisjZW5kaWYKKyNpbmNsdWRlIDxRTWVudT4K
KyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRU3R5bGU+CisjaW5jbHVkZSA8UVN0eWxl
T3B0aW9uU2xpZGVyPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1lUVN0
eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKQoreworfQorCitzdGF0aWMgUVN0eWxlOjpTdWJD
b250cm9sIHNjUGFydChjb25zdCBTY3JvbGxiYXJQYXJ0JiBwYXJ0KQoreworICAgIHN3aXRjaCAo
cGFydCkgeworICAgIGNhc2UgTm9QYXJ0OgorICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19Ob25l
OworICAgIGNhc2UgQmFja0J1dHRvblN0YXJ0UGFydDoKKyAgICBjYXNlIEJhY2tCdXR0b25FbmRQ
YXJ0OgorICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3JvbGxCYXJTdWJMaW5lOworICAgIGNh
c2UgQmFja1RyYWNrUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3Vi
UGFnZTsKKyAgICBjYXNlIFRodW1iUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0NfU2Ny
b2xsQmFyU2xpZGVyOworICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKKyAgICAgICAgcmV0dXJu
IFFTdHlsZTo6U0NfU2Nyb2xsQmFyQWRkUGFnZTsKKyAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFy
dFBhcnQ6CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uRW5kUGFydDoKKyAgICAgICAgcmV0dXJuIFFT
dHlsZTo6U0NfU2Nyb2xsQmFyQWRkTGluZTsKKyAgICB9CisKKyAgICByZXR1cm4gUVN0eWxlOjpT
Q19Ob25lOworfQorCitzdGF0aWMgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0KGNvbnN0IFFT
dHlsZTo6U3ViQ29udHJvbCYgc2MpCit7CisgICAgc3dpdGNoIChzYykgeworICAgIGNhc2UgUVN0
eWxlOjpTQ19Ob25lOgorICAgICAgICByZXR1cm4gTm9QYXJ0OworICAgIGNhc2UgUVN0eWxlOjpT
Q19TY3JvbGxCYXJTdWJMaW5lOgorICAgICAgICByZXR1cm4gQmFja0J1dHRvblN0YXJ0UGFydDsK
KyAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViUGFnZToKKyAgICAgICAgcmV0dXJuIEJh
Y2tUcmFja1BhcnQ7CisgICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRlcjoKKyAgICAg
ICAgcmV0dXJuIFRodW1iUGFydDsKKyAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyQWRkUGFn
ZToKKyAgICAgICAgcmV0dXJuIEZvcndhcmRUcmFja1BhcnQ7CisgICAgY2FzZSBRU3R5bGU6OlND
X1Njcm9sbEJhckFkZExpbmU6CisgICAgICAgIHJldHVybiBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
OworICAgIH0KKyAgICByZXR1cm4gTm9QYXJ0OworfQorCitzdGF0aWMgUVN0eWxlT3B0aW9uU2xp
ZGVyKiBzdHlsZU9wdGlvblNsaWRlcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBR
V2lkZ2V0KiB3aWRnZXQgPSAwKQoreworICAgIHN0YXRpYyBRU3R5bGVPcHRpb25TbGlkZXIgb3B0
OworICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdC5pbml0RnJvbSh3aWRnZXQpOworICAgIGVs
c2UKKyAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfQWN0aXZlOworCisgICAgb3B0
LnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hhc0ZvY3VzOworCisgICAgb3B0LnJlY3QgPSBzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpOworICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKKyAgICAg
ICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKKyAgICBpZiAoc2Nyb2xsYmFy
LT5jb250cm9sU2l6ZSgpICE9IFJlZ3VsYXJTY3JvbGxiYXIpCisgICAgICAgIG9wdC5zdGF0ZSB8
PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgb3B0Lm9yaWVudGF0aW9uID0gKHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyBRdDo6VmVydGljYWwgOiBRdDo6
SG9yaXpvbnRhbDsKKworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikKKyAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSG9yaXpv
bnRhbDsKKyAgICBlbHNlCisgICAgICAgIG9wdC5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9Ib3Jp
em9udGFsOworCisgICAgb3B0LnNsaWRlclZhbHVlID0gc2Nyb2xsYmFyLT52YWx1ZSgpOworICAg
IG9wdC5zbGlkZXJQb3NpdGlvbiA9IG9wdC5zbGlkZXJWYWx1ZTsKKyAgICBvcHQucGFnZVN0ZXAg
PSBzY3JvbGxiYXItPnBhZ2VTdGVwKCk7CisgICAgb3B0LnNpbmdsZVN0ZXAgPSBzY3JvbGxiYXIt
PmxpbmVTdGVwKCk7CisgICAgb3B0Lm1pbmltdW0gPSAwOworICAgIG9wdC5tYXhpbXVtID0gcU1h
eCgwLCBzY3JvbGxiYXItPm1heGltdW0oKSk7CisgICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFy
dCA9IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKTsKKyAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQ
YXJ0ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpOworICAgIGlmIChwcmVzc2VkUGFydCAhPSBO
b1BhcnQpIHsKKyAgICAgICAgb3B0LmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQYXJ0KHNjcm9sbGJh
ci0+cHJlc3NlZFBhcnQoKSk7CisgICAgICAgIGlmIChwcmVzc2VkUGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQKKyAgICAg
ICAgICAgIHx8IHByZXNzZWRQYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHByZXNzZWRQYXJ0
ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0CisgICAgICAgICAgICB8fCBwcmVzc2VkUGFydCA9PSBU
aHVtYlBhcnQpCisgICAgICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47
CisgICAgfSBlbHNlCisgICAgICAgIG9wdC5hY3RpdmVTdWJDb250cm9scyA9IHNjUGFydChob3Zl
cmVkUGFydCk7CisgICAgaWYgKGhvdmVyZWRQYXJ0ICE9IE5vUGFydCkKKyAgICAgICAgb3B0LnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyOworICAgIHJldHVybiAmb3B0OworfQorCiti
b29sIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0NvbnRyb2xU
aW50cygpKSB7CisgICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChkYW1hZ2VSZWN0KTsK
KyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAo
dGhpcywgZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNhdmUoKTsKKyAgICBRU3R5bGVPcHRpb25TbGlk
ZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhciwgcC53aWRnZXQpOworCisgICAg
cC5wYWludGVyLT5zZXRDbGlwUmVjdChvcHQtPnJlY3QuaW50ZXJzZWN0ZWQoZGFtYWdlUmVjdCks
IFF0OjpJbnRlcnNlY3RDbGlwKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgLy8gRklYTUU6IFdl
IGFsc28gbmVlZCB0byBjaGVjayB0aGUgd2lkZ2V0IHN0eWxlIGJ1dCB0b2RheSBTY3JvbGxiYXJU
aGVtZSBpcyBub3QgYXdhcmUgb2YgdGhlIHBhZ2Ugc28gd2UKKyAgICAvLyBjYW4ndCBnZXQgdGhl
IHdpZGdldC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHN0eWxlKCkpKQorICAg
ICAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgKm9wdCk7Cisg
ICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICAvLyBUaGUgUVN0eWxlIGV4cGVjdHMgdGhl
IGJhY2tncm91bmQgdG8gYmUgYWxyZWFkeSBmaWxsZWQuCisgICAgICAgIHAucGFpbnRlci0+Zmls
bFJlY3Qob3B0LT5yZWN0LCBvcHQtPnBhbGV0dGUuYmFja2dyb3VuZCgpKTsKKworICAgICAgICBj
b25zdCBRUG9pbnQgdG9wTGVmdCA9IG9wdC0+cmVjdC50b3BMZWZ0KCk7CisgICAgICAgIHAucGFp
bnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgICAgICBvcHQtPnJlY3QubW92ZVRvKFFQb2lu
dCgwLCAwKSk7CisgICAgICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2Nyb2xs
QmFyLCAqb3B0KTsKKyAgICAgICAgb3B0LT5yZWN0Lm1vdmVUbyh0b3BMZWZ0KTsKKyAgICB9Cisg
ICAgcC5wYWludGVyLT5yZXN0b3JlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU2Nyb2xs
YmFyUGFydCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVu
dCogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sKKyAgICBRU3R5
bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhcik7CisgICAg
Y29uc3QgUVBvaW50IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93
KGV2dC5wb3NpdGlvbigpKTsKKyAgICBvcHQtPnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Cisg
ICAgUVN0eWxlOjpTdWJDb250cm9sIHNjID0gc3R5bGUoKS0+aGl0VGVzdENvbXBsZXhDb250cm9s
KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCBvcHQsIHBvcywgMCk7CisgICAgcmV0dXJuIHNjcm9sbGJh
clBhcnQoc2MpOworfQorCitib29sIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpzaG91bGRDZW50ZXJP
blRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dnQpCit7CisgICAgLy8gTWlkZGxlIGNsaWNrIGNlbnRlcnMgc2xpZGVyIHRodW1iIChpZiBzdXBw
b3J0ZWQpLgorICAgIHJldHVybiBzdHlsZSgpLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9TY3JvbGxC
YXJfTWlkZGxlQ2xpY2tBYnNvbHV0ZVBvc2l0aW9uKSAmJiBldnQuYnV0dG9uKCkgPT0gTWlkZGxl
QnV0dG9uOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjppbnZhbGlkYXRlUGFydChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0KQoreworICAgIC8v
IEZJWE1FOiBEbyBtb3JlIHByZWNpc2UgaW52YWxpZGF0aW9uLgorICAgIHNjcm9sbGJhci0+aW52
YWxpZGF0ZSgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnNjcm9sbGJhclRoaWNr
bmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sKKyAgICBRU3R5bGVPcHRp
b25TbGlkZXIgbzsKKyAgICBvLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIG8uc3Rh
dGUgJj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKKyAgICBpZiAoY29udHJvbFNpemUgIT0g
UmVndWxhclNjcm9sbGJhcikKKyAgICAgICAgby5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7
CisgICAgcmV0dXJuIHN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0
ZW50LCAmbywgMCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJQb3NpdGlv
bihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIGlmIChzY3JvbGxiYXIt
PmVuYWJsZWQoKSkgeworICAgICAgICBmbG9hdCBwb3MgPSAoZmxvYXQpc2Nyb2xsYmFyLT5jdXJy
ZW50UG9zKCkgKiAodHJhY2tMZW5ndGgoc2Nyb2xsYmFyKSAtIHRodW1iTGVuZ3RoKHNjcm9sbGJh
cikpIC8gc2Nyb2xsYmFyLT5tYXhpbXVtKCk7CisgICAgICAgIHJldHVybiAocG9zIDwgMSAmJiBw
b3MgPiAwKSA/IDEgOiBwb3M7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgU2Nyb2xs
YmFyVGhlbWVRU3R5bGU6OnRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxi
YXIpCit7CisgICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNsaWRlcihz
Y3JvbGxiYXIpOworICAgIEludFJlY3QgdGh1bWIgPSBzdHlsZSgpLT5zdWJDb250cm9sUmVjdChR
U3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRlciwgMCk7
CisgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8gdGh1bWIud2lkdGgoKSA6IHRodW1iLmhlaWdodCgpOworfQorCitpbnQgU2Nyb2xsYmFy
VGhlbWVRU3R5bGU6OnRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
cikKK3sKKyAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNj
cm9sbGJhcik7CisgICAgSW50UmVjdCB0cmFjayA9IHN0eWxlKCktPnN1YkNvbnRyb2xSZWN0KFFT
dHlsZTo6Q0NfU2Nyb2xsQmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlLCAwKTsK
KyAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIgPyB0cmFjay54KCkgLSBzY3JvbGxiYXItPngoKSA6IHRyYWNrLnkoKSAtIHNjcm9sbGJhci0+
eSgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRyYWNrTGVuZ3RoKFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQg
PSBzdHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOworICAgIEludFJlY3QgdHJhY2sgPSBzdHls
ZSgpLT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlND
X1Njcm9sbEJhckdyb292ZSwgMCk7CisgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdHJhY2sud2lkdGgoKSA6IHRyYWNrLmhlaWdodCgp
OworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcihTY3Jv
bGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGNvbnRleHQpOworICAgIGlmICghcC5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFTdHlsZU9wdGlvbiBvcHRpb247Cisg
ICAgb3B0aW9uLnJlY3QgPSByZWN0OworICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX1Bh
bmVsU2Nyb2xsQXJlYUNvcm5lciwgb3B0aW9uKTsKK30KKworUVN0eWxlKiBTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6c3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBRQXBwbGljYXRpb246OnN0eWxl
KCk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0ZmNhNTRmZGQ4MWM1MDc1Nzg3
ODk0OTcwNTM3Y2UxODcwZjNlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNj
cm9sbGJhclRoZW1lUVN0eWxlX2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVRU3R5bGVfaAorCisj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworI2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+
CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworUVRfRU5EX05BTUVTUEFDRQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlIDogcHVi
bGljIFNjcm9sbGJhclRoZW1lIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVt
ZVFTdHlsZSgpOworCisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKKworICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFy
dCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVt
ZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7CisK
KyAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Cisg
ICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2
aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmly
dHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKworICAgIHZpcnR1
YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJT
Y3JvbGxiYXIpOworCisgICAgUVN0eWxlKiBzdHlsZSgpIGNvbnN0OworfTsKKworfQorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvYXBpLnByaSBiL1NvdXJjZS9hcGkucHJpCmluZGV4IDljYTM4
NmYyZjM5ZTg1NGZjZjAyZmJiNTU5MmIzYmIwNDdmMWI0YjQuLmUzNTMxMTFiNDJhMjQxYTMwZGM0
MDJhMjcwNGVhOTg2ZDBjYThlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9hcGkucHJpCisrKyBiL1Nv
dXJjZS9hcGkucHJpCkBAIC01OSw2ICs1OSw4IEBAIFNPVVJDRVMgKz0gXAogICAgICQkUFdEL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuY3BwIFwKICAgICAkJFBXRC9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5jcHAgXAorICAgICQkUFdEL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAgXAorICAgICQkUFdEL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgICQk
UFdEL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5jcHAgXAogICAg
ICQkUFdEL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcCBc
CiAgICAgJCRQV0QvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0
LmNwcCBcCkBAIC03NCw4ICs3NiwxMSBAQCBIRUFERVJTICs9IFwKICAgICAkJFBXRC9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCBcCiAgICAg
JCRQV0QvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVu
dFF0LmggXAogICAgICQkUFdEL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQu
aCBcCi0gICAgJCRQV0QvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4u
aCBcCiAgICAgJCRQV0QvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmggXAor
ICAgICQkUFdEL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggXAor
ICAgICQkUFdEL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9C
b3guaC5oIFwKKyAgICAkJFBXRC9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVR
U3R5bGUuaCBcCisgICAgJCRQV0QvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRo
ZW1lUVN0eWxlLmggXAogICAgICQkUFdEL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQ
b3B1cE1lbnVRdC5oIFwKICAgICAkJFBXRC9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENo
ZWNrZXJDbGllbnRRdC5oIFwKICAgICAkJFBXRC9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzUXQuaCBcCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cK
aW5kZXggNTIyODNkZWZkOGNhN2NiMmVmMjQ1NzBlMTgzZDhjNzVmNDUyNjFhYi4uNmRkYzQ4NTkw
MjM2YzBiNmRiMGYyMzQ2ZjM4ZWE4YzBjYmVhMzc4YSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAzLTAyICBTaW1vbiBIYXVzbWFu
biAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIE1vdmUgUVN0eWxl
IHRoZW1pbmcgY29kZSBvdXQgb2YgV2ViQ29yZSBpbnRvIFdlYktpdDEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMTI4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvYXBpLnByaTogQWRqdXN0
IHRvIG1vdmluZyBzb3VyY2UgZmlsZXMuCisKIDIwMTItMDMtMDEgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGVyZi1vLW1hdGljOiBnZW5lcmF0ZSBkYXNoYm9h
cmQgaW1hZ2VzIGZvciAzMCwgOTAsIGFuZCAzNjUgZGF5cwo=
</data>
<flag name="review"
          id="132651"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>