<?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>23688</bug_id>
          
          <creation_ts>2009-02-02 11:39:17 -0800</creation_ts>
          <short_desc>ThreadableLoader needs a sync implementation for Workers.</short_desc>
          <delta_ts>2009-02-25 10:08:43 -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>WebCore Misc.</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>
          <dependson>24089</dependson>
          <blocked>22720</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>ap</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107991</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-02 11:39:17 -0800</bug_when>
    <thetext>Part of the work for making xhr available to workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108071</commentid>
    <comment_count>1</comment_count>
      <attachid>27272</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-02 18:15:07 -0800</bug_when>
    <thetext>Created attachment 27272
Part 1: Minor api adjustment for ThreadableLoader::loadResourceSynchronously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108094</commentid>
    <comment_count>2</comment_count>
      <attachid>27272</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-03 00:00:13 -0800</bug_when>
    <thetext>Comment on attachment 27272
Part 1: Minor api adjustment for ThreadableLoader::loadResourceSynchronously

Due to comments from ap.  I&apos;m scrapping this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108256</commentid>
    <comment_count>3</comment_count>
      <attachid>27311</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-04 02:19:20 -0800</bug_when>
    <thetext>Created attachment 27311
Part 1: Put ResourceError in ThreadableLoaderClient

The async api needs to expose ResourceError so that the sync api can return it (since the sync api is a thin wrapper around the async version).

blockedError is a rather arbitrary choice for these cases but it seemed like a good choice for these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108262</commentid>
    <comment_count>4</comment_count>
      <attachid>27311</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-04 07:30:14 -0800</bug_when>
    <thetext>Comment on attachment 27311
Part 1: Put ResourceError in ThreadableLoaderClient

This looks good to me, except for using a special value for using a special error value for &quot;couldn&apos;t create a loader&quot;. Mixing loader callbacks and a &quot;could not create a loader&quot; callback seems misleading. I&apos;m not sure if this can ever happen in practice, so maybe a comment would suffice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108274</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-04 09:09:14 -0800</bug_when>
    <thetext>The failed to create loader can happen in three places (in SubresourceLoader::create):

    if (!frame)
        return 0;
// I don&apos;t care about this one. I believe it means that that the window is shutting down.


    FrameLoader* fl = frame-&gt;loader();
    if (!skipCanLoadCheck &amp;&amp; fl-&gt;state() == FrameStateProvisional)
        return 0;

// I don&apos;t know if this one is possible.

    ResourceRequest newRequest = request;

    if (!skipCanLoadCheck
            &amp;&amp; FrameLoader::restrictAccessToLocal()
            &amp;&amp; !FrameLoader::canLoad(request.url(), String(), frame-&gt;document())) {
        FrameLoader::reportLocalLoadFailed(frame, request.url().string());
        return 0;
    }

// This one should be possible if a http: page tries to load file://

