<?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>103306</bug_id>
          
          <creation_ts>2012-11-26 15:30:47 -0800</creation_ts>
          <short_desc>Support custom V8 bindings for WebWorkers</short_desc>
          <delta_ts>2013-04-11 13:19:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Marshall Greenblatt">marshall</reporter>
          <assigned_to name="Marshall Greenblatt">marshall</assigned_to>
          <cc>abarth</cc>
    
    <cc>fishd</cc>
    
    <cc>hugo.lima</cc>
    
    <cc>laszlo.gombos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>775974</commentid>
    <comment_count>0</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-11-26 15:30:47 -0800</bug_when>
    <thetext>Applications embedding WebKit and Chromium can use existing C++ APIs to dynamically add custom V8 JavaScript bindings. These bindings allow closer integration between the script execution environment and the host application and are currently supported for page contexts via the FrameLoaderClient::didCreateScriptContext callback. However, custom V8 bindings are not currently supported for WebWorkers. Combining the multi-threaded capabilities of WebWorkers with the flexibility offered by custom V8 bindings would be an extremely useful feature for some applications.

The initial implementation idea is to add new callbacks similar to Platform::didStartWorkerRunLoop and Platform::didStopWorkerRunLoop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778204</commentid>
    <comment_count>1</comment_count>
      <attachid>176547</attachid>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-11-28 12:37:33 -0800</bug_when>
    <thetext>Created attachment 176547
Proposed patch

Attached is a proposed patch for this capability. If tests are required where would be the correct place to add them? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778219</commentid>
    <comment_count>2</comment_count>
      <attachid>176547</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 12:43:45 -0800</bug_when>
    <thetext>Comment on attachment 176547
Proposed patch

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

This generally looks like a good approach.  Would you be willing to write a unit test in Source/WebKit/chromium/tests ?  That&apos;s especially important for an API like this that won&apos;t be tested by the Chromium project&apos;s continuous integration system otherwise.

&gt; WebCore/bindings/v8/WorkerContextExecutionProxy.cpp:60
&gt; +#if PLATFORM(CHROMIUM)

No need for PLATFORM(CHROMIUM) in bindings/v8.  Chromium is the only port that uses V8 currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778327</commentid>
    <comment_count>3</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-11-28 14:10:46 -0800</bug_when>
    <thetext>In order to build the webkit_unit_tests target it seems that I need to add V8 dependencies to the webkit_support and webkit_support_common targets in Chromium&apos;s webkit/support/webkit_support.gypi file. This is due to the #include &lt;v8.h&gt; added in Platform.h. I guess I need to get that change landed in Chromium and update Source/WebKit/chromium/DEPS before proceeding with this issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778350</commentid>
    <comment_count>4</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-11-28 14:36:03 -0800</bug_when>
    <thetext>I&apos;m a bit stuck here. It seems that I&apos;ll need to land a stub implementation of the Platform changes on the Chromium side and update Source/WebKit/chromium/DEPS before I can add the necessary tests to webkit_unit_tests. Is this a reasonable approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778367</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 14:47:07 -0800</bug_when>
    <thetext>I wonder if it would be better to send the notification out via a header in Source/WebKit/chromium/public.  Those headers already depend on v8.h, so we wouldn&apos;t be adding any extra dependencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778512</commentid>
    <comment_count>6</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-11-28 17:11:05 -0800</bug_when>
    <thetext>We currently have WebKitPlatformSupport (Source/WebKit/chromium/public/platform/WebKitPlatformSupport.h) which extends Platform and whose singleton instance is retrievable via WebKit::webKitPlatformSupport(). Would it be allowed to use that from Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778553</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 17:49:32 -0800</bug_when>
    <thetext>Sorry, we&apos;re in the process of deleting WebKitPlatformSupport.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778595</commentid>
    <comment_count>8</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-11-28 18:34:50 -0800</bug_when>
    <thetext>How about adding a new observer interface (WebWorkerObserver) that can be registered using a static method on WorkerThread (WebKit/Source/WebCore/workers/WorkerThread.h)?

It could then be exposed via a new WebKit class under Source/WebKit/chromium/public/platform similar to how WebKit::WebWorkerInfo::dedicatedWorkerCount() (WebKit/Source/WebKit/chromium/public/WebWorkerInfo.h) currently calls WebCore::WorkerThread::workerThreadCount().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779032</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-29 08:38:41 -0800</bug_when>
    <thetext>Something like that sounds plausible.  You probably want to talk with fishd about your patch.  I&apos;m going on vacation soon, so he&apos;s likely the one who will review your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780564</commentid>
    <comment_count>10</comment_count>
      <attachid>177057</attachid>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-11-30 17:11:14 -0800</bug_when>
    <thetext>Created attachment 177057
Proposed patch

This patch implements the observer approach via a new WebKit::WebWorkerScriptObserver interface and adds a new WebWorkerTest.WorkerBinding test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785174</commentid>
    <comment_count>11</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-12-06 13:07:33 -0800</bug_when>
    <thetext>Ping. Can someone review this? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785447</commentid>
    <comment_count>12</comment_count>
      <attachid>177057</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-06 17:22:53 -0800</bug_when>
    <thetext>Comment on attachment 177057
Proposed patch

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

I&apos;m sorry, but I&apos;m going on vacation and won&apos;t be reviewing patches again until January.  The mutex concerns me.  It doesn&apos;t seem worth having a mutex to support this feature.  I&apos;m afraid someone else will need to review this patch.

&gt; WebCore/bindings/v8/WorkerScriptController.cpp:67
&gt; +static Mutex&amp; observerMutex()

A mutex...  Hum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785860</commentid>
    <comment_count>13</comment_count>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2012-12-07 06:59:59 -0800</bug_when>
    <thetext>Thanks for taking the time Adam, hopefully fishd can help me finish this one up.

What specifically concerns you about the mutex? It will almost never be contested so there shouldn&apos;t be any noticeable performance impact. This is similar in concept to WebWorkerInfo::dedicatedWorkerCount() which also currently uses a mutex.

As an alternative to the mutex we could have WorkerScriptController::addObserver and removeObserver fail (return false) if dedicatedWorkerCount() &gt; 0. Would that be preferable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798635</commentid>
    <comment_count>14</comment_count>
      <attachid>181028</attachid>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2013-01-02 05:53:46 -0800</bug_when>
    <thetext>Created attachment 181028
Updated patch

This patch contains the following changes:

- Remove observerMutex.
- Pass the worker URL as a parameter to the WebWorkerScriptObserver callbacks.
- Ensure that calls to the WebWorkerScriptObserver callbacks are balanced.

Adam, please review when you have a chance. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798729</commentid>
    <comment_count>15</comment_count>
      <attachid>181028</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-02 10:48:05 -0800</bug_when>
    <thetext>Comment on attachment 181028
Updated patch

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

&gt; Platform/chromium/public/WebWorkerScriptObserver.h:35
&gt; +    class WebWorkerScriptObserver {

This shouldn&apos;t be indented.  I know some code in WebKit indents inside a namespace, but we&apos;re trying to slowly remove that style.

&gt; WebCore/bindings/v8/WorkerScriptController.cpp:278
&gt; +      return;

four-space indent

&gt; WebCore/bindings/v8/WorkerScriptController.cpp:286
&gt; +      return;

ditto

&gt; WebCore/bindings/v8/WorkerScriptController.h:45
&gt; +namespace WebKit {
&gt; +class WebWorkerScriptObserver;
&gt; +}

v8/WorkerScriptController.h isn&apos;t a Chromium-specific file (even though its only used in Chromium).  Therefore, it shouldn&apos;t depend on Chromium-specific platform types.

&gt; WebKit/chromium/tests/WebWorkerTest.cpp:135
&gt; +    bool got_create() { return m_got_create; }
&gt; +    bool got_release() { return m_got_release; }
&gt; +    bool got_callback() { return m_got_callback; }

These are in the wrong style.  We use WebKit style for code in WebKit.

&gt; WebKit/chromium/tests/WebWorkerTest.cpp:149
&gt; +        delete [] buf;

We shouldn&apos;t be calling new and delete manually.  Can&apos;t we use a smart point from either WTF or base?

&gt; WebKit/chromium/tests/data/worker_test.js:6
&gt;  Property changes on: WebKit\chromium\tests\data\worker_test.js
&gt;  ___________________________________________________________________
&gt;  Added: svn:eol-style
&gt;    + LF

Why are we making this property change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799317</commentid>
    <comment_count>16</comment_count>
      <attachid>181028</attachid>
    <who name="Marshall Greenblatt">marshall</who>
    <bug_when>2013-01-03 02:08:19 -0800</bug_when>
    <thetext>Comment on attachment 181028
Updated patch

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

&gt;&gt; WebCore/bindings/v8/WorkerScriptController.h:45
&gt;&gt; +}
&gt; 
&gt; v8/WorkerScriptController.h isn&apos;t a Chromium-specific file (even though its only used in Chromium).  Therefore, it shouldn&apos;t depend on Chromium-specific platform types.

A few questions:

1. We currently use WebKit types (WebKit::WebWorkerRunLoop) in v8/WorkerScriptController.cpp behind a PLATFORM(CHROMIUM) define. Would it be viable to continue using WebKit::WebWorkerScriptObserver in WorkerScriptController but move it behind this define?

2. Alternately, is there a good location/namespace to put an interface that will be used by WebCore/bindings/v8 and exposed via Platform/chromium/public?

If neither of the above are options I can introduce a new WebCore::WorkerScriptObserver interface that wraps the WebKit::WebWorkerScriptObserver interface. However, this makes it more complicated to unregister observers in WorkerScriptController because I can no longer directly compare pointers.

&gt;&gt; WebKit/chromium/tests/data/worker_test.js:6
&gt;&gt;    + LF
&gt; 
&gt; Why are we making this property change?

