<?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>150890</bug_id>
          
          <creation_ts>2015-11-04 03:40:36 -0800</creation_ts>
          <short_desc>[GStreamer] Use MainThreadNotifier to send notifications to main thread in WebKitWebSourceGStreamer</short_desc>
          <delta_ts>2015-11-06 06:52:49 -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>WebKit Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>150888</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>pnormand</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139319</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 03:40:36 -0800</bug_when>
    <thetext>Instead of the GThreadSafeMainLoopSources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139320</commentid>
    <comment_count>1</comment_count>
      <attachid>264788</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 03:42:52 -0800</bug_when>
    <thetext>Created attachment 264788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139321</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-04 03:45:27 -0800</bug_when>
    <thetext>Attachment 264788 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:178:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:189:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:197:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:208:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:233:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:655:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:667:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 7 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139945</commentid>
    <comment_count>3</comment_count>
      <attachid>264788</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-06 05:17:16 -0800</bug_when>
    <thetext>Comment on attachment 264788
Patch

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

All the uses of MainThreadNotifier&lt;&gt;::notify() need updating, otherwise looks fine.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:177
&gt; +    // NeedData

I usually write these in the same C-style they&apos;re declared in: need_data, enough_data, seek_data.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:194
&gt; +        {
&gt; +            WTF::GMutexLocker&lt;GMutex&gt; locker(*GST_OBJECT_GET_LOCK(src));
&gt; +            if (!priv-&gt;paused)
&gt; +                return;
&gt; +
&gt; +            if (!isMainThread()) {
&gt; +                GRefPtr&lt;WebKitWebSrc&gt; protector(src);
&gt; +                priv-&gt;notifier.notify(MainThreadSourceNotification::NeedData, [protector] { webKitWebSrcNeedData(protector.get()); });
&gt; +                return;
&gt; +            }
&gt; +        }
&gt; +
&gt; +        webKitWebSrcNeedData(src);

Can webKitWebSrcNeedData(), webKitWebSrcEnoughData() and webKitWebSrcSeek() all be rewritten and used with the expectation that the GST_OBJECT_GET_LOCK() is already locked? That way the lock can be held throughout the lambda scope, and there&apos;s no need for the isMainThread() check at this level.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:656
&gt; +        if (isMainThread())
&gt; +            webKitWebSrcStart(src);
&gt; +        else {
&gt; +            GRefPtr&lt;WebKitWebSrc&gt; protector(src);
&gt; +            priv-&gt;notifier.notify(MainThreadSourceNotification::Start, [protector] { webKitWebSrcStart(protector.get()); });
&gt; +        }

Similarly, webKitWebSrcStart() and webKitWebSrcStop() could just work with the assumption (or an actual run-time assertion) that the GstObject lock is locked.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:833
&gt; +static void webKitWebSrcSeek(WebKitWebSrc* src)

