<?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>125127</bug_id>
          
          <creation_ts>2013-12-02 18:14:39 -0800</creation_ts>
          <short_desc>Indexed Database work should be done on a non-main queue</short_desc>
          <delta_ts>2013-12-03 13:19:31 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>955728</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-02 18:14:39 -0800</bug_when>
    <thetext>IDB database work should be done on a non-main queue

In other words, i/o should not be on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955735</commentid>
    <comment_count>1</comment_count>
      <attachid>218253</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-02 18:24:09 -0800</bug_when>
    <thetext>Created attachment 218253
Patch v1

This patch still doesn&apos;t actually do any useful work (database i/o), but it does establish all of the necessary infrastructure for a Unique IDB Database to have a background queue of requests to service.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955736</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-02 18:25:00 -0800</bug_when>
    <thetext>Attachment 218253 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.cpp&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:102:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:44:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:75:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/AsyncRequest.h:97:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
ERROR: Source/WebKit2/Shared/AsyncRequest.cpp:41:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Shared/AsyncRequest.cpp:52:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 11 in 9 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>955737</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-02 18:25:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 218253 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.cpp&apos;, u&apos;Source/WebKit2/Shared/AsyncRequest.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp&apos;]&quot; exit_code: 1
&gt; ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:102:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:44:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:75:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.h:97:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.cpp:41:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/Shared/AsyncRequest.cpp:52:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Total errors found: 11 in 9 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

These errors are actually all false positives, bugs exist on some, and I&apos;ll make sure they exist on the other(S)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955923</commentid>
    <comment_count>4</comment_count>
      <attachid>218253</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-12-03 09:11:52 -0800</bug_when>
    <thetext>Comment on attachment 218253
Patch v1

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

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.h:77
&gt; +    RefPtr&lt;WorkQueue&gt; m_queue;

Should use Ref for this instead of RefPtr.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:74
&gt; +    m_processDatabaseRequestQueueCalled = true;

I don’t understand how this ever gets set back to false. It seems like once we complete all there requests in the queue a single time we will no longer handle any requests.

The flaw seems to be in the name too. It just says that this function was “called”, which isn’t really what we want to know. I think it should be called m_processingDatabaseQueueRequests or something like that.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:105
&gt; +            IDBDatabaseMetadata metadata;
&gt; +            completionCallback(false, metadata);

Could write this as a one-liner:

    completionCallback(false, IDBDatabaseMetadata());

Also, constant false is unclear here at this call site.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:74
&gt; +    void enqueueDatabaseQueueRequest(PassRefPtr&lt;AsyncRequest&gt;);

I think this should be PassRef rather than PassRefPtr since it’s never null. Been a while so I may have forgotten what the right type is.

&gt; Source/WebKit2/Shared/AsyncRequest.h:47
&gt; +    AsyncRequest(std::function&lt;void ()&gt; abortHandler);

Should mark this explicit.

&gt; Source/WebKit2/Shared/AsyncRequest.h:83
&gt; +        : AsyncRequest(abortHandler)

Why no std::move here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955944</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-03 09:49:49 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:74
&gt; &gt; +    m_processDatabaseRequestQueueCalled = true;
&gt; 
&gt; I don’t understand how this ever gets set back to false. It seems like once we complete all there requests in the queue a single time we will no longer handle any requests.
&gt; 
&gt; The flaw seems to be in the name too. It just says that this function was “called”, which isn’t really what we want to know. I think it should be called m_processingDatabaseQueueRequests or something like that.