It was accidental, I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799618</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-03 13:36:30 -0800</bug_when>
    <thetext>I&apos;m sorry, but I don&apos;t have the bandwidth to finish reviewing this patch.  Other folks should feel free to review it, however.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176547</attachid>
            <date>2012-11-28 12:37:33 -0800</date>
            <delta_ts>2012-11-30 17:11:14 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>worker_bindings.patch</filename>
            <type>text/plain</type>
            <size>4233</size>
            <attacher name="Marshall Greenblatt">marshall</attacher>
            
              <data encoding="base64">SW5kZXg6IFBsYXRmb3JtL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFBsYXRmb3JtL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTM2MDQyKQorKysgUGxhdGZvcm0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTEtMjggIE1hcnNoYWxsIEdyZWVuYmxhdHQgIDxt
YXJzaGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBjdXN0b20gVjggYmluZGlu
Z3MgZm9yIFdlYldvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzMwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBuZXcgUGxhdGZvcm0gY2FsbGJhY2tzIHRoYXQgc3VwcG9ydCBjdXN0b20g
VjggSmF2YVNjcmlwdCBiaW5kaW5ncyBvbiB0aGUgV2ViV29ya2VyIFY4IGNvbnRleHQuCisKKyAg
ICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvUGxhdGZvcm0uaDoKKyAgICAgICAgKFBsYXRmb3JtKToK
KyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm06OmRpZENyZWF0ZVdvcmtlclNjcmlwdENvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybTo6d2lsbFJlbGVhc2VXb3JrZXJTY3JpcHRDb250
ZXh0KToKKwogMjAxMi0xMS0yOCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBBZGQgYmFzaWMgaW1wbGVtZW50YXRpb24gZm9yIE1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGUKSW5kZXg6IFBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9QbGF0Zm9y
bS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1BsYXRmb3JtLmgJ
KHJldmlzaW9uIDEzNDYzMCkKKysrIFBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9QbGF0Zm9ybS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4K
ICNlbmRpZgogCisjaWYgV0VCS0lUX1VTSU5HX1Y4DQorI2luY2x1ZGUgPHY4Lmg+DQorI2VuZGlm
CisKICNpbmNsdWRlICJXZWJBdWRpb0RldmljZS5oIgogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgog
I2luY2x1ZGUgIldlYkRhdGEuaCIKQEAgLTQzNiw2ICs0NDAsMTMgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGRpZFN0YXJ0V29ya2VyUnVuTG9vcChjb25zdCBXZWJXb3JrZXJSdW5Mb29w
JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BXb3JrZXJSdW5Mb29wKGNvbnN0IFdlYldv
cmtlclJ1bkxvb3AmKSB7IH0KKworICAgIC8vIE5vdGlmaWVzIHRoYXQgYSBuZXcgc2NyaXB0IGNv
bnRleHQgaGFzIGJlZW4gY3JlYXRlZCBmb3IgYSB3b3JrZXIuDQorICAgIC8vIFRoaXMgd2lsbCBi
ZSBjYWxsZWQgb25seSBvbmNlIHBlciB3b3JrZXIgY29udGV4dC4NCisgICAgdmlydHVhbCB2b2lk
IGRpZENyZWF0ZVdvcmtlclNjcmlwdENvbnRleHQoY29uc3QgV2ViV29ya2VyUnVuTG9vcCYsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KSB7IH0NCisNCisgICAgLy8gV2ViS2l0IGlzIGFib3V0IHRv
IHJlbGVhc2UgaXRzIHJlZmVyZW5jZSB0byBhIHY4IGNvbnRleHQgZm9yIGEgd29ya2VyLg0KKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFJlbGVhc2VXb3JrZXJTY3JpcHRDb250ZXh0KGNvbnN0IFdlYldv
cmtlclJ1bkxvb3AmLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PikgeyB9CiAKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIH5QbGF0Zm9ybSgpIHsgfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2MDQyKQorKysgV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMS0y
OCAgTWFyc2hhbGwgR3JlZW5ibGF0dCAgPG1hcnNoYWxsQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBTdXBwb3J0IGN1c3RvbSBWOCBiaW5kaW5ncyBmb3IgV2ViV29ya2VycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMzA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyBQbGF0Zm9ybSBjYWxs
YmFja3MgdGhhdCBzdXBwb3J0IGN1c3RvbSBWOCBKYXZhU2NyaXB0IGJpbmRpbmdzIG9uIHRoZSBX
ZWJXb3JrZXIgVjggY29udGV4dC4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OmRpc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5Ojppbml0aWFsaXplSWZOZWVkZWQpOgorCiAyMDEyLTExLTI4ICBBbGV4YW5k
cnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFJlZ2lvbnNd
IEF1dG8taGVpZ2h0IHJlZ2lvbnMgd2lsbCBub3QgY2FsY3VsYXRlIHRoZSBoZWlnaHQgY29ycmVj
dGx5IHdoZW4gdGhlIGNvbnRlbnQgY2hhbmdlcyBkeW5hbWljYWxseQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCShy
ZXZpc2lvbiAxMzQ2MzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDE1IEBACiAjaW5jbHVk
ZSAiV29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtl
clNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRl
ICJXcmFwcGVyVHlwZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNs
dWRlIDxwdWJsaWMvV2ViV29ya2VyUnVuTG9vcC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIHZvaWQgcmVwb3J0RmF0YWxFcnJvckluVjgoY29uc3QgY2hhciogbG9j
YXRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCkBAIC05OCw2ICsxMDQsMTAgQEAgV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5Ojp+V29ya2VyQ29udAogCiB2b2lkIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6ZGlzcG9zZSgpCiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT53aWxsUmVsZWFzZVdvcmtlclNjcmlwdENvbnRleHQo
V2ViS2l0OjpXZWJXb3JrZXJSdW5Mb29wKCZtX3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT5ydW5M
b29wKCkpLCBtX2NvbnRleHQuZ2V0KCkpOworI2VuZGlmCisKICAgICBtX3BlckNvbnRleHREYXRh
LmNsZWFyKCk7CiAgICAgbV9jb250ZXh0LmNsZWFyKCk7CiB9CkBAIC0xNzUsNiArMTg1LDEwIEBA
IGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0aWEKICAgICAvLyBJbnNlcnQg
dGhlIG9iamVjdCBpbnN0YW5jZSBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBzaGFkb3cgb2JqZWN0
LgogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsT2JqZWN0ID0gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7CiAg
ICAgZ2xvYmFsT2JqZWN0LT5TZXRQcm90b3R5cGUoanNXb3JrZXJDb250ZXh0KTsKKworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+ZGlkQ3Jl
YXRlV29ya2VyU2NyaXB0Q29udGV4dChXZWJLaXQ6OldlYldvcmtlclJ1bkxvb3AoJm1fd29ya2Vy
Q29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKSksIGNvbnRleHQpOworI2VuZGlmCiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0K
</data>
<flag name="review"
          id="192370"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177057</attachid>
            <date>2012-11-30 17:11:14 -0800</date>
            <delta_ts>2013-01-02 05:53:46 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>worker_bindings2.patch</filename>
            <type>text/plain</type>
            <size>23519</size>
            <attacher name="Marshall Greenblatt">marshall</attacher>
            
              <data encoding="base64">SW5kZXg6IFBsYXRmb3JtL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFBsYXRmb3JtL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTM2Mjk4KQorKysgUGxhdGZvcm0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMzAgIE1hcnNoYWxsIEdyZWVuYmxhdHQgIDxt
YXJzaGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBjdXN0b20gVjggYmluZGlu
Z3MgZm9yIFdlYldvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzMwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIG5ldyBXZWJXb3JrZXJTY3JpcHRPYnNlcnZlciBpbnRlcmZhY2UgdGhh
dCBzdXBwb3J0cyBjdXN0b20gVjggSmF2YVNjcmlwdCBiaW5kaW5ncyBvbiB0aGUgV2ViV29ya2Vy
IFY4IGNvbnRleHQuCisKKyAgICAgICAgKiBQbGF0Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9t
aXVtL3B1YmxpYy9XZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJXb3JrZXJTY3JpcHRPYnNlcnZlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlclNjcmlwdE9ic2VydmVyOjpkaWRDcmVhdGVXb3JrZXJTY3JpcHRDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXI6OndpbGxSZWxlYXNl
V29ya2VyU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlclNjcmlwdE9i
c2VydmVyOjp+V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIpOgorCiAyMDEyLTExLTI4ICBUb21teSBX
aWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBiYXNpYyBpbXBs
ZW1lbnRhdGlvbiBmb3IgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZQpJbmRleDogUGxh
dGZvcm0vUGxhdGZvcm0uZ3lwaQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFBsYXRmb3JtL1BsYXRmb3JtLmd5
cGkJKHJldmlzaW9uIDEzNjA0MCkKKysrIFBsYXRmb3JtL1BsYXRmb3JtLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Niw2ICsxNDYsNyBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJWaWRlb0ZyYW1lLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0Zy
YW1lUHJvdmlkZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYldvcmtlclJ1
bkxvb3AuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYldvcmtlclNjcmlwdE9i
c2VydmVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9hbmRyb2lkL1dlYlNhbmRi
b3hTdXBwb3J0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9hbmRyb2lkL1dlYlRo
ZW1lRW5naW5lLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9kZWZhdWx0L1dlYlRo
ZW1lRW5naW5lLmgnLApJbmRleDogUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYldvcmtlclNj
cmlwdE9ic2VydmVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIuaAkocmV2aXNpb24gMCkKKysrIFBsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJXb3JrZXJTY3JpcHRPYnNlcnZlcl9oCisj
ZGVmaW5lIFdlYldvcmtlclNjcmlwdE9ic2VydmVyX2gKKworI2luY2x1ZGUgPHY4Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCisgICAgY2xhc3MgV2ViV29ya2VyUnVuTG9vcDsKKworICAgIGNs
YXNzIFdlYldvcmtlclNjcmlwdE9ic2VydmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIE5v
dGlmaWVzIHRoYXQgYSBuZXcgc2NyaXB0IGNvbnRleHQgaGFzIGJlZW4gY3JlYXRlZCBmb3IgYSB3
b3JrZXIuCisgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciB3b3Jr
ZXIgY29udGV4dC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVdvcmtlclNjcmlwdENv
bnRleHQoY29uc3QgV2ViV29ya2VyUnVuTG9vcCYsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KSB7
IH0KKworICAgICAgICAvLyBXZWJLaXQgaXMgYWJvdXQgdG8gcmVsZWFzZSBpdHMgcmVmZXJlbmNl
IHRvIGEgdjggY29udGV4dCBmb3IgYSB3b3JrZXIuCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxs
UmVsZWFzZVdvcmtlclNjcmlwdENvbnRleHQoY29uc3QgV2ViV29ya2VyUnVuTG9vcCYsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCB+V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIoKSB7IH0KKyAgICB9OworCit9ICAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgoNClByb3BlcnR5IGNoYW5nZXMgb246IFBsYXRmb3JtXGNocm9t
aXVtXHB1YmxpY1xXZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oDQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpBZGRlZDog
c3ZuOmVvbC1zdHlsZQ0KICAgKyBMRg0KDQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2Mjk4KQorKysgV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0xMS0zMCAg
TWFyc2hhbGwgR3JlZW5ibGF0dCAgPG1hcnNoYWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
dXBwb3J0IGN1c3RvbSBWOCBiaW5kaW5ncyBmb3IgV2ViV29ya2VycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMzA2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IFdlYldvcmtlclNjcmlw
dE9ic2VydmVyIGludGVyZmFjZSB0aGF0IHN1cHBvcnRzIGN1c3RvbSBWOCBKYXZhU2NyaXB0IGJp
bmRpbmdzIG9uIHRoZSBXZWJXb3JrZXIgVjggY29udGV4dC4KKworICAgICAgICAqIGJpbmRpbmdz
L3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6ZGlzcG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUNvbnRleHRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRy
b2xsZXI6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRy
b2xsZXI6OnJlbW92ZU9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENv
bnRyb2xsZXI6Om5vdGlmeURpZENyZWF0ZVdvcmtlclNjcmlwdENvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6bm90aWZ5V2lsbFJlbGVhc2VXb3JrZXJT
Y3JpcHRDb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV29ya2VyU2NyaXB0Q29udHJvbGxl
cik6CisKIDIwMTItMTEtMzAgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM3OTAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHANCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxMzYwNDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMCArNTEsMjcgQEAKICNpZiBQTEFURk9S
TShDSFJPTUlVTSkKICNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDxwdWJs
aWMvV2ViV29ya2VyUnVuTG9vcC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJXb3JrZXJTY3JpcHRP
YnNlcnZlci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsK
Kworc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYldvcmtlclNjcmlwdE9ic2VydmVyKj4mIG9ic2Vy
dmVyVmVjdG9yKCkKK3sKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoVmVjdG9yPFdl
YktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqPiYsIG9ic2VydmVycyA9ICpuZXcgVmVjdG9y
PFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqPik7CisgICAgcmV0dXJuIG9ic2VydmVy
czsKK30KKworc3RhdGljIE11dGV4JiBvYnNlcnZlck11dGV4KCkKK3sKKyAgICBBdG9taWNhbGx5
SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgmLCBtdXRleCA9ICpuZXcgTXV0ZXgpOworICAgIHJldHVy
biBtdXRleDsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OldvcmtlclNjcmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCkKICAg
ICA6IG1fd29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwgbV9pc29sYXRlKHY4OjpJ
c29sYXRlOjpOZXcoKSkKQEAgLTg2LDYgKzEwMyw4IEBAIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
On5Xb3JrZXJTY3JpcHRDb24KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNwb3Nl
Q29udGV4dCgpCiB7CisgICAgbm90aWZ5V2lsbFJlbGVhc2VXb3JrZXJTY3JpcHRDb250ZXh0KCk7
CisKICAgICBtX3BlckNvbnRleHREYXRhLmNsZWFyKCk7CiAgICAgbV9jb250ZXh0LmNsZWFyKCk7
CiB9CkBAIC0xMzMsNiArMTUyLDggQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0
aWFsaXplQwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsT2JqZWN0ID0gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUo
KSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5TZXRQcm90b3R5cGUoanNXb3JrZXJDb250ZXh0KTsKIAor
ICAgIG5vdGlmeURpZENyZWF0ZVdvcmtlclNjcmlwdENvbnRleHQoKTsKKwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0yNTQsNiArMjc1LDUzIEBAIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIFdv
cmtlclNjcmlwdENvbnQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoZ2xvYmFsKTsKICAgICByZXR1
cm4gd29ya2VyQ29udGV4dC0+c2NyaXB0KCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJv
bGxlcjo6YWRkT2JzZXJ2ZXIoV2ViS2l0OjpXZWJXb3JrZXJTY3JpcHRPYnNlcnZlciogb2JzZXJ2
ZXIpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhvYnNlcnZlck11dGV4KCkpOworICAgIG9ic2Vy
dmVyVmVjdG9yKCkuYXBwZW5kKG9ic2VydmVyKTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpyZW1vdmVPYnNlcnZlcihXZWJLaXQ6OldlYldvcmtlclNjcmlwdE9ic2VydmVyKiBv
YnNlcnZlcikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG9ic2VydmVyTXV0ZXgoKSk7CisgICAg
VmVjdG9yPFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJzID0gb2Jz
ZXJ2ZXJWZWN0b3IoKTsKKyAgICBzaXplX3QgcG9zID0gb2JzZXJ2ZXJzLmZpbmQob2JzZXJ2ZXIp
OworICAgIGlmIChwb3MgIT0gbm90Rm91bmQpCisgICAgICAgIG9ic2VydmVycy5yZW1vdmUocG9z
KTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpub3RpZnlEaWRDcmVhdGVXb3Jr
ZXJTY3JpcHRDb250ZXh0KCkKK3sKKyAgICBWZWN0b3I8V2ViS2l0OjpXZWJXb3JrZXJTY3JpcHRP
YnNlcnZlcio+IG9ic2VydmVyc19jb3B5OworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
ayhvYnNlcnZlck11dGV4KCkpOworICAgICAgICBWZWN0b3I8V2ViS2l0OjpXZWJXb3JrZXJTY3Jp
cHRPYnNlcnZlcio+JiBvYnNlcnZlcnMgPSBvYnNlcnZlclZlY3RvcigpOworICAgICAgICBpZiAo
b2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBvYnNl
cnZlcnNfY29weSA9IG9ic2VydmVyczsKKyAgICB9CisKKyAgICBmb3IgKFZlY3RvcjxXZWJLaXQ6
OldlYldvcmtlclNjcmlwdE9ic2VydmVyKj46Oml0ZXJhdG9yIGkgPSBvYnNlcnZlcnNfY29weS5i
ZWdpbigpOyBpICE9IG9ic2VydmVyc19jb3B5LmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPmRp
ZENyZWF0ZVdvcmtlclNjcmlwdENvbnRleHQoV2ViS2l0OjpXZWJXb3JrZXJSdW5Mb29wKCZtX3dv
cmtlckNvbnRleHQtPnRocmVhZCgpLT5ydW5Mb29wKCkpLCBtX2NvbnRleHQuZ2V0KCkpOworfQor
Cit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6Om5vdGlmeVdpbGxSZWxlYXNlV29ya2VyU2Ny
aXB0Q29udGV4dCgpCit7CisgICAgVmVjdG9yPFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2
ZXIqPiBvYnNlcnZlcnNfY29weTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sob2Jz
ZXJ2ZXJNdXRleCgpKTsKKyAgICAgICAgVmVjdG9yPFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2Jz
ZXJ2ZXIqPiYgb2JzZXJ2ZXJzID0gb2JzZXJ2ZXJWZWN0b3IoKTsKKyAgICAgICAgaWYgKG9ic2Vy
dmVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgb2JzZXJ2ZXJz
X2NvcHkgPSBvYnNlcnZlcnM7CisgICAgfQorCisgICAgZm9yIChWZWN0b3I8V2ViS2l0OjpXZWJX
b3JrZXJTY3JpcHRPYnNlcnZlcio+OjppdGVyYXRvciBpID0gb2JzZXJ2ZXJzX2NvcHkuYmVnaW4o
KTsgaSAhPSBvYnNlcnZlcnNfY29weS5lbmQoKTsgKytpKQorICAgICAgICAoKmkpLT53aWxsUmVs
ZWFzZVdvcmtlclNjcmlwdENvbnRleHQoV2ViS2l0OjpXZWJXb3JrZXJSdW5Mb29wKCZtX3dvcmtl
ckNvbnRleHQtPnRocmVhZCgpLT5ydW5Mb29wKCkpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMzYwNDApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsMTAgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFBvc2l0aW9uLmg+CiAKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViV29ya2VyU2Ny
aXB0T2JzZXJ2ZXI7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNjcmlw
dFNvdXJjZUNvZGU7CkBAIC05NSw5ICs5OSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUgb2YgdGhlIGNvbnRleHQuCiAgICAgICAgIHY4
OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD46Ok5ldyhtX2NvbnRleHQuZ2V0KCkpOyB9CiAKKyAgICAgICAgc3RhdGljIHZvaWQgYWRk
T2JzZXJ2ZXIoV2ViS2l0OjpXZWJXb3JrZXJTY3JpcHRPYnNlcnZlciopOworICAgICAgICBzdGF0
aWMgdm9pZCByZW1vdmVPYnNlcnZlcihXZWJLaXQ6OldlYldvcmtlclNjcmlwdE9ic2VydmVyKik7
CisKICAgICBwcml2YXRlOgogICAgICAgICBib29sIGluaXRpYWxpemVDb250ZXh0SWZOZWVkZWQo
KTsKICAgICAgICAgdm9pZCBkaXNwb3NlQ29udGV4dCgpOworCisgICAgICAgIHZvaWQgbm90aWZ5
RGlkQ3JlYXRlV29ya2VyU2NyaXB0Q29udGV4dCgpOworICAgICAgICB2b2lkIG5vdGlmeVdpbGxS
ZWxlYXNlV29ya2VyU2NyaXB0Q29udGV4dCgpOwogCiAgICAgICAgIFdvcmtlckNvbnRleHQqIG1f
d29ya2VyQ29udGV4dDsKICAgICAgICAgdjg6Oklzb2xhdGUqIG1faXNvbGF0ZTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMzYyOTgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTItMTEtMzAgIE1hcnNoYWxsIEdy
ZWVuYmxhdHQgIDxtYXJzaGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBjdXN0
b20gVjggYmluZGluZ3MgZm9yIFdlYldvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzMwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBXZWJXb3JrZXJTY3JpcHRPYnNlcnZlciBp
bnRlcmZhY2UgdGhhdCBzdXBwb3J0cyBjdXN0b20gVjggSmF2YVNjcmlwdCBiaW5kaW5ncyBvbiB0
aGUgV2ViV29ya2VyIFY4IGNvbnRleHQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAg
ICAgKiBwdWJsaWMvV2ViV29ya2VySW5mby5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYldvcmtlckluZm8pOgorICAgICAgICAqIHB1YmxpYy9XZWJXb3JrZXJTY3JpcHRPYnNlcnZl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW5mby5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYldvcmtlckluZm86OmFkZFNjcmlwdE9ic2VydmVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViV29ya2VySW5mbzo6cmVtb3ZlU2NyaXB0T2JzZXJ2ZXIpOgorICAgICAgICAqIHRlc3Rz
L1dlYldvcmtlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJXb3JrZXJUZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyVGVzdDo6V2ViV29ya2Vy
VGVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlclRlc3Q6OlRlYXJEb3duKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV29ya2VyVGVzdDo6cmVnaXN0ZXJNb2NrZWRIdHRwVVJMTG9hZCk6Cisg
ICAgICAgIChXb3JrZXJCaW5kaW5nU2NyaXB0T2JzZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
b3JrZXJCaW5kaW5nU2NyaXB0T2JzZXJ2ZXI6OldvcmtlckJpbmRpbmdTY3JpcHRPYnNlcnZlcik6
CisgICAgICAgIChXZWJLaXQ6OldvcmtlckJpbmRpbmdTY3JpcHRPYnNlcnZlcjo6c2lnbmFsKToK
KyAgICAgICAgKFdlYktpdDo6V29ya2VyQmluZGluZ1NjcmlwdE9ic2VydmVyOjp3YWl0KToKKyAg
ICAgICAgKFdlYktpdDo6V29ya2VyQmluZGluZ1NjcmlwdE9ic2VydmVyOjpnb3RfY3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V29ya2VyQmluZGluZ1NjcmlwdE9ic2VydmVyOjpnb3RfcmVsZWFz
ZSk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckJpbmRpbmdTY3JpcHRPYnNlcnZlcjo6Z290X2Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyQmluZGluZ1NjcmlwdE9ic2VydmVyOjpG
dW5jdGlvbkNhbGxiYWNrSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvZGF0YS93b3JrZXJfdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3dvcmtlcl90ZXN0LmpzOiBBZGRlZC4KKwogMjAxMi0xMS0zMCAgU3RlcGhlbiBXaGl0ZSAg
PHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFN1cHByZXNz
IHRoZSBuZXcgc2VwYXJhYmxlIG1hc2sgYmx1cnMgaW4gc2tpYSB1bnRpbCB0aGUgdGVzdHMgY2Fu
IGJlIHJlYmFzZWxpbmVkLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCShyZXZpc2lvbiAxMzYwNDAp
CisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2
ICsxMjMsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlVSTFJlcXVlc3RUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvV2ViVVJMUmVzcG9uc2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvV2ViVmlld1Rlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9XZWJXb3JrZXJUZXN0
LmNwcCcsCiAgICAgICAgIF0sCiAKICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckluZm8uaA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VySW5mby5oCShyZXZpc2lvbiAxMzYwNDApCisrKyBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOSArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYldvcmtlclNj
cmlwdE9ic2VydmVyOworCiBjbGFzcyBXZWJXb3JrZXJJbmZvIHsKIHB1YmxpYzoKICAgICBXRUJL
SVRfRVhQT1JUIHN0YXRpYyB1bnNpZ25lZCBkZWRpY2F0ZWRXb3JrZXJDb3VudCgpOworCisgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGRTY3JpcHRPYnNlcnZlcihXZWJXb3JrZXJTY3Jp
cHRPYnNlcnZlciopOworICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgcmVtb3ZlU2NyaXB0
T2JzZXJ2ZXIoV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqKTsKIH07CiAKIH0KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIuaAkocmV2
aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VyU2NyaXB0T2JzZXJ2
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICIu
Li8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIu
aCIKDQpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRcY2hyb21pdW1ccHVibGljXFdlYldvcmtl
clNjcmlwdE9ic2VydmVyLmgNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCkFkZGVkOiBzdm46ZW9sLXN0eWxlDQogICAr
IExGDQoNCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckluZm8uY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbmZvLmNwcAkocmV2aXNp
b24gMTM2MDQwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYldvcmtlckluZm8uaCIKIAorI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0z
OCw2ICszOSwxNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVuc2lnbmVkIFdlYldvcmtlckluZm86
OmRlZGljYXRlZFdvcmtlckNvdW50KCkgCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OldvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkQ291bnQoKTsKK30KKwordm9pZCBXZWJXb3JrZXJJbmZvOjphZGRT
Y3JpcHRPYnNlcnZlcihXZWJXb3JrZXJTY3JpcHRPYnNlcnZlciogb2JzZXJ2ZXIpDQorew0KKyAg
ICBXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjphZGRPYnNlcnZlcihvYnNlcnZlcik7
DQorfQ0KKw0KK3ZvaWQgV2ViV29ya2VySW5mbzo6cmVtb3ZlU2NyaXB0T2JzZXJ2ZXIoV2ViV29y
a2VyU2NyaXB0T2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIFdlYkNvcmU6OldvcmtlclNjcmlw
dENvbnRyb2xsZXI6OnJlbW92ZU9ic2VydmVyKG9ic2VydmVyKTsKIH0KIAogfQpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYldvcmtlclRlc3QuY3BwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYldvcmtlclRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYldvcmtlclRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisK
KyNpbmNsdWRlICJGcmFtZVRlc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiVVJMVGVzdEhlbHBlcnMu
aCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorI2luY2x1ZGUgIldlYldvcmtlckluZm8uaCIK
KyNpbmNsdWRlICJXZWJXb3JrZXJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyU2NyaXB0
T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJ2OC5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgV2ViV29ya2VyVGVzdCA6IHB1Ymxp
YyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJXb3JrZXJUZXN0KCkgOiBtX2Jhc2VV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vIikge30KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93
bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6VW5yZWdpc3RlckFsbE1vY2tlZFVS
THMoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkSHR0cFVSTExvYWQoY29uc3Qg
c3RkOjpzdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZVR5cGUgPSAidGV4
dC9odG1sIikKKyAgICB7CisgICAgICAgIFVSTFRlc3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVS
TEZyb21CYXNlVVJMKFdlYlN0cmluZzo6ZnJvbVVURjgobV9iYXNlVVJMLmNfc3RyKCkpLCBXZWJT
dHJpbmc6OmZyb21VVEY4KGZpbGVOYW1lLmNfc3RyKCkpLCBXZWJTdHJpbmc6OmZyb21VVEY4KG1p
bWVUeXBlLmNfc3RyKCkpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGQ6OnN0cmluZyBt
X2Jhc2VVUkw7Cit9OworCitjbGFzcyBXb3JrZXJCaW5kaW5nU2NyaXB0T2JzZXJ2ZXIgOiBwdWJs
aWMgV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIgeworcHVibGljOgorICAgIFdvcmtlckJpbmRpbmdT
Y3JpcHRPYnNlcnZlcigpIDogbV9jb250aW51ZShmYWxzZSksIG1fZ290X2NyZWF0ZShmYWxzZSks
IG1fZ290X3JlbGVhc2UoZmFsc2UpLCBtX2dvdF9jYWxsYmFjayhmYWxzZSksIG1fcnVuX2xvb3Ao
TlVMTCkge30KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVXb3JrZXJTY3JpcHRDb250ZXh0
KGNvbnN0IFdlYldvcmtlclJ1bkxvb3AmIHJ1bl9sb29wLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG1fZ290X2Ny
ZWF0ZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShtX2dvdF9yZWxlYXNlKTsKKworICAgICAgICBt
X3J1bl9sb29wID0gbmV3IFdlYldvcmtlclJ1bkxvb3AocnVuX2xvb3ApOworICAgICAgICBtX2Nv
bnRleHQgPSB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0KTsKKworICAg
ICAgICAvLyBDcmVhdGUgdGhlIFY4IGZ1bmN0aW9uIGJpbmRpbmcgdGhhdCB3aWxsIGJlIGV4ZWN1
dGVkIGZyb20gdGhlIFdlYldvcmtlci4KKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9z
Y29wZTsKKyAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7
CisKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBmdW5jX25hbWUgPSB2ODo6U3RyaW5n
OjpOZXcoInRlc3RfYmluZGluZyIpOworCisgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdG1wbCA9IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKTsKKyAgICAgICAgdG1w
bC0+U2V0Q2FsbEhhbmRsZXIoV29ya2VyQmluZGluZ1NjcmlwdE9ic2VydmVyOjpGdW5jdGlvbkNh
bGxiYWNrSW1wbCwgdjg6OkV4dGVybmFsOjpOZXcodGhpcykpOworICAgICAgICB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPiBmdW5jID0gdG1wbC0+R2V0RnVuY3Rpb24oKTsKKyAgICAgICAgZnVuYy0+
U2V0TmFtZShmdW5jX25hbWUpOworCisgICAgICAgIGNvbnRleHQtPkdsb2JhbCgpLT5TZXQoZnVu
Y19uYW1lLCBmdW5jKTsKKworICAgICAgICBtX2dvdF9jcmVhdGUgPSB0cnVlOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVsZWFzZVdvcmtlclNjcmlwdENvbnRleHQoY29uc3QgV2Vi
V29ya2VyUnVuTG9vcCYgcnVuX2xvb3AsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQp
IE9WRVJSSURFCisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShtX2dvdF9jcmVhdGUpOworICAg
ICAgICBFWFBFQ1RfRkFMU0UobV9nb3RfcmVsZWFzZSk7CisgICAgICAgIEVYUEVDVF9FUSgqbV9y
dW5fbG9vcCwgcnVuX2xvb3ApOworICAgICAgICBFWFBFQ1RfRVEobV9jb250ZXh0LCBjb250ZXh0
KTsKKworICAgICAgICBkZWxldGUgbV9ydW5fbG9vcDsKKyAgICAgICAgbV9ydW5fbG9vcCA9IE5V
TEw7CisKKyAgICAgICAgbV9jb250ZXh0LkRpc3Bvc2UoKTsKKyAgICAgICAgbV9jb250ZXh0LkNs
ZWFyKCk7CisKKyAgICAgICAgbV9nb3RfcmVsZWFzZSA9IHRydWU7CisgICAgICAgIHNpZ25hbCgp
OworICAgIH0KKworICAgIHZvaWQgc2lnbmFsKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9tdXRleCk7CisgICAgICAgIG1fY29udGludWUgPSB0cnVlOworICAgICAgICBtX2Nv
bmRpdGlvbi5zaWduYWwoKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXQoKQorICAgIHsKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7
CisgICAgICAgICAgICBpZiAobV9jb250aW51ZSkgeworICAgICAgICAgICAgICAgIG1fY29udGlu
dWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9tdXRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGdvdF9jcmVhdGUoKSB7IHJldHVybiBtX2dvdF9jcmVhdGU7IH0KKyAgICBib29sIGdv
dF9yZWxlYXNlKCkgeyByZXR1cm4gbV9nb3RfcmVsZWFzZTsgfQorICAgIGJvb2wgZ290X2NhbGxi
YWNrKCkgeyByZXR1cm4gbV9nb3RfY2FsbGJhY2s7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IEZ1bmN0aW9uQ2FsbGJhY2tJbXBsKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9zY29wZTsKKwor
ICAgICAgICBFWFBFQ1RfRVEoMSwgYXJncy5MZW5ndGgoKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGFyZ3NbMF0tPklzU3RyaW5nKCkpOworCisgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
dmFsdWUgPSBhcmdzWzBdLT5Ub1N0cmluZygpOworICAgICAgICBpbnQgbGVuID0gdmFsdWUtPlV0
ZjhMZW5ndGgoKTsKKyAgICAgICAgY2hhciogYnVmID0gbmV3IGNoYXJbbGVuICsgMV07CisgICAg
ICAgIHZhbHVlLT5Xcml0ZVV0ZjgoYnVmLCBsZW4gKyAxKTsKKyAgICAgICAgRVhQRUNUX1NUUkVR
KCJhYmMxMjMiLCBidWYpOworICAgICAgICBkZWxldGUgW10gYnVmOworCisgICAgICAgIFdvcmtl
ckJpbmRpbmdTY3JpcHRPYnNlcnZlciogb2JzZXJ2ZXIgPSBzdGF0aWNfY2FzdDxXb3JrZXJCaW5k
aW5nU2NyaXB0T2JzZXJ2ZXIqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFs
dWUoKSk7CisgICAgICAgIG9ic2VydmVyLT5tX2dvdF9jYWxsYmFjayA9IHRydWU7CisgICAgICAg
IG9ic2VydmVyLT5zaWduYWwoKTsKKworICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB9
CisKKyAgICBNdXRleCBtX211dGV4OworICAgIFRocmVhZENvbmRpdGlvbiBtX2NvbmRpdGlvbjsK
KyAgICBib29sIG1fY29udGludWU7CisKKyAgICBib29sIG1fZ290X2NyZWF0ZTsKKyAgICBib29s
IG1fZ290X3JlbGVhc2U7CisgICAgYm9vbCBtX2dvdF9jYWxsYmFjazsKKyAgICBXZWJXb3JrZXJS
dW5Mb29wKiBtX3J1bl9sb29wOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2Nv
bnRleHQ7Cit9OworCitURVNUX0YoV2ViV29ya2VyVGVzdCwgV29ya2VyQmluZGluZykKK3sKKyAg
ICBXb3JrZXJCaW5kaW5nU2NyaXB0T2JzZXJ2ZXIgc2NyaXB0X29ic2VydmVyOworCisgICAgcmVn
aXN0ZXJNb2NrZWRIdHRwVVJMTG9hZCgid29ya2VyX3Rlc3QuaHRtbCIpOworICAgIHJlZ2lzdGVy
TW9ja2VkSHR0cFVSTExvYWQoIndvcmtlcl90ZXN0LmpzIiwgInRleHQvamF2YXNjcmlwdCIpOwor
CisgICAgV2ViV29ya2VySW5mbzo6YWRkU2NyaXB0T2JzZXJ2ZXIoJnNjcmlwdF9vYnNlcnZlcik7
CisgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdB
bmRMb2FkKG1fYmFzZVVSTCArICJ3b3JrZXJfdGVzdC5odG1sIiwgdHJ1ZSk7CisKKyAgICAvLyBX
YWl0IGZvciB0aGUgVjggZnVuY3Rpb24gY2FsbGJhY2suCisgICAgc2NyaXB0X29ic2VydmVyLndh
aXQoKTsKKworICAgIEVYUEVDVF9UUlVFKHNjcmlwdF9vYnNlcnZlci5nb3RfY3JlYXRlKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHNjcmlwdF9vYnNlcnZlci5nb3RfY2FsbGJhY2soKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHNjcmlwdF9vYnNlcnZlci5nb3RfcmVsZWFzZSgpKTsKKworICAgIC8vIENsb3Nl
IHRoZSBXZWJWaWV3LiBUaGlzIHNob3VsZCBkZXN0cm95IHRoZSBXZWJXb3JrZXIgdGhyZWFkLgor
ICAgIHdlYlZpZXctPmNsb3NlKCk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgV2ViV29ya2VyIGNv
bnRleHQgdG8gYmUgcmVsZWFzZWQuCisgICAgc2NyaXB0X29ic2VydmVyLndhaXQoKTsKKworICAg
IEVYUEVDVF9UUlVFKHNjcmlwdF9vYnNlcnZlci5nb3RfcmVsZWFzZSgpKTsKKworICAgIFdlYldv
cmtlckluZm86OnJlbW92ZVNjcmlwdE9ic2VydmVyKCZzY3JpcHRfb2JzZXJ2ZXIpOworfQorCit9
IC8vIG5hbWVzcGFjZQoNClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFxjaHJvbWl1bVx0ZXN0
c1xXZWJXb3JrZXJUZXN0LmNwcA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KQWRkZWQ6IHN2bjplb2wtc3R5bGUNCiAg
ICsgTEYNCg0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3dvcmtlcl90ZXN0Lmh0
bWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS93b3JrZXJfdGVz
dC5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvd29ya2Vy
X3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACis8aHRtbD4KKyAgPGJvZHk+
CisgICAgPHNjcmlwdD4KKyAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCd3b3JrZXJfdGVz
dC5qcycpOworICAgIDwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+Cg0KUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViS2l0XGNocm9taXVtXHRlc3RzXGRhdGFcd29ya2VyX3Rlc3QuaHRtbA0KX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXw0KQWRkZWQ6IHN2bjplb2wtc3R5bGUNCiAgICsgTEYNCg0KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3dvcmtlcl90ZXN0LmpzDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvd29ya2VyX3Rlc3QuanMJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS93b3JrZXJfdGVzdC5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSBAQAorc2VsZi50ZXN0X2JpbmRpbmcoJ2FiYzEyMycpOwoNClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYktpdFxjaHJvbWl1bVx0ZXN0c1xkYXRhXHdvcmtlcl90ZXN0LmpzDQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
DQpBZGRlZDogc3ZuOmVvbC1zdHlsZQ0KICAgKyBMRg0KDQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181028</attachid>
            <date>2013-01-02 05:53:46 -0800</date>
            <delta_ts>2013-01-03 02:08:19 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>worker_bindings3.patch</filename>
            <type>text/plain</type>
            <size>24305</size>
            <attacher name="Marshall Greenblatt">marshall</attacher>
            
              <data encoding="base64">SW5kZXg6IFBsYXRmb3JtL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFBsYXRmb3JtL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTM4NjE2KQorKysgUGxhdGZvcm0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMDEtMDIgIE1hcnNoYWxsIEdyZWVuYmxhdHQgIDxt
YXJzaGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBjdXN0b20gVjggYmluZGlu
Z3MgZm9yIFdlYldvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzMwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIG5ldyBXZWJXb3JrZXJTY3JpcHRPYnNlcnZlciBpbnRlcmZhY2UgdGhh
dCBzdXBwb3J0cyBjdXN0b20gVjggSmF2YVNjcmlwdCBiaW5kaW5ncyBvbiB0aGUgV2ViV29ya2Vy
IFY4IGNvbnRleHQuCisKKyAgICAgICAgKiBQbGF0Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9t
aXVtL3B1YmxpYy9XZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJXb3JrZXJTY3JpcHRPYnNlcnZlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlclNjcmlwdE9ic2VydmVyOjpkaWRDcmVhdGVXb3JrZXJTY3JpcHRDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXI6OndpbGxSZWxlYXNl
V29ya2VyU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlclNjcmlwdE9i
c2VydmVyOjp+V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIpOgorCiAyMDEyLTEyLTI0ICBBbGV4ZWkg
RmlsaXBwb3YgIDxhbHBoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBh
ZGQgYXN5bmMgQVBJIGZvciBwYXNzaW5nIHJlbmRlcmVyIHByb2Nlc3MgbWVtb3J5IHN0YXRzCklu
ZGV4OiBQbGF0Zm9ybS9QbGF0Zm9ybS5neXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gUGxhdGZvcm0vUGxh
dGZvcm0uZ3lwaQkocmV2aXNpb24gMTM2MDQwKQorKysgUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQko
d29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw3IEBACiAgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYlZpZGVvRnJhbWUuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YlZpZGVvRnJhbWVQcm92aWRlci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2Vi
V29ya2VyUnVuTG9vcC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViV29ya2Vy
U2NyaXB0T2JzZXJ2ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL2FuZHJvaWQv
V2ViU2FuZGJveFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL2FuZHJv
aWQvV2ViVGhlbWVFbmdpbmUuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL2RlZmF1
bHQvV2ViVGhlbWVFbmdpbmUuaCcsCkluZGV4OiBQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
V29ya2VyU2NyaXB0T2JzZXJ2ZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFBsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oCShyZXZpc2lvbiAwKQorKysgUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYldvcmtlclNjcmlwdE9ic2VydmVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYldvcmtlclNjcmlwdE9ic2Vy
dmVyX2gKKyNkZWZpbmUgV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXJfaAorCisjaW5jbHVkZSA8djgu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyAgICBjbGFzcyBXZWJVUkw7CisgICAgY2xhc3Mg
V2ViV29ya2VyUnVuTG9vcDsKKworICAgIGNsYXNzIFdlYldvcmtlclNjcmlwdE9ic2VydmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIC8vIE5vdGlmaWVzIHRoYXQgYSBuZXcgc2NyaXB0IGNvbnRl
eHQgaGFzIGJlZW4gY3JlYXRlZCBmb3IgYSB3b3JrZXIuCisgICAgICAgIC8vIFRoaXMgd2lsbCBi
ZSBjYWxsZWQgb25seSBvbmNlIHBlciB3b3JrZXIgY29udGV4dC4KKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZVdvcmtlclNjcmlwdENvbnRleHQoY29uc3QgV2ViV29ya2VyUnVuTG9vcCYs
IGNvbnN0IFdlYlVSTCYsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KSB7IH0KKworICAgICAgICAv
LyBXZWJLaXQgaXMgYWJvdXQgdG8gcmVsZWFzZSBpdHMgcmVmZXJlbmNlIHRvIGEgdjggY29udGV4
dCBmb3IgYSB3b3JrZXIuCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVsZWFzZVdvcmtlclNj
cmlwdENvbnRleHQoY29uc3QgV2ViV29ya2VyUnVuTG9vcCYsIGNvbnN0IFdlYlVSTCYsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCB+V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIoKSB7IH0KKyAgICB9OworCit9ICAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgoNClByb3BlcnR5IGNoYW5nZXMgb246IFBsYXRmb3JtXGNocm9t
aXVtXHB1YmxpY1xXZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oDQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpBZGRlZDog
c3ZuOmVvbC1zdHlsZQ0KICAgKyBMRg0KDQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NjE2KQorKysgV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMy0wMS0wMiAg
TWFyc2hhbGwgR3JlZW5ibGF0dCAgPG1hcnNoYWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
dXBwb3J0IGN1c3RvbSBWOCBiaW5kaW5ncyBmb3IgV2ViV29ya2VycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMzA2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IFdlYldvcmtlclNjcmlw
dE9ic2VydmVyIGludGVyZmFjZSB0aGF0IHN1cHBvcnRzIGN1c3RvbSBWOCBKYXZhU2NyaXB0IGJp
bmRpbmdzIG9uIHRoZSBXZWJXb3JrZXIgVjggY29udGV4dC4KKworICAgICAgICAqIGJpbmRpbmdz
L3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUNvbnRleHRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9y
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNj
cmlwdENvbnRyb2xsZXI6OnJlbW92ZU9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clNjcmlwdENvbnRyb2xsZXI6Om5vdGlmeURpZENyZWF0ZVdvcmtlclNjcmlwdENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6bm90aWZ5V2lsbFJlbGVh
c2VXb3JrZXJTY3JpcHRDb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV29ya2VyU2NyaXB0
Q29udHJvbGxlcik6CisKIDIwMTMtMDEtMDIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzg2MDEu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTM2MDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTEgKzUwLDIzIEBACiAKICNp
ZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNs
dWRlIDxwdWJsaWMvV2ViVVJMLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYldvcmtlclJ1bkxvb3Au
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIuaD4KICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBWZWN0b3I8V2Vi
S2l0OjpXZWJXb3JrZXJTY3JpcHRPYnNlcnZlcio+JiBvYnNlcnZlclZlY3RvcigpCit7CisgICAg
QXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKFZlY3RvcjxXZWJLaXQ6OldlYldvcmtlclNjcmlw
dE9ic2VydmVyKj4mLCBvYnNlcnZlcnMgPSAqbmV3IFZlY3RvcjxXZWJLaXQ6OldlYldvcmtlclNj
cmlwdE9ic2VydmVyKj4pOworICAgIHJldHVybiBvYnNlcnZlcnM7Cit9CisKK30gIC8vIG5hbWVz
cGFjZQorCiBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyKFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQpCiAgICAgOiBtX3dvcmtlckNvbnRleHQod29ya2Vy
Q29udGV4dCkKICAgICAsIG1faXNvbGF0ZSh2ODo6SXNvbGF0ZTo6TmV3KCkpCkBAIC03Miw2ICs4
NCw4IEBAIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnQKIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKIHsKICAgICBtX2RvbURh
dGFTdG9yZS5jbGVhcigpOworICAgIGlmICghbV9jb250ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAg
bm90aWZ5V2lsbFJlbGVhc2VXb3JrZXJTY3JpcHRDb250ZXh0KCk7CiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgLy8gVGhlIGNvcnJlc3BvbmRpbmcgY2FsbCB0byBkaWRTdGFydFdvcmtlclJ1
bkxvb3AgaXMgaW4KICAgICAvLyBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpLgpAQCAtMTMz
LDYgKzE0Nyw4IEBAIGJvb2wgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUMKICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbE9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QobV9jb250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOwogICAgIGds
b2JhbE9iamVjdC0+U2V0UHJvdG90eXBlKGpzV29ya2VyQ29udGV4dCk7CiAKKyAgICBub3RpZnlE
aWRDcmVhdGVXb3JrZXJTY3JpcHRDb250ZXh0KCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMjU0LDYgKzI3MCwzOSBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBXb3JrZXJTY3JpcHRD
b250CiAgICAgICAgIHJldHVybiAwOwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQg
PSBWOFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGdsb2JhbCk7CiAgICAgcmV0dXJuIHdvcmtlckNv
bnRleHQtPnNjcmlwdCgpOworfQorCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmFkZE9i
c2VydmVyKFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAg
IGlmIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCkgPiAwKQorICAg
ICAgcmV0dXJuOworCisgICAgb2JzZXJ2ZXJWZWN0b3IoKS5hcHBlbmQob2JzZXJ2ZXIpOworfQor
Cit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnJlbW92ZU9ic2VydmVyKFdlYktpdDo6V2Vi
V29ya2VyU2NyaXB0T2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIGlmIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCkgPiAwKQorICAgICAgcmV0dXJuOworCisgICAg
VmVjdG9yPFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJzID0gb2Jz
ZXJ2ZXJWZWN0b3IoKTsKKyAgICBzaXplX3QgcG9zID0gb2JzZXJ2ZXJzLmZpbmQob2JzZXJ2ZXIp
OworICAgIGlmIChwb3MgIT0gbm90Rm91bmQpCisgICAgICAgIG9ic2VydmVycy5yZW1vdmUocG9z
KTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpub3RpZnlEaWRDcmVhdGVXb3Jr
ZXJTY3JpcHRDb250ZXh0KCkKK3sKKyAgICBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJXb3JrZXJT
Y3JpcHRPYnNlcnZlcio+JiBvYnNlcnZlcnMgPSBvYnNlcnZlclZlY3RvcigpOworICAgIGZvciAo
VmVjdG9yPFdlYktpdDo6V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqPjo6Y29uc3RfaXRlcmF0b3Ig
aSA9IG9ic2VydmVycy5iZWdpbigpOyBpICE9IG9ic2VydmVycy5lbmQoKTsgKytpKQorICAgICAg
ICAoKmkpLT5kaWRDcmVhdGVXb3JrZXJTY3JpcHRDb250ZXh0KFdlYktpdDo6V2ViV29ya2VyUnVu
TG9vcCgmbV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpKSwgbV93b3JrZXJDb250
ZXh0LT51cmwoKSwgbV9jb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpub3RpZnlXaWxsUmVsZWFzZVdvcmtlclNjcmlwdENvbnRleHQoKQoreworICAgIGNv
bnN0IFZlY3RvcjxXZWJLaXQ6OldlYldvcmtlclNjcmlwdE9ic2VydmVyKj4mIG9ic2VydmVycyA9
IG9ic2VydmVyVmVjdG9yKCk7CisgICAgZm9yIChWZWN0b3I8V2ViS2l0OjpXZWJXb3JrZXJTY3Jp
cHRPYnNlcnZlcio+Ojpjb25zdF9pdGVyYXRvciBpID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0g
b2JzZXJ2ZXJzLmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPndpbGxSZWxlYXNlV29ya2VyU2Ny
aXB0Q29udGV4dChXZWJLaXQ6OldlYldvcmtlclJ1bkxvb3AoJm1fd29ya2VyQ29udGV4dC0+dGhy
ZWFkKCktPnJ1bkxvb3AoKSksIG1fd29ya2VyQ29udGV4dC0+dXJsKCksIG1fY29udGV4dC5nZXQo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDEzNjA0MCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAorbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBX
ZWJXb3JrZXJTY3JpcHRPYnNlcnZlcjsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgU2NyaXB0U291cmNlQ29kZTsKQEAgLTk1LDkgKzk5LDE2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgY29udGV4dC4K
ICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dC5nZXQoKSk7IH0KIAorICAgICAgICAvLyBB
ZGQgb3IgcmVtb3ZlIGFuIG9ic2VydmVyLiBDYW4gb25seSBiZSBjYWxsZWQgd2hpbGUgbm8gV2Vi
V29ya2VycyBleGlzdC4KKyAgICAgICAgc3RhdGljIHZvaWQgYWRkT2JzZXJ2ZXIoV2ViS2l0OjpX
ZWJXb3JrZXJTY3JpcHRPYnNlcnZlciopOworICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYnNl
cnZlcihXZWJLaXQ6OldlYldvcmtlclNjcmlwdE9ic2VydmVyKik7CisKICAgICBwcml2YXRlOgog
ICAgICAgICBib29sIGluaXRpYWxpemVDb250ZXh0SWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCBk
aXNwb3NlQ29udGV4dCgpOworCisgICAgICAgIHZvaWQgbm90aWZ5RGlkQ3JlYXRlV29ya2VyU2Ny
aXB0Q29udGV4dCgpOworICAgICAgICB2b2lkIG5vdGlmeVdpbGxSZWxlYXNlV29ya2VyU2NyaXB0
Q29udGV4dCgpOwogCiAgICAgICAgIFdvcmtlckNvbnRleHQqIG1fd29ya2VyQ29udGV4dDsKICAg
ICAgICAgdjg6Oklzb2xhdGUqIG1faXNvbGF0ZTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lv
biAxMzg2MTYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTMtMDEtMDIgIE1hcnNoYWxsIEdyZWVuYmxhdHQgIDxtYXJzaGFs
bEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBjdXN0b20gVjggYmluZGluZ3MgZm9y
IFdlYldvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMzMwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhIG5ldyBXZWJXb3JrZXJTY3JpcHRPYnNlcnZlciBpbnRlcmZhY2UgdGhhdCBzdXBw
b3J0cyBjdXN0b20gVjggSmF2YVNjcmlwdCBiaW5kaW5ncyBvbiB0aGUgV2ViV29ya2VyIFY4IGNv
bnRleHQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIFdlYktpdC5neXBpOgor
ICAgICAgICAqIHB1YmxpYy9XZWJXb3JrZXJJbmZvLmg6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViV29ya2VySW5mbyk6CisgICAgICAgICogcHVibGljL1dlYldvcmtlclNjcmlwdE9i
c2VydmVyLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbmZvLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViV29ya2VySW5mbzo6ZGVkaWNhdGVkV29ya2VyQ291bnQpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW5mbzo6YWRkU2NyaXB0T2Jz
ZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbmZvOjpyZW1vdmVTY3JpcHRPYnNl
cnZlcik6CisgICAgICAgICogdGVzdHMvV2ViV29ya2VyVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYldvcmtlclRlc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJXb3JrZXJUZXN0OjpXZWJXb3JrZXJUZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
VGVzdDo6VGVhckRvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJUZXN0OjpyZWdpc3Rl
ck1vY2tlZEh0dHBVUkxMb2FkKToKKyAgICAgICAgKFdvcmtlckJpbmRpbmdTY3JpcHRPYnNlcnZl
cik6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckJpbmRpbmdTY3JpcHRPYnNlcnZlcjo6V29ya2Vy
QmluZGluZ1NjcmlwdE9ic2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyQmluZGluZ1Nj
cmlwdE9ic2VydmVyOjpzaWduYWwpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJCaW5kaW5nU2Ny
aXB0T2JzZXJ2ZXI6OndhaXQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJCaW5kaW5nU2NyaXB0
T2JzZXJ2ZXI6OmdvdF9jcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJCaW5kaW5nU2Ny
aXB0T2JzZXJ2ZXI6OmdvdF9yZWxlYXNlKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyQmluZGlu
Z1NjcmlwdE9ic2VydmVyOjpnb3RfY2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJC
aW5kaW5nU2NyaXB0T2JzZXJ2ZXI6OkZ1bmN0aW9uQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL3dvcmtlcl90ZXN0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvd29ya2VyX3Rlc3QuanM6IEFkZGVkLgorCiAyMDEy
LTEyLTI4ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJv
bGwgQ2hyb21pdW0gREVQUyB0byByMTc0NzM5CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lv
biAxMzYwNDApCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpA
QCAtMjg3LDYgKzI4Nyw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJXaWRnZXQuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJXb3JrZXJJbmZvLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9hbmRy
b2lkL1dlYklucHV0RXZlbnRGYWN0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvYW5k
cm9pZC9XZWJTYW5kYm94U3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL2RlZmF1
bHQvV2ViUmVuZGVyVGhlbWUuaCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHJldmlzaW9uIDEz
NjA0MCkKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTIzLDYgKzEyMyw3IEBACiAgICAgICAgICAgICAndGVzdHMvV2ViVVJMUmVxdWVzdFRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9XZWJVUkxSZXNwb25zZVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9XZWJWaWV3VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL1dlYldvcmtl
clRlc3QuY3BwJywKICAgICAgICAgXSwKIAogICAgICAgICAnY29uZGl0aW9ucyc6IFsKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VySW5mby5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXb3JrZXJJbmZvLmgJKHJldmlzaW9uIDEzNjA0MCkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VySW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw5ICszNSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgV2ViV29y
a2VyU2NyaXB0T2JzZXJ2ZXI7CisKIGNsYXNzIFdlYldvcmtlckluZm8gewogcHVibGljOgogICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIHVuc2lnbmVkIGRlZGljYXRlZFdvcmtlckNvdW50KCk7CisK
KyAgICAvLyBBZGQgb3IgcmVtb3ZlIGFuIG9ic2VydmVyLiBDYW4gb25seSBiZSBjYWxsZWQgd2hp
bGUgbm8gV2ViV29ya2VycyBleGlzdC4KKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGFk
ZFNjcmlwdE9ic2VydmVyKFdlYldvcmtlclNjcmlwdE9ic2VydmVyKik7CisgICAgV0VCS0lUX0VY
UE9SVCBzdGF0aWMgdm9pZCByZW1vdmVTY3JpcHRPYnNlcnZlcihXZWJXb3JrZXJTY3JpcHRPYnNl
cnZlciopOwogfTsKIAogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXb3JrZXJT
Y3JpcHRPYnNlcnZlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIi4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJXb3JrZXJTY3JpcHRPYnNlcnZlci5oIgoNClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YktpdFxjaHJvbWl1bVxwdWJsaWNcV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIuaA0KX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xw0KQWRkZWQ6IHN2bjplb2wtc3R5bGUNCiAgICsgTEYNCg0KSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VySW5mby5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckluZm8uY3BwCShyZXZpc2lvbiAxMzYwNDApCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYldvcmtlckluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViV29ya2VySW5mby5oIgogCisjaW5j
bHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5o
IgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM4LDYgKzM5LDE2IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogdW5zaWduZWQgV2ViV29ya2VySW5mbzo6ZGVkaWNhdGVkV29ya2VyQ291bnQoKSAKIHsK
ICAgICByZXR1cm4gV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRDb3VudCgpOwor
fQorCit2b2lkIFdlYldvcmtlckluZm86OmFkZFNjcmlwdE9ic2VydmVyKFdlYldvcmtlclNjcmlw
dE9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjphZGRPYnNlcnZlcihvYnNlcnZlcik7Cit9CisKK3ZvaWQgV2ViV29ya2VySW5mbzo6cmVt
b3ZlU2NyaXB0T2JzZXJ2ZXIoV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIqIG9ic2VydmVyKQorewor
ICAgIFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnJlbW92ZU9ic2VydmVyKG9ic2Vy
dmVyKTsKIH0KIAogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYldvcmtlclRlc3Qu
Y3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYldvcmtlclRlc3Qu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYldvcmtlclRlc3Qu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIldlYkZyYW1lLmgiCisKKyNpbmNsdWRlICJGcmFtZVRlc3RIZWxwZXJzLmgiCisj
aW5jbHVkZSAiVVJMVGVzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorI2lu
Y2x1ZGUgIldlYldvcmtlckluZm8uaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJSdW5Mb29wLmgiCisj
aW5jbHVkZSAiV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJ2OC5oIgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1
cHBvcnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgV2ViV29ya2VyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBX
ZWJXb3JrZXJUZXN0KCkgOiBtX2Jhc2VVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vIikge30KKwor
ICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9y
dDo6VW5yZWdpc3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVy
TW9ja2VkSHR0cFVSTExvYWQoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBzdGQ6
OnN0cmluZyYgbWltZVR5cGUgPSAidGV4dC9odG1sIikKKyAgICB7CisgICAgICAgIFVSTFRlc3RI
ZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVSTEZyb21CYXNlVVJMKFdlYlN0cmluZzo6ZnJvbVVURjgo
bV9iYXNlVVJMLmNfc3RyKCkpLCBXZWJTdHJpbmc6OmZyb21VVEY4KGZpbGVOYW1lLmNfc3RyKCkp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KG1pbWVUeXBlLmNfc3RyKCkpKTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBzdGQ6OnN0cmluZyBtX2Jhc2VVUkw7Cit9OworCitjbGFzcyBXb3JrZXJCaW5k
aW5nU2NyaXB0T2JzZXJ2ZXIgOiBwdWJsaWMgV2ViV29ya2VyU2NyaXB0T2JzZXJ2ZXIgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IFdvcmtlckJpbmRpbmdTY3JpcHRPYnNlcnZlcihjb25zdCBzdGQ6
OnN0cmluZyYgdXJsKSA6IG1fdXJsKHVybCksIG1fY29udGludWUoZmFsc2UpLCBtX2dvdF9jcmVh
dGUoZmFsc2UpLCBtX2dvdF9yZWxlYXNlKGZhbHNlKSwgbV9nb3RfY2FsbGJhY2soZmFsc2UpLCBt
X3J1bl9sb29wKE5VTEwpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlV29ya2VyU2Ny
aXB0Q29udGV4dChjb25zdCBXZWJXb3JrZXJSdW5Mb29wJiBydW5fbG9vcCwgY29uc3QgV2ViVVJM
JiB1cmwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpIE9WRVJSSURFCisgICAgewor
ICAgICAgICBFWFBFQ1RfRkFMU0UobV9nb3RfY3JlYXRlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KG1fZ290X3JlbGVhc2UpOworICAgICAgICBFWFBFQ1RfU1RSRVEobV91cmwuY19zdHIoKSwgdXJs
LnNwZWMoKS5kYXRhKCkpOworCisgICAgICAgIG1fcnVuX2xvb3AgPSBuZXcgV2ViV29ya2VyUnVu
TG9vcChydW5fbG9vcCk7CisgICAgICAgIG1fY29udGV4dCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpD
b250ZXh0Pjo6TmV3KGNvbnRleHQpOworCisgICAgICAgIC8vIENyZWF0ZSB0aGUgVjggZnVuY3Rp
b24gYmluZGluZyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgV2ViV29ya2VyLgorICAg
ICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlX3Njb3BlOworICAgICAgICB2ODo6Q29udGV4dDo6
U2NvcGUgY29udGV4dF9zY29wZShjb250ZXh0KTsKKworICAgICAgICB2ODo6SGFuZGxlPHY4OjpT
dHJpbmc+IGZ1bmNfbmFtZSA9IHY4OjpTdHJpbmc6Ok5ldygidGVzdF9iaW5kaW5nIik7CisKKyAg
ICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0bXBsID0gdjg6OkZ1bmN0aW9u
VGVtcGxhdGU6Ok5ldygpOworICAgICAgICB0bXBsLT5TZXRDYWxsSGFuZGxlcihXb3JrZXJCaW5k
aW5nU2NyaXB0T2JzZXJ2ZXI6OkZ1bmN0aW9uQ2FsbGJhY2tJbXBsLCB2ODo6RXh0ZXJuYWw6Ok5l
dyh0aGlzKSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmMgPSB0bXBsLT5H
ZXRGdW5jdGlvbigpOworICAgICAgICBmdW5jLT5TZXROYW1lKGZ1bmNfbmFtZSk7CisKKyAgICAg
ICAgY29udGV4dC0+R2xvYmFsKCktPlNldChmdW5jX25hbWUsIGZ1bmMpOworCisgICAgICAgIG1f
Z290X2NyZWF0ZSA9IHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbGxSZWxlYXNl
V29ya2VyU2NyaXB0Q29udGV4dChjb25zdCBXZWJXb3JrZXJSdW5Mb29wJiBydW5fbG9vcCwgY29u
c3QgV2ViVVJMJiB1cmwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpIE9WRVJSSURF
CisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShtX2dvdF9jcmVhdGUpOworICAgICAgICBFWFBF
Q1RfRkFMU0UobV9nb3RfcmVsZWFzZSk7CisgICAgICAgIEVYUEVDVF9FUSgqbV9ydW5fbG9vcCwg
cnVuX2xvb3ApOworICAgICAgICBFWFBFQ1RfU1RSRVEobV91cmwuY19zdHIoKSwgdXJsLnNwZWMo
KS5kYXRhKCkpOworICAgICAgICBFWFBFQ1RfRVEobV9jb250ZXh0LCBjb250ZXh0KTsKKworICAg
ICAgICBkZWxldGUgbV9ydW5fbG9vcDsKKyAgICAgICAgbV9ydW5fbG9vcCA9IE5VTEw7CisKKyAg
ICAgICAgbV9jb250ZXh0LkRpc3Bvc2UoKTsKKyAgICAgICAgbV9jb250ZXh0LkNsZWFyKCk7CisK
KyAgICAgICAgbV9nb3RfcmVsZWFzZSA9IHRydWU7CisgICAgICAgIHNpZ25hbCgpOworICAgIH0K
KworICAgIHZvaWQgc2lnbmFsKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9t
dXRleCk7CisgICAgICAgIG1fY29udGludWUgPSB0cnVlOworICAgICAgICBtX2NvbmRpdGlvbi5z
aWduYWwoKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXQoKQorICAgIHsKKyAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAg
ICAgICBpZiAobV9jb250aW51ZSkgeworICAgICAgICAgICAgICAgIG1fY29udGludWUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
Y29uZGl0aW9uLndhaXQobV9tdXRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGdv
dF9jcmVhdGUoKSB7IHJldHVybiBtX2dvdF9jcmVhdGU7IH0KKyAgICBib29sIGdvdF9yZWxlYXNl
KCkgeyByZXR1cm4gbV9nb3RfcmVsZWFzZTsgfQorICAgIGJvb2wgZ290X2NhbGxiYWNrKCkgeyBy
ZXR1cm4gbV9nb3RfY2FsbGJhY2s7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IEZ1bmN0aW9uQ2FsbGJhY2tJbXBsKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9zY29wZTsKKworICAgICAgICBF
WFBFQ1RfRVEoMSwgYXJncy5MZW5ndGgoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFyZ3NbMF0t
PklzU3RyaW5nKCkpOworCisgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdmFsdWUgPSBh
cmdzWzBdLT5Ub1N0cmluZygpOworICAgICAgICBpbnQgbGVuID0gdmFsdWUtPlV0ZjhMZW5ndGgo
KTsKKyAgICAgICAgY2hhciogYnVmID0gbmV3IGNoYXJbbGVuICsgMV07CisgICAgICAgIHZhbHVl
LT5Xcml0ZVV0ZjgoYnVmLCBsZW4gKyAxKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJhYmMxMjMi
LCBidWYpOworICAgICAgICBkZWxldGUgW10gYnVmOworCisgICAgICAgIFdvcmtlckJpbmRpbmdT
Y3JpcHRPYnNlcnZlciogb2JzZXJ2ZXIgPSBzdGF0aWNfY2FzdDxXb3JrZXJCaW5kaW5nU2NyaXB0
T2JzZXJ2ZXIqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7Cisg
ICAgICAgIG9ic2VydmVyLT5tX2dvdF9jYWxsYmFjayA9IHRydWU7CisgICAgICAgIG9ic2VydmVy
LT5zaWduYWwoKTsKKworICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB9CisKKyAgICBN
dXRleCBtX211dGV4OworICAgIFRocmVhZENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKKyAgICBzdGQ6
OnN0cmluZyBtX3VybDsKKyAgICBib29sIG1fY29udGludWU7CisKKyAgICBib29sIG1fZ290X2Ny
ZWF0ZTsKKyAgICBib29sIG1fZ290X3JlbGVhc2U7CisgICAgYm9vbCBtX2dvdF9jYWxsYmFjazsK
KyAgICBXZWJXb3JrZXJSdW5Mb29wKiBtX3J1bl9sb29wOworICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCitURVNUX0YoV2ViV29ya2VyVGVzdCwgV29ya2Vy
QmluZGluZykKK3sKKyAgICBXb3JrZXJCaW5kaW5nU2NyaXB0T2JzZXJ2ZXIgc2NyaXB0X29ic2Vy
dmVyKG1fYmFzZVVSTCArICJ3b3JrZXJfdGVzdC5qcyIpOworCisgICAgcmVnaXN0ZXJNb2NrZWRI
dHRwVVJMTG9hZCgid29ya2VyX3Rlc3QuaHRtbCIpOworICAgIHJlZ2lzdGVyTW9ja2VkSHR0cFVS
TExvYWQoIndvcmtlcl90ZXN0LmpzIiwgInRleHQvamF2YXNjcmlwdCIpOworCisgICAgV2ViV29y
a2VySW5mbzo6YWRkU2NyaXB0T2JzZXJ2ZXIoJnNjcmlwdF9vYnNlcnZlcik7CisgICAgV2ViVmll
dyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKG1fYmFz
ZVVSTCArICJ3b3JrZXJfdGVzdC5odG1sIiwgdHJ1ZSk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUg
VjggZnVuY3Rpb24gY2FsbGJhY2suCisgICAgc2NyaXB0X29ic2VydmVyLndhaXQoKTsKKworICAg
IEVYUEVDVF9UUlVFKHNjcmlwdF9vYnNlcnZlci5nb3RfY3JlYXRlKCkpOworICAgIEVYUEVDVF9U
UlVFKHNjcmlwdF9vYnNlcnZlci5nb3RfY2FsbGJhY2soKSk7CisgICAgRVhQRUNUX0ZBTFNFKHNj
cmlwdF9vYnNlcnZlci5nb3RfcmVsZWFzZSgpKTsKKworICAgIC8vIENsb3NlIHRoZSBXZWJWaWV3
LiBUaGlzIHNob3VsZCBkZXN0cm95IHRoZSBXZWJXb3JrZXIgdGhyZWFkLgorICAgIHdlYlZpZXct
PmNsb3NlKCk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgV2ViV29ya2VyIGNvbnRleHQgdG8gYmUg
cmVsZWFzZWQuCisgICAgc2NyaXB0X29ic2VydmVyLndhaXQoKTsKKworICAgIEVYUEVDVF9UUlVF
KHNjcmlwdF9vYnNlcnZlci5nb3RfcmVsZWFzZSgpKTsKKworICAgIFdlYldvcmtlckluZm86OnJl
bW92ZVNjcmlwdE9ic2VydmVyKCZzY3JpcHRfb2JzZXJ2ZXIpOworfQorCit9IC8vIG5hbWVzcGFj
ZQoNClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFxjaHJvbWl1bVx0ZXN0c1xXZWJXb3JrZXJU
ZXN0LmNwcA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXw0KQWRkZWQ6IHN2bjplb2wtc3R5bGUNCiAgICsgTEYNCg0KSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3dvcmtlcl90ZXN0Lmh0bWwNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS93b3JrZXJfdGVzdC5odG1sCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvd29ya2VyX3Rlc3QuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACis8aHRtbD4KKyAgPGJvZHk+CisgICAgPHNjcmlw
dD4KKyAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCd3b3JrZXJfdGVzdC5qcycpOworICAg
IDwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+Cg0KUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
S2l0XGNocm9taXVtXHRlc3RzXGRhdGFcd29ya2VyX3Rlc3QuaHRtbA0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUNCiAgICsgTEYNCg0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3dvcmtlcl90ZXN0LmpzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvd29ya2VyX3Rlc3QuanMJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS93b3JrZXJfdGVzdC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorc2Vs
Zi50ZXN0X2JpbmRpbmcoJ2FiYzEyMycpOwoNClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFxj
aHJvbWl1bVx0ZXN0c1xkYXRhXHdvcmtlcl90ZXN0LmpzDQpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpBZGRlZDogc3Zu
OmVvbC1zdHlsZQ0KICAgKyBMRg0KDQo=
</data>
<flag name="review"
          id="198495"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>