If all the above is possible, don&apos;t forget to set up the lock here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139948</commentid>
    <comment_count>4</comment_count>
      <attachid>264937</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-06 06:05:55 -0800</bug_when>
    <thetext>Created attachment 264937
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139949</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-06 06:07:26 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 264788 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264788&amp;action=review
&gt; 
&gt; All the uses of MainThreadNotifier&lt;&gt;::notify() need updating, otherwise
&gt; looks fine.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:177
&gt; &gt; +    // NeedData
&gt; 
&gt; I usually write these in the same C-style they&apos;re declared in: need_data,
&gt; enough_data, seek_data.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:194
&gt; &gt; +        {
&gt; &gt; +            WTF::GMutexLocker&lt;GMutex&gt; locker(*GST_OBJECT_GET_LOCK(src));
&gt; &gt; +            if (!priv-&gt;paused)
&gt; &gt; +                return;
&gt; &gt; +
&gt; &gt; +            if (!isMainThread()) {
&gt; &gt; +                GRefPtr&lt;WebKitWebSrc&gt; protector(src);
&gt; &gt; +                priv-&gt;notifier.notify(MainThreadSourceNotification::NeedData, [protector] { webKitWebSrcNeedData(protector.get()); });
&gt; &gt; +                return;
&gt; &gt; +            }
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        webKitWebSrcNeedData(src);
&gt; 
&gt; Can webKitWebSrcNeedData(), webKitWebSrcEnoughData() and webKitWebSrcSeek()
&gt; all be rewritten and used with the expectation that the
&gt; GST_OBJECT_GET_LOCK() is already locked? That way the lock can be held
&gt; throughout the lambda scope, and there&apos;s no need for the isMainThread()
&gt; check at this level.

I thought it was possible but it&apos;s not that easy. We don&apos;t want to keep the lock until the notification happens in the main thread, so we need to take lock again before calling the callback in the lambda. 
The notifier is thread say, so we can just release the lock before calling notify()

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:656
&gt; &gt; +        if (isMainThread())
&gt; &gt; +            webKitWebSrcStart(src);
&gt; &gt; +        else {
&gt; &gt; +            GRefPtr&lt;WebKitWebSrc&gt; protector(src);
&gt; &gt; +            priv-&gt;notifier.notify(MainThreadSourceNotification::Start, [protector] { webKitWebSrcStart(protector.get()); });
&gt; &gt; +        }
&gt; 
&gt; Similarly, webKitWebSrcStart() and webKitWebSrcStop() could just work with
&gt; the assumption (or an actual run-time assertion) that the GstObject lock is
&gt; locked.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:833
&gt; &gt; +static void webKitWebSrcSeek(WebKitWebSrc* src)
&gt; 
&gt; If all the above is possible, don&apos;t forget to set up the lock here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139950</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-06 06:08:35 -0800</bug_when>
    <thetext>Attachment 264937 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:178:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:189:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:192:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:203:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:223:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:637:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:645:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 7 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139953</commentid>
    <comment_count>7</comment_count>
      <attachid>264937</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-06 06:24:39 -0800</bug_when>
    <thetext>Comment on attachment 264937
Updated patch

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

r=me.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:418
&gt; +    bool wasSeeking = priv-&gt;isSeeking;

Consider combining this with the priv-&gt;isSeeking override below into std::exchange().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139954</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-06 06:52:49 -0800</bug_when>
    <thetext>Committed r192102: &lt;http://trac.webkit.org/changeset/192102&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264788</attachid>
            <date>2015-11-04 03:42:52 -0800</date>
            <delta_ts>2015-11-06 06:05:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-gst-web-src-notifier.diff</filename>
            <type>text/plain</type>
            <size>14542</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkYjY1ODhjLi41ZTk0OWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzMg
QEAKIDIwMTUtMTEtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHU3RyZWFtZXJdIFVzZSBNYWluVGhyZWFkTm90aWZpZXIgdG8gc2VuZCBu
b3RpZmljYXRpb25zIHRvIG1haW4gdGhyZWFkIGluIFdlYktpdFdlYlNvdXJjZUdTdHJlYW1lcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwODkwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBv
ZiB0aGUgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAg
KHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUpOgor
ICAgICAgICAod2ViS2l0V2ViU3JjTmVlZERhdGEpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5v
dWdoRGF0YSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrKToKKyAgICAgICAgKFN0cmVhbWlu
Z0NsaWVudDo6aGFuZGxlUmVzcG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChTdHJlYW1pbmdDbGll
bnQ6OmhhbmRsZURhdGFSZWNlaXZlZCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRs
ZU5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0ZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAg
KHdlYktpdFdlYlNyY0dldFByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNy
Y1NldEV4dHJhSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KTog
RGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY0dldFByb3RvY29scyk6IERlbGV0ZWQuCisg
ICAgICAgICh3ZWJLaXRXZWJTcmNHZXRVcmkpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0V2Vi
U3JjU2V0VXJpKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY1VyaUhhbmRsZXJJbml0
KTogRGVsZXRlZC4KKworMjAxNS0xMS0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKICAgICAgICAgW0dTdHJlYW1lcl0gVXNlIE1haW5UaHJlYWROb3RpZmll
ciB0byBzZW5kIG5vdGlmaWNhdGlvbnMgdG8gbWFpbiB0aHJlYWQgaW4gVHJhY2tQcml2YXRlR1N0
cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA4ODkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRl
eCAxNGE1ZWE1Li44ZmRmNjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJNYWluVGhyZWFkTm90aWZpZXIuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4TG9ja2VyLmg+CiAj
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dUaHJlYWRT
YWZlTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0xMDUsNiArMTA1LDE0IEBAIGNsYXNz
IFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xp
ZW50LCBwdWJsaWMgU3RyZWFtCiAgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9yZXNv
dXJjZTsKIH07CiAKK2VudW0gTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbiB7CisgICAgU3Rh
cnQgPSAxIDw8IDAsCisgICAgU3RvcCA9IDEgPDwgMSwKKyAgICBOZWVkRGF0YSA9IDEgPDwgMiwK
KyAgICBFbm91Z2hEYXRhID0gMSA8PCAzLAorICAgIFNlZWsgPSAxIDw8IDQKK307CisKICNkZWZp
bmUgV0VCS0lUX1dFQl9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfU1JDLCBXZWJLaXRXZWJTcmNQcml2YXRlKSkK
IHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAgICAgR3N0QXBwU3JjKiBhcHBzcmM7CkBA
IC0xMjYsMTYgKzEzNCwxMSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogICAgIGd1
aW50NjQgc2l6ZTsKICAgICBnYm9vbGVhbiBzZWVrYWJsZTsKICAgICBnYm9vbGVhbiBwYXVzZWQ7
CisgICAgYm9vbCBpc1NlZWtpbmc7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsKIAot
ICAgIGdib29sZWFuIHBlbmRpbmdTdGFydDsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNl
IHN0YXJ0U291cmNlOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2Ugc3RvcFNvdXJjZTsK
LSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG5lZWREYXRhU291cmNlOwotICAgIEdUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YVNvdXJjZTsKLSAgICBHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlIHNlZWtTb3VyY2U7Ci0KKyAgICBNYWluVGhyZWFkTm90aWZpZXI8TWFpblRo
cmVhZFNvdXJjZU5vdGlmaWNhdGlvbj4gbm90aWZpZXI7CiAgICAgR1JlZlB0cjxHc3RCdWZmZXI+
IGJ1ZmZlcjsKIH07CiAKQEAgLTE2NiwxNSArMTY5LDc2IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFu
Z2UpCiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFk
KiwgR3N0T2JqZWN0KiwgR3N0UXVlcnkqKTsKIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVl
ZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKTsKLXN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1
c2VyRGF0YSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla0RhdGFDYihHc3RBcHBT
cmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNlckRhdGEpOworc3RhdGljIHZvaWQgd2Vi
S2l0V2ViU3JjTmVlZERhdGEoV2ViS2l0V2ViU3JjKik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNFbm91Z2hEYXRhKFdlYktpdFdlYlNyYyopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU2Vl
ayhXZWJLaXRXZWJTcmMqKTsKIAogc3RhdGljIEdzdEFwcFNyY0NhbGxiYWNrcyBhcHBzcmNDYWxs
YmFja3MgPSB7Ci0gICAgd2ViS2l0V2ViU3JjTmVlZERhdGFDYiwKLSAgICB3ZWJLaXRXZWJTcmNF
bm91Z2hEYXRhQ2IsCi0gICAgd2ViS2l0V2ViU3JjU2Vla0RhdGFDYiwKLSAgICB7IDAgfQorICAg
IC8vIE5lZWREYXRhCisgICAgW10oR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyIHVzZXJEYXRh
KSB7CisgICAgICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkModXNlckRhdGEp
OworICAgICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1Rf
T0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgICAgICAgICAgaWYgKCFwcml2LT5wYXVzZWQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoIWlzTWFpblRocmVhZCgp
KSB7CisgICAgICAgICAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHByb3RlY3RvcihzcmMp
OworICAgICAgICAgICAgICAgIHByaXYtPm5vdGlmaWVyLm5vdGlmeShNYWluVGhyZWFkU291cmNl
Tm90aWZpY2F0aW9uOjpOZWVkRGF0YSwgW3Byb3RlY3Rvcl0geyB3ZWJLaXRXZWJTcmNOZWVkRGF0
YShwcm90ZWN0b3IuZ2V0KCkpOyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3ZWJLaXRXZWJTcmNOZWVkRGF0YShzcmMpOwor
ICAgIH0sCisgICAgLy8gRW5vdWdoRGF0YQorICAgIFtdKEdzdEFwcFNyYyosIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkModXNl
ckRhdGEpOworICAgICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2Owor
CisgICAgICAgIHsKKyAgICAgICAgICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2Vy
KCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgICAgICAgICAgaWYgKHByaXYtPnBhdXNl
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmICghaXNNYWluVGhy
ZWFkKCkpIHsKKyAgICAgICAgICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9y
KHNyYyk7CisgICAgICAgICAgICAgICAgcHJpdi0+bm90aWZpZXIubm90aWZ5KE1haW5UaHJlYWRT
b3VyY2VOb3RpZmljYXRpb246OkVub3VnaERhdGEsIFtwcm90ZWN0b3JdIHsgd2ViS2l0V2ViU3Jj
RW5vdWdoRGF0YShwcm90ZWN0b3IuZ2V0KCkpOyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3ZWJLaXRXZWJTcmNFbm91Z2hE
YXRhKHNyYyk7CisgICAgfSwKKyAgICAvLyBTZWVrRGF0YQorICAgIFtdKEdzdEFwcFNyYyosIGd1
aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4geworICAgICAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKHVzZXJEYXRhKTsKKyAgICAgICAgV2Vi
S2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgICAgICB7CisgICAgICAg
ICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gcHJpdi0+b2Zmc2V0ICYmIHByaXYt
PnJlcXVlc3RlZE9mZnNldCA9PSBwcml2LT5vZmZzZXQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFRSVUU7CisKKyAgICAgICAgICAgIGlmICghcHJpdi0+c2Vla2FibGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgICAgICBwcml2LT5pc1NlZWtpbmcgPSB0cnVlOwor
ICAgICAgICAgICAgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID0gb2Zmc2V0OworCisgICAgICAgICAg
ICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgICAgICAgICAgR1JlZlB0cjxXZWJLaXRX
ZWJTcmM+IHByb3RlY3RvcihzcmMpOworICAgICAgICAgICAgICAgIHByaXYtPm5vdGlmaWVyLm5v
dGlmeShNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpTZWVrLCBbcHJvdGVjdG9yXSB7IHdl
YktpdFdlYlNyY1NlZWsocHJvdGVjdG9yLmdldCgpKTsgfSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3ZWJLaXRXZWJT
cmNTZWVrKHNyYyk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0sCisgICAgeyBudWxscHRy
IH0KIH07CiAKICNkZWZpbmUgd2Via2l0X3dlYl9zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFz
cwpAQCAtMzU4LDE3ICs0MjIsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZQogICAgIH0KIH0K
IAotc3RhdGljIHZvaWQgcmVtb3ZlVGltZW91dFNvdXJjZXMoV2ViS2l0V2ViU3JjKiBzcmMpCi17
Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIGlmICgh
cHJpdi0+cGVuZGluZ1N0YXJ0KQotICAgICAgICBwcml2LT5zdGFydFNvdXJjZS5jYW5jZWwoKTsK
LSAgICBwcml2LT5uZWVkRGF0YVNvdXJjZS5jYW5jZWwoKTsKLSAgICBwcml2LT5lbm91Z2hEYXRh
U291cmNlLmNhbmNlbCgpOwotICAgIHByaXYtPnNlZWtTb3VyY2UuY2FuY2VsKCk7Ci19Ci0KIHN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2Vi
S2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKQEAgLTM3Nyw5ICs0MzAsOSBAQCBz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgV1RG
OjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAKLSAgICBib29sIHNlZWtpbmcgPSBwcml2LT5zZWVrU291cmNlLmlzQWN0aXZlKCk7CisgICAg
Ym9vbCB3YXNTZWVraW5nID0gcHJpdi0+aXNTZWVraW5nOwogCi0gICAgcmVtb3ZlVGltZW91dFNv
dXJjZXMoc3JjKTsKKyAgICBwcml2LT5ub3RpZmllci5jYW5jZWxQZW5kaW5nTm90aWZpY2F0aW9u
cyhNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpOZWVkRGF0YSB8IE1haW5UaHJlYWRTb3Vy
Y2VOb3RpZmljYXRpb246OkVub3VnaERhdGEgfCBNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9u
OjpTZWVrKTsKIAogICAgIGlmIChwcml2LT5jbGllbnQpIHsKICAgICAgICAgZGVsZXRlIHByaXYt
PmNsaWVudDsKQEAgLTM5OCw4ICs0NTEsOSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9w
KFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5z
ZWVrYWJsZSA9IEZBTFNFOworICAgIHByaXYtPmlzU2Vla2luZyA9IGZhbHNlOwogCi0gICAgaWYg
KCFzZWVraW5nKSB7CisgICAgaWYgKCF3YXNTZWVraW5nKSB7CiAgICAgICAgIHByaXYtPnNpemUg
PSAwOwogICAgICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOwogICAgICAgICBwcml2LT5w
bGF5ZXIgPSAwOwpAQCAtNDA5LDcgKzQ2Myw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0
b3AoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBpZiAocHJpdi0+YXBwc3JjKSB7CiAgICAgICAg
IGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7Ci0gICAgICAgIGlmICghc2Vl
a2luZykKKyAgICAgICAgaWYgKCF3YXNTZWVraW5nKQogICAgICAgICAgICAgZ3N0X2FwcF9zcmNf
c2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CiAgICAgfQogCkBAIC00NzUsNyArNTI5LDYgQEAg
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBX
VEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMp
KTsKIAotICAgIHByaXYtPnBlbmRpbmdTdGFydCA9IEZBTFNFOwogICAgIHByaXYtPmRpZFBhc3NB
Y2Nlc3NDb250cm9sQ2hlY2sgPSBmYWxzZTsKIAogICAgIGlmICghcHJpdi0+dXJpKSB7CkBAIC01
OTEsMjYgKzY0NCwyOCBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3Jj
Q2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAogICAgICAgICByZXR1cm4g
cmV0OwogICAgIH0KIAotICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1Rf
T0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRjaCAodHJhbnNpdGlvbikgewogICAgIGNh
c2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CiAgICAgewogICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlJFQURZLT5QQVVTRUQiKTsKLSAgICAgICAgcHJpdi0+cGVuZGlu
Z1N0YXJ0ID0gVFJVRTsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHByb3RlY3Rvcihz
cmMpOwotICAgICAgICBwcml2LT5zdGFydFNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0
V2ViU3JjU3RhcnQiLAotICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFtwcm90ZWN0
b3JdIHsgd2ViS2l0V2ViU3JjU3RhcnQocHJvdGVjdG9yLmdldCgpKTsgfSkpOworICAgICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgICAgICB3ZWJLaXRXZWJTcmNTdGFydChzcmMpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90ZWN0
b3Ioc3JjKTsKKyAgICAgICAgICAgIHByaXYtPm5vdGlmaWVyLm5vdGlmeShNYWluVGhyZWFkU291
cmNlTm90aWZpY2F0aW9uOjpTdGFydCwgW3Byb3RlY3Rvcl0geyB3ZWJLaXRXZWJTcmNTdGFydChw
cm90ZWN0b3IuZ2V0KCkpOyB9KTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAgICB7CiAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBwcml2LT5w
ZW5kaW5nU3RhcnQgPSBGQUxTRTsKLSAgICAgICAgLy8gY2FuY2VsIHBlbmRpbmcgc291cmNlcwot
ICAgICAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOwotICAgICAgICBHUmVmUHRyPFdlYktp
dFdlYlNyYz4gcHJvdGVjdG9yKHNyYyk7Ci0gICAgICAgIHByaXYtPnN0b3BTb3VyY2Uuc2NoZWR1
bGUoIltXZWJLaXRdIHdlYktpdFdlYlNyY1N0b3AiLAotICAgICAgICAgICAgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+KFtwcm90ZWN0b3JdIHsgd2ViS2l0V2ViU3JjU3RvcChwcm90ZWN0b3IuZ2V0KCkp
OyB9KSk7CisgICAgICAgIHByaXYtPm5vdGlmaWVyLmNhbmNlbFBlbmRpbmdOb3RpZmljYXRpb25z
KCk7CisgICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgICAgIHdlYktpdFdlYlNy
Y1N0b3Aoc3JjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUmVmUHRyPFdlYktpdFdl
YlNyYz4gcHJvdGVjdG9yKHNyYyk7CisgICAgICAgICAgICBwcml2LT5ub3RpZmllci5ub3RpZnko
TWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6U3RvcCwgW3Byb3RlY3Rvcl0geyB3ZWJLaXRX
ZWJTcmNTdG9wKHByb3RlY3Rvci5nZXQoKSk7IH0pOworICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtNzM3LDE1ICs3OTIsMTggQEAgc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKIAog
Ly8gYXBwc3JjIGNhbGxiYWNrcwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1h
aW5DYihXZWJLaXRXZWJTcmMqIHNyYykKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWREYXRh
KFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgV1RGOjpHTXV0
ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7Ci0gICAg
cHJpdi0+cGF1c2VkID0gRkFMU0U7Ci0gICAgbG9ja2VyLnVubG9jaygpOworICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGEiKTsKKworICAgIHsKKyAgICAgICAgV1RGOjpH
TXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7Cisg
ICAgICAgIHByaXYtPnBhdXNlZCA9IEZBTFNFOworICAgIH0KIAogICAgIGlmIChwcml2LT5jbGll
bnQpCiAgICAgICAgIHByaXYtPmNsaWVudC0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CkBAIC03
NTMsMzEgKzgxMSwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYihX
ZWJLaXRXZWJTcmMqIHNyYykKICAgICAgICAgcHJpdi0+bG9hZGVyLT5zZXREZWZlcnNMb2FkaW5n
KGZhbHNlKTsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihHc3RBcHBT
cmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIFdlYktpdFdlYlNy
Yyogc3JjID0gV0VCS0lUX1dFQl9TUkModXNlckRhdGEpOwotICAgIFdlYktpdFdlYlNyY1ByaXZh
dGUqIHByaXYgPSBzcmMtPnByaXY7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIk5lZWQg
bW9yZSBkYXRhOiAldSIsIGxlbmd0aCk7Ci0KLSAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+
IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKLSAgICBpZiAocHJpdi0+bmVlZERh
dGFTb3VyY2UuaXNTY2hlZHVsZWQoKSB8fCAhcHJpdi0+cGF1c2VkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9yKHNyYyk7Ci0gICAgcHJpdi0+
bmVlZERhdGFTb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdFdlYlNyY05lZWREYXRhTWFp
bkNiIiwKLSAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFtwcm90ZWN0b3JdIHsgd2ViS2l0
V2ViU3JjTmVlZERhdGFNYWluQ2IocHJvdGVjdG9yLmdldCgpKTsgfSkpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQorc3Rh
dGljIHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YShXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAotICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpH
U1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwotICAgIHByaXYtPnBhdXNlZCA9IFRSVUU7Ci0gICAg
bG9ja2VyLnVubG9jaygpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBlbm91Z2gg
ZGF0YSIpOworCisgICAgeworICAgICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tl
cigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAgICAgcHJpdi0+cGF1c2VkID0gVFJV
RTsKKyAgICB9CiAKICAgICBpZiAocHJpdi0+Y2xpZW50KQogICAgICAgICBwcml2LT5jbGllbnQt
PnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CkBAIC03ODUsNTIgKzgzMCwxNiBAQCBzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogICAgICAg
ICBwcml2LT5sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkK
LXsKLSAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKHVzZXJEYXRhKTsKLSAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJIYXZlIGVub3VnaCBkYXRhIik7Ci0KLSAgICBXVEY6OkdNdXRleExvY2tl
cjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKLSAgICBpZiAocHJp
di0+ZW5vdWdoRGF0YVNvdXJjZS5pc1NjaGVkdWxlZCgpIHx8IHByaXYtPnBhdXNlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHByb3RlY3RvcihzcmMpOwot
ICAgIHByaXYtPmVub3VnaERhdGFTb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdFdlYlNy
Y0Vub3VnaERhdGFNYWluQ2IiLAotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oW3Byb3Rl
Y3Rvcl0geyB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKHByb3RlY3Rvci5nZXQoKSk7IH0p
KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU2Vla01haW5DYihXZWJLaXRXZWJTcmMq
IHNyYykKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1NlZWsoV2ViS2l0V2ViU3JjKiBzcmMpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHNyYy0+cHJpdi0+cmVx
dWVzdGVkT2Zmc2V0KTsKKwogICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKICAgICB3ZWJLaXRX
ZWJTcmNTdGFydChzcmMpOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla0Rh
dGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0g
ICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyh1c2VyRGF0YSk7Ci0gICAgV2Vi
S2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3JjLCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7
Ci0gICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xP
Q0soc3JjKSk7Ci0gICAgaWYgKG9mZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVz
dGVkT2Zmc2V0ID09IHByaXYtPm9mZnNldCkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBp
ZiAoIXByaXYtPnNlZWthYmxlKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2VlayIpOwotICAgIHByaXYtPnJl
cXVlc3RlZE9mZnNldCA9IG9mZnNldDsKLQotICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90
ZWN0b3Ioc3JjKTsKLSAgICBwcml2LT5zZWVrU291cmNlLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJL
aXRXZWJTcmNTZWVrTWFpbkNiIiwKLSAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFtwcm90
ZWN0b3JdIHsgd2ViS2l0V2ViU3JjU2Vla01haW5DYihXRUJLSVRfV0VCX1NSQyhwcm90ZWN0b3Iu
Z2V0KCkpKTsgfSkpOwotICAgIHJldHVybiBUUlVFOwotfQotCiB2b2lkIHdlYktpdFdlYlNyY1Nl
dE1lZGlhUGxheWVyKFdlYktpdFdlYlNyYyogc3JjLCBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxh
eWVyKQogewogICAgIEFTU0VSVChwbGF5ZXIpOwpAQCAtODg4LDcgKzg5Nyw3IEBAIHZvaWQgU3Ry
ZWFtaW5nQ2xpZW50OjpoYW5kbGVSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQogCiAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdT
VF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAKLSAgICBpZiAocHJpdi0+c2Vla1NvdXJjZS5pc0Fj
dGl2ZSgpKSB7CisgICAgaWYgKHByaXYtPmlzU2Vla2luZykgewogICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNyYywgIlNlZWsgaW4gcHJvZ3Jlc3MsIGlnbm9yaW5nIHJlc3BvbnNlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC05NDAsNyArOTQ5LDcgQEAgdm9pZCBTdHJlYW1pbmdDbGll
bnQ6OmhhbmRsZURhdGFSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAg
IGlmIChwcml2LT5idWZmZXIpCiAgICAgICAgIHVubWFwR3N0QnVmZmVyKHByaXYtPmJ1ZmZlci5n
ZXQoKSk7CiAKLSAgICBpZiAocHJpdi0+c2Vla1NvdXJjZS5pc0FjdGl2ZSgpKSB7CisgICAgaWYg
KHByaXYtPmlzU2Vla2luZykgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsg
aW4gcHJvZ3Jlc3MsIGlnbm9yaW5nIGRhdGEiKTsKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFy
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwMDEsNyArMTAxMCw3IEBAIHZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCgpCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJIYXZlIEVPUyIpOwogCiAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdT
VF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7Ci0gICAgaWYgKCFwcml2LT5zZWVrU291cmNlLmlzQWN0
aXZlKCkpIHsKKyAgICBpZiAoIXByaXYtPmlzU2Vla2luZykgewogICAgICAgICBsb2NrZXIudW5s
b2NrKCk7CiAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsK
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264937</attachid>
            <date>2015-11-06 06:05:55 -0800</date>
            <delta_ts>2015-11-06 06:24:39 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wcore-gst-web-src-notifier.diff</filename>
            <type>text/plain</type>
            <size>13856</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5OGQ4YjEzLi4yNWFhZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzMg
QEAKIDIwMTUtMTEtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHU3RyZWFtZXJdIFVzZSBNYWluVGhyZWFkTm90aWZpZXIgdG8gc2VuZCBu
b3RpZmljYXRpb25zIHRvIG1haW4gdGhyZWFkIGluIFdlYktpdFdlYlNvdXJjZUdTdHJlYW1lcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwODkwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBv
ZiB0aGUgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAg
KHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUpOgor
ICAgICAgICAod2ViS2l0V2ViU3JjTmVlZERhdGEpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5v
dWdoRGF0YSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrKToKKyAgICAgICAgKFN0cmVhbWlu
Z0NsaWVudDo6aGFuZGxlUmVzcG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChTdHJlYW1pbmdDbGll
bnQ6OmhhbmRsZURhdGFSZWNlaXZlZCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRs
ZU5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0ZpbmFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAg
KHdlYktpdFdlYlNyY0dldFByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNy
Y1NldEV4dHJhSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KTog
RGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY0dldFByb3RvY29scyk6IERlbGV0ZWQuCisg
ICAgICAgICh3ZWJLaXRXZWJTcmNHZXRVcmkpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0V2Vi
U3JjU2V0VXJpKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdFdlYlNyY1VyaUhhbmRsZXJJbml0
KTogRGVsZXRlZC4KKworMjAxNS0xMS0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKICAgICAgICAgW0dTdHJlYW1lcl0gVXNlIE1haW5UaHJlYWROb3RpZmll
ciB0byBzZW5kIG5vdGlmaWNhdGlvbnMgdG8gbWFpbiB0aHJlYWQgaW4gVHJhY2tQcml2YXRlR1N0
cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA4ODkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRl
eCAxNGE1ZWE1Li5jY2VlOTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJNYWluVGhyZWFkTm90aWZpZXIuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4TG9ja2VyLmg+CiAj
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dUaHJlYWRT
YWZlTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0xMDUsNiArMTA1LDE0IEBAIGNsYXNz
IFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xp
ZW50LCBwdWJsaWMgU3RyZWFtCiAgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9yZXNv
dXJjZTsKIH07CiAKK2VudW0gTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbiB7CisgICAgU3Rh
cnQgPSAxIDw8IDAsCisgICAgU3RvcCA9IDEgPDwgMSwKKyAgICBOZWVkRGF0YSA9IDEgPDwgMiwK
KyAgICBFbm91Z2hEYXRhID0gMSA8PCAzLAorICAgIFNlZWsgPSAxIDw8IDQKK307CisKICNkZWZp
bmUgV0VCS0lUX1dFQl9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfU1JDLCBXZWJLaXRXZWJTcmNQcml2YXRlKSkK
IHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAgICAgR3N0QXBwU3JjKiBhcHBzcmM7CkBA
IC0xMjYsMTYgKzEzNCwxMSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogICAgIGd1
aW50NjQgc2l6ZTsKICAgICBnYm9vbGVhbiBzZWVrYWJsZTsKICAgICBnYm9vbGVhbiBwYXVzZWQ7
CisgICAgYm9vbCBpc1NlZWtpbmc7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsKIAot
ICAgIGdib29sZWFuIHBlbmRpbmdTdGFydDsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNl
IHN0YXJ0U291cmNlOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2Ugc3RvcFNvdXJjZTsK
LSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG5lZWREYXRhU291cmNlOwotICAgIEdUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YVNvdXJjZTsKLSAgICBHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlIHNlZWtTb3VyY2U7Ci0KKyAgICBNYWluVGhyZWFkTm90aWZpZXI8TWFpblRo
cmVhZFNvdXJjZU5vdGlmaWNhdGlvbj4gbm90aWZpZXI7CiAgICAgR1JlZlB0cjxHc3RCdWZmZXI+
IGJ1ZmZlcjsKIH07CiAKQEAgLTE2NiwxNSArMTY5LDYxIEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFu
Z2UpCiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFk
KiwgR3N0T2JqZWN0KiwgR3N0UXVlcnkqKTsKIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVl
ZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKTsKLXN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1
c2VyRGF0YSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla0RhdGFDYihHc3RBcHBT
cmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNlckRhdGEpOworc3RhdGljIHZvaWQgd2Vi
S2l0V2ViU3JjTmVlZERhdGEoV2ViS2l0V2ViU3JjKik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNFbm91Z2hEYXRhKFdlYktpdFdlYlNyYyopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU2Vl
ayhXZWJLaXRXZWJTcmMqKTsKIAogc3RhdGljIEdzdEFwcFNyY0NhbGxiYWNrcyBhcHBzcmNDYWxs
YmFja3MgPSB7Ci0gICAgd2ViS2l0V2ViU3JjTmVlZERhdGFDYiwKLSAgICB3ZWJLaXRXZWJTcmNF
bm91Z2hEYXRhQ2IsCi0gICAgd2ViS2l0V2ViU3JjU2Vla0RhdGFDYiwKLSAgICB7IDAgfQorICAg
IC8vIG5lZWRfZGF0YQorICAgIFtdKEdzdEFwcFNyYyosIGd1aW50LCBncG9pbnRlciB1c2VyRGF0
YSkgeworICAgICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKHVzZXJEYXRh
KTsKKyAgICAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAg
ICAgICB7CisgICAgICAgICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NU
X09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAgICAgICAgIGlmICghcHJpdi0+cGF1c2VkKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEdSZWZQdHI8V2Vi
S2l0V2ViU3JjPiBwcm90ZWN0b3Ioc3JjKTsKKyAgICAgICAgcHJpdi0+bm90aWZpZXIubm90aWZ5
KE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246Ok5lZWREYXRhLCBbcHJvdGVjdG9yXSB7IHdl
YktpdFdlYlNyY05lZWREYXRhKHByb3RlY3Rvci5nZXQoKSk7IH0pOworICAgIH0sCisgICAgLy8g
ZW5vdWdoX2RhdGEKKyAgICBbXShHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKHVzZXJEYXRhKTsKKyAgICAg
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgICAgICB7Cisg
ICAgICAgICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9H
RVRfTE9DSyhzcmMpKTsKKyAgICAgICAgICAgIGlmIChwcml2LT5wYXVzZWQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+
IHByb3RlY3RvcihzcmMpOworICAgICAgICBwcml2LT5ub3RpZmllci5ub3RpZnkoTWFpblRocmVh
ZFNvdXJjZU5vdGlmaWNhdGlvbjo6RW5vdWdoRGF0YSwgW3Byb3RlY3Rvcl0geyB3ZWJLaXRXZWJT
cmNFbm91Z2hEYXRhKHByb3RlY3Rvci5nZXQoKSk7IH0pOworICAgIH0sCisgICAgLy8gc2Vla19k
YXRhCisgICAgW10oR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRh
KSAtPiBnYm9vbGVhbiB7CisgICAgICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9T
UkModXNlckRhdGEpOworICAgICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OworCisgICAgICAgIHsKKyAgICAgICAgICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4g
bG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgICAgICAgICAgaWYgKG9mZnNl
dCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPm9mZnNl
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKworICAgICAgICAgICAgaWYgKCFwcml2
LT5zZWVrYWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgICAg
IHByaXYtPmlzU2Vla2luZyA9IHRydWU7CisgICAgICAgICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZz
ZXQgPSBvZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4g
cHJvdGVjdG9yKHNyYyk7CisgICAgICAgIHByaXYtPm5vdGlmaWVyLm5vdGlmeShNYWluVGhyZWFk
U291cmNlTm90aWZpY2F0aW9uOjpTZWVrLCBbcHJvdGVjdG9yXSB7IHdlYktpdFdlYlNyY1NlZWso
cHJvdGVjdG9yLmdldCgpKTsgfSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0sCisgICAg
eyBudWxscHRyIH0KIH07CiAKICNkZWZpbmUgd2Via2l0X3dlYl9zcmNfcGFyZW50X2NsYXNzIHBh
cmVudF9jbGFzcwpAQCAtMzU4LDE3ICs0MDcsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNH
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZQog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlVGltZW91dFNvdXJjZXMoV2ViS2l0V2ViU3Jj
KiBzcmMpCi17Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQot
ICAgIGlmICghcHJpdi0+cGVuZGluZ1N0YXJ0KQotICAgICAgICBwcml2LT5zdGFydFNvdXJjZS5j
YW5jZWwoKTsKLSAgICBwcml2LT5uZWVkRGF0YVNvdXJjZS5jYW5jZWwoKTsKLSAgICBwcml2LT5l
bm91Z2hEYXRhU291cmNlLmNhbmNlbCgpOwotICAgIHByaXYtPnNlZWtTb3VyY2UuY2FuY2VsKCk7
Ci19Ci0KIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMpCiB7
CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKQEAgLTM3Nyw5ICs0
MTUsOSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQog
CiAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdTVF9PQkpFQ1RfR0VUX0xP
Q0soc3JjKSk7CiAKLSAgICBib29sIHNlZWtpbmcgPSBwcml2LT5zZWVrU291cmNlLmlzQWN0aXZl
KCk7CisgICAgYm9vbCB3YXNTZWVraW5nID0gcHJpdi0+aXNTZWVraW5nOwogCi0gICAgcmVtb3Zl
VGltZW91dFNvdXJjZXMoc3JjKTsKKyAgICBwcml2LT5ub3RpZmllci5jYW5jZWxQZW5kaW5nTm90
aWZpY2F0aW9ucyhNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpOZWVkRGF0YSB8IE1haW5U
aHJlYWRTb3VyY2VOb3RpZmljYXRpb246OkVub3VnaERhdGEgfCBNYWluVGhyZWFkU291cmNlTm90
aWZpY2F0aW9uOjpTZWVrKTsKIAogICAgIGlmIChwcml2LT5jbGllbnQpIHsKICAgICAgICAgZGVs
ZXRlIHByaXYtPmNsaWVudDsKQEAgLTM5OCw4ICs0MzYsOSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRX
ZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAg
ICBwcml2LT5zZWVrYWJsZSA9IEZBTFNFOworICAgIHByaXYtPmlzU2Vla2luZyA9IGZhbHNlOwog
Ci0gICAgaWYgKCFzZWVraW5nKSB7CisgICAgaWYgKCF3YXNTZWVraW5nKSB7CiAgICAgICAgIHBy
aXYtPnNpemUgPSAwOwogICAgICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOwogICAgICAg
ICBwcml2LT5wbGF5ZXIgPSAwOwpAQCAtNDA5LDcgKzQ0OCw3IEBAIHN0YXRpYyB2b2lkIHdlYktp
dFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBpZiAocHJpdi0+YXBwc3JjKSB7
CiAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7Ci0gICAgICAg
IGlmICghc2Vla2luZykKKyAgICAgICAgaWYgKCF3YXNTZWVraW5nKQogICAgICAgICAgICAgZ3N0
X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CiAgICAgfQogCkBAIC00NzUsNyAr
NTE0LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMp
CiAKICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKIAotICAgIHByaXYtPnBlbmRpbmdTdGFydCA9IEZBTFNFOwogICAgIHByaXYt
PmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2sgPSBmYWxzZTsKIAogICAgIGlmICghcHJpdi0+dXJp
KSB7CkBAIC01OTEsMjYgKzYyOSwyMCBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2Vi
S2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAogICAgICAg
ICByZXR1cm4gcmV0OwogICAgIH0KIAotICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9j
a2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRjaCAodHJhbnNpdGlvbikg
ewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CiAgICAgewogICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJFQURZLT5QQVVTRUQiKTsKLSAgICAgICAgcHJp
di0+cGVuZGluZ1N0YXJ0ID0gVFJVRTsKICAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHBy
b3RlY3RvcihzcmMpOwotICAgICAgICBwcml2LT5zdGFydFNvdXJjZS5zY2hlZHVsZSgiW1dlYktp
dF0gd2ViS2l0V2ViU3JjU3RhcnQiLAotICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
KFtwcm90ZWN0b3JdIHsgd2ViS2l0V2ViU3JjU3RhcnQocHJvdGVjdG9yLmdldCgpKTsgfSkpOwor
ICAgICAgICBwcml2LT5ub3RpZmllci5ub3RpZnkoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlv
bjo6U3RhcnQsIFtwcm90ZWN0b3JdIHsgd2ViS2l0V2ViU3JjU3RhcnQocHJvdGVjdG9yLmdldCgp
KTsgfSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0Vf
UEFVU0VEX1RPX1JFQURZOgogICAgIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQ
QVVTRUQtPlJFQURZIik7Ci0gICAgICAgIHByaXYtPnBlbmRpbmdTdGFydCA9IEZBTFNFOwotICAg
ICAgICAvLyBjYW5jZWwgcGVuZGluZyBzb3VyY2VzCi0gICAgICAgIHJlbW92ZVRpbWVvdXRTb3Vy
Y2VzKHNyYyk7CisgICAgICAgIHByaXYtPm5vdGlmaWVyLmNhbmNlbFBlbmRpbmdOb3RpZmljYXRp
b25zKCk7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3Ioc3JjKTsKLSAg
ICAgICAgcHJpdi0+c3RvcFNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0V2ViU3JjU3Rv
cCIsCi0gICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oW3Byb3RlY3Rvcl0geyB3ZWJL
aXRXZWJTcmNTdG9wKHByb3RlY3Rvci5nZXQoKSk7IH0pKTsKKyAgICAgICAgcHJpdi0+bm90aWZp
ZXIubm90aWZ5KE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlN0b3AsIFtwcm90ZWN0b3Jd
IHsgd2ViS2l0V2ViU3JjU3RvcChwcm90ZWN0b3IuZ2V0KCkpOyB9KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC03MzcsMTUgKzc2OSwxOCBAQCBzdGF0aWMgdm9pZCB3
ZWJLaXRXZWJTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQogCiAv
LyBhcHBzcmMgY2FsbGJhY2tzCiAKLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWREYXRhTWFp
bkNiKFdlYktpdFdlYlNyYyogc3JjKQorc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGEo
V2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBXVEY6OkdNdXRl
eExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKLSAgICBw
cml2LT5wYXVzZWQgPSBGQUxTRTsKLSAgICBsb2NrZXIudW5sb2NrKCk7CisgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJOZWVkIG1vcmUgZGF0YSIpOworCisgICAgeworICAgICAgICBXVEY6OkdN
dXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAg
ICAgICAgcHJpdi0+cGF1c2VkID0gRkFMU0U7CisgICAgfQogCiAgICAgaWYgKHByaXYtPmNsaWVu
dCkKICAgICAgICAgcHJpdi0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKQEAgLTc1
MywzMSArNzg4LDE4IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKFdl
YktpdFdlYlNyYyogc3JjKQogICAgICAgICBwcml2LT5sb2FkZXItPnNldERlZmVyc0xvYWRpbmco
ZmFsc2UpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKEdzdEFwcFNy
YyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViS2l0V2ViU3Jj
KiBzcmMgPSBXRUJLSVRfV0VCX1NSQyh1c2VyRGF0YSk7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0
ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiTmVlZCBt
b3JlIGRhdGE6ICV1IiwgbGVuZ3RoKTsKLQotICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4g
bG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwotICAgIGlmIChwcml2LT5uZWVkRGF0
YVNvdXJjZS5pc1NjaGVkdWxlZCgpIHx8ICFwcml2LT5wYXVzZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3Ioc3JjKTsKLSAgICBwcml2LT5u
ZWVkRGF0YVNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0V2ViU3JjTmVlZERhdGFNYWlu
Q2IiLAotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oW3Byb3RlY3Rvcl0geyB3ZWJLaXRX
ZWJTcmNOZWVkRGF0YU1haW5DYihwcm90ZWN0b3IuZ2V0KCkpOyB9KSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2IoV2ViS2l0V2ViU3JjKiBzcmMpCitzdGF0
aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhKFdlYktpdFdlYlNyYyogc3JjKQogewogICAg
IFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrZXIoKkdT
VF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7Ci0gICAgcHJpdi0+cGF1c2VkID0gVFJVRTsKLSAgICBs
b2NrZXIudW5sb2NrKCk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJIYXZlIGVub3VnaCBk
YXRhIik7CisKKyAgICB7CisgICAgICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2Vy
KCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgICAgICBwcml2LT5wYXVzZWQgPSBUUlVF
OworICAgIH0KIAogICAgIGlmIChwcml2LT5jbGllbnQpCiAgICAgICAgIHByaXYtPmNsaWVudC0+
c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKQEAgLTc4NSw1MiArODA3LDE2IEBAIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2IoV2ViS2l0V2ViU3JjKiBzcmMpCiAgICAgICAg
IHByaXYtPmxvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKIH0KIAotc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQot
ewotICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkModXNlckRhdGEpOwotICAg
IFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0KLSAgICBHU1RfREVCVUdf
T0JKRUNUKHNyYywgIkhhdmUgZW5vdWdoIGRhdGEiKTsKLQotICAgIFdURjo6R011dGV4TG9ja2Vy
PEdNdXRleD4gbG9ja2VyKCpHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwotICAgIGlmIChwcml2
LT5lbm91Z2hEYXRhU291cmNlLmlzU2NoZWR1bGVkKCkgfHwgcHJpdi0+cGF1c2VkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9yKHNyYyk7Ci0g
ICAgcHJpdi0+ZW5vdWdoRGF0YVNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0V2ViU3Jj
RW5vdWdoRGF0YU1haW5DYiIsCi0gICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihbcHJvdGVj
dG9yXSB7IHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2IocHJvdGVjdG9yLmdldCgpKTsgfSkp
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKFdlYktpdFdlYlNyYyog
c3JjKQorc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU2VlayhXZWJLaXRXZWJTcmMqIHNyYykKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgc3JjLT5wcml2LT5yZXF1
ZXN0ZWRPZmZzZXQpOworCiAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOwogICAgIHdlYktpdFdl
YlNyY1N0YXJ0KHNyYyk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0
YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAg
ICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKHVzZXJEYXRhKTsKLSAgICBXZWJL
aXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsK
LSAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKLSAgICBpZiAob2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBwcml2LT5yZXF1ZXN0
ZWRPZmZzZXQgPT0gcHJpdi0+b2Zmc2V0KQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIGlm
ICghcHJpdi0+c2Vla2FibGUpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiRG9pbmcgcmFuZ2UtcmVxdWVzdCBzZWVrIik7Ci0gICAgcHJpdi0+cmVx
dWVzdGVkT2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHByb3Rl
Y3RvcihzcmMpOwotICAgIHByaXYtPnNlZWtTb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktp
dFdlYlNyY1NlZWtNYWluQ2IiLAotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oW3Byb3Rl
Y3Rvcl0geyB3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKFdFQktJVF9XRUJfU1JDKHByb3RlY3Rvci5n
ZXQoKSkpOyB9KSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KIHZvaWQgd2ViS2l0V2ViU3JjU2V0
TWVkaWFQbGF5ZXIoV2ViS2l0V2ViU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5
ZXIpCiB7CiAgICAgQVNTRVJUKHBsYXllcik7CkBAIC04ODgsNyArODc0LDcgQEAgdm9pZCBTdHJl
YW1pbmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCiAKICAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+IGxvY2tlcigqR1NU
X09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKIAotICAgIGlmIChwcml2LT5zZWVrU291cmNlLmlzQWN0
aXZlKCkpIHsKKyAgICBpZiAocHJpdi0+aXNTZWVraW5nKSB7CiAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiU2VlayBpbiBwcm9ncmVzcywgaWdub3JpbmcgcmVzcG9uc2UiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTk0MCw3ICs5MjYsNyBAQCB2b2lkIFN0cmVhbWluZ0NsaWVu
dDo6aGFuZGxlRGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiAgICAg
aWYgKHByaXYtPmJ1ZmZlcikKICAgICAgICAgdW5tYXBHc3RCdWZmZXIocHJpdi0+YnVmZmVyLmdl
dCgpKTsKIAotICAgIGlmIChwcml2LT5zZWVrU291cmNlLmlzQWN0aXZlKCkpIHsKKyAgICBpZiAo
cHJpdi0+aXNTZWVraW5nKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayBp
biBwcm9ncmVzcywgaWdub3JpbmcgZGF0YSIpOwogICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTAwMSw3ICs5ODcsNyBAQCB2b2lkIFN0cmVhbWluZ0Ns
aWVudDo6aGFuZGxlTm90aWZ5RmluaXNoZWQoKQogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
SGF2ZSBFT1MiKTsKIAogICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9ja2VyKCpHU1Rf
T0JKRUNUX0dFVF9MT0NLKHNyYykpOwotICAgIGlmICghcHJpdi0+c2Vla1NvdXJjZS5pc0FjdGl2
ZSgpKSB7CisgICAgaWYgKCFwcml2LT5pc1NlZWtpbmcpIHsKICAgICAgICAgbG9ja2VyLnVubG9j
aygpOwogICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7CiAg
ICAgfQo=
</data>
<flag name="review"
          id="290048"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>