I had one line that wasn&apos;t staged and therefore didn&apos;t make it into the patch, and that was reseting this flag inside processDatabaseRequestQueue().  Last minute debugging fail  :(

I like your naming suggestion, and will adopt it.


&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:105
&gt; &gt; +            IDBDatabaseMetadata metadata;
&gt; &gt; +            completionCallback(false, metadata);
&gt; 
&gt; Could write this as a one-liner:
&gt; 
&gt;     completionCallback(false, IDBDatabaseMetadata());
&gt; 
&gt; Also, constant false is unclear here at this call site.

I hate the IDB interface layer that we&apos;re currently stuck with, and giving it a once-over for clarity is in the future.

Right now, I&apos;ll add a brief comment.

&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:74
&gt; &gt; +    void enqueueDatabaseQueueRequest(PassRefPtr&lt;AsyncRequest&gt;);
&gt; 
&gt; I think this should be PassRef rather than PassRefPtr since it’s never null. Been a while so I may have forgotten what the right type is.

Seems Ref/PassRef would be ideal.  I&apos;ll try it and see if we avoid some of the common Ref/PassRef traps (deleted c&apos;tors/d&apos;tors, stuff like that)

&gt; &gt; Source/WebKit2/Shared/AsyncRequest.h:47
&gt; &gt; +    AsyncRequest(std::function&lt;void ()&gt; abortHandler);
&gt; 
&gt; Should mark this explicit.

Yup.
 
&gt; &gt; Source/WebKit2/Shared/AsyncRequest.h:83
&gt; &gt; +        : AsyncRequest(abortHandler)
&gt; 
&gt; Why no std::move here?

std::move all the things!  (Will do).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955961</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-03 10:23:27 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:74
&gt; &gt; &gt; +    void enqueueDatabaseQueueRequest(PassRefPtr&lt;AsyncRequest&gt;);
&gt; &gt; 
&gt; &gt; I think this should be PassRef rather than PassRefPtr since it’s never null. Been a while so I may have forgotten what the right type is.
&gt; 
&gt; Seems Ref/PassRef would be ideal.  I&apos;ll try it and see if we avoid some of the common Ref/PassRef traps (deleted c&apos;tors/d&apos;tors, stuff like that)

Definitely falls into common pitfalls with NONCOPYABLE and some of our container classes not handling Ref&lt;&gt; well (in this case Deque).

I agree this is conceptually correct, but getting it to work technically will be a bit out of the scope of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956068</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-03 13:19:31 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/160033</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218253</attachid>
            <date>2013-12-02 18:24:09 -0800</date>
            <delta_ts>2013-12-03 09:11:52 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14417</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0YzFkMDVhLi40YTg4ZmEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQw
IEBACisyMDEzLTEyLTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbmRleGVkIERhdGFiYXNlIHdvcmsgc2hvdWxkIGJlIGRvbmUgb24gYSBub24tbWFpbiBx
dWV1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1
MTI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGEgbm9uLW1haW4gV29ya1F1ZXVlIHRvIHRoZSBEYXRhYmFzZVByb2Nlc3M6CisgICAgICAgICog
RGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRh
dGFiYXNlUHJvY2Vzczo6RGF0YWJhc2VQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJh
c2VQcm9jZXNzOjpxdWV1ZSk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJv
Y2Vzcy5oOgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJE
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJ
REJEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1ZXVl
RGF0YWJhc2VRdWV1ZVJlcXVlc3QpOiBBZGQgYW4gQXN5bmNSZXF1ZXN0IHRvIHRoZSBkZXF1ZSB0
aGVuIHNjaGVkdWxlIHBlcmZvcm1pbmcKKyAgICAgICAgICB0aGUgcmVxdWVzdHMgb24gdGhlIGJh
Y2tncm91bmQgV29ya1F1ZXVlLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6
cHJvY2Vzc0RhdGFiYXNlUmVxdWVzdFF1ZXVlKTogUHJvY2Vzc2VzIGFsbCBlbnF1ZXVlZCBkYXRh
YmFzZSByZXF1ZXN0cy4KKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OmdldE9y
RXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSk6IFJlbmFtZWQgZnJvbSBnZXRJREJEYXRhYmFz
ZU1ldGFkYXRhKCkuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRPckVz
dGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGFJbnRlcm5hbCk6IEZvciBkb2luZyBpL28gb24gYSBi
YWNrZ3JvdW5kIHF1ZXVlL3RocmVhZC4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKKyAgICAgICAgQWRkIGEgY3JlYXRvciB0aGF0IHRh
a2VzIHRoZSBhYm9ydCBoYW5kbGVyIGFzIGFuIGFyZ3VtZW50LCBhbmQgcmVuYW1lIHJlcXVlc3Rl
ZENvbXBsZXRlZCgpCisgICAgICAgIHRvIGNvbXBsZXRlUmVxdWVzdCgpLiBUaGlzIG1ha2VzIG1v
cmUgc2Vuc2UgaW4gbW9yZSBzaXR1YXRpb25zOgorICAgICAgICAqIFNoYXJlZC9Bc3luY1JlcXVl
c3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3luY1JlcXVlc3Q6OkFzeW5jUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkFzeW5jUmVxdWVzdDo6c2V0QWJvcnRIYW5kbGVyKToKKyAgICAgICAg
KiBTaGFyZWQvQXN5bmNSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jUmVxdWVzdDo6
Y29tcGxldGVSZXF1ZXN0KToKKworICAgICAgICBVcGRhdGUgZm9yIHRoZSBBc3luY1JlcXVlc3Qg
cmVuYW1lOgorICAgICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCU2VydmVyQ29ubmVj
dGlvbjo6ZGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKToKKworICAgICAgICAq
IERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmdldE9y
RXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSk6CisKIDIwMTMtMTItMDIgIEVucmljYSBDYXN1
Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnaW5nIHNvbWUgbW9yZSBpT1Mg
V2ViS2l0MiBzdHVmZi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0Rh
dGFiYXNlUHJvY2Vzcy5jcHAKaW5kZXggM2MyMjA0YS4uY2ZmODVkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKQEAgLTI2LDEz
ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vz
cy5oIgogCisjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKICNpbmNsdWRlICJEYXRhYmFz
ZVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NQ
cm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2UuaCIKIAotI2lmIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRGF0YWJhc2VQcm9jZXNzJiBEYXRh
YmFzZVByb2Nlc3M6OnNoYXJlZCgpCkBAIC00Miw2ICs0Miw3IEBAIERhdGFiYXNlUHJvY2VzcyYg
RGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKQogfQogCiBEYXRhYmFzZVByb2Nlc3M6OkRhdGFiYXNl
UHJvY2VzcygpCisgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2Vi
S2l0LkRhdGFiYXNlUHJvY2VzcyIpKQogewogfQogCkBAIC00OSw2ICs1MCwxMiBAQCBEYXRhYmFz
ZVByb2Nlc3M6On5EYXRhYmFzZVByb2Nlc3MoKQogewogfQogCitXb3JrUXVldWUmIERhdGFiYXNl
UHJvY2Vzczo6cXVldWUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3F1ZXVlKTsKKyAgICByZXR1
cm4gKm1fcXVldWU7Cit9CisKIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjppbml0aWFsaXplQ29ubmVj
dGlvbihDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQogewogICAgIENoaWxkUHJvY2Vz
czo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggYjEwNGE3My4uNzUyNDhh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJv
Y2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nl
c3MuaApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgogI2luY2x1
ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oIgogCitjbGFzcyBXb3JrUXVldWU7CisK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rp
b247CkBAIC00OCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFVuaXF1ZUlEQkRh
dGFiYXNlPiBnZXRPckNyZWF0ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciYpOwogICAgIHZvaWQgcmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoY29uc3Qg
VW5pcXVlSURCRGF0YWJhc2UmKTsKIAorICAgIFdvcmtRdWV1ZSYgcXVldWUoKSBjb25zdDsKKwog
cHJpdmF0ZToKICAgICBEYXRhYmFzZVByb2Nlc3MoKTsKICAgICB+RGF0YWJhc2VQcm9jZXNzKCk7
CkBAIC03MCw2ICs3NCw4IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNl
VG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4+IG1fZGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9u
czsKIAorICAgIFJlZlB0cjxXb3JrUXVldWU+IG1fcXVldWU7CisKICAgICBTdHJpbmcgbV9pbmRl
eGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAKICAgICBIYXNoTWFwPFVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllciwgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV9pZGJEYXRhYmFzZXM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNl
UHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAppbmRleCBiZGNkOWRi
Li43MmUxNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bi5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
OjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEodWludDY0X3QgcmUKICAgICBBU1NF
UlQobV91bmlxdWVJREJEYXRhYmFzZSk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKLSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5n
ZXRJREJEYXRhYmFzZU1ldGFkYXRhKFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGJvb2wgc3VjY2Vz
cywgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpIHsKKyAgICBtX3VuaXF1ZUlE
QkRhdGFiYXNlLT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoW2Nvbm5lY3Rpb24s
IHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRh
ZGF0YSkgewogICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJD
b25uZWN0aW9uOjpEaWRHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEocmVxdWVzdElE
LCBzdWNjZXNzLCBtZXRhZGF0YSkpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcAppbmRleCA4N2Y2ZjQ5Li5iMmJhZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cApAQCAtMjgsOSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBF
TkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkFzeW5jUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlTWV0YWRhdGEuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApA
QCAtMzgsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogVW5pcXVlSURCRGF0YWJhc2U6
OlVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9wcm9jZXNz
RGF0YWJhc2VSZXF1ZXN0UXVldWVDYWxsZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTYwLDEzICs2Myw1
OSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp1bnJlZ2lzdGVyQ29ubmVjdGlvbihEYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uJiBjb25uZQogICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNo
YXJlZCgpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Z2V0SURCRGF0YWJhc2VNZXRhZGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9v
bCwgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1ZXVlRGF0YWJhc2VRdWV1ZVJlcXVlc3Qo
UGFzc1JlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZGF0YWJhc2VRdWV1ZVJlcXVlc3RzTXV0ZXgpOworICAgIG1fZGF0YWJhc2VRdWV1ZVJl
cXVlc3RzLmFwcGVuZChyZXF1ZXN0KTsKKworICAgIGlmIChtX3Byb2Nlc3NEYXRhYmFzZVJlcXVl
c3RRdWV1ZUNhbGxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9jZXNzRGF0YWJhc2VS
ZXF1ZXN0UXVldWVDYWxsZWQgPSB0cnVlOworICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCku
cXVldWUoKS5kaXNwYXRjaChiaW5kKCZVbmlxdWVJREJEYXRhYmFzZTo6cHJvY2Vzc0RhdGFiYXNl
UmVxdWVzdFF1ZXVlLCB0aGlzKSk7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnByb2Nl
c3NEYXRhYmFzZVJlcXVlc3RRdWV1ZSgpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
UmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdDsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VRdWV1ZVJlcXVlc3RzTXV0ZXgpOworICAgICAgICAg
ICAgaWYgKG1fZGF0YWJhc2VRdWV1ZVJlcXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXF1ZXN0ID0gbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHMu
dGFrZUZpcnN0KCk7CisgICAgICAgIH0KKworICAgICAgICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVl
c3QoKTsKKyAgICB9Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldE9yRXN0YWJsaXNo
SURCRGF0YWJhc2VNZXRhZGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCwgY29uc3QgSURCRGF0
YWJhc2VNZXRhZGF0YSYpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgUmVmUHRyPEFzeW5j
UmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Pjo6Y3JlYXRlKFtjb21wbGV0aW9u
Q2FsbGJhY2ssIHRoaXNdKCkgeworICAgICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRh
OworICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRh
dGFJbnRlcm5hbChtZXRhZGF0YSk7CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRj
aChbbWV0YWRhdGEsIHN1Y2Nlc3MsIGNvbXBsZXRpb25DYWxsYmFja10oKSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uQ2FsbGJhY2soc3VjY2VzcywgbWV0YWRhdGEpOworICAgICAgICB9KTsKKyAg
ICB9LCBbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLT5k
aXNwYXRjaChbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKKyAgICAgICAgICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEgbWV0YWRhdGE7CisgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soZmFsc2Us
IG1ldGFkYXRhKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbnF1ZXVlRGF0YWJhc2VR
dWV1ZVJlcXVlc3QocmVxdWVzdC5yZWxlYXNlKCkpOworfQorCitib29sIFVuaXF1ZUlEQkRhdGFi
YXNlOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGFJbnRlcm5hbChjb25zdCBXZWJD
b3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qg
aXMgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBieSBtZXNzYWdpbmcgZnJvbSB0aGUgV2ViUHJvY2Vzcywg
YW5kIGNhbGxzIGJhY2sgd2l0aCBkdW1teSBkYXRhLgogICAgIC8vIE5lZWRzIHJlYWwgaW1wbGVt
ZW50YXRpb24uCiAKLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhOwotICAgIGNvbXBs
ZXRpb25DYWxsYmFjayhmYWxzZSwgbWV0YWRhdGEpOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlE
QkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1Vu
aXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggN2I5YmZkZS4uNDBlNGY2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJh
c2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0
IElEQkRhdGFiYXNlTWV0YWRhdGE7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBBc3lu
Y1JlcXVlc3Q7CiBjbGFzcyBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOwogCiBzdHJ1Y3Qg
U2VjdXJpdHlPcmlnaW5EYXRhOwpAQCAtNTksNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYpOwogICAgIHZv
aWQgdW5yZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYpOwog
Ci0gICAgdm9pZCBnZXRJREJEYXRhYmFzZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZChib29s
LCBjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJik+IGNvbXBsZXRpb25DYWxsYmFj
ayk7CisgICAgdm9pZCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoc3RkOjpmdW5j
dGlvbjx2b2lkKGJvb2wsIGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmKT4gY29t
cGxldGlvbkNhbGxiYWNrKTsKIAogcHJpdmF0ZToKICAgICBVbmlxdWVJREJEYXRhYmFzZShjb25z
dCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKQEAgLTY3LDYgKzY5LDE4IEBAIHByaXZh
dGU6CiAgICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIAogICAg
IEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rp
b25zOworICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX2RhdGFi
YXNlUmVxdWVzdHM7CisKKyAgICB2b2lkIGVucXVldWVEYXRhYmFzZVF1ZXVlUmVxdWVzdChQYXNz
UmVmUHRyPEFzeW5jUmVxdWVzdD4pOworCisgICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGRh
dGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQgb25seQorICAgIHZvaWQgcHJvY2Vzc0RhdGFiYXNlUmVx
dWVzdFF1ZXVlKCk7CisgICAgYm9vbCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGFJ
bnRlcm5hbChjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJik7CisKKyAgICBNdXRl
eCBtX2RhdGFiYXNlUXVldWVSZXF1ZXN0c011dGV4OworICAgIERlcXVlPFJlZlB0cjxBc3luY1Jl
cXVlc3Q+PiBtX2RhdGFiYXNlUXVldWVSZXF1ZXN0czsKKworICAgIGJvb2wgbV9wcm9jZXNzRGF0
YWJhc2VSZXF1ZXN0UXVldWVDYWxsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Bc3luY1JlcXVlc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0FzeW5jUmVxdWVzdC5jcHAKaW5kZXggM2RhODE2ZC4uM2Q5NGI1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jUmVxdWVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jUmVxdWVzdC5jcHAKQEAgLTM4LDggKzM4LDkgQEAg
c3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlUmVxdWVzdElEKCkKICAgICByZXR1cm4gKytyZXF1ZXN0
SUQ7CiB9CiAKLUFzeW5jUmVxdWVzdDo6QXN5bmNSZXF1ZXN0KCkKLSAgICA6IG1fcmVxdWVzdElE
KGdlbmVyYXRlUmVxdWVzdElEKCkpCitBc3luY1JlcXVlc3Q6OkFzeW5jUmVxdWVzdChzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGFib3J0SGFuZGxlcikKKyAgICA6IG1fYWJvcnRIYW5kbGVyKHN0ZDo6
bW92ZShhYm9ydEhhbmRsZXIpKQorICAgICwgbV9yZXF1ZXN0SUQoZ2VuZXJhdGVSZXF1ZXN0SUQo
KSkKIHsKIH0KIApAQCAtNDgsNyArNDksNyBAQCBBc3luY1JlcXVlc3Q6On5Bc3luY1JlcXVlc3Qo
KQogICAgIEFTU0VSVCghbV9hYm9ydEhhbmRsZXIpOwogfQogCi12b2lkIEFzeW5jUmVxdWVzdDo6
c2V0QWJvcnRIYW5kbGVyKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBoYW5kbGVyKQordm9pZCBBc3lu
Y1JlcXVlc3Q6OnNldEFib3J0SGFuZGxlcihzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGhhbmRsZXIp
CiB7CiAgICAgbV9hYm9ydEhhbmRsZXIgPSBzdGQ6Om1vdmUoaGFuZGxlcik7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQXN5bmNSZXF1ZXN0LmgKaW5kZXggYmI1MGU0OC4uODQ4NDAwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Bc3luY1JlcXVlc3QuaApAQCAtMzksMTYgKzM5LDE2IEBAIHB1YmxpYzoKIAog
ICAgIHVpbnQ2NF90IHJlcXVlc3RJRCgpIHsgcmV0dXJuIG1fcmVxdWVzdElEOyB9CiAKLSAgICB2
b2lkIHNldEFib3J0SGFuZGxlcihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIHZvaWQgc2V0
QWJvcnRIYW5kbGVyKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4pOwogICAgIHZvaWQgcmVxdWVzdEFi
b3J0ZWQoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IHZvaWQgcmVxdWVz
dENvbXBsZXRlZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4gdm9pZCBjb21wbGV0ZVJlcXVlc3QoQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKTsKIAogcHJvdGVjdGVkOgotICAgIEFzeW5jUmVxdWVzdCgpOworICAgIEFzeW5jUmVx
dWVzdChzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFib3J0SGFuZGxlcik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJDb21wbGV0aW9uSGFuZGxlcigpID0gMDsKIAotICAgIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBtX2Fib3J0SGFuZGxlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fYWJv
cnRIYW5kbGVyOwogCiBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fcmVxdWVzdElEOwpAQCAtNTks
NyArNTksMTIgQEAgY2xhc3MgQXN5bmNSZXF1ZXN0SW1wbCBGSU5BTCA6IHB1YmxpYyBBc3luY1Jl
cXVlc3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFzeW5jUmVxdWVzdD4gY3Jl
YXRlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQXJndW1lbnRzLi4uKT4gY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFzeW5jUmVxdWVzdEltcGw8QXJn
dW1lbnRzLi4uPihzdGQ6Om1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQXN5bmNSZXF1ZXN0SW1wbDxBcmd1bWVudHMuLi4+KHN0ZDo6bW92ZShj
b21wbGV0aW9uSGFuZGxlciksIG51bGxwdHIpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxBc3luY1JlcXVlc3Q+IGNyZWF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFyZ3VtZW50cy4u
Lik+IGNvbXBsZXRpb25IYW5kbGVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFib3J0SGFuZGxl
cikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXN5bmNSZXF1ZXN0SW1wbDxB
cmd1bWVudHMuLi4+KHN0ZDo6bW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6bW92ZShhYm9y
dEhhbmRsZXIpKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QXN5bmNSZXF1ZXN0SW1wbCgpCkBA
IC02NywxNSArNzIsMTYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoIW1fY29tcGxldGlvbkhh
bmRsZXIpOwogICAgIH0KIAotICAgIHZvaWQgcmVxdWVzdENvbXBsZXRlZChBcmd1bWVudHMmJi4u
LiBhcmd1bWVudHMpCisgICAgdm9pZCBjb21wbGV0ZVJlcXVlc3QoQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQogICAgIHsKICAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihzdGQ6OmZvcndhcmQ8
QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKICAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlciA9
IG51bGxwdHI7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFzeW5jUmVxdWVzdEltcGwoc3RkOjpm
dW5jdGlvbjx2b2lkIChBcmd1bWVudHMuLi4pPiBjb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAg
OiBtX2NvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAg
QXN5bmNSZXF1ZXN0SW1wbChzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFyZ3VtZW50cy4uLik+IGNvbXBs
ZXRpb25IYW5kbGVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFib3J0SGFuZGxlcikKKyAgICAg
ICAgOiBBc3luY1JlcXVlc3QoYWJvcnRIYW5kbGVyKQorICAgICAgICAsIG1fY29tcGxldGlvbkhh
bmRsZXIoc3RkOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2NvbXBsZXRpb25IYW5kbGVyKTsKICAgICB9CkBAIC04OCwxMCArOTQsMTAgQEAgcHJpdmF0
ZToKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFyZ3VtZW50cy4uLik+IG1fY29tcGxldGlvbkhh
bmRsZXI7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IHZvaWQgQXN5bmNS
ZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4gdm9pZCBBc3luY1JlcXVlc3Q6OmNvbXBsZXRlUmVx
dWVzdChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCiB7CiAgICAgQXN5bmNSZXF1ZXN0SW1wbDxB
cmd1bWVudHMuLi4+KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8QXN5bmNSZXF1ZXN0SW1wbDxBcmd1
bWVudHMuLi4+Kj4odGhpcyk7Ci0gICAgcmVxdWVzdC0+cmVxdWVzdENvbXBsZXRlZChzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICByZXF1ZXN0LT5jb21wbGV0ZVJl
cXVlc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CiAgICAgbV9hYm9y
dEhhbmRsZXIgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVy
Q29ubmVjdGlvbi5jcHAKaW5kZXggYTM4NWUyZS4uMWQwN2ExYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQg
V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6ZGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFk
YXRhKHVpbnQ2NF90IHJlcXVlCiAgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVz
dCA9IG1fc2VydmVyUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwogICAgIEFTU0VSVChzZXJ2ZXJS
ZXF1ZXN0KTsKIAotICAgIHNlcnZlclJlcXVlc3QtPnJlcXVlc3RDb21wbGV0ZWQobWV0YWRhdGEs
IHN1Y2Nlc3MpOworICAgIHNlcnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChtZXRhZGF0YSwg
c3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6Y2xvc2UoKQo=
</data>
<flag name="review"
          id="241610"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>