In the sync case,  that happens here:
  XMLHttpRequest::processSyncLoadResults
  {
      if (m_sameOriginRequest &amp;&amp; !scriptExecutionContext()-&gt;securityOrigin()-&gt;canRequest(response.url())) {
          abort();
          return;
      }

I can add a special method in ThreadableLoaderClient for the failed to create loader errors. fwiw, the issue isn&apos;t the DocumentThreadableLoader but instead the WorkerThreadableLoader.  In the case of the WorkerThreadableLoader, the failure to create the subresourceloader happens async.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108639</commentid>
    <comment_count>6</comment_count>
      <attachid>27311</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-06 08:33:16 -0800</bug_when>
    <thetext>Comment on attachment 27311
Part 1: Put ResourceError in ThreadableLoaderClient

Need to make some improvements based on ap&apos;s suggestions.  (Moving out of review queue while I do this.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109299</commentid>
    <comment_count>7</comment_count>
      <attachid>27562</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-11 07:37:13 -0800</bug_when>
    <thetext>Created attachment 27562
Part 1: Put ResourceError in ThreadableLoaderClient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109439</commentid>
    <comment_count>8</comment_count>
      <attachid>27562</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-12 00:29:26 -0800</bug_when>
    <thetext>Comment on attachment 27562
Part 1: Put ResourceError in ThreadableLoaderClient

+    // FIXME: If the a site requests a local resource, then this will return a non-zero value but the sync path
+    // will return a 0 value.  Either this should return 0 or the other code path should do a callback with
+    // a failure.
     thisPtr-&gt;m_mainThreadLoader = ThreadableLoader::create(context, thisPtr, *request, callbacksSetting, contentSniff);
-    if (!thisPtr-&gt;m_mainThreadLoader)
-        thisPtr-&gt;didFail();

Seems that we should assert that the result is non-null here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109440</commentid>
    <comment_count>9</comment_count>
      <attachid>27562</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-12 00:33:28 -0800</bug_when>
    <thetext>Comment on attachment 27562
Part 1: Put ResourceError in ThreadableLoaderClient

Committed revision 40889, clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109452</commentid>
    <comment_count>10</comment_count>
      <attachid>27592</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-12 04:04:46 -0800</bug_when>
    <thetext>Created attachment 27592
Part 2: Add a way to post a task and synchronously wait for it to finish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109457</commentid>
    <comment_count>11</comment_count>
      <attachid>27595</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-12 04:40:05 -0800</bug_when>
    <thetext>Created attachment 27595
Part 3: Add the sync implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109462</commentid>
    <comment_count>12</comment_count>
      <attachid>27592</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-12 05:08:48 -0800</bug_when>
    <thetext>Comment on attachment 27592
Part 2: Add a way to post a task and synchronously wait for it to finish.

+class TaskForWorkerContextBlockingCondition : public ScriptExecutionContext::Task {

Let&apos;s try a round of making a better name - this one doesn&apos;t really parse to me.

+        // The signaling cannot be done at the end of this method because the task may finish asynchronously.

Would it make sense to unconditionally signal from task destructor?

There is a race condition between postTaskToWorkerObjectAndWait() and unblockWorkerContext(): if the task finishes and signals before calling secondary thread enters its wait, it will never be unblocked (pthread_cond_signal() has no effect if no threads are waiting). A common pattern is to synchronize on the mutex that is passed to wait().

+        void unblockWorkerContext(); // unblocks postTaskToWorkerObjectAndWait

We prefer full sentence comments.

+        // when it has finished its work.  WorkerMessagingProxy::unblockWorkerContext will in turn signal m_syncFlag.

I believe that the prevailing style is not to use French spacing (i.e., we don&apos;t put two spaces between sentences).

As discussed on IRC, this design will not allow for progress events to fire while a sync request is running. Per XHR spec, at least readystatechange should fire - it&apos;s an open issue whether progress events should, too. And I&apos;m not sure if timers are supposed fire while a request is in progress. But a correct implementation of events can wait until later.

r- due to the race condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109463</commentid>
    <comment_count>13</comment_count>
      <attachid>27595</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-12 05:17:25 -0800</bug_when>
    <thetext>Comment on attachment 27595
Part 3: Add the sync implementation.

&gt; +        * loader/LoaderForWaitingWorkerContext.cpp: Added.

Hmm - somehow, I assumed that sync and async could share the same loader on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109619</commentid>
    <comment_count>14</comment_count>
      <attachid>27640</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-12 21:51:10 -0800</bug_when>
    <thetext>Created attachment 27640
Part 2: Add a way to post a task and wait for its algorithm to finish.

Addressed comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109635</commentid>
    <comment_count>15</comment_count>
      <attachid>27595</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-13 00:55:12 -0800</bug_when>
    <thetext>Comment on attachment 27595
Part 3: Add the sync implementation.

I&apos;m going to revisit this approach after some comments by ap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110923</commentid>
    <comment_count>16</comment_count>
      <attachid>27962</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-25 01:38:19 -0800</bug_when>
    <thetext>Created attachment 27962
Part 2: Add the sync implementation for Workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110933</commentid>
    <comment_count>17</comment_count>
      <attachid>27962</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-25 03:38:33 -0800</bug_when>
    <thetext>Comment on attachment 27962
Part 2: Add the sync implementation for Workers. 

 void ThreadableLoader::loadResourceSynchronously(ScriptExecutionContext* context, const ResourceRequest&amp; request, ThreadableLoaderClient&amp; client)
 {
     ASSERT(context);
+
+#if ENABLE(WORKERS)
+    if (context-&gt;isWorkerContext())
+        return WorkerThreadableLoader::loadResourceSynchronously(static_cast&lt;WorkerContext*&gt;(context), request, client);

Even though this works, I&apos;d put &quot;return&quot; on a separate line.

+    ContentSniff contentSniff =  request.url().isLocalFile() ? SniffContent : DoNotSniffContent;

Two spaces after &quot;=&quot;.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110979</commentid>
    <comment_count>18</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-25 10:08:43 -0800</bug_when>
    <thetext>Committed in r41216.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27272</attachid>
            <date>2009-02-02 18:15:07 -0800</date>
            <delta_ts>2009-02-03 00:00:13 -0800</delta_ts>
            <desc>Part 1: Minor api adjustment for ThreadableLoader::loadResourceSynchronously</desc>
            <filename>bug23688-part1.txt</filename>
            <type>text/plain</type>
            <size>4416</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTZlNDAyMS4uMzQ2MjVmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAwOS0wMi0wMiAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDIzNjg4OiBUaHJlYWRhYmxlTG9hZGVyIG5lZWRzIGEgc3luYyBp
bXBsZW1lbnRhdGlvbiBmb3IgV29ya2Vycy4KKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4OD4KKworICAgICAgICBDaGFuZ2UgUmVzb3VyY2VSZXNw
b25zZSB0byBPd25QdHI8UmVzb3Vyc2VSZXNwb25zZT4gdG8gYmV0dGVyIGFsaWduIHdpdGggdGhl
CisgICAgICAgIHdvcmtlciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUaGUgY3VycmVudCB4
aHIgbGF5b3V0IHRlc3RzIGV4ZXJjaXNlIHRoaXMgY29kZS4KKworICAgICAgICAqIGxvYWRlci9U
aHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxl
TG9hZGVyLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkpOgorCiAyMDA5
LTAxLTMwICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIv
VGhyZWFkYWJsZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNw
cAppbmRleCAwZjIyZmJlLi4wNjk4ZTBiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9UaHJl
YWRhYmxlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNw
cApAQCAtNDgsNyArNDgsNyBAQCBQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IFRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgIHJldHVybiBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNv
bnRleHQpLCBjbGllbnQsIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZik7
CiB9CiAKLXVuc2lnbmVkIGxvbmcgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQordW5zaWduZWQgbG9uZyBUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIE93blB0cjxSZXNvdXJjZVJlc3BvbnNlPiYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0
YSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSk7CkBAIC01Niw3ICs1Niw5IEBAIHVuc2lnbmVkIGxvbmcgVGhyZWFkYWJsZUxvYWRlcjo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKICAgICBp
ZiAoIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBsb25nPjo6bWF4KCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5s
b2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBlcnJvciwgcmVzcG9u
c2UsIGRhdGEpOworICAgIHJlc3BvbnNlLnNldChuZXcgUmVzb3VyY2VSZXNwb25zZSk7CisKKyAg
ICByZXR1cm4gZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHJlcXVlc3QsIGVycm9yLCAqcmVzcG9uc2UsIGRhdGEpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVy
LmggYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKaW5kZXggZThmZjA1OC4uYjY5
Yzk0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCisrKyBi
L1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2Rl
ZmluZSBUaHJlYWRhYmxlTG9hZGVyX2gKIAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTgsNyArNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlciA6IE5vbmNvcHlhYmxlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZik7Ci0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIE93blB0cjxSZXNvdXJj
ZVJlc3BvbnNlPiYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGNhbmNlbCgpID0gMDsKICAgICAgICAgdm9pZCByZWYoKSB7IHJlZlRocmVhZGFibGVMb2FkZXIo
KTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGJkZGI4ZjMuLmVjYjI3ZDggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKQEAgLTgxMCwxNSArODEwLDE1IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmxvYWRSZXF1ZXN0U3luY2hyb25vdXNseShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEV4Y2Vw
dGlvCiAgICAgQVNTRVJUKCFtX2FzeW5jKTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKICAgICBS
ZXNvdXJjZUVycm9yIGVycm9yOwotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAg
T3duUHRyPFJlc291cmNlUmVzcG9uc2U+IHJlc3BvbnNlOwogCiAgICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyID0gVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7
CiAgICAgbV9sb2FkZXIgPSAwOwogCiAgICAgLy8gTm8gZXhjZXB0aW9uIGZvciBmaWxlOi8vLyBy
ZXNvdXJjZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDk2MjI5OD4uCiAgICAgLy8gQWxzbywgaWYg
d2UgaGF2ZSBhbiBIVFRQIHJlc3BvbnNlLCB0aGVuIGl0IHdhc24ndCBhIG5ldHdvcmsgZXJyb3Ig
aW4gZmFjdC4KLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkgfHwgcmVxdWVzdC51cmwoKS5pc0xvY2Fs
RmlsZSgpIHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPiAwKSB7Ci0gICAgICAgIHByb2Nl
c3NTeW5jTG9hZFJlc3VsdHMoaWRlbnRpZmllciwgZGF0YSwgcmVzcG9uc2UsIGVjKTsKKyAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkgfHwgcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpIHx8IChyZXNw
b25zZS5nZXQoKSAmJiByZXNwb25zZS0+aHR0cFN0YXR1c0NvZGUoKSA+IDApKSB7CisgICAgICAg
IHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoaWRlbnRpZmllciwgZGF0YSwgKnJlc3BvbnNlLCBlYyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27311</attachid>
            <date>2009-02-04 02:19:20 -0800</date>
            <delta_ts>2009-02-06 08:33:16 -0800</delta_ts>
            <desc>Part 1: Put ResourceError in ThreadableLoaderClient</desc>
            <filename>bug23688-part1.txt</filename>
            <type>text/plain</type>
            <size>14217</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTM4YTViNy4uYTFkNjRjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAwOS0wMi0wMyAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDIzNjg4OiBUaHJlYWRhYmxlTG9hZGVyIG5lZWRzIGEgc3luYyBp
bXBsZW1lbnRhdGlvbiBmb3IgV29ya2Vycy4KKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4OD4KKworICAgICAgICBBZGQgUmVzb3VyY2VFcnJvciB0
byBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LgorCisgICAgICAgIE5vIG9ic2VydmFibGUgY2hhbmdl
IGluIGJlaGF2aW9yLCBzbyBubyB0ZXN0LgorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5jZWxsZWRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwpOgor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBs
b2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRGYWlsKToK
KyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpkaWRGYWlsKToKKyAg
ICAgICAgKiBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFk
Q3JlYXRlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OndvcmtlckNvbnRleHREaWRGYWlsKToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlk
Z2U6OmRpZEZhaWwpOgorICAgICAgICAqIGxvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg6
CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjpkaWRGYWlsKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoK
KwogMjAwOS0wMi0wMiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcAppbmRleCA0ZDY1NGMwLi44ZmI0N2QxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKQEAgLTMzLDYgKzMzLDggQEAKIAog
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgpAQCAtNDAsMTEgKzQyLDIxIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExv
YWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZikK
K1Jlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogeworICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKSkKKyAg
ICAgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUo
KS0+bG9hZGVyKCktPmJsb2NrZWRFcnJvcihyZXF1ZXN0KTsKK30KKworUGFzc1JlZlB0cjxEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI+IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERv
Y3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBMb2FkQ2FsbGJh
Y2tzIGNhbGxiYWNrc1NldHRpbmcsIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYpCit7CisgICAg
QVNTRVJUKGRvY3VtZW50KTsKICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBs
b2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBj
bGllbnQsIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZikpOwotICAgIGlm
ICghbG9hZGVyLT5tX2xvYWRlcikKKyAgICBpZiAoIWxvYWRlci0+bV9sb2FkZXIpIHsKICAgICAg
ICAgbG9hZGVyID0gMDsKKyAgICAgICAgZXJyb3IgPSBibG9ja2VkRXJyb3IoKmRvY3VtZW50LCBy
ZXF1ZXN0KTsKKyAgICB9CiAgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CiB9CiAKQEAgLTgx
LDcgKzkzLDggQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVz
dChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWUKICAgICAvLyBGSVhNRTogVGhpcyBu
ZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZv
ciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCiAgICAgaWYgKCFtX2RvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3QodGhpcyk7Ci0gICAgICAgIG1fY2xpZW50LT5k
aWRGYWlsKCk7CisgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3IgPSBibG9ja2VkRXJyb3IoKm1f
ZG9jdW1lbnQsIHJlcXVlc3QpOworICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChlcnJvcik7CiAg
ICAgICAgIGNhbmNlbCgpOwogICAgIH0KIH0KQEAgLTExNCwxMCArMTI3LDcgQEAgdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
IGxvYWRlcikKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKG1f
Y2xpZW50KTsKLSAgICBpZiAoZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkKLSAgICAgICAgbV9jbGll
bnQtPmRpZEdldENhbmNlbGxlZCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9jbGllbnQtPmRpZEZh
aWwoKTsKKyAgICBtX2NsaWVudC0+ZGlkRmFpbChlcnJvcik7CiB9CiAKIHZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpyZWNlaXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlcios
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCBiL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCmluZGV4IDlmZDY0YTAuLjk3ZTI3NmQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCisrKyBiL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCkBAIC00NCw3ICs0NCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBU
aHJlYWRhYmxlTG9hZGVyLCBwcml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50ICB7CiAgICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI+IGNyZWF0ZShEb2N1bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBMb2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYpOworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShEb2N1bWVudCos
IFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJj
ZUVycm9yJiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmKTsKICAgICAgICAgdmlydHVhbCB+
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNl
bCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAgYi9X
ZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcAppbmRleCAxN2I1MWU1Li41NjhjMDQ2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcAorKysgYi9X
ZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldv
cmtlclRocmVhZGFibGVMb2FkZXIuaCIKQEAgLTUyLDcgKzUzLDggQEAgUGFzc1JlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyPiBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY28KICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIAogICAgIEFTU0VSVChjb250ZXh0
LT5pc0RvY3VtZW50KCkpOwotICAgIHJldHVybiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNy
ZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBjbGllbnQsIHJlcXVlc3QsIGNh
bGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZik7CisgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsK
KyAgICByZXR1cm4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihjb250ZXh0KSwgY2xpZW50LCByZXF1ZXN0LCBlcnJvciwgY2FsbGJhY2tzU2V0
dGluZywgY29udGVudFNuaWZmKTsKIH0KIAogdW5zaWduZWQgbG9uZyBUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3Is
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmggYi9XZWJDb3JlL2xv
YWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKaW5kZXggNjYwNDc3MC4uZGY2ZDliYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCisrKyBiL1dl
YkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaApAQCAtMzMsNiArMzMsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwogICAgIGNs
YXNzIFJlc291cmNlUmVzcG9uc2U7CiAKICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
IHsKQEAgLTQyLDggKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5n
dGhSZWNlaXZlZCovKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmco
dW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLykgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRDYW5jZWxsZWQoKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRp
b24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xv
YWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oIGIvV2ViQ29yZS9sb2FkZXIvVGhy
ZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIuaAppbmRleCAxMmNkNjk4Li4xYjlhMjRhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCisr
KyBiL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgKQEAgLTc0
LDE2ICs3NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgbV9jbGll
bnQtPmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CiAgICAgICAgIH0KIAotICAgICAgICB2
b2lkIGRpZEZhaWwoKQorICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkRmFpbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkaWRH
ZXRDYW5jZWxsZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAg
ICAgICAgICAgICAgbV9jbGllbnQtPmRpZEdldENhbmNlbGxlZCgpOworICAgICAgICAgICAgICAg
IG1fY2xpZW50LT5kaWRGYWlsKGVycm9yKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAppbmRl
eCBmOTdjZmM5Li5mOGNjNmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyLmNwcApAQCAtMzQsNyArMzQsMTAgQEAKIAogI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVM
b2FkZXIuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKQEAg
LTgwLDEwICs4Myw3IEBAIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
On5NYWluVGhyZWFkQnJpZGdlKCkKIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQdHIsIGF1dG9fcHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEsIExvYWRDYWxsYmFja3MgY2FsbGJh
Y2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZikKIHsKLSAgICAvLyBGSVhNRTog
VGhpcyBhc3NlcnQgZmFpbHMgZm9yIG5lc3RlZCB3b3JrZXJzLiAgUmVtb3ZpbmcgdGhlIGFzc2Vy
dCB3b3VsZCBhbGxvdyBpdCB0byB3b3JrLAotICAgIC8vIGJ1dCB0aGVuIHRoZXJlIHdvdWxkIGJl
IG9uZSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyIGluIGV2ZXJ5IGludGVybWVkaWF0ZSB3b3JrZXIg
c2ltcGx5Ci0gICAgLy8gY2hhaW5pbmcgdGhlIHJlcXVlc3RzLCB3aGljaCBpcyBub3QgdmVyeSBn
b29kLiBJbnN0ZWFkLCB0aGUgcG9zdFRhc2tUb1dvcmtlck9iamVjdCBzaG91bGQgYmUgYQotICAg
IC8vIHBvc3RUYXNrVG9Eb2N1bWVudENvbnRleHQuCisgICAgLy8gRklYTUU6IFdoZW4gdGhlcmUg
YXJlIG5lc3RlZCB3b3JrZXJzLCB0aGUgcG9zdFRhc2tUb1dvcmtlck9iamVjdCBzaG91bGQgYmUg
YSBwb3N0VGFza1RvRG9jdW1lbnRDb250ZXh0LgogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CiAKQEAgLTkyLDExICs5MiwxMiBA
QCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJl
YWRDcmVhdGVMb2FkZXIoU2NyaXB0RXhlYwogCiAgICAgLy8gRklYTUU6IHRoZSBjcmVhdGVkIGxv
YWRlciBoYXMgbm8ga25vd2xlZGdlIG9mIHRoZSBvcmlnaW4gb2YgdGhlIHdvcmtlciBkb2luZyB0
aGUgbG9hZCByZXF1ZXN0LgogICAgIC8vIEJhc2ljYWxseSBldmVyeSBzZXR0aW5nIGRvbmUgaW4g
U3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSAoaW5jbHVkaW5nIHRoZSBjb250ZW50cyBvZiBhZGRF
eHRyYUZpZWxkc1RvUmVxdWVzdCkKLSAgICAvLyBuZWVkcyB0byBiZSBleGFtaW5lZCBmb3IgaG93
IGl0IHNob3VsZCBiZSB0YWtlIGludG8gYWNjb3VudCBhIGRpZmZlcmVudCBvcmlnaW5hdG9yLgor
ICAgIC8vIG5lZWRzIHRvIGJlIGV4YW1pbmVkIGZvciBob3cgaXQgc2hvdWxkIHRha2UgaW50byBh
Y2NvdW50IGEgZGlmZmVyZW50IG9yaWdpbmF0b3IuCiAgICAgT3duUHRyPFJlc291cmNlUmVxdWVz
dD4gcmVxdWVzdChSZXNvdXJjZVJlcXVlc3Q6OmFkb3B0KHJlcXVlc3REYXRhKSk7Ci0gICAgdGhp
c1B0ci0+bV9tYWluVGhyZWFkTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKGNvbnRl
eHQsIHRoaXNQdHIsICpyZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYpOwor
ICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CisgICAgdGhpc1B0ci0+bV9tYWluVGhyZWFkTG9hZGVy
ID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihjb250ZXh0KSwgdGhpc1B0ciwgKnJlcXVlc3QsIGVycm9yLCBjYWxsYmFja3NTZXR0aW5nLCBj
b250ZW50U25pZmYpOwogICAgIGlmICghdGhpc1B0ci0+bV9tYWluVGhyZWFkTG9hZGVyKQotICAg
ICAgICB0aGlzUHRyLT5kaWRGYWlsKCk7CisgICAgICAgIHRoaXNQdHItPmRpZEZhaWwoZXJyb3Ip
OwogfQogCiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1h
aW5UaHJlYWREZXN0cm95KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJl
YWRCcmlkZ2UqIHRoaXNQdHIpCkBAIC0xODQsMjYgKzE4NSwxNSBAQCB2b2lkIFdvcmtlclRocmVh
ZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmcoaW50IGlkZW50
aWZpZXIpCiAgICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza1RvV29ya2VyQ29udGV4dChjcmVh
dGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nLCBtX3dvcmtlckNs
aWVudFdyYXBwZXIsIGlkZW50aWZpZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgd29ya2VyQ29udGV4
dERpZEZhaWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFi
bGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyKQorc3RhdGljIHZvaWQg
d29ya2VyQ29udGV4dERpZEZhaWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVm
UHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLSAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5k
aWRGYWlsKCk7CisgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkRmFpbChlcnJvcik7CiB9CiAK
LXZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmFpbCgp
Cit2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZhaWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0
VGFza1RvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRG
YWlsLCBtX3dvcmtlckNsaWVudFdyYXBwZXIpKTsKLX0KLQotc3RhdGljIHZvaWQgd29ya2VyQ29u
dGV4dERpZEdldENhbmNlbGxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQ
dHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIpCi17
Ci0gICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7
Ci0gICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkR2V0Q2FuY2VsbGVkKCk7Ci19Ci0KLXZvaWQg
V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkR2V0Q2FuY2VsbGVk
KCkKLXsKLSAgICBtX21lc3NhZ2luZ1Byb3h5LnBvc3RUYXNrVG9Xb3JrZXJDb250ZXh0KGNyZWF0
ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZEdldENhbmNlbGxlZCwgbV93b3JrZXJDbGll
bnRXcmFwcGVyKSk7CisgICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza1RvV29ya2VyQ29udGV4
dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRGYWlsLCBtX3dvcmtlckNsaWVu
dFdyYXBwZXIsIGVycm9yKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRX
cmFwcGVyLCBhdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiByZXNwb25z
ZURhdGEpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVy
LmggYi9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgKaW5kZXggNWQ2MmMy
Mi4uNWMxOTI2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaApAQCAt
NDUsNiArNDUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBSZXNvdXJj
ZUVycm9yOwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBXb3JrZXJDb250
ZXh0OwogICAgIGNsYXNzIFdvcmtlck1lc3NhZ2luZ1Byb3h5OwpAQCAtMTEwLDggKzExMSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoaW50IGlkZW50aWZpZXIpOwot
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoKTsKLSAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRHZXRDYW5jZWxsZWQoKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwog
CiAgICAgICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IGJkZGI4ZjMuLmViNTRmODUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAKQEAgLTExNTQsMjMgKzExNTQsMTkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHJvY2Vz
c1N5bmNMb2FkUmVzdWx0cyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAg
ICAgICAgZWMgPSBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbjo6TkVUV09SS19FUlI7CiB9CiAKLXZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwoKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFk
eSBpbiBhbiBlcnJvciBzdGF0ZSwgZm9yIGluc3RhbmNlIHdlIGNhbGxlZCBhYm9ydCgpLCBiYWls
IG91dCBlYXJseS4KICAgICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50
ZXJuYWxBYm9ydCgpOwotICAgIG5ldHdvcmtFcnJvcigpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1
ZXN0OjpkaWRHZXRDYW5jZWxsZWQoKQotewotICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGluIGFu
IGVycm9yIHN0YXRlLCBmb3IgaW5zdGFuY2Ugd2UgY2FsbGVkIGFib3J0KCksIGJhaWwgb3V0IGVh
cmx5LgotICAgIGlmIChtX2Vycm9yKQorICAgIGlmIChlcnJvci5pc0NhbmNlbGxhdGlvbigpKSB7
CisgICAgICAgIGFib3J0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGFi
b3J0RXJyb3IoKTsKKyAgICBpbnRlcm5hbEFib3J0KCk7CisgICAgbmV0d29ya0Vycm9yKCk7CiB9
CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaCBiL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggZDdjMGQzNi4uZTA0MDhmMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAorKysgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5oCkBAIC0xMjksOCArMTI5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2Vp
dmVkKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZEdldENhbmNlbGxlZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2Fu
Y2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAogICAgIC8vIFNwZWNpYWwgdmVy
c2lvbnMgZm9yIHRoZSBwcmVmbGlnaHQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27562</attachid>
            <date>2009-02-11 07:37:13 -0800</date>
            <delta_ts>2009-02-12 00:33:28 -0800</delta_ts>
            <desc>Part 1: Put ResourceError in ThreadableLoaderClient</desc>
            <filename>bug23688-part1.txt</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27592</attachid>
            <date>2009-02-12 04:04:46 -0800</date>
            <delta_ts>2009-02-12 21:51:10 -0800</delta_ts>
            <desc>Part 2: Add a way to post a task and synchronously wait for it to finish.</desc>
            <filename>bug23688-part1b.txt</filename>
            <type>text/plain</type>
            <size>7357</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Njg3NWZiMS4uZmFiZmI2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAwOS0wMi0xMiAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDIzNjg4OiBUaHJlYWRhYmxlTG9hZGVyIG5lZWRzIGEgc3luYyBp
bXBsZW1lbnRhdGlvbiBmb3IgV29ya2Vycy4KKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4OD4KKworICAgICAgICBBZGQgYSB3YXkgdG8gcG9zdCBh
IHRhc2sgYW5kIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGJlZm9yZQorICAg
ICAgICBjb250aW51aW5nIChwb3N0VGFza1RvV29ya2VyT2JqZWN0QW5kV2FpdCkuCisKKyAgICAg
ICAgTm8gb2JzZXJ2YWJsZSBjaGFuZ2UgaW4gYmVoYXZpb3IsIHNvIG5vIHRlc3QuCisKKyAgICAg
ICAgKiBkb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGFz
a0ZvcldvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRhc2tGb3JXb3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb246OlRhc2tGb3JXb3Jr
ZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGFza0Zvcldv
cmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbjo6flRhc2tGb3JXb3JrZXJDb250ZXh0QmxvY2tp
bmdDb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGFza0ZvcldvcmtlckNvbnRleHRCbG9j
a2luZ0NvbmRpdGlvbjo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVz
c2FnaW5nUHJveHk6Oldvcmtlck1lc3NhZ2luZ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlck1lc3NhZ2luZ1Byb3h5Ojp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvV29ya2VyT2JqZWN0QW5kV2Fp
dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6c2V0V29ya2VyQ29u
dGV4dEJsb2NraW5nQ29uZGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2lu
Z1Byb3h5Ojp1bmJsb2NrV29ya2VyQ29udGV4dCk6CisgICAgICAgICogZG9tL1dvcmtlck1lc3Nh
Z2luZ1Byb3h5Lmg6CisKIDIwMDktMDItMTIgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL2RvbS9Xb3Jr
ZXJNZXNzYWdpbmdQcm94eS5jcHAKaW5kZXggOGQ2MjYwNy4uOGVlYjYzYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1dv
cmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIldvcmtl
ci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQu
aCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMTcxLDYgKzE3Miw0NiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZp
dHk7CiB9OwogCitjbGFzcyBUYXNrRm9yV29ya2VyQ29udGV4dEJsb2NraW5nQ29uZGl0aW9uIDog
cHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRhc2tGb3JXb3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24+IGNyZWF0
ZShXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIFRocmVhZENvbmRpdGlvbiog
c3luY0ZsYWcsIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFza0ZvcldvcmtlckNvbnRleHRC
bG9ja2luZ0NvbmRpdGlvbihtZXNzYWdpbmdQcm94eSwgc3luY0ZsYWcsIHRhc2spKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVGFza0ZvcldvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbihX
b3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIFRocmVhZENvbmRpdGlvbiogc3lu
Y0ZsYWcsIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKKyAg
ICAgICAgOiBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQorICAgICAgICAsIG1fc3lu
Y0ZsYWcoc3luY0ZsYWcpCisgICAgICAgICwgbV90YXNrKHRhc2spCisgICAgeworICAgIH0KKwor
ICAgIH5UYXNrRm9yV29ya2VyQ29udGV4dEJsb2NraW5nQ29uZGl0aW9uKCkKKyAgICB7CisgICAg
ICAgIC8vIElmIG1fdGFzayB3YXMgbmV2ZXIgcnVuLCB0aGVuIHRoZSBzaWduYWxpbmcgbXVzdCBi
ZSBkb25lIGhlcmUuCisgICAgICAgIGlmIChtX3N5bmNGbGFnKQorICAgICAgICAgICAgbV9zeW5j
RmxhZy0+c2lnbmFsKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBpZiAobV9tZXNz
YWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSB0YXNrIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxs
aW5nIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp1bmJsb2NrV29ya2VyQ29udGV4dCwKKyAgICAgICAg
Ly8gd2hlbiBpdCBoYXMgZmluaXNoZWQgaXRzIHdvcmsuICBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
dW5ibG9ja1dvcmtlckNvbnRleHQgd2lsbCBpbiB0dXJuIHNpZ25hbCBtX3N5bmNGbGFnLgorICAg
ICAgICAvLyBUaGUgc2lnbmFsaW5nIGNhbm5vdCBiZSBkb25lIGF0IHRoZSBlbmQgb2YgdGhpcyBt
ZXRob2QgYmVjYXVzZSB0aGUgdGFzayBtYXkgZmluaXNoIGFzeW5jaHJvbm91c2x5LgorICAgICAg
ICBtX21lc3NhZ2luZ1Byb3h5LT5zZXRXb3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24obV9z
eW5jRmxhZyk7CisgICAgICAgIG1fc3luY0ZsYWcgPSAwOworCisgICAgICAgIG1fdGFzay0+cGVy
Zm9ybVRhc2soY29udGV4dCk7CisgICAgfQorCisgICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1f
bWVzc2FnaW5nUHJveHk7CisgICAgVGhyZWFkQ29uZGl0aW9uKiBtX3N5bmNGbGFnOworICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBtX3Rhc2s7Cit9OwogCiBXb3JrZXJD
b250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2VyKQog
ewpAQCAtMTgwLDYgKzIyMSw3IEBAIFdvcmtlckNvbnRleHRQcm94eSogV29ya2VyQ29udGV4dFBy
b3h5OjpjcmVhdGUoV29ya2VyKiB3b3JrZXIpCiBXb3JrZXJNZXNzYWdpbmdQcm94eTo6V29ya2Vy
TWVzc2FnaW5nUHJveHkoV29ya2VyKiB3b3JrZXJPYmplY3QpCiAgICAgOiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQod29ya2VyT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAg
LCBtX3dvcmtlck9iamVjdCh3b3JrZXJPYmplY3QpCisgICAgLCBtX3dvcmtlckNvbnRleHRCbG9j
a2luZ0NvbmRpdGlvbigwKQogICAgICwgbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCgwKQogICAg
ICwgbV93b3JrZXJUaHJlYWRIYWRQZW5kaW5nQWN0aXZpdHkoZmFsc2UpCiAgICAgLCBtX2Fza2Vk
VG9UZXJtaW5hdGUoZmFsc2UpCkBAIC0yOTQsNiArMzM2LDggQEAgdm9pZCBXb3JrZXJNZXNzYWdp
bmdQcm94eTo6dGVybWluYXRlV29ya2VyQ29udGV4dCgpCiB7CiAgICAgaWYgKG1fYXNrZWRUb1Rl
cm1pbmF0ZSkKICAgICAgICAgcmV0dXJuOworICAgIHVuYmxvY2tXb3JrZXJDb250ZXh0KCk7CisK
ICAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwogCiAgICAgaWYgKG1fd29ya2VyVGhyZWFk
KQpAQCAtMzI3LDYgKzM3MSwzMSBAQCBib29sIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdAogICAgIHJldHVybiAobV91bmNvbmZpcm1lZE1lc3NhZ2VDb3Vu
dCB8fCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eSkgJiYgIW1fYXNrZWRUb1Rlcm1p
bmF0ZTsKIH0KIAordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tUb1dvcmtlck9i
amVjdEFuZFdhaXQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
KQoreworICAgIFRocmVhZENvbmRpdGlvbiBzeW5jRmxhZzsKKyAgICBwb3N0VGFza1RvV29ya2Vy
T2JqZWN0KFRhc2tGb3JXb3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb246OmNyZWF0ZSh0aGlz
LCAmc3luY0ZsYWcsIHRhc2spKTsKKworICAgIE11dGV4IGNvbmRpdGlvbk11dGV4OworICAgIGNv
bmRpdGlvbk11dGV4LmxvY2soKTsKKyAgICBzeW5jRmxhZy53YWl0KGNvbmRpdGlvbk11dGV4KTsK
K30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6c2V0V29ya2VyQ29udGV4dEJsb2NraW5n
Q29uZGl0aW9uKFRocmVhZENvbmRpdGlvbiogd29ya2VyQ29udGV4dEJsb2NraW5nQ29uZGl0aW9u
KQoreworICAgIEFTU0VSVCghbV93b3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24pOworICAg
IEFTU0VSVCghbV9hc2tlZFRvVGVybWluYXRlKTsKKyAgICBtX3dvcmtlckNvbnRleHRCbG9ja2lu
Z0NvbmRpdGlvbiA9IHdvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbjsKK30KKwordm9pZCBX
b3JrZXJNZXNzYWdpbmdQcm94eTo6dW5ibG9ja1dvcmtlckNvbnRleHQoKQoreworICAgIGlmICgh
bV93b3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBt
X3dvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbi0+c2lnbmFsKCk7CisgICAgbV93b3JrZXJD
b250ZXh0QmxvY2tpbmdDb25kaXRpb24gPSAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dv
cmtlck1lc3NhZ2luZ1Byb3h5LmggYi9XZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5o
CmluZGV4IDM2MDIxNzEuLmMxZThmZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlck1l
c3NhZ2luZ1Byb3h5LmgKKysrIGIvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuaApA
QCAtMzcsOSArMzcsMTIgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCituYW1lc3BhY2UgV1RGIHsKKyAgICBjbGFzcyBUaHJlYWRDb25kaXRpb247
Cit9ICAvLyBuYW1lc3BhY2UgV1RGCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNz
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFdv
cmtlcjsKICAgICBjbGFzcyBXb3JrZXJUaHJlYWQ7CkBAIC02NSwxNyArNjgsMjAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3ll
ZCgpOwogCiAgICAgICAgIHZvaWQgcG9zdFRhc2tUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICAgICAgdm9pZCBwb3N0VGFza1RvV29y
a2VyT2JqZWN0QW5kV2FpdChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
KTsKICAgICAgICAgdm9pZCBwb3N0VGFza1RvV29ya2VyQ29udGV4dChQYXNzUmVmUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKIAogICAgICAgICB2b2lkIHdvcmtlclRocmVhZENy
ZWF0ZWQoUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+KTsKIAogICAgICAgICB2b2lkIGNvbmZpcm1X
b3JrZXJUaHJlYWRNZXNzYWdlKGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKIAotICAgICAgICAv
LyBPbmx5IHVzZSB0aGlzIG1ldGhvZCBvbiB0aGUgd29ya2VyIG9iamVjdCB0aHJlYWQuCisgICAg
ICAgIC8vIE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgb24gdGhlIHdvcmtlciBvYmplY3QgdGhyZWFk
LgogICAgICAgICBib29sIGFza2VkVG9UZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Fza2Vk
VG9UZXJtaW5hdGU7IH0KKyAgICAgICAgdm9pZCB1bmJsb2NrV29ya2VyQ29udGV4dCgpOyAvLyB1
bmJsb2NrcyBwb3N0VGFza1RvV29ya2VyT2JqZWN0QW5kV2FpdAogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VXb3JrZXJUYXNrOworICAgICAgICBmcmllbmQgY2xh
c3MgVGFza0ZvcldvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbjsKICAgICAgICAgZnJpZW5k
IGNsYXNzIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOwogICAgICAgICBmcmllbmQgY2xhc3Mg
V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOwogCkBAIC04NSw5ICs5MSwxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJu
YWwoYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwogICAg
ICAgICBXb3JrZXIqIHdvcmtlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyT2JqZWN0
OyB9CiAKKyAgICAgICAgdm9pZCBzZXRXb3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24oVGhy
ZWFkQ29uZGl0aW9uKik7CisKICAgICAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICAgICAgV29ya2VyKiBtX3dvcmtlck9iamVj
dDsKICAgICAgICAgUmVmUHRyPFdvcmtlclRocmVhZD4gbV93b3JrZXJUaHJlYWQ7CisgICAgICAg
IFRocmVhZENvbmRpdGlvbiogbV93b3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb247CiAKICAg
ICAgICAgdW5zaWduZWQgbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsgLy8gVW5jb25maXJtZWQg
bWVzc2FnZXMgZnJvbSB3b3JrZXIgb2JqZWN0IHRvIHdvcmtlciB0aHJlYWQuCiAgICAgICAgIGJv
b2wgbV93b3JrZXJUaHJlYWRIYWRQZW5kaW5nQWN0aXZpdHk7IC8vIFRoZSBsYXRlc3QgY29uZmly
bWF0aW9uIGZyb20gd29ya2VyIHRocmVhZCByZXBvcnRlZCB0aGF0IGl0IHdhcyBzdGlsbCBhY3Rp
dmUuCg==
</data>
<flag name="review"
          id="13380"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27595</attachid>
            <date>2009-02-12 04:40:05 -0800</date>
            <delta_ts>2009-02-13 00:55:12 -0800</delta_ts>
            <desc>Part 3: Add the sync implementation.</desc>
            <filename>bug23688-part2.txt</filename>
            <type>text/plain</type>
            <size>27744</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmFiZmI2Yy4uYjRiYWJkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTUsNiArNSw1NCBAQAogICAgICAgICBCdWcgMjM2ODg6IFRocmVh
ZGFibGVMb2FkZXIgbmVlZHMgYSBzeW5jIGltcGxlbWVudGF0aW9uIGZvciBXb3JrZXJzLgogICAg
ICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg4PgogCisg
ICAgICAgIEVuYWJsZSB0aGUgc3luY2hyb25vdXMgcG9ydGlvbiBvZiBUaHJlYWRhYmxlTG9hZGVy
IGZvciB3b3JrZXJzLgorCisgICAgICAgIE5vIG9ic2VydmFibGUgY2hhbmdlIGluIGJlaGF2aW9y
LCBzbyBubyB0ZXN0LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2Vi
Q29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS5zY29uczoKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICBBZGRlZCB0
aGUgbmV3IGNwcC9oIGZpbGVzIGFuZCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oIHdo
aWNoIEkgbWlzc2VkIGJlZm9yZS4KKworICAgICAgICAqIGxvYWRlci9Mb2FkZXJGb3JXYWl0aW5n
V29ya2VyQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyRm9yV2Fp
dGluZ1dvcmtlckNvbnRleHQ6OkNyb3NzVGhyZWFkRGF0YTo6YWRvcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6TG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQ6Om1haW5UaHJlYWRTdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dDo6bWFpblRocmVh
ZERlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRl
eHQ6OkxvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okxv
YWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0OjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6
TG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQ6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dDo6ZGlkUmVjZWl2ZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQ6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyRm9yV2FpdGluZ1dvcmtl
ckNvbnRleHQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dDo6ZGlkRmFpbCk6CisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dDo6ZGlkRmFpbFdpbGxT
ZW5kUmVxdWVzdENoZWNrKToKKyAgICAgICAgKiBsb2FkZXIvTG9hZGVyRm9yV2FpdGluZ1dvcmtl
ckNvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJGb3JXYWl0aW5nV29y
a2VyQ29udGV4dDo6Q3Jvc3NUaHJlYWREYXRhOjpDcm9zc1RocmVhZERhdGEpOgorICAgICAgICBB
IGxvYWRlciB3aGljaCB1bmJsb2NrcyB0aGUgd29ya2VyIGNvbnRleHQgd2hlbiBpdCByZWNlaXZl
cyBhIGNhbGxiYWNrCisgICAgICAgIGluZGljYXRpbmcgdGhhdCB0aGUgdW5kZXJseWluZyBhc3lu
YyBsb2FkIGlzIGZpbmlzaGVkLgorCisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgUmVtb3ZlZCBBU1NFUlQoY29udGV4dCkgc2luY2UgYSBudWxsIHBvaW50ZXIgd2lsbCBjYXVz
ZSBhIGNyYXNoIGltbWVkaWF0ZWx5IGFueXdheS4KKworICAgICAgICAoV2ViQ29yZTo6d29ya2Vy
Q29udGV4dExvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIFRoZSBz
eW5jaHJvbm91cyBpbXBsZW1lbnRhdGlvbiBvZiBUaHJlYWRhYmxlTG9hZGVyIGZvciB3b3JrZXJz
LgorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0Ojpsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgRml4
ZWQgYSBtaW5vciBzcGFjaW5nIGlzc3VlLgorCisyMDA5LTAyLTEyICBEYXZpZCBMZXZpbiAgPGxl
dmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBCdWcgMjM2ODg6IFRocmVhZGFibGVMb2FkZXIgbmVlZHMgYSBzeW5jIGltcGxl
bWVudGF0aW9uIGZvciBXb3JrZXJzLgorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNjg4PgorCiAgICAgICAgIEFkZCBhIHdheSB0byBwb3N0IGEgdGFz
ayBhbmQgc3luY2hyb25vdXNseSB3YWl0IGZvciBpdCB0byBmaW5pc2ggYmVmb3JlCiAgICAgICAg
IGNvbnRpbnVpbmcgKHBvc3RUYXNrVG9Xb3JrZXJPYmplY3RBbmRXYWl0KS4KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXgg
YWQyMmIxNy4uZmY1MzE1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDY1LDYgKzEwNjUsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuaCBcCiAJV2ViQ29yZS9s
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oIFwK
KwlXZWJDb3JlL2xvYWRlci9Mb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dC5jcHAgXAorCVdl
YkNvcmUvbG9hZGVyL0xvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0LmggXAogCVdlYkNvcmUv
bG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL01haW5SZXNv
dXJjZUxvYWRlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcCBcCkBAIC0x
MDkzLDYgKzEwOTUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL1Ro
cmVhZGFibGVMb2FkZXIuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgg
XAogCVdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaCBcCisJV2ViQ29yZS9s
b2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIuaCBcCiAJV2ViQ29yZS9sb2FkZXIv
V29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVh
ZGFibGVMb2FkZXIuaCBcCiAJV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlLmggXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
NmM0MTFmOS4uMTM4ZDUxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9X
ZWJDb3JlL1dlYkNvcmUucHJvCkBAIC04MDEsNiArODAxLDcgQEAgU09VUkNFUyArPSBcCiAgICAg
bG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwIFwKICAgICBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwIFwK
ICAgICBsb2FkZXIvbG9hZGVyLmNwcCBcCisgICAgbG9hZGVyL0xvYWRlckZvcldhaXRpbmdXb3Jr
ZXJDb250ZXh0LmNwcCBcCiAgICAgbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAgXAogICAg
IGxvYWRlci9NZWRpYURvY3VtZW50LmNwcCBcCiAgICAgbG9hZGVyL05hdmlnYXRpb25BY3Rpb24u
Y3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5zY29ucyBiL1dlYkNvcmUvV2ViQ29y
ZS5zY29ucwppbmRleCBiMTk1ZjNkLi5iY2IxNjllIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuc2NvbnMKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnNjb25zCkBAIC0zNDMsNiArMzQzLDcgQEAg
c291cmNlc1snbG9hZGVyJ10gPSBbCiAgICAgJ2xvYWRlci9JbWFnZURvY3VtZW50LmNwcCcsCiAg
ICAgJ2xvYWRlci9JbWFnZUxvYWRlci5jcHAnLAogICAgICdsb2FkZXIvbG9hZGVyLmNwcCcsCisg
ICAgJ2xvYWRlci9Mb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dC5jcHAnLAogICAgICdsb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCcsCiAgICAgJ2xvYWRlci9NZWRpYURvY3VtZW50LmNw
cCcsCiAgICAgJ2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagppbmRleCBiNmMxNWQ2Li40ODY0ZGM2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI4NTYsNiArMjg1NiwxNCBAQAogCQkJCT4NCiAJCQk8
L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcTG9hZGVyRm9y
V2FpdGluZ1dvcmtlckNvbnRleHQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXExvYWRlckZvcldhaXRpbmdXb3JrZXJDb250
ZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcTWFpblJlc291cmNlTG9hZGVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkBAIC0yOTY4LDYgKzI5NzYsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVy
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIu
Llxsb2FkZXJcV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2Yjg5N2E3
Li44ZmQxYWQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTMyLDYgKzEzMiw5IEBACiAJCTA4RTZFMEYxMEVGRjQyQkEwMDAyOUZCRiAvKiBXTUxGaWVs
ZFNldEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDhFNkUwRUYwRUZGNDJCQTAwMDI5RkJGIC8qIFdNTEZpZWxkU2V0RWxlbWVudC5jcHAg
Ki87IH07CiAJCTA4RTZFMEYyMEVGRjQyQkEwMDAyOUZCRiAvKiBXTUxGaWVsZFNldEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RTZFMEYw
MEVGRjQyQkEwMDAyOUZCRiAvKiBXTUxGaWVsZFNldEVsZW1lbnQuaCAqLzsgfTsKIAkJMEE0ODQ0
OTkwQ0E0NENCMjAwQjdCRDQ4IC8qIFNvZnRMaW5raW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQ4NDQ5ODBDQTQ0Q0IyMDBCN0JENDggLyogU29m
dExpbmtpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwQjE1MjRFMjBGMzk5RjZBMDBGRENEMkIgLyogTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEIxNTI0RTAwRjM5OUY2QTAwRkRDRDJCIC8qIExvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0
LmNwcCAqLzsgfTsKKwkJMEIxNTI0RTMwRjM5OUY2QTAwRkRDRDJCIC8qIExvYWRlckZvcldhaXRp
bmdXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjE1MjRFMTBGMzk5RjZBMDBGRENEMkIgLyogTG9hZGVyRm9yV2FpdGluZ1dvcmtl
ckNvbnRleHQuaCAqLzsgfTsKKwkJMEIxNTI0RTUwRjM5OUY4OTAwRkRDRDJCIC8qIFRocmVhZGFi
bGVMb2FkZXJDbGllbnRXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQjE1MjRFNDBGMzk5Rjg5MDBGRENEMkIgLyogVGhyZWFkYWJsZUxvYWRl
ckNsaWVudFdyYXBwZXIuaCAqLzsgfTsKIAkJMEI0Q0U3REIwRjJFNEJERTAwRjZFQzA0IC8qIENy
b3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjRDRTdEQTBGMkU0QkRFMDBGNkVDMDQgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAq
LzsgfTsKIAkJMEI4QzU2RDQwRjI4NjI3RjAwMDUwMkUxIC8qIEhUVFBIZWFkZXJNYXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI4QzU2RDMwRjI4
NjI3RjAwMDUwMkUxIC8qIEhUVFBIZWFkZXJNYXAuY3BwICovOyB9OwogCQkwQjkwNTYxOTBGMjU3
OEJFMDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCOTA1NjE1MEYyNTc4QkUwMDk1RkY2
QSAvKiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwICovOyB9OwpAQCAtNTAwOSw2ICs1MDEy
LDkgQEAKIAkJMDhGQjg0QjAwRUNFMzczMzAwREMwNjRFIC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEVsZW1lbnRGYWN0b3J5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhGQjg0QjEwRUNFMzczMzAwREMw
NjRFIC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdNTEVsZW1lbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBB
NDg0NDk4MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwQjE1MjRFMDBGMzk5RjZBMDBGRENEMkIgLyogTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNv
bnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZGVyRm9y
V2FpdGluZ1dvcmtlckNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
QjE1MjRFMTBGMzk5RjZBMDBGRENEMkIgLyogTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9hZGVyRm9yV2FpdGluZ1dvcmtl
ckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEIxNTI0RTQwRjM5OUY4
OTAwRkRDRDJCIC8qIFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCNENFN0RBMEYyRTRCREUwMEY2RUMwNCAvKiBD
cm9zc1RocmVhZENvcGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9z
c1RocmVhZENvcGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjhDNTZEMzBG
Mjg2MjdGMDAwNTAyRTEgLyogSFRUUEhlYWRlck1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVFRQSGVhZGVyTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEI5MDU2MTUwRjI1NzhCRTAwOTVGRjZBIC8qIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM2NDks
NiArMTM2NTUsOCBAQAogCQkJCTFBODIwRDkwMEExM0VCQTYwMEFGODQzQyAvKiBJbWFnZURvY3Vt
ZW50LmggKi8sCiAJCQkJMDg5NTgyNTMwRTg1N0E3RTAwRjgyQzgzIC8qIEltYWdlTG9hZGVyLmNw
cCAqLywKIAkJCQkwODk1ODI1NDBFODU3QTdFMDBGODJDODMgLyogSW1hZ2VMb2FkZXIuaCAqLywK
KwkJCQkwQjE1MjRFMDBGMzk5RjZBMDBGRENEMkIgLyogTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNv
bnRleHQuY3BwICovLAorCQkJCTBCMTUyNEUxMEYzOTlGNkEwMEZEQ0QyQiAvKiBMb2FkZXJGb3JX
YWl0aW5nV29ya2VyQ29udGV4dC5oICovLAogCQkJCTkzRTIyN0RDMEFGNTg5QUQwMEQ0ODMyNCAv
KiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwICovLAogCQkJCTY1NkQzNzI5MEFEQkE1REUwMEE0NTU0
RCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQlBQjQwNDg0QjBFMDgzRkE4MDA3RDY5
MjAgLyogTWVkaWFEb2N1bWVudC5jcHAgKi8sCkBAIC0xMzY3Nyw2ICsxMzY4NSw3IEBACiAJCQkJ
MEI5MDU2MUQwRjI1N0U5MzAwOTVGRjZBIC8qIFRocmVhZGFibGVMb2FkZXIuY3BwICovLAogCQkJ
CTBCOTA1NjE3MEYyNTc4QkUwMDk1RkY2QSAvKiBUaHJlYWRhYmxlTG9hZGVyLmggKi8sCiAJCQkJ
MEI5MDU2MTgwRjI1NzhCRTAwOTVGRjZBIC8qIFRocmVhZGFibGVMb2FkZXJDbGllbnQuaCAqLywK
KwkJCQkwQjE1MjRFNDBGMzk5Rjg5MDBGRENEMkIgLyogVGhyZWFkYWJsZUxvYWRlckNsaWVudFdy
YXBwZXIuaCAqLywKIAkJCQk3Mjg0QUREQjBFNkZFQjMxMDAyRUVGQkQgLyogVXNlclN0eWxlU2hl
ZXRMb2FkZXIuY3BwICovLAogCQkJCTcyODRBRERDMEU2RkVCMzEwMDJFRUZCRCAvKiBVc2VyU3R5
bGVTaGVldExvYWRlci5oICovLAogCQkJCTBCOTA1NkY2MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCAqLywKQEAgLTE1NTkxLDYgKzE1NjAwLDcgQEAKIAkJCQlB
OEVBN0NCNzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERpdkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzRjE5OEU2MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTE3QzgxMjMwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50
RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MUQ0NUMwQTEyN0NCQzAwQjEyQTY4IC8q
IEhUTUxFbWJlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2OUQ0MDk3Mzc0RjYw
MEQ3NDQ2MyAvKiBIVE1MRmllbGRTZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENG
RjdBNjBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTEZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTE2MDY4LDYgKzE2MDc4LDcgQEAKIAkJCQlCMjIyNzk2NTBEMDBCRjIyMDA3MUI3ODIgLyog
TGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0FEMkY4ODBF
Qzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3QTRG
MEExOTFBNTIwMEE4RUY1RiAvKiBMaXN0TWFya2VyQm94LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
QjE1MjRFMzBGMzk5RjZBMDBGRENEMkIgLyogTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJO
U1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDZFODFFRDcwQUI1RDVFOTAwQzg3ODM3
IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFC
RTM4MjkwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNjU5NCw2ICsxNjYwNSw3IEBACiAJCQkJMTg1QkNGMjkwRjMyNzlDRTAwMEVBMjYyIC8qIFRo
cmVhZFRpbWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEI5MDU2MUIwRjI1NzhCRjAwOTVGRjZB
IC8qIFRocmVhZGFibGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBCOTA1NjFDMEYyNTc4
QkYwMDk1RkY2QSAvKiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwQjE1MjRFNTBGMzk5Rjg5MDBGRENEMkIgLyogVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0IwMENENjMzMTAwMEZBREE3NSAvKiBUaW1l
UmFuZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyog
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMkFFMEVGQUM5MDYwMDlEMENBRiAvKiBU
aW1pbmdGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjc3MCw3ICsxNjc4Miw2IEBACiAJ
CQkJMUE1NjlEMjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTE3QzgxMjMwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxF
bGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzU4OCw2ICsxNzU5OSw3IEBACiAJ
CQkJQThFQTdDQjEwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAvKiBI
VE1MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MUQ0NUYwQTEyN0NC
QzAwQjEyQTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgx
MzY5RDUwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxGaWVsZFNldEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDRkY3QTIwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxGb250RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTE4MTIxLDYgKzE4MTMzLDcgQEAKIAkJCQlCQ0U2NUJFQTBF
QUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QUQyRjg3
MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVB
N0E1MzBBMTkxQTUyMDBBOEVGNUYgLyogTGlzdE1hcmtlckJveC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwQjE1MjRFMjBGMzk5RjZBMDBGRENEMkIgLyogTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3MzMwQURCQTVERTAwQTQ1NTREIC8q
IExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDZFODFFRUMwQUI1REE5
NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTUxQkUzODI4MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xODc1OCw3ICsxODc3MSw2IEBACiAJCQkJMUE1NjlEMjIwRDdFMkI4MjAw
N0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5RDI0
MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTMzMDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmts
IGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggYzY3MDViNS4uNTk0NGI1MiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wKQEAgLTY0Nyw2ICs2NDcsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxp
c3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGxvYWRlci9GVFBE
aXJlY3RvcnlQYXJzZXIuY3BwCiAgICAgICAgIGxvYWRlci9JbWFnZURvY3VtZW50LmNwcAogICAg
ICAgICBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCisgICAgICAgIGxvYWRlci9Mb2FkZXJGb3JXYWl0
aW5nV29ya2VyQ29udGV4dC5jcHAKICAgICAgICAgbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5j
cHAKICAgICAgICAgbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCiAgICAgICAgIGxvYWRlci9OYXZp
Z2F0aW9uQWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvTG9hZGVyRm9yV2Fp
dGluZ1dvcmtlckNvbnRleHQuY3BwIGIvV2ViQ29yZS9sb2FkZXIvTG9hZGVyRm9yV2FpdGluZ1dv
cmtlckNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YWEx
ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2xvYWRlci9Mb2FkZXJGb3JXYWl0aW5nV29y
a2VyQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkxvYWRlckZvcldhaXRpbmdXb3JrZXJDb250
ZXh0LmgiCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5o
IgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIExvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0OjpD
cm9zc1RocmVhZERhdGE6OmFkb3B0KENyb3NzVGhyZWFkRGF0YSYgZGF0YSkKK3sKKyAgICBtX2lk
ZW50aWZpZXIgPSBkYXRhLm1faWRlbnRpZmllcjsKKyAgICBtX2Vycm9yID0gZGF0YS5tX2Vycm9y
OworICAgIGRhdGEubV9lcnJvciA9IFJlc291cmNlRXJyb3IoKTsKKyAgICBtX3Jhd0RhdGEuc3dh
cChkYXRhLm1fcmF3RGF0YSk7CisgICAgZGF0YS5tX3Jhd0RhdGEuY2xlYXIoKTsKKyAgICBtX3Jl
c3BvbnNlRGF0YSA9IGRhdGEubV9yZXNwb25zZURhdGE7Cit9CisKK3ZvaWQgTG9hZGVyRm9yV2Fp
dGluZ1dvcmtlckNvbnRleHQ6Om1haW5UaHJlYWRTdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIGF1dG9fcHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWREYXRh
KiByZXR1cm5EYXRhLCBMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dCoqIGxvYWRlcldpdGhV
bmJsb2NrV29ya2VyQ29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogV2hlbiB0aGVyZSBhcmUgbmVz
dGVkIHdvcmtlcnMsIHRoaXMgc2hvdWxkIHJ1biBvbiB0aGUgbWFpbiB0aHJlYWQgd2l0aCB0aGUg
RG9jdW1lbnQgY29udGV4dC4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKworICAgIG5ldyBMb2Fk
ZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dChjb250ZXh0LCBtZXNzYWdpbmdQcm94eSwgcmVxdWVz
dERhdGEsIHJldHVybkRhdGEsIGxvYWRlcldpdGhVbmJsb2NrV29ya2VyQ29udGV4dCk7Cit9CisK
K3ZvaWQgTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQ6Om1haW5UaHJlYWREZXN0cm95KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIExvYWRlckZvcldhaXRpbmdXb3JrZXJDb250
ZXh0KiB0aGlzUHRyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
X1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIGRlbGV0ZSB0aGlz
UHRyOworfQorCitMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dDo6TG9hZGVyRm9yV2FpdGlu
Z1dvcmtlckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV29ya2VyTWVz
c2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBhdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVxdWVzdERhdGE+IHJlcXVlc3REYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzVGhyZWFkRGF0YSogcmV0dXJuRGF0
YSwgTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQqKiBsb2FkZXJXaXRoVW5ibG9ja1dvcmtl
ckNvbnRleHQpCisgICAgOiBtX2Nyb3NzVGhlYWREYXRhKG1fZXJyb3IpCisgICAgLCBtX21lc3Nh
Z2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQorICAgICwgbV9yZXR1cm5EYXRhKHJldHVybkRhdGEp
Cit7CisgICAgKmxvYWRlcldpdGhVbmJsb2NrV29ya2VyQ29udGV4dCA9IHRoaXM7CisKKyAgICBp
ZiAobV9tZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBGSVhNRTogdGhlIGNyZWF0ZWQgbG9hZGVyIGhhcyBubyBrbm93bGVkZ2Ugb2Yg
dGhlIG9yaWdpbiBvZiB0aGUgd29ya2VyIGRvaW5nIHRoZSBsb2FkIHJlcXVlc3QuCisgICAgLy8g
QmFzaWNhbGx5IGV2ZXJ5IHNldHRpbmcgZG9uZSBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
IChpbmNsdWRpbmcgdGhlIGNvbnRlbnRzIG9mIGFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KQorICAg
IC8vIG5lZWRzIHRvIGJlIGV4YW1pbmVkIGZvciBob3cgaXQgc2hvdWxkIHRha2UgaW50byBhY2Nv
dW50IGEgZGlmZmVyZW50IG9yaWdpbmF0b3IuCisgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4g
cmVxdWVzdChSZXNvdXJjZVJlcXVlc3Q6OmFkb3B0KHJlcXVlc3REYXRhKSk7CisgICAgQ29udGVu
dFNuaWZmIGNvbnRlbnRTbmlmZiA9IHJlcXVlc3QtPnVybCgpLmlzTG9jYWxGaWxlKCkgPyBTbmlm
ZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29udGVudDsKKyAgICBtX2xvYWRlciA9IFRocmVhZGFibGVM
b2FkZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzLCAqcmVxdWVzdCwgRG9Ob3RTZW5kTG9hZENhbGxi
YWNrcywgY29udGVudFNuaWZmKTsKK30KKwordm9pZCBMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29u
dGV4dDo6ZmluaXNoKCkKK3sKKyAgICBpZiAobV9tZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1p
bmF0ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXR1cm5EYXRhLT5hZG9wdChtX2Nyb3Nz
VGhlYWREYXRhKTsKKyAgICBtX21lc3NhZ2luZ1Byb3h5LT51bmJsb2NrV29ya2VyQ29udGV4dCgp
OworICAgIG1fbG9hZGVyID0gMDsKK30KKwordm9pZCBMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29u
dGV4dDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIG1fY3Jvc3NUaGVhZERhdGEubV9yZXNwb25zZURhdGEgPSByZXNwb25zZS5jb3B5
RGF0YSgpOworfQorCit2b2lkIExvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0OjpkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgbV9j
cm9zc1RoZWFkRGF0YS5tX3Jhd0RhdGEuYXBwZW5kKGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKK30K
Kwordm9pZCBMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dDo6ZGlkRmluaXNoTG9hZGluZyh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAgbV9jcm9zc1RoZWFkRGF0YS5tX2lkZW50
aWZpZXIgPSBpZGVudGlmaWVyOworICAgIGZpbmlzaCgpOworfQorCit2b2lkIExvYWRlckZvcldh
aXRpbmdXb3JrZXJDb250ZXh0OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24o
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgbV9jcm9zc1RoZWFkRGF0
YS5tX3Jlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLmNvcHlEYXRhKCk7Cit9CisKK3ZvaWQgTG9hZGVy
Rm9yV2FpdGluZ1dvcmtlckNvbnRleHQ6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCit7CisgICAgbV9jcm9zc1RoZWFkRGF0YS5tX2Vycm9yID0gZXJyb3IuY29weSgpOworICAg
IGZpbmlzaCgpOworfQorCit2b2lkIExvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0OjpkaWRG
YWlsV2lsbFNlbmRSZXF1ZXN0Q2hlY2soKQoreworICAgIGZpbmlzaCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL0xvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0LmggYi9XZWJDb3Jl
L2xvYWRlci9Mb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjVjNzI3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2xv
YWRlci9Mb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dC5oCkBAIC0wLDAgKzEsOTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIExvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0X2gKKyNkZWZpbmUgTG9hZGVyRm9yV2Fp
dGluZ1dvcmtlckNvbnRleHRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2lu
Y2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBj
bGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CisgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlcjsKKyAgICBjbGFzcyBXb3JrZXJNZXNzYWdpbmdQ
cm94eTsKKyAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhOworICAgIHN0
cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhOworCisgICAgY2xhc3MgTG9hZGVy
Rm9yV2FpdGluZ1dvcmtlckNvbnRleHQgOiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LCBOb25jb3B5
YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWREYXRhIDogTm9u
Y29weWFibGUgeworICAgICAgICAgICAgQ3Jvc3NUaHJlYWREYXRhKFJlc291cmNlRXJyb3ImIGVy
cm9yKQorICAgICAgICAgICAgICAgIDogbV9pZGVudGlmaWVyKHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgbG9uZz46Om1heCgpKQorICAgICAgICAgICAgICAgICwgbV9lcnJvcihlcnJvcikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBhZG9wdChD
cm9zc1RocmVhZERhdGEmKTsKKworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZp
ZXI7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yJiBtX2Vycm9yOworICAgICAgICAgICAgVmVj
dG9yPGNoYXI+IG1fcmF3RGF0YTsKKyAgICAgICAgICAgIHN0ZDo6YXV0b19wdHI8Q3Jvc3NUaHJl
YWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gbV9yZXNwb25zZURhdGE7CisgICAgICAgIH07CisKKyAg
ICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZFN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBXb3JrZXJNZXNzYWdpbmdQcm94eSosIHN0ZDo6YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlcXVlc3REYXRhPiwgQ3Jvc3NUaHJlYWREYXRhKiwgTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNv
bnRleHQqKik7CisgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWREZXN0cm95KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBMb2FkZXJGb3JXYWl0aW5nV29ya2VyQ29udGV4dCopOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdvcmtlck1lc3NhZ2luZ1Byb3h5Kiwgc3RkOjphdXRvX3B0cjxDcm9z
c1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+LCBDcm9zc1RocmVhZERhdGEqLCBMb2FkZXJGb3JX
YWl0aW5nV29ya2VyQ29udGV4dCoqKTsKKworICAgICAgICB2b2lkIGZpbmlzaCgpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGlu
dCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxXaWxs
U2VuZFJlcXVlc3RDaGVjaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKworICAgICAg
ICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7CisgICAgICAgIENyb3NzVGhyZWFkRGF0YSBtX2Nyb3Nz
VGhlYWREYXRhOworICAgICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbV9tZXNzYWdpbmdQcm94
eTsKKyAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOworCisgICAgICAg
IC8vIE9ubHkgYWNjZXNzIG1fcmV0dXJuRGF0YSBpbiBmaW5pc2goKS4KKyAgICAgICAgQ3Jvc3NU
aHJlYWREYXRhKiBtX3JldHVybkRhdGE7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBMb2FkZXJGb3JXYWl0
aW5nV29ya2VyQ29udGV4dF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxl
TG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwCmluZGV4IDE3
YjUxZTUuLjBjNWI4YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2Fk
ZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwCkBAIC0zNSwx
NyArMzUsNDEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgor
I2luY2x1ZGUgIkxvYWRlckZvcldhaXRpbmdXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNs
dWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgog
I2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVMb2FkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBj
YWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmKSAKK3Vuc2lnbmVkIGxv
bmcgd29ya2VyQ29udGV4dExvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVy
cm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0
YSkKIHsKLSAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBBU1NFUlQoY29udGV4dCk7CisgICAgTG9h
ZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQqIGxvYWRlciA9IDA7CisgICAgTG9hZGVyRm9yV2Fp
dGluZ1dvcmtlckNvbnRleHQ6OkNyb3NzVGhyZWFkRGF0YSBjcm9zc1RocmVhZERhdGEoZXJyb3Ip
OworCisgICAgLy8gRklYTUU6IE9uZSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50
YXRpb24gb2YgdGhlIHN5bmNocm9ub3VzIGxvYWRlciBpcyB0aGF0IHRoZSB0aW1lb3V0IGlzIG5v
dCBhcyBzaG9ydCBhcyBpdCBzaG91bGQgYmUuCisgICAgLy8gRnJhbWVMb2FkZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkgaXMgdGhlIHN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uIGZvciB0
aGUgRG9jdW1lbnQsIGFuZCBpdCBkb2VzIHRoaXMgImluaXRpYWxSZXF1ZXN0LnNldFRpbWVvdXRJ
bnRlcnZhbCgxMCk7Ii4KKworICAgIC8vIEZJWE1FOiBUaGUgYXNzdW1wdGlvbiB0aGF0IHdlIGNh
biB1cGNhc3Qgd29ya2VyIG9iamVjdCBwcm94eSB0byBXb3JrZXJNZXNzYWdpbmdQcm94eSB3aWxs
IG5vdCBiZSB0cnVlIGluIG11bHRpLXByb2Nlc3MgaW1wbGVtZW50YXRpb24uCisgICAgV29ya2Vy
TWVzc2FnaW5nUHJveHkmIG1lc3NhZ2luZ1Byb3h5ID0gKnN0YXRpY19jYXN0PFdvcmtlck1lc3Nh
Z2luZ1Byb3h5Kj4od29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlck9iamVjdFByb3h5KCkp
OworICAgIG1lc3NhZ2luZ1Byb3h5LnBvc3RUYXNrVG9Xb3JrZXJPYmplY3RBbmRXYWl0KGNyZWF0
ZUNhbGxiYWNrVGFzaygmTG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQ6Om1haW5UaHJlYWRT
dGFydCwgJm1lc3NhZ2luZ1Byb3h5LCByZXF1ZXN0LCAmY3Jvc3NUaHJlYWREYXRhLCAmbG9hZGVy
KSk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbG9hZGVyIGlzIGRlbGV0ZWQgYmVmb3JlIFdv
cmtlck1lc3NhZ2luZ1Byb3h5IGdvZXMgYXdheS4KKyAgICBpZiAobG9hZGVyKQorICAgICAgICBt
ZXNzYWdpbmdQcm94eS5wb3N0VGFza1RvV29ya2VyT2JqZWN0KGNyZWF0ZUNhbGxiYWNrVGFzaygm
TG9hZGVyRm9yV2FpdGluZ1dvcmtlckNvbnRleHQ6Om1haW5UaHJlYWREZXN0cm95LCBsb2FkZXIp
KTsKIAorICAgIHJlc3BvbnNlID0gKlJlc291cmNlUmVzcG9uc2U6OmFkb3B0KGNyb3NzVGhyZWFk
RGF0YS5tX3Jlc3BvbnNlRGF0YSk7CisgICAgZGF0YS5zd2FwKGNyb3NzVGhyZWFkRGF0YS5tX3Jh
d0RhdGEpOworICAgIHJldHVybiBjcm9zc1RocmVhZERhdGEubV9pZGVudGlmaWVyOworfQorCitQ
YXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGll
bnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxsYmFj
a3NTZXR0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZikKK3sKKyAgICBBU1NFUlQoY2xpZW50
KTsKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0
KCkpCiAgICAgICAgIHJldHVybiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBjbGllbnQsIHJlcXVlc3QsIGNhbGxiYWNr
c1NldHRpbmcsIGNvbnRlbnRTbmlmZik7CkBAIC01Nyw5ICs4MSwxMiBAQCBQYXNzUmVmUHRyPFRo
cmVhZGFibGVMb2FkZXI+IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjbwogCiB1bnNpZ25lZCBsb25nIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAgICBBU1NFUlQoY29udGV4
dCk7Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisjaWYgRU5BQkxFKFdPUktF
UlMpCisgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1cm4g
d29ya2VyQ29udGV4dExvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2Vy
Q29udGV4dCo+KGNvbnRleHQpLCByZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQogCisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250
ZXh0KTsKICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6bWF4KCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
aW5kZXggY2FiMTk5ZC4uZTA1YzNkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtODQzLDcg
Kzg0Myw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHko
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgIC8vIFdlIG5lZWQgdG8ga2VlcCBjb250ZW50
IHNuaWZmaW5nIGVuYWJsZWQgZm9yIGxvY2FsIGZpbGVzIGR1ZSB0byBDRk5ldHdvcmsgbm90IHBy
b3ZpZGluZyBhIE1JTUUgdHlwZQogICAgIC8vIGZvciBsb2NhbCBmaWxlcyBvdGhlcndpc2UsIDxy
ZGFyOi8vcHJvYmxlbS81NjcxODEzPi4KICAgICBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IG1f
aW5QcmVmbGlnaHQgPyBEb05vdFNlbmRMb2FkQ2FsbGJhY2tzIDogU2VuZExvYWRDYWxsYmFja3M7
Ci0gICAgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiA9ICByZXF1ZXN0LnVybCgpLmlzTG9jYWxG
aWxlKCkgPyBTbmlmZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29udGVudDsKKyAgICBDb250ZW50U25p
ZmYgY29udGVudFNuaWZmID0gcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpID8gU25pZmZDb250
ZW50IDogRG9Ob3RTbmlmZkNvbnRlbnQ7CiAgICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCByZXF1ZXN0LCBjYWxsYmFj
a3MsIGNvbnRlbnRTbmlmZik7CiAKICAgICBpZiAobV9sb2FkZXIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27640</attachid>
            <date>2009-02-12 21:51:10 -0800</date>
            <delta_ts>2009-02-13 00:55:30 -0800</delta_ts>
            <desc>Part 2: Add a way to post a task and wait for its algorithm to finish.</desc>
            <filename>bug23688-part1b.txt</filename>
            <type>text/plain</type>
            <size>8400</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Njg3NWZiMS4uMTk0YjRmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAwOS0wMi0xMiAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDIzNjg4OiBUaHJlYWRhYmxlTG9hZGVyIG5lZWRzIGEgc3luYyBp
bXBsZW1lbnRhdGlvbiBmb3IgV29ya2Vycy4KKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4OD4KKworICAgICAgICBBZGQgYSB3YXkgdG8gcG9zdCBh
IHRhc2sgYW5kIHdhaXQgZm9yIGl0cyBhbGdvcml0aG0gdG8gZmluaXNoIGJlZm9yZQorICAgICAg
ICBjb250aW51aW5nIChwb3N0VGFza1RvV29ya2VyT2JqZWN0QW5kV2FpdCkuCisKKyAgICAgICAg
Tm8gb2JzZXJ2YWJsZSBjaGFuZ2UgaW4gYmVoYXZpb3IsIHNvIG5vIHRlc3QuCisKKyAgICAgICAg
KiBkb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lnbmFs
aW5nVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpZ25hbGluZ1Rhc2s6OlNpZ25h
bGluZ1Rhc2spOgorICAgICAgICAoV2ViQ29yZTo6U2lnbmFsaW5nVGFzazo6flNpZ25hbGluZ1Rh
c2spOgorICAgICAgICAoV2ViQ29yZTo6U2lnbmFsaW5nVGFzazo6cGVyZm9ybVRhc2spOgorICAg
ICAgICAoV2ViQ29yZTo6U2lnbmFsaW5nVGFzazo6ZW5zdXJlV29ya2VyQ29udGV4dElzV2FpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6V29ya2VyTWVzc2Fn
aW5nUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnRlcm1p
bmF0ZVdvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJv
eHk6OnBvc3RUYXNrVG9Xb3JrZXJPYmplY3RBbmRXYWl0KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlck1lc3NhZ2luZ1Byb3h5OjpzZXRXb3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnVuYmxvY2tXb3JrZXJDb250
ZXh0KToKKyAgICAgICAgKiBkb20vV29ya2VyTWVzc2FnaW5nUHJveHkuaDoKKwogMjAwOS0wMi0x
MiAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWxleGV5IFByb3NrdXJ5YWtvdi4KQEAgLTMxOTgsNyArMzIyMyw3IEBACiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKLSAgICAgICAgQnVnIDIzNzkyOiB1bnVzZWQgcGFyYW0g
aXMgdXNlZCBpbiBSZW5kZXJMYXllci5jcCBidXQgbm90ICNpbmNsdWRlJ2QKKyAgICAgICAgQnVn
IDIzNzkyOiB1bnVzZWQgcGFyYW0gaXMgdXNlZCBpbiBSZW5kZXJMYXllci5jcHAgYnV0IG5vdCAj
aW5jbHVkZSdkCiAgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3OTI+CiAKICAgICAgICAgQWRkIGluY2x1ZGUgZmlsZSBmb3IgVW51c2VkUGFyYW0gd2hp
Y2ggaXMgdXNlZCBpbiB0aGlzIGZpbGUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAK
aW5kZXggOGQ2MjYwNy4uYmUyMmI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyTWVz
c2FnaW5nUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNw
cApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIldvcmtlci5oIgogI2luY2x1ZGUgIldvcmtl
ckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTcxLDYgKzE3Miw1NyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7CiB9OwogCitjbGFzcyBTaWdu
YWxpbmdUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNpZ25hbGluZ1Rhc2s+IGNyZWF0ZShXb3JrZXJNZXNz
YWdpbmdQcm94eSYgbWVzc2FnaW5nUHJveHksIE11dGV4JiBjb25kaXRpb25NdXRleCwgVGhyZWFk
Q29uZGl0aW9uJiBzeW5jRmxhZywgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiB0YXNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaWduYWxpbmdU
YXNrKG1lc3NhZ2luZ1Byb3h5LCBjb25kaXRpb25NdXRleCwgc3luY0ZsYWcsIHRhc2spKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgU2lnbmFsaW5nVGFzayhXb3JrZXJNZXNzYWdpbmdQcm94eSYg
bWVzc2FnaW5nUHJveHksIE11dGV4JiBjb25kaXRpb25NdXRleCwgVGhyZWFkQ29uZGl0aW9uJiBz
eW5jRmxhZywgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQor
ICAgICAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCisgICAgICAgICwgbV9j
b25kaXRpb25NdXRleChjb25kaXRpb25NdXRleCkKKyAgICAgICAgLCBtX3N5bmNGbGFnKHN5bmNG
bGFnKQorICAgICAgICAsIG1fdGFzayh0YXNrKQorICAgIHsKKyAgICB9CisKKyAgICB+U2lnbmFs
aW5nVGFzaygpCisgICAgeworICAgICAgICAvLyBJZiBtX3Rhc2sgd2FzIG5ldmVyIHJ1biwgdGhl
biB0aGUgc2lnbmFsaW5nIG11c3QgYmUgZG9uZSBoZXJlLgorICAgICAgICBpZiAobV90YXNrKSB7
CisgICAgICAgICAgICBlbnN1cmVXb3JrZXJDb250ZXh0SXNXYWl0aW5nKCk7CisgICAgICAgICAg
ICBtX3N5bmNGbGFnLnNpZ25hbCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgewor
ICAgICAgICBpZiAobV9tZXNzYWdpbmdQcm94eS5hc2tlZFRvVGVybWluYXRlKCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgZW5zdXJlV29ya2VyQ29udGV4dElzV2FpdGluZygpOwor
ICAgICAgICBtX21lc3NhZ2luZ1Byb3h5LnNldFdvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlv
bihtX3N5bmNGbGFnKTsKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgYWxnb3JpdGht
IHN0YXJ0ZWQgaW4gbV90YXNrLT5wZXJmb3JtVGFzaygpIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxs
aW5nIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp1bmJsb2NrV29ya2VyQ29udGV4dC4KKyAgICAgICAg
Ly8gVGhlIHNpZ25hbGluZyBjYW5ub3QgYmUgZG9uZSBlbHNld2hlcmUgYmVjYXVzZSB0aGUgYWxn
b3JpdGhtJ3MgcmVzdWx0cyBtYXkgbm90IGJlIGF2YWlsYWJsZSBzeW5jaHJvbm91c2x5LgorICAg
ICAgICBtX3Rhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOworICAgICAgICAvLyBGbGFnIHRoYXQg
bV90YXNrIHdhcyBydW4uCisgICAgICAgIG1fdGFzayA9IDA7CisgICAgfQorCisgICAgdm9pZCBl
bnN1cmVXb3JrZXJDb250ZXh0SXNXYWl0aW5nKCkKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBt
dXRleCBjYW4gYmUgbG9ja2VkLCB0aGVuIHRoZSB3b3JrZXIgY29udGV4dCB0aHJlYWQgaXMgd2Fp
dGluZyBvbiB0aGUgdGhyZWFkIGNvbmRpdGlvbi4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fY29uZGl0aW9uTXV0ZXgpOworICAgIH0KKworICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5JiBt
X21lc3NhZ2luZ1Byb3h5OworICAgIE11dGV4JiBtX2NvbmRpdGlvbk11dGV4OworICAgIFRocmVh
ZENvbmRpdGlvbiYgbV9zeW5jRmxhZzsKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gbV90YXNrOworfTsKIAogV29ya2VyQ29udGV4dFByb3h5KiBXb3JrZXJDb250ZXh0
UHJveHk6OmNyZWF0ZShXb3JrZXIqIHdvcmtlcikKIHsKQEAgLTE4MCw2ICsyMzIsNyBAQCBXb3Jr
ZXJDb250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2Vy
KQogV29ya2VyTWVzc2FnaW5nUHJveHk6Oldvcmtlck1lc3NhZ2luZ1Byb3h5KFdvcmtlciogd29y
a2VyT2JqZWN0KQogICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHdvcmtlck9iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICwgbV93b3JrZXJPYmplY3Qod29ya2VyT2Jq
ZWN0KQorICAgICwgbV93b3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24oMCkKICAgICAsIG1f
dW5jb25maXJtZWRNZXNzYWdlQ291bnQoMCkKICAgICAsIG1fd29ya2VyVGhyZWFkSGFkUGVuZGlu
Z0FjdGl2aXR5KGZhbHNlKQogICAgICwgbV9hc2tlZFRvVGVybWluYXRlKGZhbHNlKQpAQCAtMjM0
LDcgKzI4Nyw3IEBAIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RFeGNlcHRpb25Ub1dv
cmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnCiB7CiAgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5wb3N0VGFzayhXb3JrZXJFeGNlcHRpb25UYXNrOjpjcmVhdGUoZXJyb3JN
ZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIHRoaXMpKTsKIH0KLSAgICAKKwogc3RhdGlj
IHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIE1lc3NhZ2VEZXN0aW5h
dGlvbiBkZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKIHsKICAgICBpZiAobWVzc2FnaW5nUHJveHktPmFza2VkVG9UZXJtaW5h
dGUoKSkKQEAgLTI5NCw2ICszNDcsOCBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp0ZXJt
aW5hdGVXb3JrZXJDb250ZXh0KCkKIHsKICAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQogICAg
ICAgICByZXR1cm47CisgICAgdW5ibG9ja1dvcmtlckNvbnRleHQoKTsKKwogICAgIG1fYXNrZWRU
b1Rlcm1pbmF0ZSA9IHRydWU7CiAKICAgICBpZiAobV93b3JrZXJUaHJlYWQpCkBAIC0zMjcsNiAr
MzgyLDMwIEBAIGJvb2wgV29ya2VyTWVzc2FnaW5nUHJveHk6Omhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0CiAgICAgcmV0dXJuIChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50IHx8IG1fd29ya2Vy
VGhyZWFkSGFkUGVuZGluZ0FjdGl2aXR5KSAmJiAhbV9hc2tlZFRvVGVybWluYXRlOwogfQogCit2
b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvV29ya2VyT2JqZWN0QW5kV2FpdChQ
YXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCit7CisgICAgVGhy
ZWFkQ29uZGl0aW9uIHN5bmNGbGFnOworICAgIE11dGV4IGNvbmRpdGlvbk11dGV4OworICAgIGNv
bmRpdGlvbk11dGV4LmxvY2soKTsKKyAgICBwb3N0VGFza1RvV29ya2VyT2JqZWN0KFNpZ25hbGlu
Z1Rhc2s6OmNyZWF0ZSgqdGhpcywgY29uZGl0aW9uTXV0ZXgsIHN5bmNGbGFnLCB0YXNrKSk7Cisg
ICAgc3luY0ZsYWcud2FpdChjb25kaXRpb25NdXRleCk7Cit9CisKK3ZvaWQgV29ya2VyTWVzc2Fn
aW5nUHJveHk6OnNldFdvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbihUaHJlYWRDb25kaXRp
b24mIHdvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fd29y
a2VyQ29udGV4dEJsb2NraW5nQ29uZGl0aW9uKTsKKyAgICBBU1NFUlQoIW1fYXNrZWRUb1Rlcm1p
bmF0ZSk7CisgICAgbV93b3JrZXJDb250ZXh0QmxvY2tpbmdDb25kaXRpb24gPSAmd29ya2VyQ29u
dGV4dEJsb2NraW5nQ29uZGl0aW9uOworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp1
bmJsb2NrV29ya2VyQ29udGV4dCgpCit7CisgICAgaWYgKCFtX3dvcmtlckNvbnRleHRCbG9ja2lu
Z0NvbmRpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fd29ya2VyQ29udGV4dEJsb2NraW5n
Q29uZGl0aW9uLT5zaWduYWwoKTsKKyAgICBtX3dvcmtlckNvbnRleHRCbG9ja2luZ0NvbmRpdGlv
biA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuaCBi
L1dlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggMzYwMjE3MS4uMDA0N2M0
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuaAorKysgYi9X
ZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCkBAIC0zNyw5ICszNywxMiBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFj
ZSBXVEYgeworICAgIGNsYXNzIFRocmVhZENvbmRpdGlvbjsKK30gIC8vIG5hbWVzcGFjZSBXVEYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgV29ya2VyOwogICAgIGNsYXNzIFdvcmtl
clRocmVhZDsKQEAgLTY1LDE3ICs2OCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7CiAKICAgICAgICAgdm9pZCBw
b3N0VGFza1RvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4pOworICAgICAgICB2b2lkIHBvc3RUYXNrVG9Xb3JrZXJPYmplY3RBbmRXYWl0KFBhc3NS
ZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwogICAgICAgICB2b2lkIHBvc3RU
YXNrVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4pOwogCiAgICAgICAgIHZvaWQgd29ya2VyVGhyZWFkQ3JlYXRlZChQYXNzUmVmUHRyPFdvcmtl
clRocmVhZD4pOwogCiAgICAgICAgIHZvaWQgY29uZmlybVdvcmtlclRocmVhZE1lc3NhZ2UoYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkpOwogCi0gICAgICAgIC8vIE9ubHkgdXNlIHRoaXMgbWV0aG9k
IG9uIHRoZSB3b3JrZXIgb2JqZWN0IHRocmVhZC4KKyAgICAgICAgLy8gT25seSB1c2UgdGhlc2Ug
bWV0aG9kcyBvbiB0aGUgd29ya2VyIG9iamVjdCB0aHJlYWQuCiAgICAgICAgIGJvb2wgYXNrZWRU
b1Rlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXNrZWRUb1Rlcm1pbmF0ZTsgfQorICAgICAg
ICB2b2lkIHVuYmxvY2tXb3JrZXJDb250ZXh0KCk7IC8vIFRoaXMgdW5ibG9ja3MgcG9zdFRhc2tU
b1dvcmtlck9iamVjdEFuZFdhaXQuCiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgTWVzc2FnZVdvcmtlclRhc2s7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTaWduYWxpbmdUYXNr
OwogICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2s7CiAKQEAgLTg1
LDkgKzkxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZXBvcnRQZW5k
aW5nQWN0aXZpdHlJbnRlcm5hbChib29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSk7CiAgICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV93b3JrZXJPYmplY3Q7IH0KIAorICAgICAgICB2b2lkIHNldFdvcmtlckNvbnRleHRCbG9j
a2luZ0NvbmRpdGlvbihUaHJlYWRDb25kaXRpb24mKTsKKwogICAgICAgICBSZWZQdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgICAgICBXb3Jr
ZXIqIG1fd29ya2VyT2JqZWN0OwogICAgICAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiBtX3dvcmtl
clRocmVhZDsKKyAgICAgICAgVGhyZWFkQ29uZGl0aW9uKiBtX3dvcmtlckNvbnRleHRCbG9ja2lu
Z0NvbmRpdGlvbjsKIAogICAgICAgICB1bnNpZ25lZCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50
OyAvLyBVbmNvbmZpcm1lZCBtZXNzYWdlcyBmcm9tIHdvcmtlciBvYmplY3QgdG8gd29ya2VyIHRo
cmVhZC4KICAgICAgICAgYm9vbCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eTsgLy8g
VGhlIGxhdGVzdCBjb25maXJtYXRpb24gZnJvbSB3b3JrZXIgdGhyZWFkIHJlcG9ydGVkIHRoYXQg
aXQgd2FzIHN0aWxsIGFjdGl2ZS4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27962</attachid>
            <date>2009-02-25 01:38:19 -0800</date>
            <delta_ts>2009-02-25 03:38:33 -0800</delta_ts>
            <desc>Part 2: Add the sync implementation for Workers. </desc>
            <filename>bug23688.txt</filename>
            <type>text/plain</type>
            <size>11703</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzgwY2FiMi4uMDQ3ZmE2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAwOS0wMi0yNSAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDIzNjg4OiBUaHJlYWRhYmxlTG9hZGVyIG5lZWRzIGEgc3luYyBp
bXBsZW1lbnRhdGlvbiBmb3IgV29ya2Vycy4KKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4OD4KKworICAgICAgICBObyBvYnNlcnZhYmxlIGNoYW5n
ZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4KKworICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxl
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50V3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdy
YXBwZXI6OmNsZWFyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyOjpkb25lKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVh
ZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlRo
cmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcjo6VGhyZWFkYWJsZUxv
YWRlckNsaWVudFdyYXBwZXIpOgorICAgICAgICBFeHBvc2Ugd2hldGhlciB0aGUgbG9hZGVyIGlz
IGRvbmUgKGJhc2VkIG9uIHdoYXQgY2FsbGJhY2tzIHdlcmUgZG9uZSkuCisKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkp
OgorICAgICAgICBFYWNoIGxvYWRlciBpcyBnaXZlbiBpdHMgb3duIG1vZGUgc28gdGhhdCBvbmx5
IGl0cyBjYWxsYmFja3MgZ2V0IHRocm91Z2ggdGhlIHJ1biBsb29wLgorCisgICAgICAgIFRoZSB4
aHIgc3BlYyBzYXlzIHRoYXQgdGhlIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnRzIGFyZSBzeW5jaHJv
bm91cywgc28gaW4gdGhlIGNhc2Ugb2YgYQorICAgICAgICBuZXN0ZWQgc3luYyB4aHIgbm8gcmVh
ZHlzdGF0ZWNoYW5nZSBldmVudHMgc2hvdWxkIGJlIGZpcmVkIGZvciB0aGUgb3V0ZXIgeGhyLgor
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJp
ZGdlOjpNYWluVGhyZWFkQnJpZGdlKToKKworICAgICAgICAqIGxvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6ZG9uZSk6
CisKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyUnVuTG9vcDo6V29ya2VyUnVuTG9vcCk6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpjcmVhdGVVbmlx
dWVJZCk6CisgICAgICAgIFNpbXBsZSBtZXRob2QgdG8gY3JlYXRlIGEgdW5pcXVlSWQgb24gZGVt
YW5kIHdpdGggcmVzcGVjdCB0byB0aGUgcnVuIGxvb3AuCisKKyAgICAgICAgKiB3b3JrZXJzL1dv
cmtlclRocmVhZC5oOgorCiAyMDA5LTAyLTIzICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvVGhy
ZWFkYWJsZUxvYWRlci5jcHAKaW5kZXggMmNkY2E3Yi4uNGM1MmRhNCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvVGhy
ZWFkYWJsZUxvYWRlci5jcHAKQEAgLTU3LDYgKzU3LDEyIEBAIFBhc3NSZWZQdHI8VGhyZWFkYWJs
ZUxvYWRlcj4gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvCiB2b2lkIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgQVNTRVJUKGNvbnRl
eHQpOworCisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm4gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIHJl
cXVlc3QsIGNsaWVudCk7CisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKICAgICBBU1NFUlQo
Y29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwg
cmVxdWVzdCwgY2xpZW50KTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFi
bGVMb2FkZXJDbGllbnRXcmFwcGVyLmggYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVy
Q2xpZW50V3JhcHBlci5oCmluZGV4IDRjNjE2M2YuLmQzYzFhOWYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgKKysrIGIvV2ViQ29yZS9s
b2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIuaApAQCAtNDcsOSArNDcsMTUgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKQogICAgICAg
ICB7CisgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwogICAgICAgICAgICAgbV9jbGllbnQgPSAw
OwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBkb25lKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fZG9uZTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZGlkU2Vu
ZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQpA
QCAtNzAsMTggKzc2LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogICAgICAgICB7CisgICAg
ICAgICAgICBtX2RvbmUgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQogICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQog
ICAgICAgICB7CisgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG1f
Y2xpZW50KQogICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKGVycm9yKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQogICAgICAgICB7Cisg
ICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQogICAg
ICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICB9
CkBAIC05NSwxMCArMTA0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyKFRocmVhZGFibGVMb2FkZXJD
bGllbnQqIGNsaWVudCkKICAgICAgICAgICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICAgICAg
ICAgLCBtX2RvbmUoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQqIG1fY2xpZW50OworICAgICAgICBib29sIG1fZG9uZTsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFi
bGVMb2FkZXIuY3BwCmluZGV4IGQ4MDFjMmMuLjQzOTM2OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
bG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL1dv
cmtlclRocmVhZGFibGVMb2FkZXIuY3BwCkBAIC01MSwxMSArNTEsMTUgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgY2hhciBsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5TW9kZVtdID0gImxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlN
b2RlIjsKKwogLy8gRklYTUU6IFRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgY2FuIHVwY2FzdCB3b3Jr
ZXIgb2JqZWN0IHByb3h5IHRvIFdvcmtlck1lc3NhZ2luZ1Byb3h5IHdpbGwgbm90IGJlIHRydWUg
aW4gbXVsdGktcHJvY2VzcyBpbXBsZW1lbnRhdGlvbi4KIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
OldvcmtlclRocmVhZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVu
dFNuaWZmIGNvbnRlbnRTbmlmZikKICAgICA6IG1fd29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0
KQotICAgICwgbV9icmlkZ2UoKihuZXcgTWFpblRocmVhZEJyaWRnZShjbGllbnQsICooc3RhdGlj
X2Nhc3Q8V29ya2VyTWVzc2FnaW5nUHJveHkqPihtX3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT53
b3JrZXJPYmplY3RQcm94eSgpKSksIHRhc2tNb2RlLCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5n
LCBjb250ZW50U25pZmYpKSkKKyAgICAsIG1fd29ya2VyQ2xpZW50V3JhcHBlcihUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6Y3JlYXRlKGNsaWVudCkpCisgICAgLCBtX2JyaWRnZSgqKG5l
dyBNYWluVGhyZWFkQnJpZGdlKG1fd29ya2VyQ2xpZW50V3JhcHBlciwgKihzdGF0aWNfY2FzdDxX
b3JrZXJNZXNzYWdpbmdQcm94eSo+KG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlck9i
amVjdFByb3h5KCkpKSwgdGFza01vZGUsIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U25pZmYpKSkKIHsKIH0K
IApAQCAtNjQsMTggKzY4LDMyIEBAIFdvcmtlclRocmVhZGFibGVMb2FkZXI6On5Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyKCkKICAgICBtX2JyaWRnZS5kZXN0cm95KCk7CiB9CiAKK3ZvaWQgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShXb3JrZXJDb250ZXh0
KiB3b3JrZXJDb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0g
d29ya2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKKworICAgIC8vIENyZWF0ZSBhIHVu
aXF1ZSBtb2RlIGp1c3QgZm9yIHRoaXMgc3luY2hyb25vdXMgcmVzb3VyY2UgbG9hZC4KKyAgICBT
dHJpbmcgbW9kZSA9IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlNb2RlOworICAgIG1vZGUuYXBw
ZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgQ29u
dGVudFNuaWZmIGNvbnRlbnRTbmlmZiA9ICByZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgPyBT
bmlmZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29udGVudDsKKyAgICBSZWZQdHI8V29ya2VyVGhyZWFk
YWJsZUxvYWRlcj4gbG9hZGVyID0gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdvcmtl
ckNvbnRleHQsICZjbGllbnQsIG1vZGUsIHJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3Ms
IGNvbnRlbnRTbmlmZik7CisgICAgd2hpbGUgKCFsb2FkZXItPmRvbmUoKSkKKyAgICAgICAgcnVu
TG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSk7Cit9CisKIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6Y2FuY2VsKCkKIHsKICAgICBtX2JyaWRnZS5jYW5jZWwoKTsKIH0KIAot
V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVhZEJyaWRn
ZShUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiB3b3JrZXJDbGllbnQsIFdvcmtlck1lc3NhZ2luZ1By
b3h5JiBtZXNzYWdpbmdQcm94eSwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1NldHRpbmcsIENv
bnRlbnRTbmlmZiBjb250ZW50U25pZmYpCi0gICAgOiBtX3dvcmtlckNsaWVudFdyYXBwZXIoVGhy
ZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmNyZWF0ZSh3b3JrZXJDbGllbnQpKQorV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVhZEJyaWRnZShQYXNz
UmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVy
LCBXb3JrZXJNZXNzYWdpbmdQcm94eSYgbWVzc2FnaW5nUHJveHksIGNvbnN0IFN0cmluZyYgdGFz
a01vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBj
YWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmKQorICAgIDogbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKHdvcmtlckNsaWVudFdyYXBwZXIpCiAgICAgLCBtX21lc3NhZ2luZ1By
b3h5KG1lc3NhZ2luZ1Byb3h5KQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZS5jb3B5KCkpCiB7
Ci0gICAgQVNTRVJUKHdvcmtlckNsaWVudCk7CisgICAgQVNTRVJUKG1fd29ya2VyQ2xpZW50V3Jh
cHBlci5nZXQoKSk7CiAgICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza1RvV29ya2VyT2JqZWN0
KGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENyZWF0ZUxv
YWRlciwgdGhpcywgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaCBi
L1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAppbmRleCBmOTk3ZTEwLi5j
ZDdjNTFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVy
LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCkBAIC01NSwx
NSArNTUsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV29ya2VyVGhyZWFk
YWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVMb2FkZXI+LCBw
dWJsaWMgVGhyZWFkYWJsZUxvYWRlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoV29ya2VyQ29udGV4dCogd29y
a2VyLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01v
ZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxsYmFj
a3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmKQorICAgICAgICBzdGF0aWMgdm9p
ZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Jik7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdvcmtlclRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYg
dGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBj
YWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZGFibGVMb2FkZXIod29y
a2VyLCBjbGllbnQsIHRhc2tNb2RlLCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50
U25pZmYpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkYWJs
ZUxvYWRlcih3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCByZXF1ZXN0LCBjYWxsYmFj
a3NTZXR0aW5nLCBjb250ZW50U25pZmYpKTsKICAgICAgICAgfQogCiAgICAgICAgIH5Xb3JrZXJU
aHJlYWRhYmxlTG9hZGVyKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwogCisg
ICAgICAgIGJvb2wgZG9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+
ZG9uZSgpOyB9CisKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyPjo6cmVmOwogICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVMb2Fk
ZXI+OjpkZXJlZjsKIApAQCAtOTQsNyArOTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGNsYXNzIE1haW5UaHJlYWRCcmlkZ2UgOiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgLy8gQWxsIGV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIg
Y29udGV4dCdzIHRocmVhZC4KLSAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2UoVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCosIFdvcmtlck1lc3NhZ2luZ1Byb3h5JiwgY29uc3QgU3RyaW5nJiB0YXNr
TW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZm
KTsKKyAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50V3JhcHBlcj4sIFdvcmtlck1lc3NhZ2luZ1Byb3h5JiwgY29uc3QgU3RyaW5nJiB0
YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNu
aWZmKTsKICAgICAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgICAgICAgICB2b2lkIGRlc3Ry
b3koKTsKIApAQCAtMTMzLDYgKzEzNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
V29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIExv
YWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZik7CiAKICAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRl
eHQ+IG1fd29ya2VyQ29udGV4dDsKKyAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGll
bnRXcmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CiAgICAgICAgIE1haW5UaHJlYWRCcmlk
Z2UmIG1fYnJpZGdlOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcAppbmRleCA2
NTg3N2Y3Li4xZTVlNTEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9v
cC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwCkBAIC0xMTEsNiAr
MTExLDcgQEAgcHJpdmF0ZToKIFdvcmtlclJ1bkxvb3A6OldvcmtlclJ1bkxvb3AoKQogICAgIDog
bV9zaGFyZWRUaW1lcihuZXcgV29ya2VyU2hhcmVkVGltZXIpCiAgICAgLCBtX25lc3RlZENvdW50
KDApCisgICAgLCBtX3VuaXF1ZUlkKDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJSdW5Mb29wLmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oCmlu
ZGV4IDRkMWVhYTMuLjVmNzRmMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJS
dW5Mb29wLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuaApAQCAtNjEsNiAr
NjEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcG9zdFRhc2soUGFzc1Jl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CiAgICAgICAgIHZvaWQgcG9zdFRh
c2tGb3JNb2RlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0
IFN0cmluZyYgbW9kZSk7CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjcmVhdGVVbmlxdWVJZCgp
IHsgcmV0dXJuICsrbV91bmlxdWVJZDsgfQorCiAgICAgICAgIHN0YXRpYyBTdHJpbmcgZGVmYXVs
dE1vZGUoKTsKICAgICAgICAgY2xhc3MgVGFzazsKICAgICBwcml2YXRlOgpAQCAtNzAsNiArNzIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8VGFz
az4gPiBtX21lc3NhZ2VRdWV1ZTsKICAgICAgICAgT3duUHRyPFdvcmtlclNoYXJlZFRpbWVyPiBt
X3NoYXJlZFRpbWVyOwogICAgICAgICBpbnQgbV9uZXN0ZWRDb3VudDsKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyBtX3VuaXF1ZUlkOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuaAppbmRleCBiMWVmNWY1Li5mMWE4YTUyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRo
cmVhZC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotI2luY2x1
ZGUgPFdvcmtlclJ1bkxvb3AuaD4KKyNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4K
</data>
<flag name="review"
          id="13623"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>