<?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>77843</bug_id>
          
          <creation_ts>2012-02-05 19:06:01 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstream ChromeClientBlackBerry.{h, cpp}</short_desc>
          <delta_ts>2012-02-07 20:05:46 -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>Platform</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>
          
          <blocked>73144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Leo Yang">leo.yang</reporter>
          <assigned_to name="Leo Yang">leo.yang</assigned_to>
          <cc>abarth</cc>
    
    <cc>charles.wei</cc>
    
    <cc>japhet</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>staikos</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>549673</commentid>
    <comment_count>0</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-05 19:06:01 -0800</bug_when>
    <thetext>This is to upstream the BlackBerry implementation of ChromeClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549679</commentid>
    <comment_count>1</comment_count>
      <attachid>125552</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-05 19:19:15 -0800</bug_when>
    <thetext>Created attachment 125552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549685</commentid>
    <comment_count>2</comment_count>
      <attachid>125552</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-05 19:59:55 -0800</bug_when>
    <thetext>Comment on attachment 125552
Patch

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

the change I will request is easy but should be addressed internally first, and then we generate this patch again for upstreaming. r- due to that.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:82
&gt; +ChromeClientBlackBerry::ChromeClientBlackBerry(WebPage* page)
&gt; +    : m_webPage(page)

should awebpageprivate, not the public class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550623</commentid>
    <comment_count>3</comment_count>
      <attachid>125767</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-06 22:02:30 -0800</bug_when>
    <thetext>Created attachment 125767
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550940</commentid>
    <comment_count>4</comment_count>
      <attachid>125767</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-07 06:39:14 -0800</bug_when>
    <thetext>Comment on attachment 125767
Patch v2

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

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:476
&gt; +#if ENABLE(EVENT_MODE_METATAGS)
&gt; +void ChromeClientBlackBerry::didReceiveCursorEventMode(Frame* frame, CursorEventMode mode) const
&gt; +{
&gt; +    if (m_webPagePrivate-&gt;m_mainFrame != frame)
&gt; +        return;
&gt; +
&gt; +    m_webPagePrivate-&gt;didReceiveCursorEventMode(mode);
&gt; +}
&gt; +
&gt; +void ChromeClientBlackBerry::didReceiveTouchEventMode(Frame* frame, TouchEventMode mode) const
&gt; +{
&gt; +    if (m_webPagePrivate-&gt;m_mainFrame != frame)
&gt; +        return;
&gt; +
&gt; +    m_webPagePrivate-&gt;didReceiveTouchEventMode(mode);
&gt; +}
&gt; +#endif

the WebCore counter part of these methods are intended to be upstreamed?

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:604
&gt; +void ChromeClientBlackBerry::invalidateContentsForSlowScroll(const IntSize&amp; delta, const IntRect&amp; updateRect, bool immediate, const ScrollView* scrollView)

it also requires changes in scrollview I am not sure we will upstream.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.h:2
&gt; + * Copyright (C) 2009, 2010, 2011 Research In Motion Limited. All rights reserved.

2012?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550955</commentid>
    <comment_count>5</comment_count>
      <attachid>125767</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-07 07:06:21 -0800</bug_when>
    <thetext>Comment on attachment 125767
Patch v2

I still see some issues, please don&apos;t land just yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550967</commentid>
    <comment_count>6</comment_count>
      <attachid>125767</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-07 07:25:14 -0800</bug_when>
    <thetext>Comment on attachment 125767
Patch v2

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

r- since I think it can be cleaned up a lot.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:89
&gt; +        m_webPagePrivate-&gt;m_dumpRenderTree-&gt;addMessageToConsole(message, lineNumber, sourceID);

We need #if ENABLE_DRT here.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:108
&gt; +        return m_webPagePrivate-&gt;m_dumpRenderTree-&gt;runJavaScriptConfirm(message);

We need #if ENABLE_DRT here.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:113
&gt; +

Why empty line?

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:118
&gt; +    WebString clientResult;

This can be removed to where it is actually used.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:123
&gt; +    }

We need #if ENABLE_DRT here.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:142
&gt; +    return; // The window dimensions are fixed in the RIM port.

Why return; ?

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:159
&gt; +    return 1.0f;

Should be just 1.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:279
&gt; +    }

We need #if ENABLE_DRT here.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:311
&gt; +        m_webPagePrivate-&gt;m_dumpRenderTree-&gt;windowCreated(webPage);

We need #if ENABLE_DRT here.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:411
&gt; +        return m_webPagePrivate-&gt;m_dumpRenderTree-&gt;runBeforeUnloadConfirmPanel(message);

We need #if ENABLE_DRT here.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:426
&gt; +        m_webPagePrivate-&gt;m_dumpRenderTree-&gt;setStatusText(status);

We need #if ENABLE_DRT here.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:539
&gt; +void ChromeClientBlackBerry::runOpenPanel(WebCore::Frame*, PassRefPtr&lt;WebCore::FileChooser&gt; chooser)

Do we really need WebCore:: prefix everywhere?

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:607
&gt; +        m_webPagePrivate-&gt;m_backingStore-&gt;d-&gt;repaint(updateRect, true /*contentChanged*/, true /*immediate*/);

Could call invalidateContentsAndWindow to indicate what we are actually doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551660</commentid>
    <comment_count>7</comment_count>
      <attachid>125976</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-07 18:25:16 -0800</bug_when>
    <thetext>Created attachment 125976
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551679</commentid>
    <comment_count>8</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-07 18:48:42 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 125767 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125767&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:476
&gt; &gt; +#if ENABLE(EVENT_MODE_METATAGS)
&gt; &gt; +void ChromeClientBlackBerry::didReceiveCursorEventMode(Frame* frame, CursorEventMode mode) const
&gt; &gt; +{
&gt; &gt; +    if (m_webPagePrivate-&gt;m_mainFrame != frame)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    m_webPagePrivate-&gt;didReceiveCursorEventMode(mode);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void ChromeClientBlackBerry::didReceiveTouchEventMode(Frame* frame, TouchEventMode mode) const
&gt; &gt; +{
&gt; &gt; +    if (m_webPagePrivate-&gt;m_mainFrame != frame)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    m_webPagePrivate-&gt;didReceiveTouchEventMode(mode);
&gt; &gt; +}
&gt; &gt; +#endif
&gt; 
&gt; the WebCore counter part of these methods are intended to be upstreamed?
We&apos;ve enabled EVENT_MODE_METATAGS. I think we should upstream the counterpart of WebCore because otherwise we will be divergent with the upstream. 
 
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp:604
&gt; &gt; +void ChromeClientBlackBerry::invalidateContentsForSlowScroll(const IntSize&amp; delta, const IntRect&amp; updateRect, bool immediate, const ScrollView* scrollView)
&gt; 
&gt; it also requires changes in scrollview I am not sure we will upstream.
I think we can change the last parameter to a bool which indicate if this is requested by the main frame view, saying bool isMainFrameView. And then we should upstream the changed API, at least guard it using PLATFORM(BLACKBERRY)

&gt; 
&gt; &gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.h:2
&gt; &gt; + * Copyright (C) 2009, 2010, 2011 Research In Motion Limited. All rights reserved.
&gt; 
&gt; 2012?
Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551681</commentid>
    <comment_count>9</comment_count>
      <attachid>125976</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-07 18:49:21 -0800</bug_when>
    <thetext>Comment on attachment 125976
Patch v3

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

Looks good, please have a look at fixing the nits before landing.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.h:2
&gt; + * Copyright (C) 2009, 2010, 2011 Research In Motion Limited. All rights reserved.

Still needs 2012.

&gt; Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.h:95
&gt; +    virtual void runOpenPanel(Frame*, WTF::PassRefPtr&lt;FileChooser&gt;);

WTF is probably not needed, ChromeClient.h does not need it either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551697</commentid>
    <comment_count>10</comment_count>
      <attachid>125985</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-07 19:02:17 -0800</bug_when>
    <thetext>Created attachment 125985
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551704</commentid>
    <comment_count>11</comment_count>
      <attachid>125985</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-07 19:12:13 -0800</bug_when>
    <thetext>Comment on attachment 125985
Patch v4

Looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551728</commentid>
    <comment_count>12</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-07 20:05:46 -0800</bug_when>
    <thetext>Committed r107033: &lt;http://trac.webkit.org/changeset/107033&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125552</attachid>
            <date>2012-02-05 19:19:15 -0800</date>
            <delta_ts>2012-02-06 22:02:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-BlackBerry-Upstream-ChromeClientBlackBerry.-h-cpp.patch</filename>
            <type>text/plain</type>
            <size>36243</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSA4NzEzYTIyN2MwNDQ3ZjVmYjc0MjZhYTdiOWE3ZGRlNTlhMzhmNTY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBNb24sIDYgRmViIDIwMTIgMTE6MTE6MDAgKzA4MDAKU3ViamVjdDogW1BBVENIXSBb
QmxhY2tCZXJyeV0gVXBzdHJlYW0gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS57aCwgY3BwfQogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3ODQzCgpSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0ZXN0cy4KCiogYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcDogQWRkZWQuCiog
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5Lmg6IEFkZGVk
LgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxMiArCiAuLi4vV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAg
ICAgICB8ICA4MjUgKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRCbGFja0JlcnJ5LmggICAgICAgIHwgIDE2MyArKysrCiAzIGZpbGVzIGNoYW5nZWQs
IDEwMDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tC
ZXJyeS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkZmY3YTk3
Li41NjhlNWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAyLTA1ICBMZW8gWWFu
ZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW0gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS57aCwgY3BwfQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4NDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBubyBuZXcg
dGVzdHMuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaDogQWRkZWQuCisKIDIwMTItMDItMDQgIEphY2t5
IEppYW5nICA8emhhamlhbmdAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gVXBzdHJl
YW0gQmxhY2tCZXJyeSBXZWJDb3JlU3VwcG9ydCBDbGllbnRFeHRlbnNpb24gYW5kIEdlb2xvY2F0
aW9uQ29udHJvbGxlckNsaWVudEJsYWNrQmVycnkgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnku
Y3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YTc0
OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSw4MjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudEJsYWNrQmVycnku
aCIKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUNs
aWVudC5oIgorI2luY2x1ZGUgIkJhY2tpbmdTdG9yZV9wLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDbGllbnQuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZVN1cHBvcnQuaCIKKyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorI2luY2x1ZGUgIkZpbGVJY29u
TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudEJsYWNrQmVycnkuaCIKKyNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkljb24uaCIKKyNpbmNsdWRlICJJbnB1dEhh
bmRsZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQ
YWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlBvcHVwTWVudUJsYWNrQmVycnkuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisj
aW5jbHVkZSAiU1ZHWm9vbUFuZFBhbi5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudUJsYWNr
QmVycnkuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNoYXJlZFBv
aW50ZXIuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIldlYlBh
Z2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgi
CisjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNs
dWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5o
PgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmg+CisKKyNkZWZpbmUgREVC
VUdfT1ZFUkZMT1dfREVURUNUSU9OIDAKKwordXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6Oldl
YktpdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ1N0cmluZyBmcmFtZU9yaWdp
bihGcmFtZSogZnJhbWUpCit7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+ZG9tV2lu
ZG93KCk7CisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdpbmRvdy0+c2VjdXJpdHlPcmln
aW4oKTsKKyAgICBDU3RyaW5nIGxhdGluT3JpZ2luID0gb3JpZ2luLT50b1N0cmluZygpLmxhdGlu
MSgpOworICAgIHJldHVybiBsYXRpbk9yaWdpbjsKK30KKworQ2hyb21lQ2xpZW50QmxhY2tCZXJy
eTo6Q2hyb21lQ2xpZW50QmxhY2tCZXJyeShXZWJQYWdlKiBwYWdlKQorICAgIDogbV93ZWJQYWdl
KHBhZ2UpCit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6YWRkTWVzc2FnZVRv
Q29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlEKQoreworICAgIGlmIChtX3dlYlBhZ2UtPmQtPm1fZHVtcFJlbmRlclRyZWUpCisgICAg
ICAgIG1fd2ViUGFnZS0+ZC0+bV9kdW1wUmVuZGVyVHJlZS0+YWRkTWVzc2FnZVRvQ29uc29sZSht
ZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CisgICAgbV93ZWJQYWdlLT5jbGllbnQoKS0+
YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLmNoYXJhY3RlcnMoKSwgbWVzc2FnZS5sZW5ndGgo
KSwgc291cmNlSUQuY2hhcmFjdGVycygpLCBzb3VyY2VJRC5sZW5ndGgoKSwgbGluZU51bWJlcik7
Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZy
YW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChtX3dlYlBhZ2Ut
PmQtPm1fZHVtcFJlbmRlclRyZWUpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kLT5tX2R1bXBSZW5k
ZXJUcmVlLT5ydW5KYXZhU2NyaXB0QWxlcnQobWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgVGltZXJCYXNlOjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsKKworICAg
IENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFtZU9yaWdpbihmcmFtZSk7CisgICAgbV93ZWJQYWdl
LT5jbGllbnQoKS0+cnVuSmF2YVNjcmlwdEFsZXJ0KG1lc3NhZ2UuY2hhcmFjdGVycygpLCBtZXNz
YWdlLmxlbmd0aCgpLCBsYXRpbk9yaWdpbi5kYXRhKCksIGxhdGluT3JpZ2luLmxlbmd0aCgpKTsK
K30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpydW5KYXZhU2NyaXB0Q29uZmlybShG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV93ZWJQYWdl
LT5kLT5tX2R1bXBSZW5kZXJUcmVlKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT5tX2R1
bXBSZW5kZXJUcmVlLT5ydW5KYXZhU2NyaXB0Q29uZmlybShtZXNzYWdlKTsKKyAgICBUaW1lckJh
c2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworCisgICAgQ1N0cmluZyBsYXRpbk9y
aWdpbiA9IGZyYW1lT3JpZ2luKGZyYW1lKTsKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jbGllbnQo
KS0+cnVuSmF2YVNjcmlwdENvbmZpcm0obWVzc2FnZS5jaGFyYWN0ZXJzKCksIG1lc3NhZ2UubGVu
Z3RoKCksIGxhdGluT3JpZ2luLmRhdGEoKSwgbGF0aW5PcmlnaW4ubGVuZ3RoKCkpOworCit9CisK
K2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUs
IFN0cmluZyYgcmVzdWx0KQoreworICAgIFdlYlN0cmluZyBjbGllbnRSZXN1bHQ7CisKKyAgICBp
ZiAobV93ZWJQYWdlLT5kLT5tX2R1bXBSZW5kZXJUcmVlKSB7CisgICAgICAgIHJlc3VsdCA9IG1f
d2ViUGFnZS0+ZC0+bV9kdW1wUmVuZGVyVHJlZS0+cnVuSmF2YVNjcmlwdFByb21wdChtZXNzYWdl
LCBkZWZhdWx0VmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUaW1l
ckJhc2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworCisgICAgQ1N0cmluZyBsYXRp
bk9yaWdpbiA9IGZyYW1lT3JpZ2luKGZyYW1lKTsKKyAgICBpZiAobV93ZWJQYWdlLT5jbGllbnQo
KS0+cnVuSmF2YVNjcmlwdFByb21wdChtZXNzYWdlLmNoYXJhY3RlcnMoKSwgbWVzc2FnZS5sZW5n
dGgoKSwgZGVmYXVsdFZhbHVlLmNoYXJhY3RlcnMoKSwgZGVmYXVsdFZhbHVlLmxlbmd0aCgpLCBs
YXRpbk9yaWdpbi5kYXRhKCksIGxhdGluT3JpZ2luLmxlbmd0aCgpLCBjbGllbnRSZXN1bHQpKSB7
CisgICAgICAgIHJlc3VsdCA9IGNsaWVudFJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5
OjpjaHJvbWVEZXN0cm95ZWQoKQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lkIENocm9t
ZUNsaWVudEJsYWNrQmVycnk6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sKKyAg
ICByZXR1cm47IC8vIFRoZSB3aW5kb3cgZGltZW5zaW9ucyBhcmUgZml4ZWQgaW4gdGhlIFJJTSBw
b3J0LgorfQorCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6d2luZG93UmVjdCgp
Cit7CisgICAgY29uc3QgSW50U2l6ZSB3aW5kb3dTaXplID0gbV93ZWJQYWdlLT5jbGllbnQoKS0+
d2luZG93KCktPndpbmRvd1NpemUoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpbmRv
d1NpemUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7Cit9CisKK0Zsb2F0UmVjdCBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5OjpwYWdlUmVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2Zsb2F0IENocm9tZUNsaWVudEJsYWNrQmVy
cnk6OnNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4gMS4wZjsKK30KKwordm9pZCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5Ojpmb2N1cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojp1bmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNhblRha2VGb2N1cyhG
b2N1c0RpcmVjdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojp0YWtlRm9jdXMoRm9jdXNEaXJl
Y3Rpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRC
bGFja0JlcnJ5Ojpmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSogbm9kZSkKK3sKKyAgICBXZWJQYWdl
Q2xpZW50OjpGb2N1c1R5cGUgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzVW5rbm93bjsKKwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzTm9uZTsK
KyAgICBlbHNlIGlmIChub2RlLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgdHlwZSA9IFdlYlBh
Z2VDbGllbnQ6OkZvY3VzU1ZHRWxlbWVudDsKKyAgICBlbHNlIGlmIChub2RlLT5pc0hUTUxFbGVt
ZW50KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphVGFnKSkg
eworICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzTGluazsKKyAgICAgICAg
fSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAg
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aXNpbmRleFRhZykgfHwgaW5wdXRFbGVtZW50LT5pc0lucHV0VHlw
ZUhpZGRlbigpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lu
cHV0VW5rbm93bjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNUZXh0QnV0
dG9uKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRC
dXR0b247CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tib3goKSkK
KyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dENoZWNrQm94
OworI2lmIEVOQUJMRShJTlBVVF9DT0xPUikKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxl
bWVudC0+aXNDb2xvckNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNs
aWVudDo6Rm9jdXNJbnB1dENvbG9yOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChpbnB1
dEVsZW1lbnQtPmlzRGF0ZUNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFn
ZUNsaWVudDo6Rm9jdXNJbnB1dERhdGU7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1l
bnQtPmlzRGF0ZVRpbWVDb250cm9sKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VD
bGllbnQ6OkZvY3VzSW5wdXREYXRlVGltZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxl
bWVudC0+aXNEYXRlVGltZUxvY2FsQ29udHJvbCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBX
ZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0RGF0ZVRpbWVMb2NhbDsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlucHV0RWxlbWVudC0+aXNFbWFpbEZpZWxkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9
IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRFbWFpbDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlu
cHV0RWxlbWVudC0+aXNGaWxlVXBsb2FkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBh
Z2VDbGllbnQ6OkZvY3VzSW5wdXRGaWxlOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVt
ZW50LT5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGll
bnQ6OkZvY3VzSW5wdXRJbWFnZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+
aXNNb250aENvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6
Rm9jdXNJbnB1dE1vbnRoOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc051
bWJlckZpZWxkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3Vz
SW5wdXROdW1iZXI7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFzc3dv
cmRGaWVsZCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lu
cHV0UGFzc3dvcmQ7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9C
dXR0b24oKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1
dFJhZGlvOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1JhbmdlQ29udHJv
bCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0UmFu
Z2U7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUmVzZXRCdXR0b24oKSkK
KyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFJlc2V0Owor
ICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1NlYXJjaEZpZWxkKCkpCisgICAg
ICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRTZWFyY2g7CisgICAg
ICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzU3VibWl0QnV0dG9uKCkpCisgICAgICAg
ICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRTdWJtaXQ7CisgICAgICAg
ICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzVGVsZXBob25lRmllbGQoKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFRlbGVwaG9uZTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNVUkxGaWVsZCgpKQorICAgICAgICAgICAg
ICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0VVJMOworICAgICAgICAgICAgZWxz
ZSBpZiAoaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQorICAgICAgICAgICAgICAgIHR5cGUg
PSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0VGV4dDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlu
cHV0RWxlbWVudC0+aXNUaW1lQ29udHJvbCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQ
YWdlQ2xpZW50OjpGb2N1c0lucHV0VGltZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBtaXNzaW5n
IFdFRUsgcG9wdXAgc2VsZWN0b3IKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0
eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFVua25vd247CisgICAgICAgIH0gZWxzZSBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpCisgICAgICAgICAgICB0eXBl
ID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbWFnZTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFn
ZUNsaWVudDo6Rm9jdXNPYmplY3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp2aWRlb1RhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6
Rm9jdXNWaWRlbzsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnNlbGVjdFRhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNTZWxl
Y3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJl
YVRhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNUZXh0QXJlYTsK
KyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhbnZhc1RhZykp
CisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNDYW52YXM7CisgICAgfQor
CisgICAgbV93ZWJQYWdlLT5kLT5tX2lucHV0SGFuZGxlci0+bm9kZUZvY3VzZWQobm9kZSk7CisK
KyAgICBtX3dlYlBhZ2UtPmNsaWVudCgpLT5mb2N1c0NoYW5nZWQodHlwZSwgcmVpbnRlcnByZXRf
Y2FzdDxpbnQ+KG5vZGUpKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpmb2N1
c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKikKK3sKKyAgICAvLyBUbyBiZSB1c2VkIGJ5IEluLXJlZ2lv
biBiYWNraW5nIHN0b3JlIGNvbnRleHQgc3dpdGNoaW5nLgorfQorCitib29sIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OnNob3VsZEZvcmNlRG9jdW1lbnRTdHlsZVNlbGVjdG9yVXBkYXRlKCkKK3sK
KyAgICByZXR1cm4gIW1fd2ViUGFnZS0+c2V0dGluZ3MoKS0+aXNKYXZhU2NyaXB0RW5hYmxlZCgp
ICYmICFtX3dlYlBhZ2UtPmQtPm1faW5wdXRIYW5kbGVyLT5wcm9jZXNzaW5nQ2hhbmdlKCk7Cit9
CisKK1BhZ2UqIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNyZWF0ZVdpbmRvdyhGcmFtZSosIGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiBmZWF0
dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYpCit7CisgICAgaWYgKG1fd2ViUGFnZS0+ZC0+
bV9kdW1wUmVuZGVyVHJlZSkgeworICAgICAgICBpZiAoIW1fd2ViUGFnZS0+ZC0+bV9kdW1wUmVu
ZGVyVHJlZS0+YWxsb3dzT3BlbmluZ1dpbmRvdygpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIFBhZ2VHcm91cExvYWREZWZlcnJlciBkZWZlcnJlcihtX3dlYlBhZ2UtPmQtPm1f
cGFnZSwgdHJ1ZSk7CisgICAgVGltZXJCYXNlOjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3Ao
KTsKKworICAgIGludCB4ID0gZmVhdHVyZXMueFNldCA/IGZlYXR1cmVzLnggOiAwOworICAgIGlu
dCB5ID0gZmVhdHVyZXMueVNldCA/IGZlYXR1cmVzLnkgOiAwOworICAgIGludCB3aWR0aCA9IGZl
YXR1cmVzLndpZHRoU2V0PyBmZWF0dXJlcy53aWR0aCA6IC0xOworICAgIGludCBoZWlnaHQgPSBm
ZWF0dXJlcy5oZWlnaHRTZXQgPyBmZWF0dXJlcy5oZWlnaHQgOiAtMTsKKyAgICB1bnNpZ25lZCBm
bGFncyA9IDA7CisKKyAgICBpZiAoZmVhdHVyZXMubWVudUJhclZpc2libGUpCisgICAgICAgIGZs
YWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZsYWdXaW5kb3dIYXNNZW51QmFyOworICAgIGlmIChmZWF0
dXJlcy5zdGF0dXNCYXJWaXNpYmxlKQorICAgICAgICBmbGFncyB8PSBXZWJQYWdlQ2xpZW50OjpG
bGFnV2luZG93SGFzU3RhdHVzQmFyOworICAgIGlmIChmZWF0dXJlcy50b29sQmFyVmlzaWJsZSkK
KyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc1Rvb2xCYXI7Cisg
ICAgaWYgKGZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gV2Vi
UGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc0xvY2F0aW9uQmFyOworICAgIGlmIChmZWF0dXJlcy5z
Y3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dp
bmRvd0hhc1Njcm9sbEJhcjsKKyAgICBpZiAoZmVhdHVyZXMucmVzaXphYmxlKQorICAgICAgICBm
bGFncyB8PSBXZWJQYWdlQ2xpZW50OjpGbGFnV2luZG93SXNSZXNpemFibGU7CisgICAgaWYgKGZl
YXR1cmVzLmZ1bGxzY3JlZW4pCisgICAgICAgIGZsYWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZsYWdX
aW5kb3dJc0Z1bGxTY3JlZW47CisgICAgaWYgKGZlYXR1cmVzLmRpYWxvZykKKyAgICAgICAgZmxh
Z3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0lzRGlhbG9nOworCisgICAgV2ViUGFnZSog
d2ViUGFnZSA9IG1fd2ViUGFnZS0+Y2xpZW50KCktPmNyZWF0ZVdpbmRvdyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmbGFncywgV2ViU3RyaW5nKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCkpLCBXZWJTdHJpbmcocmVxdWVzdC5mcmFtZU5hbWUoKSkpOworICAgIGlmICghd2Vi
UGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV93ZWJQYWdlLT5kLT5tX2R1bXBS
ZW5kZXJUcmVlKQorICAgICAgICBtX3dlYlBhZ2UtPmQtPm1fZHVtcFJlbmRlclRyZWUtPndpbmRv
d0NyZWF0ZWQod2ViUGFnZSk7CisKKyAgICByZXR1cm4gd2ViUGFnZS0+ZC0+bV9wYWdlOworfQor
Cit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNob3coKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y2FuUnVuTW9kYWwoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENo
cm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk1vZGFsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNlbGVjdEl0ZW1Xcml0aW5nRGly
ZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2hyb21l
Q2xpZW50QmxhY2tCZXJyeTo6c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0Rp
cmVjdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8UG9wdXBNZW51
PiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50
KiBjbGllbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVCbGFj
a0JlcnJ5KGNsaWVudCkpOworfQorCitQYXNzUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gQ2hyb21l
Q2xpZW50QmxhY2tCZXJyeTo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCog
Y2xpZW50KSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VhcmNoUG9wdXBNZW51
QmxhY2tCZXJyeShjbGllbnQpKTsKK30KKworCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6
OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6dG9vbGJhcnNWaXNpYmxlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzdGF0dXNiYXJWaXNp
YmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJy
eTo6c2Nyb2xsYmFyc1Zpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNldE1lbnViYXJW
aXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjptZW51YmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6
c2V0UmVzaXphYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBD
aHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENo
cm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIEZyYW1lKikKK3sKKyAgICBpZiAobV93ZWJQYWdlLT5kLT5tX2R1bXBS
ZW5kZXJUcmVlKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT5tX2R1bXBSZW5kZXJUcmVl
LT5ydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSk7CisKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0Jl
cnJ5OjpjbG9zZVdpbmRvd1Nvb24oKQoreworICAgIG1fd2ViUGFnZS0+Y2xpZW50KCktPnNjaGVk
dWxlQ2xvc2VXaW5kb3coKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRT
dGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzKQoreworICAgIG1fd2ViUGFnZS0+Y2xp
ZW50KCktPnNldFN0YXR1cyhzdGF0dXMpOworICAgIGlmIChtX3dlYlBhZ2UtPmQtPm1fZHVtcFJl
bmRlclRyZWUpCisgICAgICAgIG1fd2ViUGFnZS0+ZC0+bV9kdW1wUmVuZGVyVHJlZS0+c2V0U3Rh
dHVzVGV4dChzdGF0dXMpOworfQorCitJbnRSZWN0IENocm9tZUNsaWVudEJsYWNrQmVycnk6Ondp
bmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBJbnRSZWN0KCk7Cit9CisKK0ludFBvaW50IENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNj
cmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBzY3JlZW5Qb3MpIGNvbnN0Cit7CisgICAgSW50
UG9pbnQgd2luZG93UG9pbnQgPSBtX3dlYlBhZ2UtPmNsaWVudCgpLT53aW5kb3coKS0+d2luZG93
TG9jYXRpb24oKTsKKyAgICB3aW5kb3dQb2ludC5tb3ZlKC1zY3JlZW5Qb3MueCgpLCAtc2NyZWVu
UG9zLnkoKSk7CisgICAgcmV0dXJuIHdpbmRvd1BvaW50OworfQorCitJbnRSZWN0IENocm9tZUNs
aWVudEJsYWNrQmVycnk6OndpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3Qp
IGNvbnN0Cit7CisgICAgSW50UmVjdCB3aW5kb3dQb2ludCh3aW5kb3dSZWN0KTsKKyAgICBJbnRQ
b2ludCBsb2NhdGlvbihtX3dlYlBhZ2UtPmNsaWVudCgpLT53aW5kb3coKS0+d2luZG93TG9jYXRp
b24oKSk7CisgICAgd2luZG93UG9pbnQubW92ZShsb2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSk7
CisgICAgcmV0dXJuIHdpbmRvd1BvaW50OworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVy
cnk6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
dW5zaWduZWQgaW50IG1vZGlmaWVyRmxhZ3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYg
dG9vbHRpcCwgVGV4dERpcmVjdGlvbikKK3sKKyAgICBtX3dlYlBhZ2UtPmNsaWVudCgpLT5zZXRU
b29sVGlwKHRvb2x0aXApOworfQorCisjaWYgRU5BQkxFKEVWRU5UX01PREVfTUVUQVRBR1MpCit2
b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmRpZFJlY2VpdmVDdXJzb3JFdmVudE1vZGUoRnJh
bWUqIGZyYW1lLCBDdXJzb3JFdmVudE1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBpZiAobV93ZWJQ
YWdlLT5kLT5tX21haW5GcmFtZSAhPSBmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93
ZWJQYWdlLT5kLT5kaWRSZWNlaXZlQ3Vyc29yRXZlbnRNb2RlKG1vZGUpOworfQorCit2b2lkIENo
cm9tZUNsaWVudEJsYWNrQmVycnk6OmRpZFJlY2VpdmVUb3VjaEV2ZW50TW9kZShGcmFtZSogZnJh
bWUsIFRvdWNoRXZlbnRNb2RlIG1vZGUpIGNvbnN0Cit7CisgICAgaWYgKG1fd2ViUGFnZS0+ZC0+
bV9tYWluRnJhbWUgIT0gZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2ViUGFnZS0+
ZC0+ZGlkUmVjZWl2ZVRvdWNoRXZlbnRNb2RlKG1vZGUpOworfQorI2VuZGlmCisKK3ZvaWQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hWaWV3cG9ydFByb3BlcnRpZXNEaWRDaGFuZ2Uo
Y29uc3QgVmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICBtX3dlYlBh
Z2UtPmQtPmRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGFyZ3VtZW50cyk7Cit9
CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cHJpbnQoRnJhbWUqKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOworICAgIGlm
IChtX3dlYlBhZ2UtPmQtPm1fZHVtcFJlbmRlclRyZWUpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5k
LT5tX2R1bXBSZW5kZXJUcmVlLT5leGNlZWRlZERhdGFiYXNlUXVvdGEob3JpZ2luLCBuYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERhdGFiYXNlVHJhY2tlciYgdHJhY2tlciA9
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsVXNhZ2UgPSB0cmFja2VyLnRvdGFsRGF0YWJhc2VVc2FnZSgpOworICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBvcmlnaW5Vc2FnZSA9IHRyYWNrZXIudXNhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKKwor
ICAgIERhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gdHJhY2tlci5kZXRhaWxzRm9yTmFtZUFuZE9y
aWdpbihuYW1lLCBvcmlnaW4pOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBlc3RpbWF0ZWRTaXpl
ID0gZGV0YWlscy5leHBlY3RlZFVzYWdlKCk7CisgICAgY29uc3QgU3RyaW5nJiBuYW1lU3RyID0g
ZGV0YWlscy5kaXNwbGF5TmFtZSgpOworCisgICAgU3RyaW5nIG9yaWdpblN0ciA9IG9yaWdpbi0+
ZGF0YWJhc2VJZGVudGlmaWVyKCk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEgPSBt
X3dlYlBhZ2UtPmNsaWVudCgpLT5kYXRhYmFzZVF1b3RhKG9yaWdpblN0ci5jaGFyYWN0ZXJzKCks
IG9yaWdpblN0ci5sZW5ndGgoKSwKKyAgICAgICAgbmFtZVN0ci5jaGFyYWN0ZXJzKCksIG5hbWVT
dHIubGVuZ3RoKCksIHRvdGFsVXNhZ2UsIG9yaWdpblVzYWdlLCBlc3RpbWF0ZWRTaXplKTsKKwor
ICAgIHRyYWNrZXIuc2V0UXVvdGEob3JpZ2luLCBxdW90YSk7CisjZW5kaWYKK30KKwordm9pZCBD
aHJvbWVDbGllbnRCbGFja0JlcnJ5OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJh
bWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAgaWYgKCFt
X3dlYlBhZ2UtPnNldHRpbmdzKCktPmlzR2VvbG9jYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAg
Z2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+ZG9tV2luZG93KCk7CisgICAgaWYgKCF3
aW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFt
ZU9yaWdpbihmcmFtZSk7CisKKyAgICBtX3dlYlBhZ2UtPmNsaWVudCgpLT5yZXF1ZXN0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKG1fd2ViUGFnZS0+ZC0+bV9nZW9sb2NhdGlvbkNsaWVudCwgZ2VvbG9j
YXRpb24sIGxhdGluT3JpZ2luLmRhdGEoKSwgbGF0aW5PcmlnaW4ubGVuZ3RoKCkpOworfQorCit2
b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RGb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBt
X3dlYlBhZ2UtPmNsaWVudCgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb24obV93ZWJQYWdl
LT5kLT5tX2dlb2xvY2F0aW9uQ2xpZW50LCBnZW9sb2NhdGlvbik7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50QmxhY2tCZXJyeTo6cnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKK3sKKyAgICBTaGFyZWRBcnJheTxXZWJT
dHJpbmc+IGluaXRpYWxGaWxlczsKKyAgICB1bnNpZ25lZCBpbnQgaW5pdGlhbEZpbGVTaXplID0g
Y2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzLnNpemUoKTsKKyAgICBpZiAoaW5pdGlh
bEZpbGVTaXplID4gMCkKKyAgICAgICAgaW5pdGlhbEZpbGVzLnJlc2V0KG5ldyBXZWJTdHJpbmdb
aW5pdGlhbEZpbGVTaXplXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluaXRpYWxG
aWxlU2l6ZTsgKytpKQorICAgICAgICBpbml0aWFsRmlsZXNbaV0gPSBjaG9vc2VyLT5zZXR0aW5n
cygpLnNlbGVjdGVkRmlsZXNbaV07CisKKyAgICBTaGFyZWRBcnJheTxXZWJTdHJpbmc+IGNob3Nl
bkZpbGVzOworICAgIHVuc2lnbmVkIGludCBjaG9zZW5GaWxlU2l6ZTsKKworICAgIHsKKyAgICAg
ICAgUGFnZUdyb3VwTG9hZERlZmVycmVyIGRlZmVycmVyKG1fd2ViUGFnZS0+ZC0+bV9wYWdlLCB0
cnVlKTsKKyAgICAgICAgVGltZXJCYXNlOjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsK
KworICAgICAgICAvLyBGSVhNRTogVXNlIGNob29zZXItPnNldHRpbmdzKCkuYWNjZXB0TUlNRVR5
cGVzIGluc3RlYWQgb2YgV2ViU3RyaW5nKCkgZm9yIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorICAg
ICAgICBpZiAoIW1fd2ViUGFnZS0+Y2xpZW50KCktPmNob29zZUZpbGVuYW1lcyhjaG9vc2VyLT5z
ZXR0aW5ncygpLmFsbG93c011bHRpcGxlRmlsZXMsIFdlYlN0cmluZygpLCBpbml0aWFsRmlsZXMs
IGluaXRpYWxGaWxlU2l6ZSwgY2hvc2VuRmlsZXMsIGNob3NlbkZpbGVTaXplKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlcyhjaG9zZW5GaWxl
U2l6ZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNob3NlbkZpbGVTaXplOyArK2kp
CisgICAgICAgIGZpbGVzW2ldID0gY2hvc2VuRmlsZXNbaV07CisgICAgY2hvb3Nlci0+Y2hvb3Nl
RmlsZXMoZmlsZXMpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmxvYWRJY29u
Rm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgRmlsZUljb25Mb2FkZXIq
IGxvYWRlcikKK3sKKyAgICBsb2FkZXItPm5vdGlmeUZpbmlzaGVkKEljb246OmNyZWF0ZUljb25G
b3JGaWxlcyhmaWxlbmFtZXMpKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2Rl
KiBub2RlKQoreworICAgIG1fd2ViUGFnZS0+ZC0+bV9pbnB1dEhhbmRsZXItPm5vZGVUZXh0Q2hh
bmdlZChub2RlKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzY3JvbGxiYXJz
TW9kZURpZENoYW5nZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpjb250ZW50c1NpemVDaGFuZ2VkKFdlYkNvcmU6OkZy
YW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBp
ZiAoZnJhbWUgIT0gbV93ZWJQYWdlLT5kLT5tX21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV93ZWJQYWdlLT5kLT5jb250ZW50c1NpemVDaGFuZ2VkKHNpemUpOworfQorCit2b2lk
IENocm9tZUNsaWVudEJsYWNrQmVycnk6OmludmFsaWRhdGVXaW5kb3coY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCit7CisgICAgbV93ZWJQYWdlLT5iYWNraW5nU3Rv
cmUoKS0+ZC0+cmVwYWludCh1cGRhdGVSZWN0LCBmYWxzZSAvKmNvbnRlbnRDaGFuZ2VkKi8sIGlt
bWVkaWF0ZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6aW52YWxpZGF0ZUNv
bnRlbnRzQW5kV2luZG93KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRl
KQoreworICAgIG1fd2ViUGFnZS0+YmFja2luZ1N0b3JlKCktPmQtPnJlcGFpbnQodXBkYXRlUmVj
dCwgdHJ1ZSAvKmNvbnRlbnRDaGFuZ2VkKi8sIGltbWVkaWF0ZSk7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50QmxhY2tCZXJyeTo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJ
bnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUs
IGNvbnN0IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCit7CisgICAgaWYgKHNjcm9sbFZpZXcgIT0g
bV93ZWJQYWdlLT5kLT5tX21haW5GcmFtZS0+dmlldygpKQorICAgICAgICBtX3dlYlBhZ2UtPmJh
Y2tpbmdTdG9yZSgpLT5kLT5yZXBhaW50KHVwZGF0ZVJlY3QsIHRydWUgLypjb250ZW50Q2hhbmdl
ZCovLCB0cnVlIC8qaW1tZWRpYXRlKi8pOworICAgIGVsc2UgeworICAgICAgICBCYWNraW5nU3Rv
cmVDbGllbnQqIGJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lID0gbV93ZWJQYWdlLT5kLT5iYWNr
aW5nU3RvcmVDbGllbnRGb3JGcmFtZShtX3dlYlBhZ2UtPmQtPm1fbWFpbkZyYW1lKTsKKyAgICAg
ICAgQVNTRVJUKGJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKTsKKyAgICAgICAgYmFja2luZ1N0
b3JlQ2xpZW50Rm9yRnJhbWUtPmNoZWNrT3JpZ2luT2ZDdXJyZW50U2Nyb2xsT3BlcmF0aW9uKCk7
CisKKyAgICAgICAgbV93ZWJQYWdlLT5iYWNraW5nU3RvcmUoKS0+ZC0+c2xvd1Njcm9sbChkZWx0
YSwgdXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50
QmxhY2tCZXJyeTo6c2Nyb2xsKGNvbnN0IEludFNpemUmIGRlbHRhLCBjb25zdCBJbnRSZWN0JiBz
Y3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgLy8gRklYTUU6
IFRoZXJlJ3MgYSBjaGFuY2UgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGJ5IEZy
YW1lVmlldydzIGR0b3IKKyAgICAvLyB3aGVuIHRoZSBGcmFtZSdzIHZpZXcoKSBpcyBudWxsLiBX
ZSBwcm9iYWJseSB3YW50IHRvIGZpeCBpdCBpbiBhbm90aGVyIHdheSwgYnV0CisgICAgLy8gYXQg
dGhpcyBtb21lbnQgbGV0J3MgZG8gYSBxdWljayBmaXguCisgICAgaWYgKCFtX3dlYlBhZ2UtPmQt
Pm1fbWFpbkZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJhY2tpbmdTdG9y
ZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUgPSBtX3dlYlBhZ2UtPmQtPmJhY2tp
bmdTdG9yZUNsaWVudEZvckZyYW1lKG1fd2ViUGFnZS0+ZC0+bV9tYWluRnJhbWUpOworICAgIEFT
U0VSVChiYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZSk7CisgICAgYmFja2luZ1N0b3JlQ2xpZW50
Rm9yRnJhbWUtPmNoZWNrT3JpZ2luT2ZDdXJyZW50U2Nyb2xsT3BlcmF0aW9uKCk7CisKKyAgICBt
X3dlYlBhZ2UtPmJhY2tpbmdTdG9yZSgpLT5kLT5zY3JvbGwoZGVsdGEsIHNjcm9sbFZpZXdSZWN0
LCBjbGlwUmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsYWJs
ZUFyZWFzRGlkQ2hhbmdlKCkKK3sKKyAgICB0eXBlZGVmIEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEq
PiBTY3JvbGxhYmxlQXJlYVNldDsKKyAgICBjb25zdCBTY3JvbGxhYmxlQXJlYVNldCogc2Nyb2xs
YWJsZUFyZWFzID0gbV93ZWJQYWdlLT5kLT5tX3BhZ2UtPnNjcm9sbGFibGVBcmVhU2V0KCk7CisK
KyAgICBib29sIGhhc0F0TGVhc3RPbmVJblJlZ2lvblNjcm9sbGFibGVBcmVhID0gZmFsc2U7Cisg
ICAgU2Nyb2xsYWJsZUFyZWFTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGFibGVBcmVhcy0+ZW5k
KCk7CisgICAgZm9yIChTY3JvbGxhYmxlQXJlYVNldDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxhYmxl
QXJlYXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCkgIT0g
bV93ZWJQYWdlLT5kLT5tX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpIHsKKyAgICAgICAgICAg
IGhhc0F0TGVhc3RPbmVJblJlZ2lvblNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgbV93ZWJQYWdlLT5kLT5zZXRIYXNJblJl
Z2lvblNjcm9sbGFibGVBcmVhcyhoYXNBdExlYXN0T25lSW5SZWdpb25TY3JvbGxhYmxlQXJlYSk7
Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsUmVjdEludG9WaWV3KGNv
bnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QKK3sKKyAgICBtX3dlYlBhZ2Ut
PmQtPm5vdGlmeVRyYW5zZm9ybWVkU2Nyb2xsQ2hhbmdlZCgpOworfQorCitib29sIENocm9tZUNs
aWVudEJsYWNrQmVycnk6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKQoreworICAgIFRpbWVy
QmFzZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7CisgICAgcmV0dXJuIG1fd2ViUGFn
ZS0+Y2xpZW50KCktPnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKK30KKworS2V5Ym9hcmRV
SU1vZGUgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6a2V5Ym9hcmRVSU1vZGUoKQoreworICAgIGJv
b2wgdGFic1RvTGlua3MgPSB0cnVlOworI2lmIEVOQUJMRV9EUlQKKyAgICBpZiAobV93ZWJQYWdl
LT5kLT5tX2R1bXBSZW5kZXJUcmVlKQorICAgICAgICB0YWJzVG9MaW5rcyA9IER1bXBSZW5kZXJU
cmVlU3VwcG9ydDo6bGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbigpOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gdGFic1RvTGlua3MgPyBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzIDogS2V5Ym9hcmRB
Y2Nlc3NEZWZhdWx0OworfQorCitQbGF0Zm9ybVBhZ2VDbGllbnQgQ2hyb21lQ2xpZW50QmxhY2tC
ZXJyeTo6cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdl
LT5kOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQgQ2hyb21lQ2xpZW50Qmxh
Y2tCZXJyeTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wgdmFsdWUpCit7CisgICAgbV93ZWJQYWdlLT5k
LT5zZXROZWVkVG91Y2hFdmVudHModmFsdWUpOworfQorI2VuZGlmCisKK3ZvaWQgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVk
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tC
ZXJyeTo6bGF5b3V0VXBkYXRlZChXZWJDb3JlOjpGcmFtZSogZnJhbWUpIGNvbnN0Cit7CisgICAg
aWYgKGZyYW1lICE9IG1fd2ViUGFnZS0+ZC0+bV9tYWluRnJhbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fd2ViUGFnZS0+ZC0+bGF5b3V0RmluaXNoZWQoKTsKK30KKwordm9pZCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjpvdmVyZmxvd0V4Y2VlZHNDb250ZW50c1NpemUoV2ViQ29yZTo6RnJh
bWUqIGZyYW1lKSBjb25zdAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2UtPmQtPm1fbWFp
bkZyYW1lKQorICAgICAgICByZXR1cm47CisKKyNpZiBERUJVR19PVkVSRkxPV19ERVRFQ1RJT04K
KyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbEluZm8sICJDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpvdmVyZmxvd0V4Y2VlZHNDb250ZW50
c1NpemUgY29udGVudHM9JWR4JWQgb3ZlcmZsb3c9JWR4JWQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5yaWdodExheW91dE92ZXJmbG93KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmJv
dHRvbUxheW91dE92ZXJmbG93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCktPnJpZ2h0QWJzb2x1dGVWaXNpYmxlT3ZlcmZsb3coKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKS0+Ym90dG9tQWJz
b2x1dGVWaXNpYmxlT3ZlcmZsb3coKSk7CisjZW5kaWYKKyAgICBtX3dlYlBhZ2UtPmQtPm92ZXJm
bG93RXhjZWVkc0NvbnRlbnRzU2l6ZSgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVy
cnk6OmRpZERpc2NvdmVyRnJhbWVTZXQoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKSBjb25zdAorewor
ICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2UtPmQtPm1fbWFpbkZyYW1lKQorICAgICAgICByZXR1
cm47CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpMb2dMZXZlbEluZm8sICJDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWREaXNjb3ZlckZyYW1l
U2V0Iik7CisgICAgaWYgKG1fd2ViUGFnZS0+ZC0+bG9hZFN0YXRlKCkgPT0gV2ViUGFnZVByaXZh
dGU6OkNvbW1pdHRlZCkgeworICAgICAgICBtX3dlYlBhZ2UtPmQtPnNldFNob3VsZFVzZUZpeGVk
RGVza3RvcE1vZGUodHJ1ZSk7CisgICAgICAgIG1fd2ViUGFnZS0+ZC0+em9vbVRvSW5pdGlhbFNj
YWxlT25Mb2FkKCk7CisgICAgfQorfQorCitpbnQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cmVm
bG93V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPnJlZmxvd1dpZHRo
KCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y2hvb3NlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c3VwcG9ydHNGdWxsc2Ny
ZWVuRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVy
cnk6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIXN1cHBv
cnRzRnVsbHNjcmVlbkZvck5vZGUobm9kZSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2Vi
UGFnZS0+ZC0+ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKK30KKwordm9pZCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAg
ICBtX3dlYlBhZ2UtPmQtPmV4aXRGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKK30KKworI2lmIEVO
QUJMRShXRUJHTCkKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cmVxdWVzdFdlYkdMUGVy
bWlzc2lvbihGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIENTdHJp
bmcgbGF0aW5PcmlnaW4gPSBmcmFtZU9yaWdpbihmcmFtZSk7CisgICAgICAgIG1fd2ViUGFnZS0+
Y2xpZW50KCktPnJlcXVlc3RXZWJHTFBlcm1pc3Npb24obGF0aW5PcmlnaW4uZGF0YSgpKTsKKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShTVkcpCit2b2lkIENocm9tZUNsaWVudEJsYWNr
QmVycnk6OmRpZFNldFNWR1pvb21BbmRQYW4oRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBzaG9ydCB6
b29tQW5kUGFuKQoreworICAgIC8vIEZvciB0b3AtbGV2ZWwgU1ZHIGRvY3VtZW50LCB0aGVyZSBp
cyBubyB2aWV3cG9ydCB0YWcsIHdlIHVzZSB2aWV3cG9ydCdzIHVzZXItc2NhbGFibGUKKyAgICAv
LyB0byBlbmFibGUvZGlzYWJsZSB6b29tIHdoZW4gdG9wLWxldmVsIFNWRyBkb2N1bWVudCdzIHpv
b21BbmRQYW4gY2hhbmdlZC4gQmVjYXVzZSB0aGVyZSBpcyBubyB2aWV3cG9ydAorICAgIC8vIHRh
Zywgb3RoZXIgZmllbGRzIHdpdGggZGVmYXVsdCB2YWx1ZSBpbiBWaWV3cG9ydEFyZ3VtZW50cyBh
cmUgb2suCisgICAgaWYgKGZyYW1lID09IG1fd2ViUGFnZS0+ZC0+bV9wYWdlLT5tYWluRnJhbWUo
KSkgeworICAgICAgICBWaWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVudHM7CisgICAgICAgIHN3aXRj
aCAoem9vbUFuZFBhbikgeworICAgICAgICBjYXNlIFNWR1pvb21BbmRQYW46OlNWR19aT09NQU5E
UEFOX0RJU0FCTEU6CisgICAgICAgICAgICBhcmd1bWVudHMudXNlclNjYWxhYmxlID0gMDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNWR1pvb21BbmRQYW46OlNWR19aT09NQU5E
UEFOX01BR05JRlk6CisgICAgICAgICAgICBhcmd1bWVudHMudXNlclNjYWxhYmxlID0gMTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGRpZFJlY2VpdmVWaWV3cG9ydEFyZ3VtZW50cyhmcmFtZSwgYXJn
dW1lbnRzKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQor
V2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpu
b3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdAoreworICAgIHJldHVybiBXZWJLaXQ6Ok5vdGlm
aWNhdGlvblByZXNlbnRlckltcGw6Omluc3RhbmNlKCk7Cit9CisjZW5kaWYKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6YXR0
YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyKQoreworICAgIC8vIElmIHRoZSBncmFwaGljc0xheWVyIHBhcmFtZXRlciBpcyAwLCBX
ZWJDb3JlIGlzIGFjdHVhbGx5CisgICAgLy8gdHJ5aW5nIHRvIHJlbW92ZSBhIHByZXZpb3VzbHkg
YXR0YWNoZWQgbGF5ZXIuCisgICAgbV93ZWJQYWdlLT5kLT5zZXRSb290TGF5ZXJXZWJLaXRUaHJl
YWQoZnJhbWUsIGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkg
OiAwKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXROZWVkc09uZVNob3RE
cmF3aW5nU3luY2hyb25pemF0aW9uKCkKK3sKKyAgICBtX3dlYlBhZ2UtPmQtPnNldE5lZWRzT25l
U2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFj
a0JlcnJ5OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkKK3sKKyAgICBtX3dlYlBhZ2Ut
PmQtPnNjaGVkdWxlUm9vdExheWVyQ29tbWl0KCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50Qmxh
Y2tCZXJyeTo6YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCogQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cGxh
dGZvcm1XaW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPm1fY2xpZW50
LT53aW5kb3coKTsKK30KKwordm9pZCogQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cGxhdGZvcm1D
b21wb3NpdGluZ1dpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+bV9j
bGllbnQtPmNvbXBvc2l0aW5nV2luZG93KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRCbGFja0JlcnJ5LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdlZTkzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oCkBAIC0wLDAgKzEs
MTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpZm5kZWYgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeV9oCisjZGVmaW5lIENocm9tZUNsaWVu
dEJsYWNrQmVycnlfaAorCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisKK25hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFdl
YlBhZ2VQcml2YXRlOworfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENocm9t
ZUNsaWVudEJsYWNrQmVycnkgOiBwdWJsaWMgQ2hyb21lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBD
aHJvbWVDbGllbnRCbGFja0JlcnJ5KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZSopOworCisg
ICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9pZCogd2Vi
VmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH07CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgd2luZG93UmVjdCgp
OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCk7CisgICAgdmlydHVhbCBmbG9hdCBz
Y2FsZUZhY3RvcigpOworICAgIHZpcnR1YWwgdm9pZCBmb2N1cygpOworICAgIHZpcnR1YWwgdm9p
ZCB1bmZvY3VzKCk7CisgICAgdmlydHVhbCBib29sIGNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlv
bik7CisgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbik7CisgICAgdmly
dHVhbCB2b2lkIGZvY3VzZWROb2RlQ2hhbmdlZChOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGZv
Y3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRm9yY2VE
b2N1bWVudFN0eWxlU2VsZWN0b3JVcGRhdGUoKTsKKyAgICB2aXJ0dWFsIFBhZ2UqIGNyZWF0ZVdp
bmRvdyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0dXJl
cyYsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwor
ICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5Nb2RhbCgpOworICAgIHZpcnR1YWwgdm9pZCBydW5Nb2Rh
bCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCk7CisgICAgdmly
dHVhbCBib29sIHRvb2xiYXJzVmlzaWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNi
YXJWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGxiYXJzVmlzaWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRNZW51YmFyVmlz
aWJsZShib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWVudWJhclZpc2libGUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdl
VG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlSUQpOworICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFu
ZWwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0
IFN0cmluZyYsIEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93U29vbigpOwor
ICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqLCBjb25zdCBT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSosIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0KCk7CisgICAgdmlydHVhbCBLZXlib2FyZFVJTW9kZSBrZXlib2Fy
ZFVJTW9kZSgpOworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlV2luZG93KGNvbnN0IEludFJlY3QmLCBib29s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IElu
dFJlY3QmLCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xv
d1Njcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGJvb2wsIGNvbnN0IFNjcm9s
bFZpZXcqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFNpemUmLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxhYmxlQXJl
YXNEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIEludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0
IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNv
bnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdl
ZChGcmFtZSosIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
UmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1
bHQmLCB1bnNpZ25lZCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0
cmluZyYsIFRleHREaXJlY3Rpb24pOworI2lmIEVOQUJMRShFVkVOVF9NT0RFX01FVEFUQUdTKQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ3Vyc29yRXZlbnRNb2RlKEZyYW1lKiwgQ3Vyc29y
RXZlbnRNb2RlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVRvdWNoRXZlbnRN
b2RlKEZyYW1lKiwgVG91Y2hFdmVudE1vZGUpIGNvbnN0OworI2VuZGlmCisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJn
dW1lbnRzJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVj
dGlvbihXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIGV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlv
biopOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopOworICAgIHZpcnR1YWwgdm9pZCBydW5PcGVu
UGFuZWwoRnJhbWUqLCBXVEY6OlBhc3NSZWZQdHI8RmlsZUNob29zZXI+KTsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVJY29uTG9h
ZGVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopOworICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGxh
dGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0OworCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZlbnRzKGJvb2wpOwor
I2VuZGlmCisKKyNpZiBFTkFCTEUoSU5QVVRfQ09MT1IpCisgICAgdm9pZCBvcGVuQ29sb3JDaG9v
c2VyKENvbG9yQ2hvb3NlciosIGNvbnN0IENvbG9yJikgeyB9CisgICAgdm9pZCBjbGVhbnVwQ29s
b3JDaG9vc2VyKENvbG9yQ2hvb3NlciopIHsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRDb2xvcklu
Q29sb3JDaG9vc2VyKENvbG9yQ2hvb3NlciosIGNvbnN0IENvbG9yJikgeyB9CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVk
ZWQpOworICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KFNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
VXBkYXRlZChGcmFtZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBvdmVyZmxvd0V4Y2VlZHND
b250ZW50c1NpemUoRnJhbWUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzY292ZXJG
cmFtZVNldChGcmFtZSopIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgcmVmbG93V2lkdGgoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBGaWxlQ2hvb3NlciopOworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVs
bHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlKE5vZGUqKTsKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RX
ZWJHTFBlcm1pc3Npb24oRnJhbWUqKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpCisgICAgdmlydHVhbCBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXIqIG5vdGlmaWNh
dGlvblByZXNlbnRlcigpIGNvbnN0OworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIHZp
cnR1YWwgdm9pZCBkaWRTZXRTVkdab29tQW5kUGFuKEZyYW1lKiwgdW5zaWduZWQgc2hvcnQgem9v
bUFuZFBhbik7CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJl
Y3Rpb25Jc05hdHVyYWwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbUFsaWdubWVudEZv
bGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51
PiBjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudSgpIHsgfQorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NM
YXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNP
bmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7CisgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKSBjb25zdDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkKiBwbGF0
Zm9ybVdpbmRvdygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCogcGxhdGZvcm1Db21wb3NpdGlu
Z1dpbmRvdygpIGNvbnN0OworCisgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlKiB3ZWJQ
YWdlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlOyB9CisKK3ByaXZhdGU6CisgICAgQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlKiBtX3dlYlBhZ2U7Cit9OworCit9IC8vIFdlYkNvcmUKKwor
I2VuZGlmIC8vIENocm9tZUNsaWVudEJsYWNrQmVycnlfaAotLSAKMS43LjUuNAoK
</data>
<flag name="review"
          id="127077"
          type_id="1"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125767</attachid>
            <date>2012-02-06 22:02:30 -0800</date>
            <delta_ts>2012-02-07 18:25:16 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>0001-BlackBerry-Upstream-ChromeClientBlackBerry.-h-cpp.patch</filename>
            <type>text/plain</type>
            <size>36768</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSBmYTQ1ZjA3MzViMzgxODFiYjk1OTdiMGM1ZjUyZDVlMTZmNGIyNTI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBUdWUsIDcgRmViIDIwMTIgMTM6NTk6NTEgKzA4MDAKU3ViamVjdDogW1BBVENIXSBb
QmxhY2tCZXJyeV0gVXBzdHJlYW0gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS57aCwgY3BwfQogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3ODQzCgpSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0ZXN0cy4KCiogYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcDogQWRkZWQuCiog
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5Lmg6IEFkZGVk
LgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxMiArCiAuLi4vV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAg
ICAgICB8ICA4MjUgKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRCbGFja0JlcnJ5LmggICAgICAgIHwgIDE2MiArKysrCiAzIGZpbGVzIGNoYW5nZWQs
IDk5OSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0Jl
cnJ5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmgKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ4NjE2MjMu
LmM1MTU4ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTcgQEAKIDIwMTItMDItMDYgIExlbyBZYW5n
ICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBV
cHN0cmVhbSBDaHJvbWVDbGllbnRCbGFja0JlcnJ5LntoLCBjcHB9CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg0MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIGJsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
QmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oOiBBZGRlZC4KKworMjAxMi0wMi0wNiAgTGVvIFlh
bmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CisKICAgICAgICAgW0JsYWNrQmVycnld
IFVzZSBXZWJQYWdlUHJpdmF0ZSBpbnN0ZWFkIG9mIFdlYlBhZ2UgaW4gR2VvbG9jYXRpb25Db250
cm9sbGVyQ2xpZW50QmxhY2tCZXJyeQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzc5MjcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDIzZjMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSw4MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudEJsYWNrQmVycnkuaCIKKworI2luY2x1ZGUg
IkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1
ZGUgIkJhY2tpbmdTdG9yZV9wLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRh
dGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWVDbGllbnQuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnQuaCIKKyNp
bmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorI2luY2x1ZGUgIkZpbGVJY29uTG9hZGVyLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uQ29udHJvbGxlckNsaWVudEJsYWNrQmVycnkuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIkljb24uaCIKKyNpbmNsdWRlICJJbnB1dEhhbmRsZXIuaCIKKyNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVm
ZXJyZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBvcHVwTWVu
dUJsYWNrQmVycnkuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHWm9v
bUFuZFBhbi5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudUJsYWNrQmVycnkuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNoYXJlZFBvaW50ZXIuaCIKKyNpbmNs
dWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisjaW5jbHVkZSAiV2Vi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXaW5kb3dGZWF0
dXJlcy5oIgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgorI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmg+CisKKyNkZWZpbmUgREVCVUdfT1ZFUkZMT1dfREVU
RUNUSU9OIDAKKwordXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OldlYktpdDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ1N0cmluZyBmcmFtZU9yaWdpbihGcmFtZSogZnJhbWUp
Cit7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+ZG9tV2luZG93KCk7CisgICAgU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBDU3Ry
aW5nIGxhdGluT3JpZ2luID0gb3JpZ2luLT50b1N0cmluZygpLmxhdGluMSgpOworICAgIHJldHVy
biBsYXRpbk9yaWdpbjsKK30KKworQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Q2hyb21lQ2xpZW50
QmxhY2tCZXJyeShXZWJQYWdlUHJpdmF0ZSogcGFnZVByaXZhdGUpCisgICAgOiBtX3dlYlBhZ2VQ
cml2YXRlKHBhZ2VQcml2YXRlKQoreworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6
OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCkKK3sKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1w
UmVuZGVyVHJlZSkKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZS0+
YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZS5j
aGFyYWN0ZXJzKCksIG1lc3NhZ2UubGVuZ3RoKCksIHNvdXJjZUlELmNoYXJhY3RlcnMoKSwgc291
cmNlSUQubGVuZ3RoKCksIGxpbmVOdW1iZXIpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNr
QmVycnk6OnJ1bkphdmFTY3JpcHRBbGVydChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZSkgewor
ICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlLT5ydW5KYXZhU2NyaXB0
QWxlcnQobWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVGltZXJCYXNlOjpm
aXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsKKworICAgIENTdHJpbmcgbGF0aW5PcmlnaW4g
PSBmcmFtZU9yaWdpbihmcmFtZSk7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnJ1
bkphdmFTY3JpcHRBbGVydChtZXNzYWdlLmNoYXJhY3RlcnMoKSwgbWVzc2FnZS5sZW5ndGgoKSwg
bGF0aW5PcmlnaW4uZGF0YSgpLCBsYXRpbk9yaWdpbi5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1lLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVt
cFJlbmRlclRyZWUpCisgICAgICAgIHJldHVybiBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5k
ZXJUcmVlLT5ydW5KYXZhU2NyaXB0Q29uZmlybShtZXNzYWdlKTsKKyAgICBUaW1lckJhc2U6OmZp
cmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworCisgICAgQ1N0cmluZyBsYXRpbk9yaWdpbiA9
IGZyYW1lT3JpZ2luKGZyYW1lKTsKKyAgICByZXR1cm4gbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGll
bnQtPnJ1bkphdmFTY3JpcHRDb25maXJtKG1lc3NhZ2UuY2hhcmFjdGVycygpLCBtZXNzYWdlLmxl
bmd0aCgpLCBsYXRpbk9yaWdpbi5kYXRhKCksIGxhdGluT3JpZ2luLmxlbmd0aCgpKTsKKworfQor
Citib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVl
LCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBXZWJTdHJpbmcgY2xpZW50UmVzdWx0OworCisgICAg
aWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpIHsKKyAgICAgICAgcmVzdWx0
ID0gbV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZS0+cnVuSmF2YVNjcmlwdFByb21w
dChtZXNzYWdlLCBkZWZhdWx0VmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBUaW1lckJhc2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworCisgICAgQ1N0
cmluZyBsYXRpbk9yaWdpbiA9IGZyYW1lT3JpZ2luKGZyYW1lKTsKKyAgICBpZiAobV93ZWJQYWdl
UHJpdmF0ZS0+bV9jbGllbnQtPnJ1bkphdmFTY3JpcHRQcm9tcHQobWVzc2FnZS5jaGFyYWN0ZXJz
KCksIG1lc3NhZ2UubGVuZ3RoKCksIGRlZmF1bHRWYWx1ZS5jaGFyYWN0ZXJzKCksIGRlZmF1bHRW
YWx1ZS5sZW5ndGgoKSwgbGF0aW5PcmlnaW4uZGF0YSgpLCBsYXRpbk9yaWdpbi5sZW5ndGgoKSwg
Y2xpZW50UmVzdWx0KSkgeworICAgICAgICByZXN1bHQgPSBjbGllbnRSZXN1bHQ7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50QmxhY2tCZXJyeTo6Y2hyb21lRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpCit7CisgICAgcmV0dXJuOyAvLyBUaGUgd2luZG93IGRpbWVuc2lvbnMgYXJlIGZp
eGVkIGluIHRoZSBSSU0gcG9ydC4KK30KKworRmxvYXRSZWN0IENocm9tZUNsaWVudEJsYWNrQmVy
cnk6OndpbmRvd1JlY3QoKQoreworICAgIGNvbnN0IEludFNpemUgd2luZG93U2l6ZSA9IG1fd2Vi
UGFnZVByaXZhdGUtPm1fY2xpZW50LT53aW5kb3coKS0+d2luZG93U2l6ZSgpOworICAgIHJldHVy
biBGbG9hdFJlY3QoMCwgMCwgd2luZG93U2l6ZS53aWR0aCgpLCB3aW5kb3dTaXplLmhlaWdodCgp
KTsKK30KKworRmxvYXRSZWN0IENocm9tZUNsaWVudEJsYWNrQmVycnk6OnBhZ2VSZWN0KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworZmxv
YXQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2NhbGVGYWN0b3IoKQoreworICAgIHJldHVybiAx
LjBmOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmZvY3VzKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnVuZm9j
dXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50Qmxh
Y2tCZXJyeTo6Y2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVy
cnk6OnRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmZvY3VzZWROb2RlQ2hhbmdlZChOb2Rl
KiBub2RlKQoreworICAgIFdlYlBhZ2VDbGllbnQ6OkZvY3VzVHlwZSB0eXBlID0gV2ViUGFnZUNs
aWVudDo6Rm9jdXNVbmtub3duOworCisgICAgaWYgKCFub2RlKQorICAgICAgICB0eXBlID0gV2Vi
UGFnZUNsaWVudDo6Rm9jdXNOb25lOworICAgIGVsc2UgaWYgKG5vZGUtPmlzU1ZHRWxlbWVudCgp
KQorICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNTVkdFbGVtZW50OworICAgIGVs
c2UgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmFUYWcpKSB7CisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVu
dDo6Rm9jdXNMaW5rOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjppbnB1dFRhZykpIHsKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAg
IGlmIChpbnB1dEVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppc2luZGV4VGFnKSB8fCBp
bnB1dEVsZW1lbnQtPmlzSW5wdXRUeXBlSGlkZGVuKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9
IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRVbmtub3duOworICAgICAgICAgICAgZWxzZSBpZiAo
aW5wdXRFbGVtZW50LT5pc1RleHRCdXR0b24oKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2Vi
UGFnZUNsaWVudDo6Rm9jdXNJbnB1dEJ1dHRvbjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0
RWxlbWVudC0+aXNDaGVja2JveCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xp
ZW50OjpGb2N1c0lucHV0Q2hlY2tCb3g7CisjaWYgRU5BQkxFKElOUFVUX0NPTE9SKQorICAgICAg
ICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc0NvbG9yQ29udHJvbCgpKQorICAgICAgICAg
ICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0Q29sb3I7CisjZW5kaWYKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNEYXRlQ29udHJvbCgpKQorICAgICAg
ICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0RGF0ZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNEYXRlVGltZUNvbnRyb2woKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dERhdGVUaW1lOworICAgICAg
ICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc0RhdGVUaW1lTG9jYWxDb250cm9sKCkpCisg
ICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXREYXRlVGltZUxv
Y2FsOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc0VtYWlsRmllbGQoKSkK
KyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dEVtYWlsOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc0ZpbGVVcGxvYWQoKSkKKyAgICAg
ICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dEZpbGU7CisgICAgICAg
ICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgICAg
ICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dEltYWdlOworICAgICAgICAgICAg
ZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc01vbnRoQ29udHJvbCgpKQorICAgICAgICAgICAgICAg
IHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0TW9udGg7CisgICAgICAgICAgICBlbHNl
IGlmIChpbnB1dEVsZW1lbnQtPmlzTnVtYmVyRmllbGQoKSkKKyAgICAgICAgICAgICAgICB0eXBl
ID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dE51bWJlcjsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9
IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRQYXNzd29yZDsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBX
ZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0UmFkaW87CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1
dEVsZW1lbnQtPmlzUmFuZ2VDb250cm9sKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBh
Z2VDbGllbnQ6OkZvY3VzSW5wdXRSYW5nZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxl
bWVudC0+aXNSZXNldEJ1dHRvbigpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xp
ZW50OjpGb2N1c0lucHV0UmVzZXQ7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQt
PmlzU2VhcmNoRmllbGQoKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6
Rm9jdXNJbnB1dFNlYXJjaDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNT
dWJtaXRCdXR0b24oKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9j
dXNJbnB1dFN1Ym1pdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNUZWxl
cGhvbmVGaWVsZCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1
c0lucHV0VGVsZXBob25lOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1VS
TEZpZWxkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5w
dXRVUkw7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkp
CisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRUZXh0Owor
ICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1RpbWVDb250cm9sKCkpCisgICAg
ICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRUaW1lOworICAgICAg
ICAgICAgLy8gRklYTUU6IG1pc3NpbmcgV0VFSyBwb3B1cCBzZWxlY3RvcgorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0VW5r
bm93bjsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1n
VGFnKSkKKyAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0ltYWdlOworICAg
ICAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkKKyAg
ICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c09iamVjdDsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSkKKyAgICAgICAgICAg
IHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c1ZpZGVvOworICAgICAgICBlbHNlIGlmIChub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSkKKyAgICAgICAgICAgIHR5cGUgPSBX
ZWJQYWdlQ2xpZW50OjpGb2N1c1NlbGVjdDsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRleHRhcmVhVGFnKSkKKyAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdl
Q2xpZW50OjpGb2N1c1RleHRBcmVhOworICAgICAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Y2FudmFzVGFnKSkKKyAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50
OjpGb2N1c0NhbnZhczsKKyAgICB9CisKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFu
ZGxlci0+bm9kZUZvY3VzZWQobm9kZSk7CisKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVu
dC0+Zm9jdXNDaGFuZ2VkKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Pihub2RlKSk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Zm9jdXNlZEZyYW1lQ2hhbmdlZChGcmFtZSop
Cit7CisgICAgLy8gVG8gYmUgdXNlZCBieSBJbi1yZWdpb24gYmFja2luZyBzdG9yZSBjb250ZXh0
IHN3aXRjaGluZy4KK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzaG91bGRGb3Jj
ZURvY3VtZW50U3R5bGVTZWxlY3RvclVwZGF0ZSgpCit7CisgICAgcmV0dXJuICFtX3dlYlBhZ2VQ
cml2YXRlLT5tX3dlYlNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkgJiYgIW1fd2ViUGFn
ZVByaXZhdGUtPm1faW5wdXRIYW5kbGVyLT5wcm9jZXNzaW5nQ2hhbmdlKCk7Cit9CisKK1BhZ2Uq
IENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1l
TG9hZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiBmZWF0dXJlcywgY29u
c3QgTmF2aWdhdGlvbkFjdGlvbiYpCit7CisgICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVt
cFJlbmRlclRyZWUpIHsKKyAgICAgICAgaWYgKCFtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5k
ZXJUcmVlLT5hbGxvd3NPcGVuaW5nV2luZG93KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgUGFnZUdyb3VwTG9hZERlZmVycmVyIGRlZmVycmVyKG1fd2ViUGFnZVByaXZhdGUt
Pm1fcGFnZSwgdHJ1ZSk7CisgICAgVGltZXJCYXNlOjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExv
b3AoKTsKKworICAgIGludCB4ID0gZmVhdHVyZXMueFNldCA/IGZlYXR1cmVzLnggOiAwOworICAg
IGludCB5ID0gZmVhdHVyZXMueVNldCA/IGZlYXR1cmVzLnkgOiAwOworICAgIGludCB3aWR0aCA9
IGZlYXR1cmVzLndpZHRoU2V0PyBmZWF0dXJlcy53aWR0aCA6IC0xOworICAgIGludCBoZWlnaHQg
PSBmZWF0dXJlcy5oZWlnaHRTZXQgPyBmZWF0dXJlcy5oZWlnaHQgOiAtMTsKKyAgICB1bnNpZ25l
ZCBmbGFncyA9IDA7CisKKyAgICBpZiAoZmVhdHVyZXMubWVudUJhclZpc2libGUpCisgICAgICAg
IGZsYWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZsYWdXaW5kb3dIYXNNZW51QmFyOworICAgIGlmIChm
ZWF0dXJlcy5zdGF0dXNCYXJWaXNpYmxlKQorICAgICAgICBmbGFncyB8PSBXZWJQYWdlQ2xpZW50
OjpGbGFnV2luZG93SGFzU3RhdHVzQmFyOworICAgIGlmIChmZWF0dXJlcy50b29sQmFyVmlzaWJs
ZSkKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc1Rvb2xCYXI7
CisgICAgaWYgKGZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0g
V2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc0xvY2F0aW9uQmFyOworICAgIGlmIChmZWF0dXJl
cy5zY3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6Rmxh
Z1dpbmRvd0hhc1Njcm9sbEJhcjsKKyAgICBpZiAoZmVhdHVyZXMucmVzaXphYmxlKQorICAgICAg
ICBmbGFncyB8PSBXZWJQYWdlQ2xpZW50OjpGbGFnV2luZG93SXNSZXNpemFibGU7CisgICAgaWYg
KGZlYXR1cmVzLmZ1bGxzY3JlZW4pCisgICAgICAgIGZsYWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZs
YWdXaW5kb3dJc0Z1bGxTY3JlZW47CisgICAgaWYgKGZlYXR1cmVzLmRpYWxvZykKKyAgICAgICAg
ZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0lzRGlhbG9nOworCisgICAgV2ViUGFn
ZSogd2ViUGFnZSA9IG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5jcmVhdGVXaW5kb3coeCwg
eSwgd2lkdGgsIGhlaWdodCwgZmxhZ3MsIFdlYlN0cmluZyhyZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnVybCgpLnN0cmluZygpKSwgV2ViU3RyaW5nKHJlcXVlc3QuZnJhbWVOYW1lKCkpKTsKKyAg
ICBpZiAoIXdlYlBhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1fd2ViUGFnZVBy
aXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpCisgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fZHVt
cFJlbmRlclRyZWUtPndpbmRvd0NyZWF0ZWQod2ViUGFnZSk7CisKKyAgICByZXR1cm4gd2ViUGFn
ZS0+ZC0+bV9wYWdlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNob3coKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJy
eTo6Y2FuUnVuTW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk1vZGFsKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNl
bGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2VsZWN0SXRlbUFsaWdubWVudEZv
bGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bh
c3NSZWZQdHI8UG9wdXBNZW51PiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVQb3B1cE1l
bnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQb3B1cE1lbnVCbGFja0JlcnJ5KGNsaWVudCkpOworfQorCitQYXNzUmVmUHRyPFNlYXJj
aFBvcHVwTWVudT4gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51
KFBvcHVwTWVudUNsaWVudCogY2xpZW50KSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2VhcmNoUG9wdXBNZW51QmxhY2tCZXJyeShjbGllbnQpKTsKK30KKworCit2b2lkIENocm9t
ZUNsaWVudEJsYWNrQmVycnk6OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6dG9vbGJhcnNW
aXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0Jl
cnJ5OjpzdGF0dXNiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTY3JvbGxi
YXJzVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsYmFyc1Zpc2libGUoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNr
QmVycnk6OnNldE1lbnViYXJWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjptZW51YmFyVmlzaWJsZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50QmxhY2tCZXJyeTo6c2V0UmVzaXphYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjYW5SdW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lKikKK3sKKyAgICBpZiAobV93
ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFn
ZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUtPnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCht
ZXNzYWdlKTsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNsb3NlV2luZG93U29vbigpCit7CisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnNjaGVkdWxlQ2xvc2VXaW5kb3coKTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmlu
ZyYgc3RhdHVzKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5zZXRTdGF0dXMo
c3RhdHVzKTsKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZSkKKyAg
ICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZS0+c2V0U3RhdHVzVGV4dChz
dGF0dXMpOworfQorCitJbnRSZWN0IENocm9tZUNsaWVudEJsYWNrQmVycnk6OndpbmRvd1Jlc2l6
ZXJSZWN0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRS
ZWN0KCk7Cit9CisKK0ludFBvaW50IENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNjcmVlblRvV2lu
ZG93KGNvbnN0IEludFBvaW50JiBzY3JlZW5Qb3MpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgd2lu
ZG93UG9pbnQgPSBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+d2luZG93KCktPndpbmRvd0xv
Y2F0aW9uKCk7CisgICAgd2luZG93UG9pbnQubW92ZSgtc2NyZWVuUG9zLngoKSwgLXNjcmVlblBv
cy55KCkpOworICAgIHJldHVybiB3aW5kb3dQb2ludDsKK30KKworSW50UmVjdCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0KSBj
b25zdAoreworICAgIEludFJlY3Qgd2luZG93UG9pbnQod2luZG93UmVjdCk7CisgICAgSW50UG9p
bnQgbG9jYXRpb24obV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPndpbmRvdygpLT53aW5kb3dM
b2NhdGlvbigpKTsKKyAgICB3aW5kb3dQb2ludC5tb3ZlKGxvY2F0aW9uLngoKSwgbG9jYXRpb24u
eSgpKTsKKyAgICByZXR1cm4gd2luZG93UG9pbnQ7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50Qmxh
Y2tCZXJyeTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJGbGFncykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNldFRvb2xUaXAoY29uc3QgU3Ry
aW5nJiB0b29sdGlwLCBUZXh0RGlyZWN0aW9uKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1f
Y2xpZW50LT5zZXRUb29sVGlwKHRvb2x0aXApOworfQorCisjaWYgRU5BQkxFKEVWRU5UX01PREVf
TUVUQVRBR1MpCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmRpZFJlY2VpdmVDdXJzb3JF
dmVudE1vZGUoRnJhbWUqIGZyYW1lLCBDdXJzb3JFdmVudE1vZGUgbW9kZSkgY29uc3QKK3sKKyAg
ICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9tYWluRnJhbWUgIT0gZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fd2ViUGFnZVByaXZhdGUtPmRpZFJlY2VpdmVDdXJzb3JFdmVudE1vZGUo
bW9kZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlkUmVjZWl2ZVRvdWNo
RXZlbnRNb2RlKEZyYW1lKiBmcmFtZSwgVG91Y2hFdmVudE1vZGUgbW9kZSkgY29uc3QKK3sKKyAg
ICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9tYWluRnJhbWUgIT0gZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fd2ViUGFnZVByaXZhdGUtPmRpZFJlY2VpdmVUb3VjaEV2ZW50TW9kZSht
b2RlKTsKK30KKyNlbmRpZgorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNo
Vmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiBhcmd1
bWVudHMpIGNvbnN0Cit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+ZGlzcGF0Y2hWaWV3cG9ydFBy
b3BlcnRpZXNEaWRDaGFuZ2UoYXJndW1lbnRzKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFj
a0JlcnJ5OjpwcmludChGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqIGZy
YW1lLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVt
cFJlbmRlclRyZWUpIHsKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJl
ZS0+ZXhjZWVkZWREYXRhYmFzZVF1b3RhKG9yaWdpbiwgbmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBEYXRhYmFzZVRyYWNrZXImIHRyYWNrZXIgPSBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFVzYWdlID0gdHJhY2tl
ci50b3RhbERhdGFiYXNlVXNhZ2UoKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgb3JpZ2luVXNh
Z2UgPSB0cmFja2VyLnVzYWdlRm9yT3JpZ2luKG9yaWdpbik7CisKKyAgICBEYXRhYmFzZURldGFp
bHMgZGV0YWlscyA9IHRyYWNrZXIuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4obmFtZSwgb3JpZ2lu
KTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGRldGFpbHMuZXhwZWN0
ZWRVc2FnZSgpOworICAgIGNvbnN0IFN0cmluZyYgbmFtZVN0ciA9IGRldGFpbHMuZGlzcGxheU5h
bWUoKTsKKworICAgIFN0cmluZyBvcmlnaW5TdHIgPSBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHF1b3RhID0gbV93ZWJQYWdlUHJpdmF0ZS0+
bV9jbGllbnQtPmRhdGFiYXNlUXVvdGEob3JpZ2luU3RyLmNoYXJhY3RlcnMoKSwgb3JpZ2luU3Ry
Lmxlbmd0aCgpLAorICAgICAgICBuYW1lU3RyLmNoYXJhY3RlcnMoKSwgbmFtZVN0ci5sZW5ndGgo
KSwgdG90YWxVc2FnZSwgb3JpZ2luVXNhZ2UsIGVzdGltYXRlZFNpemUpOworCisgICAgdHJhY2tl
ci5zZXRRdW90YShvcmlnaW4sIHF1b3RhKTsKKyNlbmRpZgorfQorCit2b2lkIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSog
ZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fd2ViUGFnZVBy
aXZhdGUtPm1fd2ViU2V0dGluZ3MtPmlzR2VvbG9jYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAg
Z2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+ZG9tV2luZG93KCk7CisgICAgaWYgKCF3
aW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFt
ZU9yaWdpbihmcmFtZSk7CisKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+cmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihtX3dlYlBhZ2VQcml2YXRlLT5tX2dlb2xvY2F0aW9uQ2xp
ZW50LCBnZW9sb2NhdGlvbiwgbGF0aW5PcmlnaW4uZGF0YSgpLCBsYXRpbk9yaWdpbi5sZW5ndGgo
KSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y2FuY2VsR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9u
KQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5jYW5jZWxHZW9sb2NhdGlvblBl
cm1pc3Npb24obV93ZWJQYWdlUHJpdmF0ZS0+bV9nZW9sb2NhdGlvbkNsaWVudCwgZ2VvbG9jYXRp
b24pOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk9wZW5QYW5lbChXZWJD
b3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IGNob29zZXIpCit7
CisgICAgU2hhcmVkQXJyYXk8V2ViU3RyaW5nPiBpbml0aWFsRmlsZXM7CisgICAgdW5zaWduZWQg
aW50IGluaXRpYWxGaWxlU2l6ZSA9IGNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlcy5z
aXplKCk7CisgICAgaWYgKGluaXRpYWxGaWxlU2l6ZSA+IDApCisgICAgICAgIGluaXRpYWxGaWxl
cy5yZXNldChuZXcgV2ViU3RyaW5nW2luaXRpYWxGaWxlU2l6ZV0pOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbml0aWFsRmlsZVNpemU7ICsraSkKKyAgICAgICAgaW5pdGlhbEZpbGVz
W2ldID0gY2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzW2ldOworCisgICAgU2hhcmVk
QXJyYXk8V2ViU3RyaW5nPiBjaG9zZW5GaWxlczsKKyAgICB1bnNpZ25lZCBpbnQgY2hvc2VuRmls
ZVNpemU7CisKKyAgICB7CisgICAgICAgIFBhZ2VHcm91cExvYWREZWZlcnJlciBkZWZlcnJlciht
X3dlYlBhZ2VQcml2YXRlLT5tX3BhZ2UsIHRydWUpOworICAgICAgICBUaW1lckJhc2U6OmZpcmVU
aW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworCisgICAgICAgIC8vIEZJWE1FOiBVc2UgY2hvb3Nl
ci0+c2V0dGluZ3MoKS5hY2NlcHRNSU1FVHlwZXMgaW5zdGVhZCBvZiBXZWJTdHJpbmcoKSBmb3Ig
dGhlIHNlY29uZCBwYXJhbWV0ZXIuCisgICAgICAgIGlmICghbV93ZWJQYWdlUHJpdmF0ZS0+bV9j
bGllbnQtPmNob29zZUZpbGVuYW1lcyhjaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93c011bHRpcGxl
RmlsZXMsIFdlYlN0cmluZygpLCBpbml0aWFsRmlsZXMsIGluaXRpYWxGaWxlU2l6ZSwgY2hvc2Vu
RmlsZXMsIGNob3NlbkZpbGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBWZWN0b3I8U3RyaW5nPiBmaWxlcyhjaG9zZW5GaWxlU2l6ZSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNob3NlbkZpbGVTaXplOyArK2kpCisgICAgICAgIGZpbGVzW2ldID0gY2hv
c2VuRmlsZXNbaV07CisgICAgY2hvb3Nlci0+Y2hvb3NlRmlsZXMoZmlsZXMpOworfQorCit2b2lk
IENocm9tZUNsaWVudEJsYWNrQmVycnk6OmxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcywgRmlsZUljb25Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBsb2FkZXIt
Pm5vdGlmeUZpbmlzaGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVy
cnk6OmZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIG1fd2ViUGFn
ZVByaXZhdGUtPm1faW5wdXRIYW5kbGVyLT5ub2RlVGV4dENoYW5nZWQobm9kZSk7Cit9CisKK3Zv
aWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tC
ZXJyeTo6Y29udGVudHNTaXplQ2hhbmdlZChXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKGZyYW1lICE9IG1fd2ViUGFn
ZVByaXZhdGUtPm1fbWFpbkZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYlBhZ2VQ
cml2YXRlLT5jb250ZW50c1NpemVDaGFuZ2VkKHNpemUpOworfQorCit2b2lkIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OmludmFsaWRhdGVXaW5kb3coY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
Ym9vbCBpbW1lZGlhdGUpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9iYWNraW5nU3RvcmUt
PmQtPnJlcGFpbnQodXBkYXRlUmVjdCwgZmFsc2UgLypjb250ZW50Q2hhbmdlZCovLCBpbW1lZGlh
dGUpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmludmFsaWRhdGVDb250ZW50
c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKK3sK
KyAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2JhY2tpbmdTdG9yZS0+ZC0+cmVwYWludCh1cGRhdGVS
ZWN0LCB0cnVlIC8qY29udGVudENoYW5nZWQqLywgaW1tZWRpYXRlKTsKK30KKwordm9pZCBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5OjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0
IEludFNpemUmIGRlbHRhLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0
ZSwgY29uc3QgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sKKyAgICBpZiAoc2Nyb2xsVmlldyAh
PSBtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5GcmFtZS0+dmlldygpKQorICAgICAgICBtX3dlYlBh
Z2VQcml2YXRlLT5tX2JhY2tpbmdTdG9yZS0+ZC0+cmVwYWludCh1cGRhdGVSZWN0LCB0cnVlIC8q
Y29udGVudENoYW5nZWQqLywgdHJ1ZSAvKmltbWVkaWF0ZSovKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgQmFja2luZ1N0b3JlQ2xpZW50KiBiYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZSA9IG1fd2Vi
UGFnZVByaXZhdGUtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKG1fd2ViUGFnZVByaXZhdGUt
Pm1fbWFpbkZyYW1lKTsKKyAgICAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1l
KTsKKyAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUtPmNoZWNrT3JpZ2luT2ZDdXJy
ZW50U2Nyb2xsT3BlcmF0aW9uKCk7CisKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9iYWNr
aW5nU3RvcmUtPmQtPnNsb3dTY3JvbGwoZGVsdGEsIHVwZGF0ZVJlY3QsIGltbWVkaWF0ZSk7Cisg
ICAgfQorfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNjcm9sbChjb25zdCBJbnRT
aXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KQoreworICAgIC8vIEZJWE1FOiBUaGVyZSdzIGEgY2hhbmNlIHRoZSBmdW5jdGlv
biBpcyBjYWxsZWQgaW5kaXJlY3RseSBieSBGcmFtZVZpZXcncyBkdG9yCisgICAgLy8gd2hlbiB0
aGUgRnJhbWUncyB2aWV3KCkgaXMgbnVsbC4gV2UgcHJvYmFibHkgd2FudCB0byBmaXggaXQgaW4g
YW5vdGhlciB3YXksIGJ1dAorICAgIC8vIGF0IHRoaXMgbW9tZW50IGxldCdzIGRvIGEgcXVpY2sg
Zml4LgorICAgIGlmICghbV93ZWJQYWdlUHJpdmF0ZS0+bV9tYWluRnJhbWUtPnZpZXcoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBiYWNraW5nU3RvcmVDbGll
bnRGb3JGcmFtZSA9IG1fd2ViUGFnZVByaXZhdGUtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1l
KG1fd2ViUGFnZVByaXZhdGUtPm1fbWFpbkZyYW1lKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3Jl
Q2xpZW50Rm9yRnJhbWUpOworICAgIGJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lLT5jaGVja09y
aWdpbk9mQ3VycmVudFNjcm9sbE9wZXJhdGlvbigpOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+
bV9iYWNraW5nU3RvcmUtPmQtPnNjcm9sbChkZWx0YSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0
KTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzY3JvbGxhYmxlQXJlYXNEaWRD
aGFuZ2UoKQoreworICAgIHR5cGVkZWYgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+IFNjcm9sbGFi
bGVBcmVhU2V0OworICAgIGNvbnN0IFNjcm9sbGFibGVBcmVhU2V0KiBzY3JvbGxhYmxlQXJlYXMg
PSBtX3dlYlBhZ2VQcml2YXRlLT5tX3BhZ2UtPnNjcm9sbGFibGVBcmVhU2V0KCk7CisKKyAgICBi
b29sIGhhc0F0TGVhc3RPbmVJblJlZ2lvblNjcm9sbGFibGVBcmVhID0gZmFsc2U7CisgICAgU2Ny
b2xsYWJsZUFyZWFTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNjcm9sbGFibGVBcmVhcy0+ZW5kKCk7Cisg
ICAgZm9yIChTY3JvbGxhYmxlQXJlYVNldDo6aXRlcmF0b3IgaXQgPSBzY3JvbGxhYmxlQXJlYXMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCkgIT0gbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSB7CisgICAgICAgICAgICBo
YXNBdExlYXN0T25lSW5SZWdpb25TY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fd2ViUGFnZVByaXZhdGUtPnNldEhhc0lu
UmVnaW9uU2Nyb2xsYWJsZUFyZWFzKGhhc0F0TGVhc3RPbmVJblJlZ2lvblNjcm9sbGFibGVBcmVh
KTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzY3JvbGxSZWN0SW50b1ZpZXco
Y29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdAoreworICAgIG1fd2ViUGFn
ZVByaXZhdGUtPm5vdGlmeVRyYW5zZm9ybWVkU2Nyb2xsQ2hhbmdlZCgpOworfQorCitib29sIENo
cm9tZUNsaWVudEJsYWNrQmVycnk6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKQoreworICAg
IFRpbWVyQmFzZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7CisgICAgcmV0dXJuIG1f
d2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5zaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7Cit9
CisKK0tleWJvYXJkVUlNb2RlIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmtleWJvYXJkVUlNb2Rl
KCkKK3sKKyAgICBib29sIHRhYnNUb0xpbmtzID0gdHJ1ZTsKKyNpZiBFTkFCTEVfRFJUCisgICAg
aWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpCisgICAgICAgIHRhYnNUb0xp
bmtzID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7
CisjZW5kaWYKKworICAgIHJldHVybiB0YWJzVG9MaW5rcyA/IEtleWJvYXJkQWNjZXNzVGFic1Rv
TGlua3MgOiBLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7Cit9CisKK1BsYXRmb3JtUGFnZUNsaWVudCBD
aHJvbWVDbGllbnRCbGFja0JlcnJ5OjpwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3dlYlBhZ2VQcml2YXRlOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
K3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wgdmFsdWUp
Cit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+c2V0TmVlZFRvdWNoRXZlbnRzKHZhbHVlKTsKK30K
KyNlbmRpZgorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJlYWNoZWRNYXhBcHBDYWNo
ZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmxheW91dFVwZGF0ZWQoV2ViQ29yZTo6RnJh
bWUqIGZyYW1lKSBjb25zdAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQcml2YXRlLT5t
X21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bGF5
b3V0RmluaXNoZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpvdmVyZmxv
d0V4Y2VlZHNDb250ZW50c1NpemUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKSBjb25zdAoreworICAg
IGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKKyAgICAgICAgcmV0
dXJuOworCisjaWYgREVCVUdfT1ZFUkZMT1dfREVURUNUSU9OCisgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6b3ZlcmZsb3dFeGNlZWRzQ29udGVudHNTaXplIGNvbnRlbnRzPSVkeCVk
IG92ZXJmbG93PSVkeCVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKS0+cmlnaHRMYXlvdXRPdmVyZmxvdygpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5ib3R0b21MYXlvdXRPdmVyZmxvdygp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5y
aWdodEFic29sdXRlVmlzaWJsZU92ZXJmbG93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmJvdHRvbUFic29sdXRlVmlzaWJsZU92ZXJmbG93
KCkpOworI2VuZGlmCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+b3ZlcmZsb3dFeGNlZWRzQ29udGVu
dHNTaXplKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlkRGlzY292ZXJG
cmFtZVNldChXZWJDb3JlOjpGcmFtZSogZnJhbWUpIGNvbnN0Cit7CisgICAgaWYgKGZyYW1lICE9
IG1fd2ViUGFnZVByaXZhdGUtPm1fbWFpbkZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbElu
Zm8sICJDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWREaXNjb3ZlckZyYW1lU2V0Iik7CisgICAg
aWYgKG1fd2ViUGFnZVByaXZhdGUtPmxvYWRTdGF0ZSgpID09IFdlYlBhZ2VQcml2YXRlOjpDb21t
aXR0ZWQpIHsKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+c2V0U2hvdWxkVXNlRml4ZWREZXNr
dG9wTW9kZSh0cnVlKTsKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+em9vbVRvSW5pdGlhbFNj
YWxlT25Mb2FkKCk7CisgICAgfQorfQorCitpbnQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cmVm
bG93V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2VQcml2YXRlLT5yZWZsb3dX
aWR0aCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNob29zZUljb25Gb3JG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnN1cHBvcnRzRnVs
bHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFj
a0JlcnJ5OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFz
dXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3dlYlBhZ2VQcml2YXRlLT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworfQorCit2b2lk
IENocm9tZUNsaWVudEJsYWNrQmVycnk6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2Rl
KQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPmV4aXRGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsK
K30KKworI2lmIEVOQUJMRShXRUJHTCkKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cmVx
dWVzdFdlYkdMUGVybWlzc2lvbihGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKGZyYW1lKSB7Cisg
ICAgICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFtZU9yaWdpbihmcmFtZSk7CisgICAgICAg
IG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5yZXF1ZXN0V2ViR0xQZXJtaXNzaW9uKGxhdGlu
T3JpZ2luLmRhdGEoKSk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWRTZXRTVkdab29tQW5kUGFuKEZyYW1lKiBmcmFt
ZSwgdW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbikKK3sKKyAgICAvLyBGb3IgdG9wLWxldmVsIFNW
RyBkb2N1bWVudCwgdGhlcmUgaXMgbm8gdmlld3BvcnQgdGFnLCB3ZSB1c2Ugdmlld3BvcnQncyB1
c2VyLXNjYWxhYmxlCisgICAgLy8gdG8gZW5hYmxlL2Rpc2FibGUgem9vbSB3aGVuIHRvcC1sZXZl
bCBTVkcgZG9jdW1lbnQncyB6b29tQW5kUGFuIGNoYW5nZWQuIEJlY2F1c2UgdGhlcmUgaXMgbm8g
dmlld3BvcnQKKyAgICAvLyB0YWcsIG90aGVyIGZpZWxkcyB3aXRoIGRlZmF1bHQgdmFsdWUgaW4g
Vmlld3BvcnRBcmd1bWVudHMgYXJlIG9rLgorICAgIGlmIChmcmFtZSA9PSBtX3dlYlBhZ2VQcml2
YXRlLT5tX3BhZ2UtPm1haW5GcmFtZSgpKSB7CisgICAgICAgIFZpZXdwb3J0QXJndW1lbnRzIGFy
Z3VtZW50czsKKyAgICAgICAgc3dpdGNoICh6b29tQW5kUGFuKSB7CisgICAgICAgIGNhc2UgU1ZH
Wm9vbUFuZFBhbjo6U1ZHX1pPT01BTkRQQU5fRElTQUJMRToKKyAgICAgICAgICAgIGFyZ3VtZW50
cy51c2VyU2NhbGFibGUgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1ZH
Wm9vbUFuZFBhbjo6U1ZHX1pPT01BTkRQQU5fTUFHTklGWToKKyAgICAgICAgICAgIGFyZ3VtZW50
cy51c2VyU2NhbGFibGUgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGlkUmVjZWl2ZVZpZXdw
b3J0QXJndW1lbnRzKGZyYW1lLCBhcmd1bWVudHMpOworICAgIH0KK30KKyNlbmRpZgorCisjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCitXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXIqIENo
cm9tZUNsaWVudEJsYWNrQmVycnk6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6aW5zdGFuY2UoKTsK
K30KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUs
IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgLy8gSWYgdGhlIGdyYXBoaWNz
TGF5ZXIgcGFyYW1ldGVyIGlzIDAsIFdlYkNvcmUgaXMgYWN0dWFsbHkKKyAgICAvLyB0cnlpbmcg
dG8gcmVtb3ZlIGEgcHJldmlvdXNseSBhdHRhY2hlZCBsYXllci4KKyAgICBtX3dlYlBhZ2VQcml2
YXRlLT5zZXRSb290TGF5ZXJXZWJLaXRUaHJlYWQoZnJhbWUsIGdyYXBoaWNzTGF5ZXIgPyBncmFw
aGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRC
bGFja0JlcnJ5OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKK3sKKyAg
ICBtX3dlYlBhZ2VQcml2YXRlLT5zZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9u
KCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyU3luYygpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+c2NoZWR1bGVSb290TGF5ZXJD
b21taXQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjphbGxvd3NBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgor
Cit2b2lkKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpwbGF0Zm9ybVdpbmRvdygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT53aW5kb3coKTsKK30KKwor
dm9pZCogQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cGxhdGZvcm1Db21wb3NpdGluZ1dpbmRvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5jb21wb3Np
dGluZ1dpbmRvdygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tC
ZXJyeS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEJsYWNrQmVycnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTYx
NWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIENo
cm9tZUNsaWVudEJsYWNrQmVycnlfaAorI2RlZmluZSBDaHJvbWVDbGllbnRCbGFja0JlcnJ5X2gK
KworI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7Citu
YW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcml2YXRlOworfQorfQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENocm9tZUNsaWVudEJsYWNrQmVycnkgOiBwdWJsaWMgQ2hy
b21lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBDaHJvbWVDbGllbnRCbGFja0JlcnJ5KEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVE
ZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiAw
OyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZm9jdXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpOworICAgIHZpcnR1
YWwgYm9vbCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB0
YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkTm9kZUNo
YW5nZWQoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1l
Kik7CisgICAgdmlydHVhbCBib29sIHNob3VsZEZvcmNlRG9jdW1lbnRTdHlsZVNlbGVjdG9yVXBk
YXRlKCk7CisgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVXaW5kb3coRnJhbWUqLCBjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2luZG93RmVhdHVyZXMmLCBjb25zdCBOYXZpZ2F0aW9uQWN0
aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHNob3coKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUnVu
TW9kYWwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCB0b29sYmFyc1Zpc2li
bGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVmlzaWJsZShib29sKTsKKyAgICB2
aXJ0dWFsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3Jv
bGxiYXJzVmlzaWJsZShib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCk7CisgICAgdmlydHVh
bCBib29sIG1lbnViYXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFJlc2l6YWJsZShi
b29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNl
LCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2ln
bmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCk7CisgICAgdmlydHVhbCBib29s
IHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmLCBGcmFtZSopOworICAg
IHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2
YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIHJ1
bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBi
b29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwor
ICAgIHZpcnR1YWwgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsKKyAgICB2aXJ0dWFs
IEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50U2l6ZSYs
IGNvbnN0IEludFJlY3QmLCBib29sLCBjb25zdCBTY3JvbGxWaWV3Kik7CisgICAgdmlydHVhbCB2
b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFzRGlkQ2hhbmdlKCk7CisgICAgdmly
dHVhbCBJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAg
IHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXpl
JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRS
ZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBtb3VzZURp
ZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgaW50KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKTsK
KyNpZiBFTkFCTEUoRVZFTlRfTU9ERV9NRVRBVEFHUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUN1cnNvckV2ZW50TW9kZShGcmFtZSosIEN1cnNvckV2ZW50TW9kZSkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVUb3VjaEV2ZW50TW9kZShGcmFtZSosIFRvdWNoRXZlbnRN
b2RlKSBjb25zdDsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0UHJv
cGVydGllc0RpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oV2ViQ29yZTo6U2Nyb2xsRGly
ZWN0aW9uKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIG51bVdoZWVs
RXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmlu
dChGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUq
LCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9j
YXRpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgV1RGOjpQYXNz
UmVmUHRyPEZpbGVDaG9vc2VyPik7CisgICAgdmlydHVhbCB2b2lkIGxvYWRJY29uRm9yRmlsZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlSWNvbkxvYWRlciopOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhp
ZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRl
RGlkQ2hhbmdlKGNvbnN0IE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVE
aWRDaGFuZ2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9y
bVBhZ2VDbGllbnQoKSBjb25zdDsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmly
dHVhbCB2b2lkIG5lZWRUb3VjaEV2ZW50cyhib29sKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKElO
UFVUX0NPTE9SKQorICAgIHZvaWQgb3BlbkNvbG9yQ2hvb3NlcihDb2xvckNob29zZXIqLCBjb25z
dCBDb2xvciYpIHsgfQorICAgIHZvaWQgY2xlYW51cENvbG9yQ2hvb3NlcihDb2xvckNob29zZXIq
KSB7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkQ29sb3JJbkNvbG9yQ2hvb3NlcihDb2xvckNob29z
ZXIqLCBjb25zdCBDb2xvciYpIHsgfQorI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgcmVhY2hl
ZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShTZWN1cml0eU9yaWdpbiosIGludDY0
X3QpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgb3ZlcmZsb3dFeGNlZWRzQ29udGVudHNTaXplKEZyYW1lKikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc2NvdmVyRnJhbWVTZXQoRnJhbWUqKSBjb25zdDsK
KworICAgIHZpcnR1YWwgaW50IHJlZmxvd1dpZHRoKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIq
KTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5v
ZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7Cisg
ICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisjaWYgRU5BQkxF
KFdFQkdMKQorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0V2ViR0xQZXJtaXNzaW9uKEZyYW1lKik7
CisjZW5kaWYKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorICAgIHZpcnR1YWwgV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdDsK
KyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0U1ZHWm9v
bUFuZFBhbihGcmFtZSosIHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pOworI2VuZGlmCisgICAg
dmlydHVhbCBib29sIHNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCk7CisgICAg
dmlydHVhbCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rp
b24oKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UG9wdXBNZW51PiBjcmVhdGVQ
b3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51
KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzaG93
Q29udGV4dE1lbnUoKSB7IH0KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xh
eWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygp
OworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3Q7
CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCogcGxhdGZvcm1XaW5kb3coKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQqIHBsYXRmb3JtQ29tcG9zaXRpbmdXaW5kb3coKSBjb25zdDsKKworICAg
IEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRlKCkgY29u
c3QgeyByZXR1cm4gbV93ZWJQYWdlUHJpdmF0ZTsgfQorCitwcml2YXRlOgorICAgIEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIG1fd2ViUGFnZVByaXZhdGU7Cit9OworCit9IC8v
IFdlYkNvcmUKKworI2VuZGlmIC8vIENocm9tZUNsaWVudEJsYWNrQmVycnlfaAotLSAKMS43LjUu
NAoK
</data>
<flag name="review"
          id="127357"
          type_id="1"
          status="-"
          setter="rwlbuis"
    />
    <flag name="commit-queue"
          id="127459"
          type_id="3"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125976</attachid>
            <date>2012-02-07 18:25:16 -0800</date>
            <delta_ts>2012-02-07 18:49:21 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>0001-BlackBerry-Upstream-ChromeClientBlackBerry.-h-cpp.patch</filename>
            <type>text/plain</type>
            <size>36729</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSA5MjU2ZDAyNWEyYjM0NWE4Njg2NWYzMjNmYzhhOTc5NGM4OTQzZDliIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBXZWQsIDggRmViIDIwMTIgMTA6MjM6MzQgKzA4MDAKU3ViamVjdDogW1BBVENIXSBb
QmxhY2tCZXJyeV0gVXBzdHJlYW0gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS57aCwgY3BwfQogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3ODQzCgpSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0ZXN0cy4KCiogYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcDogQWRkZWQuCiog
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5Lmg6IEFkZGVk
LgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxMiArCiAuLi4vV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAg
ICAgICB8ICA4NDMgKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRCbGFja0JlcnJ5LmggICAgICAgIHwgIDE2MiArKysrCiAzIGZpbGVzIGNoYW5nZWQs
IDEwMTcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tC
ZXJyeS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0ODYxNjIz
Li4xMzg0ODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAyLTA3ICBMZW8gWWFu
ZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW0gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS57aCwgY3BwfQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4NDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBubyBuZXcg
dGVzdHMuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaDogQWRkZWQuCisKIDIwMTItMDItMDYgIExlbyBZ
YW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFja0JlcnJ5
XSBVc2UgV2ViUGFnZVByaXZhdGUgaW5zdGVhZCBvZiBXZWJQYWdlIGluIEdlb2xvY2F0aW9uQ29u
dHJvbGxlckNsaWVudEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTlhY2ZmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEJsYWNrQmVycnkuY3BwCkBAIC0wLDAgKzEsODQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRCbGFja0JlcnJ5LmgiCisKKyNpbmNsdWRl
ICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNs
dWRlICJCYWNraW5nU3RvcmVfcC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJE
YXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlQ2xpZW50LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0LmgiCisj
aW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9s
b2NhdGlvbkNvbnRyb2xsZXJDbGllbnRCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKKyNpbmNsdWRlICJJY29uLmgiCisjaW5jbHVkZSAiSW5wdXRIYW5kbGVyLmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERl
ZmVycmVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQb3B1cE1l
bnVCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR1pv
b21BbmRQYW4uaCIKKyNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5LmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTaGFyZWRQb2ludGVyLmgiCisjaW5j
bHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgorI2luY2x1ZGUgIldl
YlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgorCisjZGVmaW5lIERFQlVHX09WRVJGTE9XX0RF
VEVDVElPTiAwCisKK3VzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpXZWJLaXQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENTdHJpbmcgZnJhbWVPcmlnaW4oRnJhbWUqIGZyYW1l
KQoreworICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRvdygpOworICAgIFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3aW5kb3ctPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgQ1N0
cmluZyBsYXRpbk9yaWdpbiA9IG9yaWdpbi0+dG9TdHJpbmcoKS5sYXRpbjEoKTsKKyAgICByZXR1
cm4gbGF0aW5PcmlnaW47Cit9CisKK0Nocm9tZUNsaWVudEJsYWNrQmVycnk6OkNocm9tZUNsaWVu
dEJsYWNrQmVycnkoV2ViUGFnZVByaXZhdGUqIHBhZ2VQcml2YXRlKQorICAgIDogbV93ZWJQYWdl
UHJpdmF0ZShwYWdlUHJpdmF0ZSkKK3sKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5
OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlSUQpCit7CisjaWYgRU5BQkxFX0RSVAorICAgIGlmIChtX3dlYlBh
Z2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlKQorICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5t
X2R1bXBSZW5kZXJUcmVlLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZUlEKTsKKyNlbmRpZgorCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmFk
ZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZS5jaGFyYWN0ZXJzKCksIG1lc3NhZ2UubGVuZ3RoKCks
IHNvdXJjZUlELmNoYXJhY3RlcnMoKSwgc291cmNlSUQubGVuZ3RoKCksIGxpbmVOdW1iZXIpOwor
fQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bkphdmFTY3JpcHRBbGVydChGcmFt
ZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyNpZiBFTkFCTEVfRFJUCisgICAg
aWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpIHsKKyAgICAgICAgbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZS0+cnVuSmF2YVNjcmlwdEFsZXJ0KG1lc3NhZ2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBUaW1lckJhc2U6OmZpcmVU
aW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFt
ZU9yaWdpbihmcmFtZSk7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnJ1bkphdmFT
Y3JpcHRBbGVydChtZXNzYWdlLmNoYXJhY3RlcnMoKSwgbWVzc2FnZS5sZW5ndGgoKSwgbGF0aW5P
cmlnaW4uZGF0YSgpLCBsYXRpbk9yaWdpbi5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCit7CisjaWYgRU5BQkxFX0RSVAorICAgIGlmIChtX3dlYlBhZ2VQcml2
YXRlLT5tX2R1bXBSZW5kZXJUcmVlKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdlUHJpdmF0ZS0+
bV9kdW1wUmVuZGVyVHJlZS0+cnVuSmF2YVNjcmlwdENvbmZpcm0obWVzc2FnZSk7CisjZW5kaWYK
KworICAgIFRpbWVyQmFzZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7CisgICAgQ1N0
cmluZyBsYXRpbk9yaWdpbiA9IGZyYW1lT3JpZ2luKGZyYW1lKTsKKyAgICByZXR1cm4gbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9jbGllbnQtPnJ1bkphdmFTY3JpcHRDb25maXJtKG1lc3NhZ2UuY2hhcmFj
dGVycygpLCBtZXNzYWdlLmxlbmd0aCgpLCBsYXRpbk9yaWdpbi5kYXRhKCksIGxhdGluT3JpZ2lu
Lmxlbmd0aCgpKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpydW5KYXZhU2Ny
aXB0UHJvbXB0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCit7CisjaWYgRU5BQkxFX0RSVAorICAg
IGlmIChtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlKSB7CisgICAgICAgIHJlc3Vs
dCA9IG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUtPnJ1bkphdmFTY3JpcHRQcm9t
cHQobWVzc2FnZSwgZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
I2VuZGlmCisKKyAgICBUaW1lckJhc2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOwor
ICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFtZU9yaWdpbihmcmFtZSk7CisgICAgV2ViU3Ry
aW5nIGNsaWVudFJlc3VsdDsKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnJ1
bkphdmFTY3JpcHRQcm9tcHQobWVzc2FnZS5jaGFyYWN0ZXJzKCksIG1lc3NhZ2UubGVuZ3RoKCks
IGRlZmF1bHRWYWx1ZS5jaGFyYWN0ZXJzKCksIGRlZmF1bHRWYWx1ZS5sZW5ndGgoKSwgbGF0aW5P
cmlnaW4uZGF0YSgpLCBsYXRpbk9yaWdpbi5sZW5ndGgoKSwgY2xpZW50UmVzdWx0KSkgeworICAg
ICAgICByZXN1bHQgPSBjbGllbnRSZXN1bHQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y2hy
b21lRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgLy8g
VGhlIHdpbmRvdyBkaW1lbnNpb25zIGFyZSBmaXhlZCBpbiB0aGUgUklNIHBvcnQuCit9CisKK0Zs
b2F0UmVjdCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojp3aW5kb3dSZWN0KCkKK3sKKyAgICBjb25z
dCBJbnRTaXplIHdpbmRvd1NpemUgPSBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+d2luZG93
KCktPndpbmRvd1NpemUoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpbmRvd1NpemUu
d2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7Cit9CisKK0Zsb2F0UmVjdCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5OjpwYWdlUmVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2Zsb2F0IENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNj
YWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFj
a0JlcnJ5Ojpmb2N1cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5Ojp1bmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNhblRha2VGb2N1cyhGb2N1c0RpcmVj
dGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojp0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5
Ojpmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSogbm9kZSkKK3sKKyAgICBXZWJQYWdlQ2xpZW50OjpG
b2N1c1R5cGUgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzVW5rbm93bjsKKworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzTm9uZTsKKyAgICBlbHNl
IGlmIChub2RlLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6
OkZvY3VzU1ZHRWxlbWVudDsKKyAgICBlbHNlIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsK
KyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphVGFnKSkgeworICAgICAg
ICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzTGluazsKKyAgICAgICAgfSBlbHNlIGlm
IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgICAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4obm9kZSk7CisgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aXNpbmRleFRhZykgfHwgaW5wdXRFbGVtZW50LT5pc0lucHV0VHlwZUhpZGRlbigp
KQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0VW5rbm93
bjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNUZXh0QnV0dG9uKCkpCisg
ICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRCdXR0b247Cisg
ICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tib3goKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dENoZWNrQm94OworI2lmIEVO
QUJMRShJTlBVVF9DT0xPUikKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXND
b2xvckNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9j
dXNJbnB1dENvbG9yOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQt
PmlzRGF0ZUNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6
Rm9jdXNJbnB1dERhdGU7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzRGF0
ZVRpbWVDb250cm9sKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZv
Y3VzSW5wdXREYXRlVGltZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNE
YXRlVGltZUxvY2FsQ29udHJvbCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xp
ZW50OjpGb2N1c0lucHV0RGF0ZVRpbWVMb2NhbDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0
RWxlbWVudC0+aXNFbWFpbEZpZWxkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VD
bGllbnQ6OkZvY3VzSW5wdXRFbWFpbDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVu
dC0+aXNGaWxlVXBsb2FkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6
OkZvY3VzSW5wdXRGaWxlOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc0lt
YWdlQnV0dG9uKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3Vz
SW5wdXRJbWFnZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNNb250aENv
bnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1
dE1vbnRoOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc051bWJlckZpZWxk
KCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXROdW1i
ZXI7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgp
KQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0UGFzc3dv
cmQ7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSkK
KyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFJhZGlvOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1JhbmdlQ29udHJvbCgpKQorICAg
ICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0UmFuZ2U7CisgICAg
ICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUmVzZXRCdXR0b24oKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFJlc2V0OworICAgICAgICAg
ICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1NlYXJjaEZpZWxkKCkpCisgICAgICAgICAgICAg
ICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRTZWFyY2g7CisgICAgICAgICAgICBl
bHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzU3VibWl0QnV0dG9uKCkpCisgICAgICAgICAgICAgICAg
dHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRTdWJtaXQ7CisgICAgICAgICAgICBlbHNl
IGlmIChpbnB1dEVsZW1lbnQtPmlzVGVsZXBob25lRmllbGQoKSkKKyAgICAgICAgICAgICAgICB0
eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFRlbGVwaG9uZTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlucHV0RWxlbWVudC0+aXNVUkxGaWVsZCgpKQorICAgICAgICAgICAgICAgIHR5cGUg
PSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0VVJMOworICAgICAgICAgICAgZWxzZSBpZiAoaW5w
dXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdl
Q2xpZW50OjpGb2N1c0lucHV0VGV4dDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVu
dC0+aXNUaW1lQ29udHJvbCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50
OjpGb2N1c0lucHV0VGltZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBtaXNzaW5nIFdFRUsgcG9w
dXAgc2VsZWN0b3IKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0eXBlID0gV2Vi
UGFnZUNsaWVudDo6Rm9jdXNJbnB1dFVua25vd247CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFn
ZUNsaWVudDo6Rm9jdXNJbWFnZTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdFRhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6
Rm9jdXNPYmplY3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp2aWRlb1RhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNWaWRl
bzsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRh
ZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNTZWxlY3Q7CisgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYVRhZykpCisg
ICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNUZXh0QXJlYTsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhbnZhc1RhZykpCisgICAgICAg
ICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNDYW52YXM7CisgICAgfQorCisgICAgbV93
ZWJQYWdlUHJpdmF0ZS0+bV9pbnB1dEhhbmRsZXItPm5vZGVGb2N1c2VkKG5vZGUpOworCisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmZvY3VzQ2hhbmdlZCh0eXBlLCByZWludGVycHJl
dF9jYXN0PGludD4obm9kZSkpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmZv
Y3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqKQoreworICAgIC8vIFRvIGJlIHVzZWQgYnkgSW4tcmVn
aW9uIGJhY2tpbmcgc3RvcmUgY29udGV4dCBzd2l0Y2hpbmcuCit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6c2hvdWxkRm9yY2VEb2N1bWVudFN0eWxlU2VsZWN0b3JVcGRhdGUoKQor
eworICAgIHJldHVybiAhbV93ZWJQYWdlUHJpdmF0ZS0+bV93ZWJTZXR0aW5ncy0+aXNKYXZhU2Ny
aXB0RW5hYmxlZCgpICYmICFtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+cHJvY2Vz
c2luZ0NoYW5nZSgpOworfQorCitQYWdlKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVX
aW5kb3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXaW5k
b3dGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKQoreworI2lmIEVO
QUJMRV9EUlQKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZSAmJiAh
bV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZS0+YWxsb3dzT3BlbmluZ1dpbmRvdygp
KQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgICAgUGFnZUdyb3VwTG9hZERlZmVycmVy
IGRlZmVycmVyKG1fd2ViUGFnZVByaXZhdGUtPm1fcGFnZSwgdHJ1ZSk7CisgICAgVGltZXJCYXNl
OjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsKKworICAgIGludCB4ID0gZmVhdHVyZXMu
eFNldCA/IGZlYXR1cmVzLnggOiAwOworICAgIGludCB5ID0gZmVhdHVyZXMueVNldCA/IGZlYXR1
cmVzLnkgOiAwOworICAgIGludCB3aWR0aCA9IGZlYXR1cmVzLndpZHRoU2V0PyBmZWF0dXJlcy53
aWR0aCA6IC0xOworICAgIGludCBoZWlnaHQgPSBmZWF0dXJlcy5oZWlnaHRTZXQgPyBmZWF0dXJl
cy5oZWlnaHQgOiAtMTsKKyAgICB1bnNpZ25lZCBmbGFncyA9IDA7CisKKyAgICBpZiAoZmVhdHVy
ZXMubWVudUJhclZpc2libGUpCisgICAgICAgIGZsYWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZsYWdX
aW5kb3dIYXNNZW51QmFyOworICAgIGlmIChmZWF0dXJlcy5zdGF0dXNCYXJWaXNpYmxlKQorICAg
ICAgICBmbGFncyB8PSBXZWJQYWdlQ2xpZW50OjpGbGFnV2luZG93SGFzU3RhdHVzQmFyOworICAg
IGlmIChmZWF0dXJlcy50b29sQmFyVmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNs
aWVudDo6RmxhZ1dpbmRvd0hhc1Rvb2xCYXI7CisgICAgaWYgKGZlYXR1cmVzLmxvY2F0aW9uQmFy
VmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc0xv
Y2F0aW9uQmFyOworICAgIGlmIChmZWF0dXJlcy5zY3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAg
ZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc1Njcm9sbEJhcjsKKyAgICBpZiAo
ZmVhdHVyZXMucmVzaXphYmxlKQorICAgICAgICBmbGFncyB8PSBXZWJQYWdlQ2xpZW50OjpGbGFn
V2luZG93SXNSZXNpemFibGU7CisgICAgaWYgKGZlYXR1cmVzLmZ1bGxzY3JlZW4pCisgICAgICAg
IGZsYWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZsYWdXaW5kb3dJc0Z1bGxTY3JlZW47CisgICAgaWYg
KGZlYXR1cmVzLmRpYWxvZykKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dp
bmRvd0lzRGlhbG9nOworCisgICAgV2ViUGFnZSogd2ViUGFnZSA9IG1fd2ViUGFnZVByaXZhdGUt
Pm1fY2xpZW50LT5jcmVhdGVXaW5kb3coeCwgeSwgd2lkdGgsIGhlaWdodCwgZmxhZ3MsIFdlYlN0
cmluZyhyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnN0cmluZygpKSwgV2ViU3RyaW5n
KHJlcXVlc3QuZnJhbWVOYW1lKCkpKTsKKyAgICBpZiAoIXdlYlBhZ2UpCisgICAgICAgIHJldHVy
biAwOworCisjaWYgRU5BQkxFX0RSVAorICAgIGlmIChtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBS
ZW5kZXJUcmVlKQorICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlLT53
aW5kb3dDcmVhdGVkKHdlYlBhZ2UpOworI2VuZGlmCisKKyAgICByZXR1cm4gd2ViUGFnZS0+ZC0+
bV9wYWdlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNob3coKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y2Fu
UnVuTW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk1vZGFsKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNlbGVjdEl0
ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NN
ZW51V3JpdGluZ0RpcmVjdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQ
dHI8UG9wdXBNZW51PiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVQb3B1cE1lbnUoUG9w
dXBNZW51Q2xpZW50KiBjbGllbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
b3B1cE1lbnVCbGFja0JlcnJ5KGNsaWVudCkpOworfQorCitQYXNzUmVmUHRyPFNlYXJjaFBvcHVw
TWVudT4gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVw
TWVudUNsaWVudCogY2xpZW50KSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vh
cmNoUG9wdXBNZW51QmxhY2tCZXJyeShjbGllbnQpKTsKK30KKworCit2b2lkIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6dG9vbGJhcnNWaXNpYmxl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpz
dGF0dXNiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTY3JvbGxiYXJzVmlz
aWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6c2Nyb2xsYmFyc1Zpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6
OnNldE1lbnViYXJWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Ym9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjptZW51YmFyVmlzaWJsZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50
QmxhY2tCZXJyeTo6c2V0UmVzaXphYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjYW5SdW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lKikKK3sKKyNpZiBFTkFCTEVfRFJUCisg
ICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpCisgICAgICAgIHJldHVy
biBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlLT5ydW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWwobWVzc2FnZSk7CisjZW5kaWYKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNsb3NlV2lu
ZG93U29vbigpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnNjaGVkdWxlQ2xv
c2VXaW5kb3coKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTdGF0dXNi
YXJUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1f
Y2xpZW50LT5zZXRTdGF0dXMoc3RhdHVzKTsKKworI2lmIEVOQUJMRV9EUlQKKyAgICBpZiAobV93
ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZSkKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0
ZS0+bV9kdW1wUmVuZGVyVHJlZS0+c2V0U3RhdHVzVGV4dChzdGF0dXMpOworI2VuZGlmCit9CisK
K0ludFJlY3QgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6d2luZG93UmVzaXplclJlY3QoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKwor
SW50UG9pbnQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50
UG9pbnQmIHNjcmVlblBvcykgY29uc3QKK3sKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IG1f
d2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT53aW5kb3coKS0+d2luZG93TG9jYXRpb24oKTsKKyAg
ICB3aW5kb3dQb2ludC5tb3ZlKC1zY3JlZW5Qb3MueCgpLCAtc2NyZWVuUG9zLnkoKSk7CisgICAg
cmV0dXJuIHdpbmRvd1BvaW50OworfQorCitJbnRSZWN0IENocm9tZUNsaWVudEJsYWNrQmVycnk6
OndpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QpIGNvbnN0Cit7CisgICAg
SW50UmVjdCB3aW5kb3dQb2ludCh3aW5kb3dSZWN0KTsKKyAgICBJbnRQb2ludCBsb2NhdGlvbiht
X3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+d2luZG93KCktPndpbmRvd0xvY2F0aW9uKCkpOwor
ICAgIHdpbmRvd1BvaW50Lm1vdmUobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCkpOworICAgIHJl
dHVybiB3aW5kb3dQb2ludDsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojptb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVk
IGludCBtb2RpZmllckZsYWdzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
Q2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2x0aXAs
IFRleHREaXJlY3Rpb24pCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnNldFRv
b2xUaXAodG9vbHRpcCk7Cit9CisKKyNpZiBFTkFCTEUoRVZFTlRfTU9ERV9NRVRBVEFHUykKK3Zv
aWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlkUmVjZWl2ZUN1cnNvckV2ZW50TW9kZShGcmFt
ZSogZnJhbWUsIEN1cnNvckV2ZW50TW9kZSBtb2RlKSBjb25zdAoreworICAgIGlmIChtX3dlYlBh
Z2VQcml2YXRlLT5tX21haW5GcmFtZSAhPSBmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+ZGlkUmVjZWl2ZUN1cnNvckV2ZW50TW9kZShtb2RlKTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWRSZWNlaXZlVG91Y2hFdmVudE1vZGUoRnJh
bWUqIGZyYW1lLCBUb3VjaEV2ZW50TW9kZSBtb2RlKSBjb25zdAoreworICAgIGlmIChtX3dlYlBh
Z2VQcml2YXRlLT5tX21haW5GcmFtZSAhPSBmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+ZGlkUmVjZWl2ZVRvdWNoRXZlbnRNb2RlKG1vZGUpOworfQorI2Vu
ZGlmCisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hWaWV3cG9ydFByb3Bl
cnRpZXNEaWRDaGFuZ2UoY29uc3QgVmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QK
K3sKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5kaXNwYXRjaFZpZXdwb3J0UHJvcGVydGllc0RpZENo
YW5nZShhcmd1bWVudHMpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnByaW50
KEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKTsKKworI2lmIEVOQUJMRV9EUlQKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+
bV9kdW1wUmVuZGVyVHJlZSkgeworICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5k
ZXJUcmVlLT5leGNlZWRlZERhdGFiYXNlUXVvdGEob3JpZ2luLCBuYW1lKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRGF0YWJhc2VUcmFja2VyJiB0cmFja2VyID0gRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxV
c2FnZSA9IHRyYWNrZXIudG90YWxEYXRhYmFzZVVzYWdlKCk7CisgICAgdW5zaWduZWQgbG9uZyBs
b25nIG9yaWdpblVzYWdlID0gdHJhY2tlci51c2FnZUZvck9yaWdpbihvcmlnaW4pOworCisgICAg
RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSB0cmFja2VyLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2lu
KG5hbWUsIG9yaWdpbik7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGVzdGltYXRlZFNpemUgPSBk
ZXRhaWxzLmV4cGVjdGVkVXNhZ2UoKTsKKyAgICBjb25zdCBTdHJpbmcmIG5hbWVTdHIgPSBkZXRh
aWxzLmRpc3BsYXlOYW1lKCk7CisKKyAgICBTdHJpbmcgb3JpZ2luU3RyID0gb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSA9IG1fd2Vi
UGFnZVByaXZhdGUtPm1fY2xpZW50LT5kYXRhYmFzZVF1b3RhKG9yaWdpblN0ci5jaGFyYWN0ZXJz
KCksIG9yaWdpblN0ci5sZW5ndGgoKSwKKyAgICAgICAgbmFtZVN0ci5jaGFyYWN0ZXJzKCksIG5h
bWVTdHIubGVuZ3RoKCksIHRvdGFsVXNhZ2UsIG9yaWdpblVzYWdlLCBlc3RpbWF0ZWRTaXplKTsK
KworICAgIHRyYWNrZXIuc2V0UXVvdGEob3JpZ2luLCBxdW90YSk7CisjZW5kaWYKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAgaWYg
KCFtX3dlYlBhZ2VQcml2YXRlLT5tX3dlYlNldHRpbmdzLT5pc0dlb2xvY2F0aW9uRW5hYmxlZCgp
KSB7CisgICAgICAgIGdlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoZmFsc2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRvdygp
OworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBDU3RyaW5nIGxhdGlu
T3JpZ2luID0gZnJhbWVPcmlnaW4oZnJhbWUpOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9j
bGllbnQtPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb24obV93ZWJQYWdlUHJpdmF0ZS0+bV9n
ZW9sb2NhdGlvbkNsaWVudCwgZ2VvbG9jYXRpb24sIGxhdGluT3JpZ2luLmRhdGEoKSwgbGF0aW5P
cmlnaW4ubGVuZ3RoKCkpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNhbmNl
bEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9u
KiBnZW9sb2NhdGlvbikKK3sKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+Y2FuY2Vs
R2VvbG9jYXRpb25QZXJtaXNzaW9uKG1fd2ViUGFnZVByaXZhdGUtPm1fZ2VvbG9jYXRpb25DbGll
bnQsIGdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpydW5P
cGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKQoreworICAg
IFNoYXJlZEFycmF5PFdlYlN0cmluZz4gaW5pdGlhbEZpbGVzOworICAgIHVuc2lnbmVkIGludCBp
bml0aWFsRmlsZVNpemUgPSBjaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXMuc2l6ZSgp
OworICAgIGlmIChpbml0aWFsRmlsZVNpemUgPiAwKQorICAgICAgICBpbml0aWFsRmlsZXMucmVz
ZXQobmV3IFdlYlN0cmluZ1tpbml0aWFsRmlsZVNpemVdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5pdGlhbEZpbGVTaXplOyArK2kpCisgICAgICAgIGluaXRpYWxGaWxlc1tpXSA9
IGNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlc1tpXTsKKworICAgIFNoYXJlZEFycmF5
PFdlYlN0cmluZz4gY2hvc2VuRmlsZXM7CisgICAgdW5zaWduZWQgaW50IGNob3NlbkZpbGVTaXpl
OworCisgICAgeworICAgICAgICBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgZGVmZXJyZXIobV93ZWJQ
YWdlUHJpdmF0ZS0+bV9wYWdlLCB0cnVlKTsKKyAgICAgICAgVGltZXJCYXNlOjpmaXJlVGltZXJz
SW5OZXN0ZWRFdmVudExvb3AoKTsKKworICAgICAgICAvLyBGSVhNRTogVXNlIGNob29zZXItPnNl
dHRpbmdzKCkuYWNjZXB0TUlNRVR5cGVzIGluc3RlYWQgb2YgV2ViU3RyaW5nKCkgZm9yIHRoZSBz
ZWNvbmQgcGFyYW1ldGVyLgorICAgICAgICBpZiAoIW1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50
LT5jaG9vc2VGaWxlbmFtZXMoY2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxvd3NNdWx0aXBsZUZpbGVz
LCBXZWJTdHJpbmcoKSwgaW5pdGlhbEZpbGVzLCBpbml0aWFsRmlsZVNpemUsIGNob3NlbkZpbGVz
LCBjaG9zZW5GaWxlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVj
dG9yPFN0cmluZz4gZmlsZXMoY2hvc2VuRmlsZVNpemUpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjaG9zZW5GaWxlU2l6ZTsgKytpKQorICAgICAgICBmaWxlc1tpXSA9IGNob3NlbkZp
bGVzW2ldOworICAgIGNob29zZXItPmNob29zZUZpbGVzKGZpbGVzKTsKK30KKwordm9pZCBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5Ojpsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBmaWxlbmFtZXMsIEZpbGVJY29uTG9hZGVyKiBsb2FkZXIpCit7CisgICAgbG9hZGVyLT5ub3Rp
ZnlGaW5pc2hlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7Cit9CisKK3Zv
aWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpm
b3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBtX3dlYlBhZ2VQcml2
YXRlLT5tX2lucHV0SGFuZGxlci0+bm9kZVRleHRDaGFuZ2VkKG5vZGUpOworfQorCit2b2lkIENo
cm9tZUNsaWVudEJsYWNrQmVycnk6OnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6
OmNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+Y29udGVudHNTaXplQ2hh
bmdlZChzaXplKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjppbnZhbGlkYXRl
V2luZG93KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQoreworICAg
IG1fd2ViUGFnZVByaXZhdGUtPm1fYmFja2luZ1N0b3JlLT5kLT5yZXBhaW50KHVwZGF0ZVJlY3Qs
IGZhbHNlIC8qY29udGVudENoYW5nZWQqLywgaW1tZWRpYXRlKTsKK30KKwordm9pZCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+
bV9iYWNraW5nU3RvcmUtPmQtPnJlcGFpbnQodXBkYXRlUmVjdCwgdHJ1ZSAvKmNvbnRlbnRDaGFu
Z2VkKi8sIGltbWVkaWF0ZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6aW52
YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3Qg
SW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUsIGNvbnN0IFNjcm9sbFZpZXcqIHNj
cm9sbFZpZXcpCit7CisgICAgaWYgKHNjcm9sbFZpZXcgIT0gbV93ZWJQYWdlUHJpdmF0ZS0+bV9t
YWluRnJhbWUtPnZpZXcoKSkKKyAgICAgICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KHVw
ZGF0ZVJlY3QsIHRydWUgLyppbW1lZGlhdGUqLyk7CisgICAgZWxzZSB7CisgICAgICAgIEJhY2tp
bmdTdG9yZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUgPSBtX3dlYlBhZ2VQcml2
YXRlLT5iYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZShtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5G
cmFtZSk7CisgICAgICAgIEFTU0VSVChiYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZSk7CisgICAg
ICAgIGJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lLT5jaGVja09yaWdpbk9mQ3VycmVudFNjcm9s
bE9wZXJhdGlvbigpOworCisgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fYmFja2luZ1N0b3Jl
LT5kLT5zbG93U2Nyb2xsKGRlbHRhLCB1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOworICAgIH0KK30K
Kwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgZGVs
dGEsIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKK3sKKyAgICAvLyBGSVhNRTogVGhlcmUncyBhIGNoYW5jZSB0aGUgZnVuY3Rpb24gaXMgY2Fs
bGVkIGluZGlyZWN0bHkgYnkgRnJhbWVWaWV3J3MgZHRvcgorICAgIC8vIHdoZW4gdGhlIEZyYW1l
J3MgdmlldygpIGlzIG51bGwuIFdlIHByb2JhYmx5IHdhbnQgdG8gZml4IGl0IGluIGFub3RoZXIg
d2F5LCBidXQKKyAgICAvLyBhdCB0aGlzIG1vbWVudCBsZXQncyBkbyBhIHF1aWNrIGZpeC4KKyAg
ICBpZiAoIW1fd2ViUGFnZVByaXZhdGUtPm1fbWFpbkZyYW1lLT52aWV3KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEJhY2tpbmdTdG9yZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJh
bWUgPSBtX3dlYlBhZ2VQcml2YXRlLT5iYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZShtX3dlYlBh
Z2VQcml2YXRlLT5tX21haW5GcmFtZSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZUNsaWVudEZv
ckZyYW1lKTsKKyAgICBiYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZS0+Y2hlY2tPcmlnaW5PZkN1
cnJlbnRTY3JvbGxPcGVyYXRpb24oKTsKKworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fYmFja2lu
Z1N0b3JlLT5kLT5zY3JvbGwoZGVsdGEsIHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsYWJsZUFyZWFzRGlkQ2hhbmdlKCkK
K3sKKyAgICB0eXBlZGVmIEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiBTY3JvbGxhYmxlQXJlYVNl
dDsKKyAgICBjb25zdCBTY3JvbGxhYmxlQXJlYVNldCogc2Nyb2xsYWJsZUFyZWFzID0gbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9wYWdlLT5zY3JvbGxhYmxlQXJlYVNldCgpOworCisgICAgYm9vbCBoYXNB
dExlYXN0T25lSW5SZWdpb25TY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIFNjcm9sbGFibGVB
cmVhU2V0OjppdGVyYXRvciBlbmQgPSBzY3JvbGxhYmxlQXJlYXMtPmVuZCgpOworICAgIGZvciAo
U2Nyb2xsYWJsZUFyZWFTZXQ6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpICE9IG1fd2ViUGFnZVByaXZh
dGUtPm1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkgeworICAgICAgICAgICAgaGFzQXRMZWFz
dE9uZUluUmVnaW9uU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5zZXRIYXNJblJlZ2lvblNj
cm9sbGFibGVBcmVhcyhoYXNBdExlYXN0T25lSW5SZWdpb25TY3JvbGxhYmxlQXJlYSk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IElu
dFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QKK3sKKyAgICBtX3dlYlBhZ2VQcml2YXRl
LT5ub3RpZnlUcmFuc2Zvcm1lZFNjcm9sbENoYW5nZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKK3sKKyAgICBUaW1lckJh
c2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworICAgIHJldHVybiBtX3dlYlBhZ2VQ
cml2YXRlLT5tX2NsaWVudC0+c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOworfQorCitLZXli
b2FyZFVJTW9kZSBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjprZXlib2FyZFVJTW9kZSgpCit7Cisg
ICAgYm9vbCB0YWJzVG9MaW5rcyA9IHRydWU7CisKKyNpZiBFTkFCTEVfRFJUCisgICAgaWYgKG1f
d2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpCisgICAgICAgIHRhYnNUb0xpbmtzID0g
RHVtcFJlbmRlclRyZWVTdXBwb3J0OjpsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7CisjZW5k
aWYKKworICAgIHJldHVybiB0YWJzVG9MaW5rcyA/IEtleWJvYXJkQWNjZXNzVGFic1RvTGlua3Mg
OiBLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7Cit9CisKK1BsYXRmb3JtUGFnZUNsaWVudCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjpwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3dlYlBhZ2VQcml2YXRlOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQg
Q2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wgdmFsdWUpCit7Cisg
ICAgbV93ZWJQYWdlUHJpdmF0ZS0+c2V0TmVlZFRvdWNoRXZlbnRzKHZhbHVlKTsKK30KKyNlbmRp
ZgorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUo
aW50NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IENocm9tZUNsaWVudEJsYWNrQmVycnk6OmxheW91dFVwZGF0ZWQoRnJhbWUqIGZyYW1lKSBjb25z
dAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bGF5b3V0RmluaXNoZWQoKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpvdmVyZmxvd0V4Y2VlZHNDb250ZW50
c1NpemUoRnJhbWUqIGZyYW1lKSBjb25zdAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQ
cml2YXRlLT5tX21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgREVCVUdfT1ZFUkZM
T1dfREVURUNUSU9OCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6b3ZlcmZsb3dF
eGNlZWRzQ29udGVudHNTaXplIGNvbnRlbnRzPSVkeCVkIG92ZXJmbG93PSVkeCVkIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKS0+cmlnaHRMYXlv
dXRPdmVyZmxvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpLT5ib3R0b21MYXlvdXRPdmVyZmxvdygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5yaWdodEFic29sdXRlVmlzaWJsZU92ZXJm
bG93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+Y29udGVudFJlbmRlcmVy
KCktPmJvdHRvbUFic29sdXRlVmlzaWJsZU92ZXJmbG93KCkpOworI2VuZGlmCisgICAgbV93ZWJQ
YWdlUHJpdmF0ZS0+b3ZlcmZsb3dFeGNlZWRzQ29udGVudHNTaXplKCk7Cit9CisKK3ZvaWQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlkRGlzY292ZXJGcmFtZVNldChGcmFtZSogZnJhbWUpIGNv
bnN0Cit7CisgICAgaWYgKGZyYW1lICE9IG1fd2ViUGFnZVByaXZhdGUtPm1fbWFpbkZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWRE
aXNjb3ZlckZyYW1lU2V0Iik7CisgICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPmxvYWRTdGF0ZSgp
ID09IFdlYlBhZ2VQcml2YXRlOjpDb21taXR0ZWQpIHsKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0
ZS0+c2V0U2hvdWxkVXNlRml4ZWREZXNrdG9wTW9kZSh0cnVlKTsKKyAgICAgICAgbV93ZWJQYWdl
UHJpdmF0ZS0+em9vbVRvSW5pdGlhbFNjYWxlT25Mb2FkKCk7CisgICAgfQorfQorCitpbnQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6cmVmbG93V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBt
X3dlYlBhZ2VQcml2YXRlLT5yZWZsb3dXaWR0aCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJs
YWNrQmVycnk6OmNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVD
aG9vc2VyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
K3sKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5v
ZGUqIG5vZGUpCit7CisgICAgaWYgKCFzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5lbnRlckZ1bGxzY3JlZW5G
b3JOb2RlKG5vZGUpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmV4aXRGdWxs
c2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPmV4aXRG
dWxsc2NyZWVuRm9yTm9kZShub2RlKTsKK30KKworI2lmIEVOQUJMRShXRUJHTCkKK3ZvaWQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6cmVxdWVzdFdlYkdMUGVybWlzc2lvbihGcmFtZSogZnJhbWUp
Cit7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFt
ZU9yaWdpbihmcmFtZSk7CisgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5yZXF1
ZXN0V2ViR0xQZXJtaXNzaW9uKGxhdGluT3JpZ2luLmRhdGEoKSk7CisgICAgfQorfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoU1ZHKQordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWRTZXRT
Vkdab29tQW5kUGFuKEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbikKK3sK
KyAgICAvLyBGb3IgdG9wLWxldmVsIFNWRyBkb2N1bWVudCwgdGhlcmUgaXMgbm8gdmlld3BvcnQg
dGFnLCB3ZSB1c2Ugdmlld3BvcnQncyB1c2VyLXNjYWxhYmxlCisgICAgLy8gdG8gZW5hYmxlL2Rp
c2FibGUgem9vbSB3aGVuIHRvcC1sZXZlbCBTVkcgZG9jdW1lbnQncyB6b29tQW5kUGFuIGNoYW5n
ZWQuIEJlY2F1c2UgdGhlcmUgaXMgbm8gdmlld3BvcnQKKyAgICAvLyB0YWcsIG90aGVyIGZpZWxk
cyB3aXRoIGRlZmF1bHQgdmFsdWUgaW4gVmlld3BvcnRBcmd1bWVudHMgYXJlIG9rLgorICAgIGlm
IChmcmFtZSA9PSBtX3dlYlBhZ2VQcml2YXRlLT5tX3BhZ2UtPm1haW5GcmFtZSgpKSB7CisgICAg
ICAgIFZpZXdwb3J0QXJndW1lbnRzIGFyZ3VtZW50czsKKyAgICAgICAgc3dpdGNoICh6b29tQW5k
UGFuKSB7CisgICAgICAgIGNhc2UgU1ZHWm9vbUFuZFBhbjo6U1ZHX1pPT01BTkRQQU5fRElTQUJM
RToKKyAgICAgICAgICAgIGFyZ3VtZW50cy51c2VyU2NhbGFibGUgPSAwOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU1ZHWm9vbUFuZFBhbjo6U1ZHX1pPT01BTkRQQU5fTUFHTklG
WToKKyAgICAgICAgICAgIGFyZ3VtZW50cy51c2VyU2NhbGFibGUgPSAxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzKGZyYW1lLCBhcmd1bWVudHMpOwor
ICAgIH0KK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCitOb3RpZmljYXRp
b25QcmVzZW50ZXIqIENocm9tZUNsaWVudEJsYWNrQmVycnk6Om5vdGlmaWNhdGlvblByZXNlbnRl
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6aW5zdGFuY2UoKTsKK30KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjphdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgLy8g
SWYgdGhlIGdyYXBoaWNzTGF5ZXIgcGFyYW1ldGVyIGlzIDAsIFdlYkNvcmUgaXMgYWN0dWFsbHkK
KyAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIGEgcHJldmlvdXNseSBhdHRhY2hlZCBsYXllci4KKyAg
ICBtX3dlYlBhZ2VQcml2YXRlLT5zZXRSb290TGF5ZXJXZWJLaXRUaHJlYWQoZnJhbWUsIGdyYXBo
aWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwKTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uKCkKK3sKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5zZXROZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+c2No
ZWR1bGVSb290TGF5ZXJDb21taXQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5
OjphbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCit2b2lkKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpwbGF0Zm9ybVdp
bmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT53
aW5kb3coKTsKK30KKwordm9pZCogQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cGxhdGZvcm1Db21w
b3NpdGluZ1dpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPm1f
Y2xpZW50LT5jb21wb3NpdGluZ1dpbmRvdygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hMWFkM2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaApAQCAtMCwwICsx
LDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaWZuZGVmIENocm9tZUNsaWVudEJsYWNrQmVycnlfaAorI2RlZmluZSBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5X2gKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorCituYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcml2YXRlOwor
fQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENocm9tZUNsaWVudEJsYWNrQmVy
cnkgOiBwdWJsaWMgQ2hyb21lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBDaHJvbWVDbGllbnRCbGFj
a0JlcnJ5KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqKTsKKworICAgIHZpcnR1
YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQqIHdlYlZpZXcoKSBj
b25zdCB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0
b3IoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1
cygpOworICAgIHZpcnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOworICAg
IHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9p
ZCBmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBmb2N1c2VkRnJh
bWVDaGFuZ2VkKEZyYW1lKik7CisgICAgdmlydHVhbCBib29sIHNob3VsZEZvcmNlRG9jdW1lbnRT
dHlsZVNlbGVjdG9yVXBkYXRlKCk7CisgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVXaW5kb3coRnJh
bWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2luZG93RmVhdHVyZXMmLCBjb25z
dCBOYXZpZ2F0aW9uQWN0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHNob3coKTsKKyAgICB2aXJ0
dWFsIGJvb2wgY2FuUnVuTW9kYWwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwgYm9v
bCB0b29sYmFyc1Zpc2libGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVmlzaWJs
ZShib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Ny
b2xsYmFyc1Zpc2libGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9v
bCk7CisgICAgdmlydHVhbCBib29sIG1lbnViYXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCB2b2lk
IHNldFJlc2l6YWJsZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29s
ZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlE
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCk7Cisg
ICAgdmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcm
LCBGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CisgICAg
dmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3QgU3RyaW5nJik7
CisgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
YmFyVGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0
SmF2YVNjcmlwdCgpOworICAgIHZpcnR1YWwgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUo
KTsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7CisgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0Jiwg
Ym9vbCk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwo
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBib29sLCBjb25zdCBTY3JvbGxWaWV3Kik7
CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFzRGlkQ2hh
bmdlKCk7CisgICAgdmlydHVhbCBJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRS
ZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUq
LCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRv
Vmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5z
aWduZWQgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmLCBU
ZXh0RGlyZWN0aW9uKTsKKyNpZiBFTkFCTEUoRVZFTlRfTU9ERV9NRVRBVEFHUykKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUN1cnNvckV2ZW50TW9kZShGcmFtZSosIEN1cnNvckV2ZW50TW9k
ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVUb3VjaEV2ZW50TW9kZShGcmFt
ZSosIFRvdWNoRXZlbnRNb2RlKSBjb25zdDsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaFZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Ny
b2xsRGlyZWN0aW9uKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIG51
bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwcmludChGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEo
RnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0
aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwg
R2VvbG9jYXRpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgV1RG
OjpQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CisgICAgdmlydHVhbCB2b2lkIGxvYWRJY29uRm9y
RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlSWNvbkxvYWRlciopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1
cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZm9y
bVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFy
c01vZGVEaWRDaGFuZ2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVudCBw
bGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdDsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisg
ICAgdmlydHVhbCB2b2lkIG5lZWRUb3VjaEV2ZW50cyhib29sKTsKKyNlbmRpZgorCisjaWYgRU5B
QkxFKElOUFVUX0NPTE9SKQorICAgIHZvaWQgb3BlbkNvbG9yQ2hvb3NlcihDb2xvckNob29zZXIq
LCBjb25zdCBDb2xvciYpIHsgfQorICAgIHZvaWQgY2xlYW51cENvbG9yQ2hvb3NlcihDb2xvckNo
b29zZXIqKSB7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkQ29sb3JJbkNvbG9yQ2hvb3NlcihDb2xv
ckNob29zZXIqLCBjb25zdCBDb2xvciYpIHsgfQorI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQg
cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShTZWN1cml0eU9yaWdpbios
IGludDY0X3QpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgb3ZlcmZsb3dFeGNlZWRzQ29udGVudHNTaXplKEZyYW1l
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc2NvdmVyRnJhbWVTZXQoRnJhbWUqKSBj
b25zdDsKKworICAgIHZpcnR1YWwgaW50IHJlZmxvd1dpZHRoKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNo
b29zZXIqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNv
bnN0IE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2Rl
Kik7CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKik7CisjaWYg
RU5BQkxFKFdFQkdMKQorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0V2ViR0xQZXJtaXNzaW9uKEZy
YW1lKik7CisjZW5kaWYKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorICAgIHZpcnR1YWwg
Tm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdDsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0U1ZHWm9vbUFu
ZFBhbihGcmFtZSosIHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pOworI2VuZGlmCisgICAgdmly
dHVhbCBib29sIHNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCk7CisgICAgdmly
dHVhbCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24o
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UG9wdXBNZW51PiBjcmVhdGVQb3B1cE1lbnUoUG9w
dXBNZW51Q2xpZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNlYXJjaFBvcHVw
TWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoKSB7IH0KKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIo
RnJhbWUqLCBHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hv
dERyYXdpbmdTeW5jaHJvbml6YXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyU3luYygpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCogcGxhdGZvcm1X
aW5kb3coKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQqIHBsYXRmb3JtQ29tcG9zaXRpbmdXaW5k
b3coKSBjb25zdDsKKworICAgIEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIHdl
YlBhZ2VQcml2YXRlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlUHJpdmF0ZTsgfQorCitwcml2
YXRlOgorICAgIEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIG1fd2ViUGFnZVBy
aXZhdGU7Cit9OworCit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIENocm9tZUNsaWVudEJsYWNr
QmVycnlfaAotLSAKMS43LjUuNAoK
</data>
<flag name="review"
          id="127659"
          type_id="1"
          status="+"
          setter="rwlbuis"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125985</attachid>
            <date>2012-02-07 19:02:17 -0800</date>
            <delta_ts>2012-02-07 19:12:13 -0800</delta_ts>
            <desc>Patch v4</desc>
            <filename>0001-BlackBerry-Upstream-ChromeClientBlackBerry.-h-cpp.patch</filename>
            <type>text/plain</type>
            <size>36730</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSA4YzM3OTNmNzliZDdhN2QxMDcwY2M4MWRiMTM1YjdkMTZiMDYyYmZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBXZWQsIDggRmViIDIwMTIgMTA6MjM6MzQgKzA4MDAKU3ViamVjdDogW1BBVENIXSBb
QmxhY2tCZXJyeV0gVXBzdHJlYW0gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS57aCwgY3BwfQogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3ODQzCgpSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0ZXN0cy4KCiogYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcDogQWRkZWQuCiog
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5Lmg6IEFkZGVk
LgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxMiArCiAuLi4vV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAg
ICAgICB8ICA4NDMgKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRCbGFja0JlcnJ5LmggICAgICAgIHwgIDE2MiArKysrCiAzIGZpbGVzIGNoYW5nZWQs
IDEwMTcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tC
ZXJyeS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0ODYxNjIz
Li4xMzg0ODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAyLTA3ICBMZW8gWWFu
ZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW0gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS57aCwgY3BwfQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4NDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtLCBubyBuZXcg
dGVzdHMuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaDogQWRkZWQuCisKIDIwMTItMDItMDYgIExlbyBZ
YW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFja0JlcnJ5
XSBVc2UgV2ViUGFnZVByaXZhdGUgaW5zdGVhZCBvZiBXZWJQYWdlIGluIEdlb2xvY2F0aW9uQ29u
dHJvbGxlckNsaWVudEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTlhY2ZmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEJsYWNrQmVycnkuY3BwCkBAIC0wLDAgKzEsODQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRCbGFja0JlcnJ5LmgiCisKKyNpbmNsdWRl
ICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNs
dWRlICJCYWNraW5nU3RvcmVfcC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJE
YXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlQ2xpZW50LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0LmgiCisj
aW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9s
b2NhdGlvbkNvbnRyb2xsZXJDbGllbnRCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKKyNpbmNsdWRlICJJY29uLmgiCisjaW5jbHVkZSAiSW5wdXRIYW5kbGVyLmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERl
ZmVycmVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQb3B1cE1l
bnVCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR1pv
b21BbmRQYW4uaCIKKyNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVCbGFja0JlcnJ5LmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTaGFyZWRQb2ludGVyLmgiCisjaW5j
bHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgorI2luY2x1ZGUgIldl
YlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgorCisjZGVmaW5lIERFQlVHX09WRVJGTE9XX0RF
VEVDVElPTiAwCisKK3VzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpXZWJLaXQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENTdHJpbmcgZnJhbWVPcmlnaW4oRnJhbWUqIGZyYW1l
KQoreworICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRvdygpOworICAgIFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3aW5kb3ctPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgQ1N0
cmluZyBsYXRpbk9yaWdpbiA9IG9yaWdpbi0+dG9TdHJpbmcoKS5sYXRpbjEoKTsKKyAgICByZXR1
cm4gbGF0aW5PcmlnaW47Cit9CisKK0Nocm9tZUNsaWVudEJsYWNrQmVycnk6OkNocm9tZUNsaWVu
dEJsYWNrQmVycnkoV2ViUGFnZVByaXZhdGUqIHBhZ2VQcml2YXRlKQorICAgIDogbV93ZWJQYWdl
UHJpdmF0ZShwYWdlUHJpdmF0ZSkKK3sKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5
OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlSUQpCit7CisjaWYgRU5BQkxFX0RSVAorICAgIGlmIChtX3dlYlBh
Z2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlKQorICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5t
X2R1bXBSZW5kZXJUcmVlLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZUlEKTsKKyNlbmRpZgorCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmFk
ZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZS5jaGFyYWN0ZXJzKCksIG1lc3NhZ2UubGVuZ3RoKCks
IHNvdXJjZUlELmNoYXJhY3RlcnMoKSwgc291cmNlSUQubGVuZ3RoKCksIGxpbmVOdW1iZXIpOwor
fQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bkphdmFTY3JpcHRBbGVydChGcmFt
ZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyNpZiBFTkFCTEVfRFJUCisgICAg
aWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpIHsKKyAgICAgICAgbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZS0+cnVuSmF2YVNjcmlwdEFsZXJ0KG1lc3NhZ2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBUaW1lckJhc2U6OmZpcmVU
aW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFt
ZU9yaWdpbihmcmFtZSk7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnJ1bkphdmFT
Y3JpcHRBbGVydChtZXNzYWdlLmNoYXJhY3RlcnMoKSwgbWVzc2FnZS5sZW5ndGgoKSwgbGF0aW5P
cmlnaW4uZGF0YSgpLCBsYXRpbk9yaWdpbi5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCit7CisjaWYgRU5BQkxFX0RSVAorICAgIGlmIChtX3dlYlBhZ2VQcml2
YXRlLT5tX2R1bXBSZW5kZXJUcmVlKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdlUHJpdmF0ZS0+
bV9kdW1wUmVuZGVyVHJlZS0+cnVuSmF2YVNjcmlwdENvbmZpcm0obWVzc2FnZSk7CisjZW5kaWYK
KworICAgIFRpbWVyQmFzZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7CisgICAgQ1N0
cmluZyBsYXRpbk9yaWdpbiA9IGZyYW1lT3JpZ2luKGZyYW1lKTsKKyAgICByZXR1cm4gbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9jbGllbnQtPnJ1bkphdmFTY3JpcHRDb25maXJtKG1lc3NhZ2UuY2hhcmFj
dGVycygpLCBtZXNzYWdlLmxlbmd0aCgpLCBsYXRpbk9yaWdpbi5kYXRhKCksIGxhdGluT3JpZ2lu
Lmxlbmd0aCgpKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpydW5KYXZhU2Ny
aXB0UHJvbXB0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCit7CisjaWYgRU5BQkxFX0RSVAorICAg
IGlmIChtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlKSB7CisgICAgICAgIHJlc3Vs
dCA9IG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUtPnJ1bkphdmFTY3JpcHRQcm9t
cHQobWVzc2FnZSwgZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
I2VuZGlmCisKKyAgICBUaW1lckJhc2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOwor
ICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFtZU9yaWdpbihmcmFtZSk7CisgICAgV2ViU3Ry
aW5nIGNsaWVudFJlc3VsdDsKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnJ1
bkphdmFTY3JpcHRQcm9tcHQobWVzc2FnZS5jaGFyYWN0ZXJzKCksIG1lc3NhZ2UubGVuZ3RoKCks
IGRlZmF1bHRWYWx1ZS5jaGFyYWN0ZXJzKCksIGRlZmF1bHRWYWx1ZS5sZW5ndGgoKSwgbGF0aW5P
cmlnaW4uZGF0YSgpLCBsYXRpbk9yaWdpbi5sZW5ndGgoKSwgY2xpZW50UmVzdWx0KSkgeworICAg
ICAgICByZXN1bHQgPSBjbGllbnRSZXN1bHQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y2hy
b21lRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgLy8g
VGhlIHdpbmRvdyBkaW1lbnNpb25zIGFyZSBmaXhlZCBpbiB0aGUgUklNIHBvcnQuCit9CisKK0Zs
b2F0UmVjdCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojp3aW5kb3dSZWN0KCkKK3sKKyAgICBjb25z
dCBJbnRTaXplIHdpbmRvd1NpemUgPSBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+d2luZG93
KCktPndpbmRvd1NpemUoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpbmRvd1NpemUu
d2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7Cit9CisKK0Zsb2F0UmVjdCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5OjpwYWdlUmVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2Zsb2F0IENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNj
YWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFj
a0JlcnJ5Ojpmb2N1cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5Ojp1bmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNhblRha2VGb2N1cyhGb2N1c0RpcmVj
dGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojp0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5
Ojpmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSogbm9kZSkKK3sKKyAgICBXZWJQYWdlQ2xpZW50OjpG
b2N1c1R5cGUgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzVW5rbm93bjsKKworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzTm9uZTsKKyAgICBlbHNl
IGlmIChub2RlLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6
OkZvY3VzU1ZHRWxlbWVudDsKKyAgICBlbHNlIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsK
KyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphVGFnKSkgeworICAgICAg
ICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzTGluazsKKyAgICAgICAgfSBlbHNlIGlm
IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgICAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4obm9kZSk7CisgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aXNpbmRleFRhZykgfHwgaW5wdXRFbGVtZW50LT5pc0lucHV0VHlwZUhpZGRlbigp
KQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0VW5rbm93
bjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNUZXh0QnV0dG9uKCkpCisg
ICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRCdXR0b247Cisg
ICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tib3goKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dENoZWNrQm94OworI2lmIEVO
QUJMRShJTlBVVF9DT0xPUikKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXND
b2xvckNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9j
dXNJbnB1dENvbG9yOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQt
PmlzRGF0ZUNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6
Rm9jdXNJbnB1dERhdGU7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzRGF0
ZVRpbWVDb250cm9sKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZv
Y3VzSW5wdXREYXRlVGltZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNE
YXRlVGltZUxvY2FsQ29udHJvbCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xp
ZW50OjpGb2N1c0lucHV0RGF0ZVRpbWVMb2NhbDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0
RWxlbWVudC0+aXNFbWFpbEZpZWxkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VD
bGllbnQ6OkZvY3VzSW5wdXRFbWFpbDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVu
dC0+aXNGaWxlVXBsb2FkKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6
OkZvY3VzSW5wdXRGaWxlOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc0lt
YWdlQnV0dG9uKCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3Vz
SW5wdXRJbWFnZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVudC0+aXNNb250aENv
bnRyb2woKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1
dE1vbnRoOworICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc051bWJlckZpZWxk
KCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXROdW1i
ZXI7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgp
KQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0UGFzc3dv
cmQ7CisgICAgICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSkK
KyAgICAgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFJhZGlvOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1JhbmdlQ29udHJvbCgpKQorICAg
ICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0UmFuZ2U7CisgICAg
ICAgICAgICBlbHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzUmVzZXRCdXR0b24oKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFJlc2V0OworICAgICAgICAg
ICAgZWxzZSBpZiAoaW5wdXRFbGVtZW50LT5pc1NlYXJjaEZpZWxkKCkpCisgICAgICAgICAgICAg
ICAgdHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRTZWFyY2g7CisgICAgICAgICAgICBl
bHNlIGlmIChpbnB1dEVsZW1lbnQtPmlzU3VibWl0QnV0dG9uKCkpCisgICAgICAgICAgICAgICAg
dHlwZSA9IFdlYlBhZ2VDbGllbnQ6OkZvY3VzSW5wdXRTdWJtaXQ7CisgICAgICAgICAgICBlbHNl
IGlmIChpbnB1dEVsZW1lbnQtPmlzVGVsZXBob25lRmllbGQoKSkKKyAgICAgICAgICAgICAgICB0
eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNJbnB1dFRlbGVwaG9uZTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGlucHV0RWxlbWVudC0+aXNVUkxGaWVsZCgpKQorICAgICAgICAgICAgICAgIHR5cGUg
PSBXZWJQYWdlQ2xpZW50OjpGb2N1c0lucHV0VVJMOworICAgICAgICAgICAgZWxzZSBpZiAoaW5w
dXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdl
Q2xpZW50OjpGb2N1c0lucHV0VGV4dDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RWxlbWVu
dC0+aXNUaW1lQ29udHJvbCgpKQorICAgICAgICAgICAgICAgIHR5cGUgPSBXZWJQYWdlQ2xpZW50
OjpGb2N1c0lucHV0VGltZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBtaXNzaW5nIFdFRUsgcG9w
dXAgc2VsZWN0b3IKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0eXBlID0gV2Vi
UGFnZUNsaWVudDo6Rm9jdXNJbnB1dFVua25vd247CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFn
ZUNsaWVudDo6Rm9jdXNJbWFnZTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdFRhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6
Rm9jdXNPYmplY3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp2aWRlb1RhZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNWaWRl
bzsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRh
ZykpCisgICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNTZWxlY3Q7CisgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYVRhZykpCisg
ICAgICAgICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNUZXh0QXJlYTsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhbnZhc1RhZykpCisgICAgICAg
ICAgICB0eXBlID0gV2ViUGFnZUNsaWVudDo6Rm9jdXNDYW52YXM7CisgICAgfQorCisgICAgbV93
ZWJQYWdlUHJpdmF0ZS0+bV9pbnB1dEhhbmRsZXItPm5vZGVGb2N1c2VkKG5vZGUpOworCisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmZvY3VzQ2hhbmdlZCh0eXBlLCByZWludGVycHJl
dF9jYXN0PGludD4obm9kZSkpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmZv
Y3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqKQoreworICAgIC8vIFRvIGJlIHVzZWQgYnkgSW4tcmVn
aW9uIGJhY2tpbmcgc3RvcmUgY29udGV4dCBzd2l0Y2hpbmcuCit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6c2hvdWxkRm9yY2VEb2N1bWVudFN0eWxlU2VsZWN0b3JVcGRhdGUoKQor
eworICAgIHJldHVybiAhbV93ZWJQYWdlUHJpdmF0ZS0+bV93ZWJTZXR0aW5ncy0+aXNKYXZhU2Ny
aXB0RW5hYmxlZCgpICYmICFtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+cHJvY2Vz
c2luZ0NoYW5nZSgpOworfQorCitQYWdlKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVX
aW5kb3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXaW5k
b3dGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKQoreworI2lmIEVO
QUJMRV9EUlQKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZSAmJiAh
bV93ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZS0+YWxsb3dzT3BlbmluZ1dpbmRvdygp
KQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgICAgUGFnZUdyb3VwTG9hZERlZmVycmVy
IGRlZmVycmVyKG1fd2ViUGFnZVByaXZhdGUtPm1fcGFnZSwgdHJ1ZSk7CisgICAgVGltZXJCYXNl
OjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsKKworICAgIGludCB4ID0gZmVhdHVyZXMu
eFNldCA/IGZlYXR1cmVzLnggOiAwOworICAgIGludCB5ID0gZmVhdHVyZXMueVNldCA/IGZlYXR1
cmVzLnkgOiAwOworICAgIGludCB3aWR0aCA9IGZlYXR1cmVzLndpZHRoU2V0PyBmZWF0dXJlcy53
aWR0aCA6IC0xOworICAgIGludCBoZWlnaHQgPSBmZWF0dXJlcy5oZWlnaHRTZXQgPyBmZWF0dXJl
cy5oZWlnaHQgOiAtMTsKKyAgICB1bnNpZ25lZCBmbGFncyA9IDA7CisKKyAgICBpZiAoZmVhdHVy
ZXMubWVudUJhclZpc2libGUpCisgICAgICAgIGZsYWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZsYWdX
aW5kb3dIYXNNZW51QmFyOworICAgIGlmIChmZWF0dXJlcy5zdGF0dXNCYXJWaXNpYmxlKQorICAg
ICAgICBmbGFncyB8PSBXZWJQYWdlQ2xpZW50OjpGbGFnV2luZG93SGFzU3RhdHVzQmFyOworICAg
IGlmIChmZWF0dXJlcy50b29sQmFyVmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNs
aWVudDo6RmxhZ1dpbmRvd0hhc1Rvb2xCYXI7CisgICAgaWYgKGZlYXR1cmVzLmxvY2F0aW9uQmFy
VmlzaWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc0xv
Y2F0aW9uQmFyOworICAgIGlmIChmZWF0dXJlcy5zY3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAg
ZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0hhc1Njcm9sbEJhcjsKKyAgICBpZiAo
ZmVhdHVyZXMucmVzaXphYmxlKQorICAgICAgICBmbGFncyB8PSBXZWJQYWdlQ2xpZW50OjpGbGFn
V2luZG93SXNSZXNpemFibGU7CisgICAgaWYgKGZlYXR1cmVzLmZ1bGxzY3JlZW4pCisgICAgICAg
IGZsYWdzIHw9IFdlYlBhZ2VDbGllbnQ6OkZsYWdXaW5kb3dJc0Z1bGxTY3JlZW47CisgICAgaWYg
KGZlYXR1cmVzLmRpYWxvZykKKyAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dp
bmRvd0lzRGlhbG9nOworCisgICAgV2ViUGFnZSogd2ViUGFnZSA9IG1fd2ViUGFnZVByaXZhdGUt
Pm1fY2xpZW50LT5jcmVhdGVXaW5kb3coeCwgeSwgd2lkdGgsIGhlaWdodCwgZmxhZ3MsIFdlYlN0
cmluZyhyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnN0cmluZygpKSwgV2ViU3RyaW5n
KHJlcXVlc3QuZnJhbWVOYW1lKCkpKTsKKyAgICBpZiAoIXdlYlBhZ2UpCisgICAgICAgIHJldHVy
biAwOworCisjaWYgRU5BQkxFX0RSVAorICAgIGlmIChtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBS
ZW5kZXJUcmVlKQorICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlLT53
aW5kb3dDcmVhdGVkKHdlYlBhZ2UpOworI2VuZGlmCisKKyAgICByZXR1cm4gd2ViUGFnZS0+ZC0+
bV9wYWdlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNob3coKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y2Fu
UnVuTW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk1vZGFsKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnNlbGVjdEl0
ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NN
ZW51V3JpdGluZ0RpcmVjdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQ
dHI8UG9wdXBNZW51PiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVQb3B1cE1lbnUoUG9w
dXBNZW51Q2xpZW50KiBjbGllbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
b3B1cE1lbnVCbGFja0JlcnJ5KGNsaWVudCkpOworfQorCitQYXNzUmVmUHRyPFNlYXJjaFBvcHVw
TWVudT4gQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVw
TWVudUNsaWVudCogY2xpZW50KSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vh
cmNoUG9wdXBNZW51QmxhY2tCZXJyeShjbGllbnQpKTsKK30KKworCit2b2lkIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6dG9vbGJhcnNWaXNpYmxl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpz
dGF0dXNiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTY3JvbGxiYXJzVmlz
aWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6c2Nyb2xsYmFyc1Zpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6
OnNldE1lbnViYXJWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Ym9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjptZW51YmFyVmlzaWJsZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50
QmxhY2tCZXJyeTo6c2V0UmVzaXphYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjYW5SdW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lKikKK3sKKyNpZiBFTkFCTEVfRFJUCisg
ICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpCisgICAgICAgIHJldHVy
biBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5kZXJUcmVlLT5ydW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWwobWVzc2FnZSk7CisjZW5kaWYKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNsb3NlV2lu
ZG93U29vbigpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnNjaGVkdWxlQ2xv
c2VXaW5kb3coKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXRTdGF0dXNi
YXJUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1f
Y2xpZW50LT5zZXRTdGF0dXMoc3RhdHVzKTsKKworI2lmIEVOQUJMRV9EUlQKKyAgICBpZiAobV93
ZWJQYWdlUHJpdmF0ZS0+bV9kdW1wUmVuZGVyVHJlZSkKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0
ZS0+bV9kdW1wUmVuZGVyVHJlZS0+c2V0U3RhdHVzVGV4dChzdGF0dXMpOworI2VuZGlmCit9CisK
K0ludFJlY3QgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6d2luZG93UmVzaXplclJlY3QoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKwor
SW50UG9pbnQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50
UG9pbnQmIHNjcmVlblBvcykgY29uc3QKK3sKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IG1f
d2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT53aW5kb3coKS0+d2luZG93TG9jYXRpb24oKTsKKyAg
ICB3aW5kb3dQb2ludC5tb3ZlKC1zY3JlZW5Qb3MueCgpLCAtc2NyZWVuUG9zLnkoKSk7CisgICAg
cmV0dXJuIHdpbmRvd1BvaW50OworfQorCitJbnRSZWN0IENocm9tZUNsaWVudEJsYWNrQmVycnk6
OndpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QpIGNvbnN0Cit7CisgICAg
SW50UmVjdCB3aW5kb3dQb2ludCh3aW5kb3dSZWN0KTsKKyAgICBJbnRQb2ludCBsb2NhdGlvbiht
X3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+d2luZG93KCktPndpbmRvd0xvY2F0aW9uKCkpOwor
ICAgIHdpbmRvd1BvaW50Lm1vdmUobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCkpOworICAgIHJl
dHVybiB3aW5kb3dQb2ludDsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojptb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVk
IGludCBtb2RpZmllckZsYWdzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
Q2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2x0aXAs
IFRleHREaXJlY3Rpb24pCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnNldFRv
b2xUaXAodG9vbHRpcCk7Cit9CisKKyNpZiBFTkFCTEUoRVZFTlRfTU9ERV9NRVRBVEFHUykKK3Zv
aWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlkUmVjZWl2ZUN1cnNvckV2ZW50TW9kZShGcmFt
ZSogZnJhbWUsIEN1cnNvckV2ZW50TW9kZSBtb2RlKSBjb25zdAoreworICAgIGlmIChtX3dlYlBh
Z2VQcml2YXRlLT5tX21haW5GcmFtZSAhPSBmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+ZGlkUmVjZWl2ZUN1cnNvckV2ZW50TW9kZShtb2RlKTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWRSZWNlaXZlVG91Y2hFdmVudE1vZGUoRnJh
bWUqIGZyYW1lLCBUb3VjaEV2ZW50TW9kZSBtb2RlKSBjb25zdAoreworICAgIGlmIChtX3dlYlBh
Z2VQcml2YXRlLT5tX21haW5GcmFtZSAhPSBmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+ZGlkUmVjZWl2ZVRvdWNoRXZlbnRNb2RlKG1vZGUpOworfQorI2Vu
ZGlmCisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hWaWV3cG9ydFByb3Bl
cnRpZXNEaWRDaGFuZ2UoY29uc3QgVmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QK
K3sKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5kaXNwYXRjaFZpZXdwb3J0UHJvcGVydGllc0RpZENo
YW5nZShhcmd1bWVudHMpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnByaW50
KEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKTsKKworI2lmIEVOQUJMRV9EUlQKKyAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+
bV9kdW1wUmVuZGVyVHJlZSkgeworICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2R1bXBSZW5k
ZXJUcmVlLT5leGNlZWRlZERhdGFiYXNlUXVvdGEob3JpZ2luLCBuYW1lKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRGF0YWJhc2VUcmFja2VyJiB0cmFja2VyID0gRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxV
c2FnZSA9IHRyYWNrZXIudG90YWxEYXRhYmFzZVVzYWdlKCk7CisgICAgdW5zaWduZWQgbG9uZyBs
b25nIG9yaWdpblVzYWdlID0gdHJhY2tlci51c2FnZUZvck9yaWdpbihvcmlnaW4pOworCisgICAg
RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSB0cmFja2VyLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2lu
KG5hbWUsIG9yaWdpbik7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGVzdGltYXRlZFNpemUgPSBk
ZXRhaWxzLmV4cGVjdGVkVXNhZ2UoKTsKKyAgICBjb25zdCBTdHJpbmcmIG5hbWVTdHIgPSBkZXRh
aWxzLmRpc3BsYXlOYW1lKCk7CisKKyAgICBTdHJpbmcgb3JpZ2luU3RyID0gb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKTsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSA9IG1fd2Vi
UGFnZVByaXZhdGUtPm1fY2xpZW50LT5kYXRhYmFzZVF1b3RhKG9yaWdpblN0ci5jaGFyYWN0ZXJz
KCksIG9yaWdpblN0ci5sZW5ndGgoKSwKKyAgICAgICAgbmFtZVN0ci5jaGFyYWN0ZXJzKCksIG5h
bWVTdHIubGVuZ3RoKCksIHRvdGFsVXNhZ2UsIG9yaWdpblVzYWdlLCBlc3RpbWF0ZWRTaXplKTsK
KworICAgIHRyYWNrZXIuc2V0UXVvdGEob3JpZ2luLCBxdW90YSk7CisjZW5kaWYKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAgaWYg
KCFtX3dlYlBhZ2VQcml2YXRlLT5tX3dlYlNldHRpbmdzLT5pc0dlb2xvY2F0aW9uRW5hYmxlZCgp
KSB7CisgICAgICAgIGdlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoZmFsc2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRvdygp
OworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBDU3RyaW5nIGxhdGlu
T3JpZ2luID0gZnJhbWVPcmlnaW4oZnJhbWUpOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9j
bGllbnQtPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb24obV93ZWJQYWdlUHJpdmF0ZS0+bV9n
ZW9sb2NhdGlvbkNsaWVudCwgZ2VvbG9jYXRpb24sIGxhdGluT3JpZ2luLmRhdGEoKSwgbGF0aW5P
cmlnaW4ubGVuZ3RoKCkpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmNhbmNl
bEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9u
KiBnZW9sb2NhdGlvbikKK3sKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+Y2FuY2Vs
R2VvbG9jYXRpb25QZXJtaXNzaW9uKG1fd2ViUGFnZVByaXZhdGUtPm1fZ2VvbG9jYXRpb25DbGll
bnQsIGdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpydW5P
cGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKQoreworICAg
IFNoYXJlZEFycmF5PFdlYlN0cmluZz4gaW5pdGlhbEZpbGVzOworICAgIHVuc2lnbmVkIGludCBp
bml0aWFsRmlsZVNpemUgPSBjaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXMuc2l6ZSgp
OworICAgIGlmIChpbml0aWFsRmlsZVNpemUgPiAwKQorICAgICAgICBpbml0aWFsRmlsZXMucmVz
ZXQobmV3IFdlYlN0cmluZ1tpbml0aWFsRmlsZVNpemVdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5pdGlhbEZpbGVTaXplOyArK2kpCisgICAgICAgIGluaXRpYWxGaWxlc1tpXSA9
IGNob29zZXItPnNldHRpbmdzKCkuc2VsZWN0ZWRGaWxlc1tpXTsKKworICAgIFNoYXJlZEFycmF5
PFdlYlN0cmluZz4gY2hvc2VuRmlsZXM7CisgICAgdW5zaWduZWQgaW50IGNob3NlbkZpbGVTaXpl
OworCisgICAgeworICAgICAgICBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgZGVmZXJyZXIobV93ZWJQ
YWdlUHJpdmF0ZS0+bV9wYWdlLCB0cnVlKTsKKyAgICAgICAgVGltZXJCYXNlOjpmaXJlVGltZXJz
SW5OZXN0ZWRFdmVudExvb3AoKTsKKworICAgICAgICAvLyBGSVhNRTogVXNlIGNob29zZXItPnNl
dHRpbmdzKCkuYWNjZXB0TUlNRVR5cGVzIGluc3RlYWQgb2YgV2ViU3RyaW5nKCkgZm9yIHRoZSBz
ZWNvbmQgcGFyYW1ldGVyLgorICAgICAgICBpZiAoIW1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50
LT5jaG9vc2VGaWxlbmFtZXMoY2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxvd3NNdWx0aXBsZUZpbGVz
LCBXZWJTdHJpbmcoKSwgaW5pdGlhbEZpbGVzLCBpbml0aWFsRmlsZVNpemUsIGNob3NlbkZpbGVz
LCBjaG9zZW5GaWxlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVj
dG9yPFN0cmluZz4gZmlsZXMoY2hvc2VuRmlsZVNpemUpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjaG9zZW5GaWxlU2l6ZTsgKytpKQorICAgICAgICBmaWxlc1tpXSA9IGNob3NlbkZp
bGVzW2ldOworICAgIGNob29zZXItPmNob29zZUZpbGVzKGZpbGVzKTsKK30KKwordm9pZCBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5Ojpsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBmaWxlbmFtZXMsIEZpbGVJY29uTG9hZGVyKiBsb2FkZXIpCit7CisgICAgbG9hZGVyLT5ub3Rp
ZnlGaW5pc2hlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7Cit9CisKK3Zv
aWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5Ojpm
b3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBtX3dlYlBhZ2VQcml2
YXRlLT5tX2lucHV0SGFuZGxlci0+bm9kZVRleHRDaGFuZ2VkKG5vZGUpOworfQorCit2b2lkIENo
cm9tZUNsaWVudEJsYWNrQmVycnk6OnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6
OmNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+Y29udGVudHNTaXplQ2hh
bmdlZChzaXplKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjppbnZhbGlkYXRl
V2luZG93KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQoreworICAg
IG1fd2ViUGFnZVByaXZhdGUtPm1fYmFja2luZ1N0b3JlLT5kLT5yZXBhaW50KHVwZGF0ZVJlY3Qs
IGZhbHNlIC8qY29udGVudENoYW5nZWQqLywgaW1tZWRpYXRlKTsKK30KKwordm9pZCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+
bV9iYWNraW5nU3RvcmUtPmQtPnJlcGFpbnQodXBkYXRlUmVjdCwgdHJ1ZSAvKmNvbnRlbnRDaGFu
Z2VkKi8sIGltbWVkaWF0ZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6aW52
YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3Qg
SW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUsIGNvbnN0IFNjcm9sbFZpZXcqIHNj
cm9sbFZpZXcpCit7CisgICAgaWYgKHNjcm9sbFZpZXcgIT0gbV93ZWJQYWdlUHJpdmF0ZS0+bV9t
YWluRnJhbWUtPnZpZXcoKSkKKyAgICAgICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KHVw
ZGF0ZVJlY3QsIHRydWUgLyppbW1lZGlhdGUqLyk7CisgICAgZWxzZSB7CisgICAgICAgIEJhY2tp
bmdTdG9yZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUgPSBtX3dlYlBhZ2VQcml2
YXRlLT5iYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZShtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5G
cmFtZSk7CisgICAgICAgIEFTU0VSVChiYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZSk7CisgICAg
ICAgIGJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lLT5jaGVja09yaWdpbk9mQ3VycmVudFNjcm9s
bE9wZXJhdGlvbigpOworCisgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fYmFja2luZ1N0b3Jl
LT5kLT5zbG93U2Nyb2xsKGRlbHRhLCB1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOworICAgIH0KK30K
Kwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgZGVs
dGEsIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKK3sKKyAgICAvLyBGSVhNRTogVGhlcmUncyBhIGNoYW5jZSB0aGUgZnVuY3Rpb24gaXMgY2Fs
bGVkIGluZGlyZWN0bHkgYnkgRnJhbWVWaWV3J3MgZHRvcgorICAgIC8vIHdoZW4gdGhlIEZyYW1l
J3MgdmlldygpIGlzIG51bGwuIFdlIHByb2JhYmx5IHdhbnQgdG8gZml4IGl0IGluIGFub3RoZXIg
d2F5LCBidXQKKyAgICAvLyBhdCB0aGlzIG1vbWVudCBsZXQncyBkbyBhIHF1aWNrIGZpeC4KKyAg
ICBpZiAoIW1fd2ViUGFnZVByaXZhdGUtPm1fbWFpbkZyYW1lLT52aWV3KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEJhY2tpbmdTdG9yZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJh
bWUgPSBtX3dlYlBhZ2VQcml2YXRlLT5iYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZShtX3dlYlBh
Z2VQcml2YXRlLT5tX21haW5GcmFtZSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZUNsaWVudEZv
ckZyYW1lKTsKKyAgICBiYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZS0+Y2hlY2tPcmlnaW5PZkN1
cnJlbnRTY3JvbGxPcGVyYXRpb24oKTsKKworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fYmFja2lu
Z1N0b3JlLT5kLT5zY3JvbGwoZGVsdGEsIHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsYWJsZUFyZWFzRGlkQ2hhbmdlKCkK
K3sKKyAgICB0eXBlZGVmIEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiBTY3JvbGxhYmxlQXJlYVNl
dDsKKyAgICBjb25zdCBTY3JvbGxhYmxlQXJlYVNldCogc2Nyb2xsYWJsZUFyZWFzID0gbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9wYWdlLT5zY3JvbGxhYmxlQXJlYVNldCgpOworCisgICAgYm9vbCBoYXNB
dExlYXN0T25lSW5SZWdpb25TY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIFNjcm9sbGFibGVB
cmVhU2V0OjppdGVyYXRvciBlbmQgPSBzY3JvbGxhYmxlQXJlYXMtPmVuZCgpOworICAgIGZvciAo
U2Nyb2xsYWJsZUFyZWFTZXQ6Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpICE9IG1fd2ViUGFnZVByaXZh
dGUtPm1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkgeworICAgICAgICAgICAgaGFzQXRMZWFz
dE9uZUluUmVnaW9uU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5zZXRIYXNJblJlZ2lvblNj
cm9sbGFibGVBcmVhcyhoYXNBdExlYXN0T25lSW5SZWdpb25TY3JvbGxhYmxlQXJlYSk7Cit9CisK
K3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IElu
dFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QKK3sKKyAgICBtX3dlYlBhZ2VQcml2YXRl
LT5ub3RpZnlUcmFuc2Zvcm1lZFNjcm9sbENoYW5nZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKK3sKKyAgICBUaW1lckJh
c2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworICAgIHJldHVybiBtX3dlYlBhZ2VQ
cml2YXRlLT5tX2NsaWVudC0+c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOworfQorCitLZXli
b2FyZFVJTW9kZSBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjprZXlib2FyZFVJTW9kZSgpCit7Cisg
ICAgYm9vbCB0YWJzVG9MaW5rcyA9IHRydWU7CisKKyNpZiBFTkFCTEVfRFJUCisgICAgaWYgKG1f
d2ViUGFnZVByaXZhdGUtPm1fZHVtcFJlbmRlclRyZWUpCisgICAgICAgIHRhYnNUb0xpbmtzID0g
RHVtcFJlbmRlclRyZWVTdXBwb3J0OjpsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7CisjZW5k
aWYKKworICAgIHJldHVybiB0YWJzVG9MaW5rcyA/IEtleWJvYXJkQWNjZXNzVGFic1RvTGlua3Mg
OiBLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7Cit9CisKK1BsYXRmb3JtUGFnZUNsaWVudCBDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjpwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3dlYlBhZ2VQcml2YXRlOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQg
Q2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wgdmFsdWUpCit7Cisg
ICAgbV93ZWJQYWdlUHJpdmF0ZS0+c2V0TmVlZFRvdWNoRXZlbnRzKHZhbHVlKTsKK30KKyNlbmRp
ZgorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUo
aW50NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IENocm9tZUNsaWVudEJsYWNrQmVycnk6OmxheW91dFVwZGF0ZWQoRnJhbWUqIGZyYW1lKSBjb25z
dAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQcml2YXRlLT5tX21haW5GcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bGF5b3V0RmluaXNoZWQoKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpvdmVyZmxvd0V4Y2VlZHNDb250ZW50
c1NpemUoRnJhbWUqIGZyYW1lKSBjb25zdAoreworICAgIGlmIChmcmFtZSAhPSBtX3dlYlBhZ2VQ
cml2YXRlLT5tX21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgREVCVUdfT1ZFUkZM
T1dfREVURUNUSU9OCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6b3ZlcmZsb3dF
eGNlZWRzQ29udGVudHNTaXplIGNvbnRlbnRzPSVkeCVkIG92ZXJmbG93PSVkeCVkIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKS0+cmlnaHRMYXlv
dXRPdmVyZmxvdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpLT5ib3R0b21MYXlvdXRPdmVyZmxvdygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5yaWdodEFic29sdXRlVmlzaWJsZU92ZXJm
bG93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+Y29udGVudFJlbmRlcmVy
KCktPmJvdHRvbUFic29sdXRlVmlzaWJsZU92ZXJmbG93KCkpOworI2VuZGlmCisgICAgbV93ZWJQ
YWdlUHJpdmF0ZS0+b3ZlcmZsb3dFeGNlZWRzQ29udGVudHNTaXplKCk7Cit9CisKK3ZvaWQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlkRGlzY292ZXJGcmFtZVNldChGcmFtZSogZnJhbWUpIGNv
bnN0Cit7CisgICAgaWYgKGZyYW1lICE9IG1fd2ViUGFnZVByaXZhdGUtPm1fbWFpbkZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWRE
aXNjb3ZlckZyYW1lU2V0Iik7CisgICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPmxvYWRTdGF0ZSgp
ID09IFdlYlBhZ2VQcml2YXRlOjpDb21taXR0ZWQpIHsKKyAgICAgICAgbV93ZWJQYWdlUHJpdmF0
ZS0+c2V0U2hvdWxkVXNlRml4ZWREZXNrdG9wTW9kZSh0cnVlKTsKKyAgICAgICAgbV93ZWJQYWdl
UHJpdmF0ZS0+em9vbVRvSW5pdGlhbFNjYWxlT25Mb2FkKCk7CisgICAgfQorfQorCitpbnQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6cmVmbG93V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBt
X3dlYlBhZ2VQcml2YXRlLT5yZWZsb3dXaWR0aCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEJs
YWNrQmVycnk6OmNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVD
aG9vc2VyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVu
dEJsYWNrQmVycnk6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
K3sKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5v
ZGUqIG5vZGUpCit7CisgICAgaWYgKCFzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5lbnRlckZ1bGxzY3JlZW5G
b3JOb2RlKG5vZGUpOworfQorCit2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmV4aXRGdWxs
c2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPmV4aXRG
dWxsc2NyZWVuRm9yTm9kZShub2RlKTsKK30KKworI2lmIEVOQUJMRShXRUJHTCkKK3ZvaWQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6cmVxdWVzdFdlYkdMUGVybWlzc2lvbihGcmFtZSogZnJhbWUp
Cit7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIENTdHJpbmcgbGF0aW5PcmlnaW4gPSBmcmFt
ZU9yaWdpbihmcmFtZSk7CisgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5yZXF1
ZXN0V2ViR0xQZXJtaXNzaW9uKGxhdGluT3JpZ2luLmRhdGEoKSk7CisgICAgfQorfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoU1ZHKQordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpkaWRTZXRT
Vkdab29tQW5kUGFuKEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgc2hvcnQgem9vbUFuZFBhbikKK3sK
KyAgICAvLyBGb3IgdG9wLWxldmVsIFNWRyBkb2N1bWVudCwgdGhlcmUgaXMgbm8gdmlld3BvcnQg
dGFnLCB3ZSB1c2Ugdmlld3BvcnQncyB1c2VyLXNjYWxhYmxlCisgICAgLy8gdG8gZW5hYmxlL2Rp
c2FibGUgem9vbSB3aGVuIHRvcC1sZXZlbCBTVkcgZG9jdW1lbnQncyB6b29tQW5kUGFuIGNoYW5n
ZWQuIEJlY2F1c2UgdGhlcmUgaXMgbm8gdmlld3BvcnQKKyAgICAvLyB0YWcsIG90aGVyIGZpZWxk
cyB3aXRoIGRlZmF1bHQgdmFsdWUgaW4gVmlld3BvcnRBcmd1bWVudHMgYXJlIG9rLgorICAgIGlm
IChmcmFtZSA9PSBtX3dlYlBhZ2VQcml2YXRlLT5tX3BhZ2UtPm1haW5GcmFtZSgpKSB7CisgICAg
ICAgIFZpZXdwb3J0QXJndW1lbnRzIGFyZ3VtZW50czsKKyAgICAgICAgc3dpdGNoICh6b29tQW5k
UGFuKSB7CisgICAgICAgIGNhc2UgU1ZHWm9vbUFuZFBhbjo6U1ZHX1pPT01BTkRQQU5fRElTQUJM
RToKKyAgICAgICAgICAgIGFyZ3VtZW50cy51c2VyU2NhbGFibGUgPSAwOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU1ZHWm9vbUFuZFBhbjo6U1ZHX1pPT01BTkRQQU5fTUFHTklG
WToKKyAgICAgICAgICAgIGFyZ3VtZW50cy51c2VyU2NhbGFibGUgPSAxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzKGZyYW1lLCBhcmd1bWVudHMpOwor
ICAgIH0KK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCitOb3RpZmljYXRp
b25QcmVzZW50ZXIqIENocm9tZUNsaWVudEJsYWNrQmVycnk6Om5vdGlmaWNhdGlvblByZXNlbnRl
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6aW5zdGFuY2UoKTsKK30KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQordm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjphdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgLy8g
SWYgdGhlIGdyYXBoaWNzTGF5ZXIgcGFyYW1ldGVyIGlzIDAsIFdlYkNvcmUgaXMgYWN0dWFsbHkK
KyAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIGEgcHJldmlvdXNseSBhdHRhY2hlZCBsYXllci4KKyAg
ICBtX3dlYlBhZ2VQcml2YXRlLT5zZXRSb290TGF5ZXJXZWJLaXRUaHJlYWQoZnJhbWUsIGdyYXBo
aWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwKTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uKCkKK3sKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5zZXROZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+c2No
ZWR1bGVSb290TGF5ZXJDb21taXQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5
OjphbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCit2b2lkKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpwbGF0Zm9ybVdp
bmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT53
aW5kb3coKTsKK30KKwordm9pZCogQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6cGxhdGZvcm1Db21w
b3NpdGluZ1dpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPm1f
Y2xpZW50LT5jb21wb3NpdGluZ1dpbmRvdygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NmE3MTVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaApAQCAtMCwwICsx
LDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaWZuZGVmIENocm9tZUNsaWVudEJsYWNrQmVycnlfaAorI2RlZmluZSBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5X2gKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorCituYW1l
c3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcml2
YXRlOworfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENocm9tZUNsaWVudEJs
YWNrQmVycnkgOiBwdWJsaWMgQ2hyb21lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBDaHJvbWVDbGll
bnRCbGFja0JlcnJ5KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqKTsKKworICAg
IHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQqIHdlYlZp
ZXcoKSBjb25zdCB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsK
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgZmxvYXQgc2Nh
bGVGYWN0b3IoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5mb2N1cygpOworICAgIHZpcnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24p
OworICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOworICAgIHZpcnR1
YWwgdm9pZCBmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBmb2N1
c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKik7CisgICAgdmlydHVhbCBib29sIHNob3VsZEZvcmNlRG9j
dW1lbnRTdHlsZVNlbGVjdG9yVXBkYXRlKCk7CisgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVXaW5k
b3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2luZG93RmVhdHVyZXMm
LCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHNob3coKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FuUnVuTW9kYWwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1
YWwgYm9vbCB0b29sYmFyc1Zpc2libGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFy
VmlzaWJsZShib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsYmFyc1Zpc2libGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVudWJhclZpc2li
bGUoYm9vbCk7CisgICAgdmlydHVhbCBib29sIG1lbnViYXJWaXNpYmxlKCk7CisgICAgdmlydHVh
bCB2b2lkIHNldFJlc2l6YWJsZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRv
Q29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlEKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KCk7CisgICAgdmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBT
dHJpbmcmLCBGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5nJik7
CisgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3QgU3Ry
aW5nJik7CisgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50
ZXJydXB0SmF2YVNjcmlwdCgpOworICAgIHZpcnR1YWwgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRV
SU1vZGUoKTsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7
CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRS
ZWN0JiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0ZvclNsb3dT
Y3JvbGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBib29sLCBjb25zdCBTY3JvbGxW
aWV3Kik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFz
RGlkQ2hhbmdlKCk7CisgICAgdmlydHVhbCBJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJ
bnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25z
dCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQo
RnJhbWUqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJl
Y3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiwgdW5zaWduZWQgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJp
bmcmLCBUZXh0RGlyZWN0aW9uKTsKKyNpZiBFTkFCTEUoRVZFTlRfTU9ERV9NRVRBVEFHUykKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUN1cnNvckV2ZW50TW9kZShGcmFtZSosIEN1cnNvckV2
ZW50TW9kZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVUb3VjaEV2ZW50TW9k
ZShGcmFtZSosIFRvdWNoRXZlbnRNb2RlKSBjb25zdDsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaFZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3Vt
ZW50cyYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rp
b24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2
b2lkIG51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBwcmludChGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNl
UXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdl
b2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZy
YW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1l
KiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOworICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZv
ckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUljb25Mb2FkZXIqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZv
cm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJh
cnNNb2RlRGlkQ2hhbmdlKCkgY29uc3Q7CisgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGllbnQg
cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3Q7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQor
ICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMoYm9vbCk7CisjZW5kaWYKKworI2lmIEVO
QUJMRShJTlBVVF9DT0xPUikKKyAgICB2b2lkIG9wZW5Db2xvckNob29zZXIoQ29sb3JDaG9vc2Vy
KiwgY29uc3QgQ29sb3ImKSB7IH0KKyAgICB2b2lkIGNsZWFudXBDb2xvckNob29zZXIoQ29sb3JD
aG9vc2VyKikgeyB9CisgICAgdm9pZCBzZXRTZWxlY3RlZENvbG9ySW5Db2xvckNob29zZXIoQ29s
b3JDaG9vc2VyKiwgY29uc3QgQ29sb3ImKSB7IH0KKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lk
IHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CisgICAgdmlydHVh
bCB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4q
LCBpbnQ2NF90KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRVcGRhdGVkKEZyYW1lKikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG92ZXJmbG93RXhjZWVkc0NvbnRlbnRzU2l6ZShGcmFt
ZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkaWREaXNjb3ZlckZyYW1lU2V0KEZyYW1lKikg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCByZWZsb3dXaWR0aCgpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVD
aG9vc2VyKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShj
b25zdCBOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9k
ZSopOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopOworI2lm
IEVOQUJMRShXRUJHTCkKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFdlYkdMUGVybWlzc2lvbihG
cmFtZSopOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICB2aXJ0dWFs
IE5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVyKCkgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIEVOQUJMRShTVkcpCisgICAgdmlydHVhbCB2b2lkIGRpZFNldFNWR1pvb21B
bmRQYW4oRnJhbWUqLCB1bnNpZ25lZCBzaG9ydCB6b29tQW5kUGFuKTsKKyNlbmRpZgorICAgIHZp
cnR1YWwgYm9vbCBzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpOworICAgIHZp
cnR1YWwgYm9vbCBzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9u
KCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBv
cHVwTWVudUNsaWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTZWFyY2hQb3B1
cE1lbnU+IGNyZWF0ZVNlYXJjaFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KCkgeyB9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVy
KEZyYW1lKiwgR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNo
b3REcmF3aW5nU3luY2hyb25pemF0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllclN5bmMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpIGNvbnN0OworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQqIHBsYXRmb3Jt
V2luZG93KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkKiBwbGF0Zm9ybUNvbXBvc2l0aW5nV2lu
ZG93KCkgY29uc3Q7CisKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiB3
ZWJQYWdlUHJpdmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGU7IH0KKworcHJp
dmF0ZToKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2VQ
cml2YXRlOworfTsKKworfSAvLyBXZWJDb3JlCisKKyNlbmRpZiAvLyBDaHJvbWVDbGllbnRCbGFj
a0JlcnJ5X2gKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="127663"
          type_id="1"
          status="+"
          setter="rwlbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>