<?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>40060</bug_id>
          
          <creation_ts>2010-06-02 07:34:44 -0700</creation_ts>
          <short_desc>Add a version of JSObjectSetPrototype that yields an exception when the prototype can&apos;t be set</short_desc>
          <delta_ts>2010-12-14 02:00:26 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          <blocked>39356</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jędrzej Nowacki">jedrzej.nowacki</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>ap</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233260</commentid>
    <comment_count>0</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-02 07:34:44 -0700</bug_when>
    <thetext>A try to create cycle in a prototype chain will end up in an exception

&gt; a = new Object
[object Object]
&gt; a.__proto__=a
Exception: Error: cyclic __proto__ value
&gt;

This is not true in the JSC C API. Invalid call to the JSObjectSetPrototype will be just ignored. It would be nice to have an unified interface here. I think that the JSObjectSetPrototype function should take one parameter more (an exception handler), but as it is not possible without breaking binary compatibility, a new function should be created.

This bug is a next step for bug 39360.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233262</commentid>
    <comment_count>1</comment_count>
      <attachid>57654</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-02 07:39:01 -0700</bug_when>
    <thetext>Created attachment 57654
Fix v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237436</commentid>
    <comment_count>2</comment_count>
      <attachid>57654</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-12 19:20:03 -0700</bug_when>
    <thetext>Comment on attachment 57654
Fix v1

&gt; +void JSObjectSetPrototypeEx(JSContextRef ctx, JSObjectRef object, JSValueRef value, JSValueRef* exception)

You need to discuss the naming of this with Geoff Garen. The &quot;Ex&quot; suffix is almost certainly *not* what we want to do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237437</commentid>
    <comment_count>3</comment_count>
      <attachid>57654</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-12 19:21:43 -0700</bug_when>
    <thetext>Comment on attachment 57654
Fix v1

I’m not sure the C API needs this feature. What’s the reason we need to add this? Is someone asking for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237454</commentid>
    <comment_count>4</comment_count>
      <attachid>57654</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-12 20:43:12 -0700</bug_when>
    <thetext>Comment on attachment 57654
Fix v1

r- per above naming comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237766</commentid>
    <comment_count>5</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-14 04:24:13 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 57654 [details])
&gt; &gt; +void JSObjectSetPrototypeEx(JSContextRef ctx, JSObjectRef object, JSValueRef value, JSValueRef* exception)
&gt;
&gt; You need to discuss the naming of this with Geoff Garen. The &quot;Ex&quot; suffix is almost certainly *not* what we want to do here.
It is why, he is in CC :-)
I don&apos;t know Mac naming policy, I agree that the name could be better. In C++ I could use function overloading, but it is a C code. Do you have idea for a better name?

(In reply to comment #3)
&gt; (From update of attachment 57654 [details])
&gt; I’m not sure the C API needs this feature. What’s the reason we need to add this? Is someone asking for it?
Yes, I&apos;m asking for it :-).
1. I think there is an inconsistency; in the jsc console creating cycle in a prototype chain results in an exception in C API these exception is ignored.
2. I would like to implement fix for bug 39356, current QtScript implementation shows a warning when an user tries to create a cyclic prototype chain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237869</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-06-14 09:39:34 -0700</bug_when>
    <thetext>&gt; &gt; &gt; +void JSObjectSetPrototypeEx(JSContextRef ctx, JSObjectRef object, JSValueRef value, JSValueRef* exception)
&gt; &gt;
&gt; &gt; You need to discuss the naming of this with Geoff Garen. The &quot;Ex&quot; suffix is almost certainly *not* what we want to do here.

I agree that the &quot;Ex&quot; naming isn&apos;t good. It doesn&apos;t say what&apos;s different about the &quot;Ex&quot; version, and it only works once. If we make another mistake, will we name the next function &quot;ExEx?&quot;

&gt; &gt; I’m not sure the C API needs this feature. What’s the reason we need to add this? Is someone asking for it?
&gt; Yes, I&apos;m asking for it :-).

I&apos;m not convinced the C API needs this feature, either.

Bug 39360 was clearly an improvement -- it&apos;s nice when the API can prevent you from shooting yourself in the foot without undue performance cost.

However, to have two versions of the same function, I think the second version really needs to justify itself. I believe you can get the behavior you want for bug 39356 using the current API, by either:

(a) setting the &quot;__proto__&quot; property using JSObjectSetProperty.

or

(b) using JSObjectGetPrototype in a loop to check for cycles yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240750</commentid>
    <comment_count>7</comment_count>
      <attachid>59259</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-21 09:40:07 -0700</bug_when>
    <thetext>Created attachment 59259
Fix v1.1

(In reply to comment #6)
&gt; &gt; &gt; &gt; +void JSObjectSetPrototypeEx(JSContextRef ctx, JSObjectRef object, JSValueRef value, JSValueRef* exception)
&gt; &gt; &gt;
&gt; &gt; &gt; You need to discuss the naming of this with Geoff Garen. The &quot;Ex&quot; suffix is almost certainly *not* what we want to do here.
&gt;
&gt; I agree that the &quot;Ex&quot; naming isn&apos;t good. It doesn&apos;t say what&apos;s different about the &quot;Ex&quot; version, and it only works once. If we make another mistake, will we name the next function &quot;ExEx?&quot;
Oh, then we will use &quot;ExBis&quot; :-) I do know that &quot;Ex&quot; is wrong but which name would be right? What about JSObjectSetPrototypeWithErrorHandling? I&apos;m attaching rebased patch.

&gt; &gt; &gt; I’m not sure the C API needs this feature. What’s the reason we need to add this? Is someone asking for it?
&gt; &gt; Yes, I&apos;m asking for it :-).
&gt; I&apos;m not convinced the C API needs this feature, either.
&gt; (...)
&gt; However, to have two versions of the same function, I think the second version really needs to justify itself.
&gt; (...)

This function can stay in a private header for now, for example next version of JSC API and then it could replace the original one. I don&apos;t insist to create an officially supported API, I&apos;m fine with binary compatibility breakages or even small refactoring as long as I can access to the functionality with good performance. Is API&apos;s performance a good justification to introduce the function?

I wrote 5 implementation of the QScriptValue::setPrototype(). I test them using the same benchmark:

  QScriptEngine engine;
  QScriptValue value = engine.newObject();
  QScriptValue proto1 = engine.newObject();
  QScriptValue proto2 = engine.newObject();
  QScriptValue tmp = engine.newObject();
  tmp.setPrototype(engine.newObject());
  proto2.setPrototype(tmp);

  QBENCHMARK {
      value.setPrototype(proto1);
      value.setPrototype(proto2);
  }

The benchmark simply call the setPrototype function changing a prototype for the value variable,
proto1 represent a short prototype chain (0 element above proto1),
proto2 represent a longer prototype chain (2 elements above proto2).
QBENCHMARK macro is a part of Qt benchmarking tool.

#if 1
// This solution use a new API.

        JSValueRef exception = 0;
        JSObjectSetPrototypeWithErrorHandling(*m_engine, *this, *prototype, &amp;exception);
        if (exception)
            qWarning(&quot;QScriptValue::setPrototype() failed: cyclic prototype value&quot;);

//RESULT : tst_QScriptValue::setProtoBench():
//     0.00047 msecs per iteration (total: 62, iterations: 131072)

#elif 0

// This solution tries to set the __proto__ property

        JSValueRef exception = 0;
        JSRetainPtr&lt;JSStringRef&gt; protoName = JSStringCreateWithUTF8CString(&quot;__proto__&quot;);
        JSObjectSetProperty(*m_engine, *this, protoName.get(), *prototype, /* attr */ 0, &amp;exception);
        if (exception)
            qWarning(&quot;QScriptValue::setPrototype() failed: cyclic prototype value&quot;);
            
//RESULT : tst_QScriptValue::setProtoBench():
//     0.0012 msecs per iteration (total: 80, iterations: 65536)
     
#elif 0

// This solution iterates over value&apos;s prototype chain to check if an error can occur.

        JSValueRef proto = *prototype;
        while (!JSValueIsNull(*m_engine, proto)) {
            if (JSValueIsStrictEqual(*m_engine, proto, *this)) {
                qWarning(&quot;QScriptValue::setPrototype() failed: cyclic prototype value&quot;);
                return;
            }
            JSValueRef exception = 0;
            proto = JSObjectGetPrototype(*m_engine, JSValueToObject(*m_engine, proto, &amp;exception));
            if (exception) {
                qWarning(&quot;OOPS&quot;);
                return;
            }
        }
        JSObjectSetPrototype(*m_engine, *this, *prototype);

//RESULT : tst_QScriptValue::setProtoBench():
//     0.0036 msecs per iteration (total: 60, iterations: 16384)

#elif 0

//This solution is same as previous one, but it use a trick to avoid redundant conversion from
//JSValueRef to JSObjectRef.

        JSValueRef proto = *prototype;
        while (!JSValueIsNull(*m_engine, proto)) {
            if (JSValueIsStrictEqual(*m_engine, proto, *this)) {
                qWarning(&quot;QScriptValue::setPrototype() failed: cyclic prototype value&quot;);
                return;
            }
            proto = JSObjectGetPrototype(*m_engine, const_cast&lt;JSObjectRef&gt;(proto));
        }
        JSObjectSetPrototype(*m_engine, *this, *prototype);

//RESULT : tst_QScriptValue::setProtoBench():
//     0.0028 msecs per iteration (total: 92, iterations: 32768)
     
#else

//This solution is based on implementation detail, I know that only possible error is the &quot;cyclic prototype value&quot;,
//so if the JSObjectSetPrototype fails to set a prototype then I know what happened.

        JSObjectSetPrototype(*m_engine, *this, *prototype);
        JSValueRef proto = JSObjectGetPrototype(*m_engine, *this);
        if (!JSValueIsStrictEqual(*m_engine, proto, *prototype)) {
            qWarning(&quot;QScriptValue::setPrototype() failed: cyclic prototype value&quot;);
        }

//RESULT : tst_QScriptValue::setProtoBench():
//     0.00091 msecs per iteration (total: 60, iterations: 65536)

#endif


The first solution is the shortest and the fastest one (2 - 8x faster then others).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240832</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-06-21 13:07:58 -0700</bug_when>
    <thetext>&gt; &gt; I agree that the &quot;Ex&quot; naming isn&apos;t good. It doesn&apos;t say what&apos;s different about the &quot;Ex&quot; version, and it only works once. If we make another mistake, will we name the next function &quot;ExEx?&quot;
&gt; Oh, then we will use &quot;ExBis&quot; :-) I do know that &quot;Ex&quot; is wrong but which name would be right?

Something that denoted the difference between the two functions.

&gt; What about JSObjectSetPrototypeWithErrorHandling?

JSObjectSetPrototypeWithException would probably be better. The function doesn&apos;t actually handle errors -- it just supports an exception out parameter.

&gt; This function can stay in a private header for now, for example next version of JSC API and then it could replace the original one.

I don&apos;t think it&apos;s practical to replace the old function, since that would break binary compatibility.

&gt; Is API&apos;s performance a good justification to introduce the function?

It can be. It depends on whether this is a performance-critical path. Is it? If so, why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240873</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-21 14:02:42 -0700</bug_when>
    <thetext>Attachment 59259 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/3299550</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241209</commentid>
    <comment_count>10</comment_count>
      <attachid>59358</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-22 03:46:10 -0700</bug_when>
    <thetext>Created attachment 59358
Fix v1.2

(In reply to comment #8)
&gt; JSObjectSetPrototypeWithException would probably be better. The function doesn&apos;t actually handle errors -- it just supports an exception out parameter.
Thanks, changed.

&gt; &gt; This function can stay in a private header for now, for example next version of JSC API and then it could replace the original one.
&gt; I don&apos;t think it&apos;s practical to replace the old function, since that would break binary compatibility.
You mean that we won&apos;t be able to break the binary compatibility promise, never?

&gt; &gt; Is API&apos;s performance a good justification to introduce the function?
&gt; It can be. It depends on whether this is a performance-critical path. Is it? If so, why?
As the QtScript is an API, I have a similar problem, like the JSC C API, to really define a good use cases. Lets try a logical experiment. Could you give me a performance-critical path for setting JSObjectSetProperty? If yes then it is the same as mine :-) if not can I put in the implementation a sleep() call? I try to make implementation of the QtScript clean and fast as possible. As you pointed me, there are a few ways to get the behavior, but I believe that, they are not so clean and fast as they could be. If you could create the JSObjectSetPrototype function again, assuming that you would knew about the exception, would you create it with an exception parameter or without? I think, it should be fixed, but I don&apos;t want to push to much as I can live without it (2x time longer as it is as much slower :-) ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241428</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 13:37:35 -0700</bug_when>
    <thetext>Attachment 59358 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/3325568</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241785</commentid>
    <comment_count>12</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-23 03:16:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Attachment 59358 [details] did not build on win:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/3325568
How to download the build log ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271212</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 13:56:38 -0700</bug_when>
    <thetext>Geoff, I think you should make the call on this. The mechanics of the patch look OK to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278431</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-09-13 13:23:50 -0700</bug_when>
    <thetext>&gt; &gt; I don&apos;t think it&apos;s practical to replace the old function, since that would break binary compatibility.
&gt; You mean that we won&apos;t be able to break the binary compatibility promise, never?

Correct. That&apos;s one reason we&apos;re particularly conservative about API.

&gt; Lets try a logical experiment. Could you give me a performance-critical path for setting JSObjectSetProperty? If yes then it is the same as mine :-) if not can I put in the implementation a sleep() call?

This experiment didn&apos;t persuade me, since there&apos;s no clear benefit to adding a sleep() call to JSObjectSetProperty().

&gt; If you could create the JSObjectSetPrototype function again, assuming that you would knew about the exception, would you create it with an exception parameter or without?

If I had it all to do over again, I would either add the exception parameter or remove all exception parameters and make pending exceptions an implicit property of the execution context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278434</commentid>
    <comment_count>15</comment_count>
      <attachid>59358</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-09-13 13:28:21 -0700</bug_when>
    <thetext>Comment on attachment 59358
Fix v1.2

I don&apos;t think we ever want to make JSObjectSetPrototypeWithException public API.

However, I don&apos;t see any downside to adding it as private API -- it doesn&apos;t introduce any new dependencies on the VM.

So, let&apos;s compromise by adding this as private API, which Qt library implementors can use, with the understanding that we&apos;re not going to make it into public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278484</commentid>
    <comment_count>16</comment_count>
      <attachid>59358</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-13 14:28:59 -0700</bug_when>
    <thetext>Comment on attachment 59358
Fix v1.2

Rejecting patch 59358 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/build-webkit&apos;, &apos;--debug&apos;]&quot; exit_code: 1
Last 500 characters of output:
ompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/JavaScriptCore.build/Debug/jsc.build/Objects-normal/i386/jsc.o /Users/eseidel/Projects/CommitQueue/JavaScriptCore/jsc.cpp normal i386 c++ com.apple.compilers.gcc.4_2
testapi:
	Distributed-CompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/JavaScriptCore.build/Debug/testapi.build/Objects-normal/i386/testapi.o /Users/eseidel/Projects/CommitQueue/JavaScriptCore/API/tests/testapi.c normal i386 c com.apple.compilers.gcc.4_2
(68 failures)


Full output: http://queues.webkit.org/results/3923394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321842</commentid>
    <comment_count>17</comment_count>
      <attachid>59358</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 02:00:26 -0800</bug_when>
    <thetext>Comment on attachment 59358
Fix v1.2

It seems this would break Mac, based on the commit-queue failure.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57654</attachid>
            <date>2010-06-02 07:39:01 -0700</date>
            <delta_ts>2010-06-21 09:40:07 -0700</delta_ts>
            <desc>Fix v1</desc>
            <filename>jsobject.diff</filename>
            <type>text/plain</type>
            <size>14699</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCmluZGV4IDcwYzRlMTQuLjVlMDE0MWUgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcApAQCAtMjM2LDcgKzIzNiwyNCBAQCB2b2lkIEpTT2Jq
ZWN0U2V0UHJvdG90eXBlKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNW
YWx1ZVJlZiB2YWx1ZQogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAotICAgIGpzT2JqZWN0LT5z
ZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDog
anNOdWxsKCkpOworICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoRXJyb3JIYW5kbGluZyhl
eGVjLCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOworICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Cit9CisKK3ZvaWQgSlNPYmplY3RTZXRQcm90b3R5cGVFeChKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Cisg
ICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKKworICAgIEpTT2JqZWN0KiBqc09iamVj
dCA9IHRvSlMob2JqZWN0KTsKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVl
KTsKKworICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoRXJyb3JIYW5kbGluZyhleGVjLCBq
c1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgKmV4
Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShK
U0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZlByaXZhdGUu
aCBiL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZlByaXZhdGUuaAppbmRleCAzMmU4MGFi
Li45NWJmNjJkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWZQcml2
YXRlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmUHJpdmF0ZS5oCkBAIC02
Nyw2ICs2NywxNiBAQCBKU19FWFBPUlQgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByaXZhdGVQcm9w
ZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYgogICovCiBKU19FWFBPUlQgYm9v
bCBKU09iamVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSk7CiAKKy8qIQorQGZ1bmN0aW9u
CitAYWJzdHJhY3QgU2V0cyBhbiBvYmplY3QncyBwcm90b3R5cGUuCitAcGFyYW0gY3R4ICBUaGUg
ZXhlY3V0aW9uIGNvbnRleHQgdG8gdXNlLgorQHBhcmFtIG9iamVjdCBUaGUgSlNPYmplY3Qgd2hv
c2UgcHJvdG90eXBlIHlvdSB3YW50IHRvIHNldC4KK0BwYXJhbSB2YWx1ZSBBIEpTVmFsdWUgdG8g
c2V0IGFzIHRoZSBvYmplY3QncyBwcm90b3R5cGUuCitAcGFyYW0gZXhjZXB0aW9uIEEgcG9pbnRl
ciB0byBhIEpTVmFsdWVSZWYgaW4gd2hpY2ggdG8gc3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBhbnku
IFBhc3MgTlVMTCBpZiB5b3UgZG8gbm90IGNhcmUgdG8gc3RvcmUgYW4gZXhjZXB0aW9uLgorKi8K
K0pTX0VYUE9SVCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90eXBlRXgoSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgb2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYyBiL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmMKaW5kZXggNzgwZTk5Ni4uY2RjODk5NyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYworKysgYi9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dGFwaS5jCkBAIC03NzYsNDMgKzc3Niw4MSBAQCBzdGF0aWMgYm9vbCBhc3NlcnRUcnVlKGJvb2wg
dmFsdWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0
aWMgYm9vbCBjaGVja0ZvckN5Y2xlSW5Qcm90b3R5cGVDaGFpbigpCitzdGF0aWMgYm9vbCBjaGVj
a1NldEdldFByb3RvdHlwZSgpCiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIEpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApOwotICAgIEpT
T2JqZWN0UmVmIG9iamVjdDEgPSBKU09iamVjdE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAw
LCAvKiBkYXRhICovIDApOwotICAgIEpTT2JqZWN0UmVmIG9iamVjdDIgPSBKU09iamVjdE1ha2Uo
Y29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiBkYXRhICovIDApOwotICAgIEpTT2JqZWN0UmVm
IG9iamVjdDMgPSBKU09iamVjdE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiBkYXRh
ICovIDApOwotCi0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSwgSlNW
YWx1ZU1ha2VOdWxsKGNvbnRleHQpKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzTnVsbChjb250ZXh0
LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxKSkpOwotCi0gICAgLy8gb2Jq
ZWN0MSAtPiBvYmplY3QxCi0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0
MSwgb2JqZWN0MSk7Ci0gICAgcmVzdWx0ICY9IGFzc2VydFRydWUoSlNWYWx1ZUlzTnVsbChjb250
ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxKSksICJJdCBpcyBwb3Nz
aWJsZSB0byBhc3NpZ24gc2VsZiBhcyBhIHByb3RvdHlwZSIpOwotCi0gICAgLy8gb2JqZWN0MSAt
PiBvYmplY3QyIC0+IG9iamVjdDEKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0LCBv
YmplY3QyLCBvYmplY3QxKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4
dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MiksIG9iamVjdDEpKTsKLSAg
ICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxLCBvYmplY3QyKTsKLSAgICBy
ZXN1bHQgJj0gYXNzZXJ0VHJ1ZShKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJv
dG90eXBlKGNvbnRleHQsIG9iamVjdDEpKSwgIkl0IGlzIHBvc3NpYmxlIHRvIGNsb3NlIGEgcHJv
dG90eXBlIGNoYWluIGN5Y2xlIik7Ci0KLSAgICAvLyBvYmplY3QxIC0+IG9iamVjdDIgLT4gb2Jq
ZWN0MyAtPiBvYmplY3QxCi0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0
Miwgb2JqZWN0Myk7Ci0gICAgQVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpT
T2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDIpLCBvYmplY3QzKSk7Ci0gICAgSlNP
YmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSwgb2JqZWN0Mik7Ci0gICAgQVNTRVJU
KEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRl
eHQsIG9iamVjdDEpLCBvYmplY3QyKSk7Ci0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4
dCwgb2JqZWN0Mywgb2JqZWN0MSk7Ci0gICAgcmVzdWx0ICY9IGFzc2VydFRydWUoIUpTVmFsdWVJ
c1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVj
dDMpLCBvYmplY3QxKSwgIkl0IGlzIHBvc3NpYmxlIHRvIGNsb3NlIGEgcHJvdG90eXBlIGNoYWlu
IGN5Y2xlIik7Ci0KLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbjsKLSAgICBKU1N0cmluZ1JlZiBj
b2RlID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm8gPSB7IH07IHAgPSB7IH07IG8u
X19wcm90b19fID0gcDsgcC5fX3Byb3RvX18gPSBvIik7Ci0gICAgSlNTdHJpbmdSZWYgZmlsZSA9
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKTsKLSAgICByZXN1bHQgJj0gYXNzZXJ0
VHJ1ZSghSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBjb2RlLCAvKiB0aGlzT2JqZWN0Ki8gMCwg
ZmlsZSwgMSwgJmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAsICJBbiBleGNl
cHRpb24gc2hvdWxkIGJlIHRocm93biIpOwotCi0gICAgSlNTdHJpbmdSZWxlYXNlKGNvZGUpOwot
ICAgIEpTU3RyaW5nUmVsZWFzZShmaWxlKTsKKyAgICB7CisgICAgICAgIEpTT2JqZWN0UmVmIG9i
amVjdDEgPSBKU09iamVjdE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiBkYXRhICov
IDApOworICAgICAgICBKU09iamVjdFJlZiBvYmplY3QyID0gSlNPYmplY3RNYWtlKGNvbnRleHQs
IC8qIGpzQ2xhc3MgKi8gMCwgLyogZGF0YSAqLyAwKTsKKyAgICAgICAgSlNPYmplY3RSZWYgb2Jq
ZWN0MyA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0NsYXNzICovIDAsIC8qIGRhdGEgKi8g
MCk7CisKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSwgSlNW
YWx1ZU1ha2VOdWxsKGNvbnRleHQpKTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc051bGwoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkpKTsKKworICAgICAg
ICAvLyBvYmplY3QxIC0+IG9iamVjdDEKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29u
dGV4dCwgb2JqZWN0MSwgb2JqZWN0MSk7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVlKEpT
VmFsdWVJc051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0
MSkpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlKSBJdCBpcyBwb3NzaWJsZSB0byBhc3NpZ24gc2Vs
ZiBhcyBhIHByb3RvdHlwZSIpOworCisgICAgICAgIC8vIG9iamVjdDEgLT4gb2JqZWN0MiAtPiBv
YmplY3QxCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDIsIG9i
amVjdDEpOworICAgICAgICBBU1NFUlQoSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNP
YmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MiksIG9iamVjdDEpKTsKKyAgICAgICAg
SlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSwgb2JqZWN0Mik7CisgICAgICAg
IHJlc3VsdCAmPSBhc3NlcnRUcnVlKEpTVmFsdWVJc051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlKSBJdCBp
cyBwb3NzaWJsZSB0byBjbG9zZSBhIHByb3RvdHlwZSBjaGFpbiBjeWNsZSIpOworCisgICAgICAg
IC8vIG9iamVjdDEgLT4gb2JqZWN0MiAtPiBvYmplY3QzIC0+IG9iamVjdDEKKyAgICAgICAgSlNP
YmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0Miwgb2JqZWN0Myk7CisgICAgICAgIEFT
U0VSVChKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShj
b250ZXh0LCBvYmplY3QyKSwgb2JqZWN0MykpOworICAgICAgICBKU09iamVjdFNldFByb3RvdHlw
ZShjb250ZXh0LCBvYmplY3QxLCBvYmplY3QyKTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc1N0
cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEp
LCBvYmplY3QyKSk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVj
dDMsIG9iamVjdDEpOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZSghSlNWYWx1ZUlzU3Ry
aWN0RXF1YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0Myks
IG9iamVjdDEpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlKSBJdCBpcyBwb3NzaWJsZSB0byBjbG9z
ZSBhIHByb3RvdHlwZSBjaGFpbiBjeWNsZSIpOworICAgIH0KKyAgICB7CisgICAgICAgIEpTU3Ry
aW5nUmVmIGNvZGUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibyA9IHsgfTsgcCA9
IHsgfTsgby5fX3Byb3RvX18gPSBwOyBwLl9fcHJvdG9fXyA9IG8iKTsKKyAgICAgICAgSlNTdHJp
bmdSZWYgZmlsZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKTsKKyAgICAgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZSgh
SlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBjb2RlLCAvKiB0aGlzT2JqZWN0Ki8gMCwgZmlsZSwg
MSwgJmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAiQW4gZXhjZXB0
aW9uIHNob3VsZCBiZSB0aHJvd24iKTsKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGNvZGUpOwor
ICAgICAgICBKU1N0cmluZ1JlbGVhc2UoZmlsZSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSlNP
YmplY3RSZWYgb2JqZWN0MSA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0NsYXNzICovIDAs
IC8qIGRhdGEgKi8gMCk7CisgICAgICAgIEpTT2JqZWN0UmVmIG9iamVjdDIgPSBKU09iamVjdE1h
a2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiBkYXRhICovIDApOworICAgICAgICBKU09i
amVjdFJlZiBvYmplY3QzID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIC8qIGpzQ2xhc3MgKi8gMCwg
LyogZGF0YSAqLyAwKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworCisgICAg
ICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlRXgoY29udGV4dCwgb2JqZWN0MSwgSlNWYWx1ZU1ha2VO
dWxsKGNvbnRleHQpLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc051bGwo
Y29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkpKTsKKyAgICAg
ICAgQVNTRVJUKCFleGNlcHRpb24pOworCisgICAgICAgIC8vIG9iamVjdDEgLT4gb2JqZWN0MQor
ICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZUV4KGNvbnRleHQsIG9iamVjdDEsIG9iamVjdDEs
ICZleGNlcHRpb24pOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZShKU1ZhbHVlSXNOdWxs
KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEpKSwgIihKU09i
amVjdFNldFByb3RvdHlwZUV4KSBJdCBpcyBwb3NzaWJsZSB0byBhc3NpZ24gc2VsZiBhcyBhIHBy
b3RvdHlwZSIpOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZShleGNlcHRpb24sICIoSlNP
YmplY3RTZXRQcm90b3R5cGVFeCkgQXNzaWduaW5nIHNlbGYgYXMgYSBwcm90b3R5cGUsIHNob3Vs
ZCByaXNlIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICBleGNlcHRpb24gPSAwOworCisgICAgICAg
IC8vIG9iamVjdDEgLT4gb2JqZWN0MiAtPiBvYmplY3QxCisgICAgICAgIEpTT2JqZWN0U2V0UHJv
dG90eXBlRXgoY29udGV4dCwgb2JqZWN0Miwgb2JqZWN0MSwgJmV4Y2VwdGlvbik7CisgICAgICAg
IEFTU0VSVChKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlw
ZShjb250ZXh0LCBvYmplY3QyKSwgb2JqZWN0MSkpOworICAgICAgICBBU1NFUlQoIWV4Y2VwdGlv
bik7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlRXgoY29udGV4dCwgb2JqZWN0MSwgb2Jq
ZWN0MiwgJmV4Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVlKEpTVmFsdWVJ
c051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkpLCAi
KEpTT2JqZWN0U2V0UHJvdG90eXBlRXgpIEl0IGlzIHBvc3NpYmxlIHRvIGNsb3NlIGEgcHJvdG90
eXBlIGNoYWluIGN5Y2xlIik7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVlKGV4Y2VwdGlv
biwgIihKU09iamVjdFNldFByb3RvdHlwZUV4KSBDbG9zaW5nIG9mIGEgcHJvdG90eXBlIGNoYWlu
IGN5Y2xlLCBzaG91bGQgcmVzdWx0IGluIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICBleGNlcHRp
b24gPSAwOworCisgICAgICAgIC8vIG9iamVjdDEgLT4gb2JqZWN0MiAtPiBvYmplY3QzIC0+IG9i
amVjdDEKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGVFeChjb250ZXh0LCBvYmplY3QyLCBv
YmplY3QzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFs
KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDIpLCBvYmplY3Qz
KSk7CisgICAgICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm90
b3R5cGVFeChjb250ZXh0LCBvYmplY3QxLCBvYmplY3QyLCAmZXhjZXB0aW9uKTsKKyAgICAgICAg
QVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBl
KGNvbnRleHQsIG9iamVjdDEpLCBvYmplY3QyKSk7CisgICAgICAgIEFTU0VSVCghZXhjZXB0aW9u
KTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGVFeChjb250ZXh0LCBvYmplY3QzLCBvYmpl
Y3QxLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ICY9IGFzc2VydFRydWUoIUpTVmFsdWVJ
c1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVj
dDMpLCBvYmplY3QxKSwgIihKU09iamVjdFNldFByb3RvdHlwZUV4KSBJdCBpcyBwb3NzaWJsZSB0
byBjbG9zZSBhIHByb3RvdHlwZSBjaGFpbiBjeWNsZSIpOworICAgICAgICByZXN1bHQgJj0gYXNz
ZXJ0VHJ1ZShleGNlcHRpb24sICIoSlNPYmplY3RTZXRQcm90b3R5cGVFeCkgQ2xvc2luZyBvZiBh
IHByb3RvdHlwZSBjaGFpbiBjeWNsZSwgc2hvdWxkIHJlc3VsdCBpbiBhbiBleGNlcHRpb24iKTsK
KyAgICB9CiAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMTM5OSwxMCArMTQzNywxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh
ciogYXJndltdKQogCiAgICAgcHJpbnRmKCJQQVNTOiBJbmZpbml0ZSBwcm90b3R5cGUgY2hhaW4g
ZG9lcyBub3Qgb2NjdXIuXG4iKTsKIAotICAgIGlmIChjaGVja0ZvckN5Y2xlSW5Qcm90b3R5cGVD
aGFpbigpKQotICAgICAgICBwcmludGYoIlBBU1M6IEEgY3ljbGUgaW4gYSBwcm90b3R5cGUgY2hh
aW4gY2FuJ3QgYmUgY3JlYXRlZC5cbiIpOworICAgIGlmIChjaGVja1NldEdldFByb3RvdHlwZSgp
KQorICAgICAgICBwcmludGYoIlBBU1M6IFNldHRpbmcgYW5kIGdldHRpbmcgYSBwcm90b3R5cGUu
XG4iKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJGQUlMOiBBIGN5Y2xlIGluIGEgcHJv
dG90eXBlIGNoYWluIGNhbiBiZSBjcmVhdGVkLlxuIik7CisgICAgICAgIHByaW50ZigiRkFJTDog
QSBwcm9ibGVtIHdhcyBmb3VuZCBkdXJpbmcgc2V0dGluZyBhbmQgZ2V0dGluZyBhIHByb3RvdHlw
ZS5cbiIpOwogICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDc2
MzNmZDIuLmMyNTU5OTkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wNi0wMiAg
SmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgQVBJLCBKU09iamVjdFNl
dFByb3RvdHlwZUV4LgorCisgICAgICAgIFNldHRpbmcgcHJvdG90eXBlIGluIEpTQyBjb3VsZCB0
aHJvdyBhbiBleGNlcHRpb24uIFRoZSBKU09iamVjdFNldFByb3RvdHlwZQorICAgICAgICBmdW5j
dGlvbiBpZ25vcmVzIGFsbCBlcnJvcnMsIHNvIGRldmVsb3BlcnMgdXNpbmcgSlNDIEMgQVBJIGFy
ZSBub3QgYWJsZQorICAgICAgICB0byBjaGVjayB3aGF0IHdlbnQgd3JvbmcuIFRoZSBuZXcgZnVu
Y3Rpb24gY292ZXJzIHRoaXMgdXNlIGNhc2UgYnkgcHJvdmlkaW5nCisgICAgICAgIGFub3RoZXIg
YXJndW1lbnQgd2hpY2ggaXMga2luZCBvZiBleGNlcHRpb24gaGFuZGxlci4KKworICAgICAgICBK
U09iamVjdFNldFByb3RvdHlwZSBhbmQgZXhjZXB0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNjAKKworICAgICAgICAqIEFQSS9KU09iamVj
dFJlZi5jcHA6CisgICAgICAgIChKU09iamVjdFNldFByb3RvdHlwZSk6CisgICAgICAgIChKU09i
amVjdFNldFByb3RvdHlwZUV4KToKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWZQcml2YXRlLmg6
CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAgICAgKGNoZWNrU2V0R2V0UHJv
dG90eXBlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoK
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y2hlY2tGb3JQcm90b3R5cGVDeWNsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpz
ZXRQcm90b3R5cGVXaXRoRXJyb3JIYW5kbGluZyk6CisKIDIwMTAtMDUtMTIgIEplZHJ6ZWogTm93
YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggMzk4NWQ0ZS4u
ZDU0NTE4MiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCisr
KyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cApAQCAtNDEsNiArNDEsNyBAQCBf
SlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkKIF9KU09iamVjdFNldFByb3BlcnR5CiBfSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgKIF9KU09iamVjdFNldFByb3RvdHlwZQorX0pTT2JqZWN0U2V0
UHJvdG90eXBlRXgKIF9KU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZQogX0pTUHJvcGVy
dHlOYW1lQXJyYXlHZXRDb3VudAogX0pTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJbmRleApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCA1Y2ZmNGZhLi5hYjk4NGExIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMTAyLDEwICsxMDIsOCBAQCB2b2lkIEpT
T2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7CiAgICAgICAgIC8vIFNldHRpbmcgX19wcm90b19f
IHRvIGEgbm9uLW9iamVjdCwgbm9uLW51bGwgdmFsdWUgaXMgc2lsZW50bHkgaWdub3JlZCB0byBt
YXRjaCBNb3ppbGxhLgotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgJiYgIXZhbHVlLmlz
TnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXNldFByb3RvdHlwZVdp
dGhDeWNsZUNoZWNrKHZhbHVlKSkKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgR2VuZXJh
bEVycm9yLCAiY3ljbGljIF9fcHJvdG9fXyB2YWx1ZSIpOworICAgICAgICBpZiAodmFsdWUuaXNP
YmplY3QoKSB8fCB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHNldFByb3RvdHlwZVdpdGhF
cnJvckhhbmRsaW5nKGV4ZWMsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCmluZGV4IDA3MzhkNjAuLjY1NzBiOTUgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDb21tb25JZGVu
dGlmaWVycy5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKKyNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpT
TnVtYmVyQ2VsbC5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgpAQCAtODcsOSArODgsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgfkpTT2JqZWN0KCk7CiAKICAgICAgICAg
SlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdDsKKyAgICAgICAgLy8gU2V0IHByb3RvdHlwZSBvZiB0
aGlzIG9iamVjdCB0byBnaXZlbiB2YWx1ZS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXNuJ3Qg
Y2hlY2sgYXJndW1lbnRzLgogICAgICAgICB2b2lkIHNldFByb3RvdHlwZShKU1ZhbHVlIHByb3Rv
dHlwZSk7Ci0gICAgICAgIGJvb2wgc2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNWYWx1ZSBw
cm90b3R5cGUpOwotICAgICAgICAKKyAgICAgICAgLy8gU2V0IHByb3RvdHlwZSBvZiB0aGlzIG9i
amVjdCB0byBnaXZlbiB2YWx1ZS4gVGhpcyBtZXRob2QgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZgor
ICAgICAgICAvLyBnaXZlbiBwcm90b3R5cGUgaXMgbm90IHN1aXRhYmxlIGZvciBiZWluZyBhIHBy
b3RvdHlwZSBmb3IgdGhpcyBvYmplY3QuIFRydWUgaXMgcmV0dXJuZWQKKyAgICAgICAgLy8gaWYg
bmV3IHByb3RvdHlwZSB3YXMgc2V0IHN1Y2Nlc3NmdWxseSwgZmFsc2UgaW4gb3RoZXIgY2FzZS4K
KyAgICAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRoRXJyb3JIYW5kbGluZyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgZ2l2ZW4gdmFsdWUg
Y291bGQgYmUgc2V0IGFzIHByb3RvdHlwZSBmb3IgdGhpcyBvYmplY3Qgd2l0aG91dCBjcmVhdGlu
ZyBhIGN5Y2xlIGluCisgICAgICAgIC8vIHByb3RvdHlwZSBjaGFpbi4gUmV0dXJucyB0cnVlIGlm
IGEgY3ljbGUgd2FzIGZvdW5kLCBmYWxzZSBpbiBvdGhlciBjYXNlLgorICAgICAgICBib29sIGNo
ZWNrRm9yUHJvdG90eXBlQ3ljbGUoSlNWYWx1ZSB2YWx1ZSk7CisKICAgICAgICAgdm9pZCBzZXRT
dHJ1Y3R1cmUoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CiAgICAgICAgIFN0cnVjdHVy
ZSogaW5oZXJpdG9ySUQoKTsKIApAQCAtMzEzLDE5ICszMjEsMjYgQEAgaW5saW5lIEpTVmFsdWUg
SlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKTsKIH0KIAotaW5saW5lIGJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdp
dGhDeWNsZUNoZWNrKEpTVmFsdWUgcHJvdG90eXBlKQoraW5saW5lIGJvb2wgSlNPYmplY3Q6OmNo
ZWNrRm9yUHJvdG90eXBlQ3ljbGUoSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBKU1ZhbHVlIG5leHRQ
cm90b3R5cGVWYWx1ZSA9IHByb3RvdHlwZTsKKyAgICBKU1ZhbHVlIG5leHRQcm90b3R5cGVWYWx1
ZSA9IHZhbHVlOwogICAgIHdoaWxlIChuZXh0UHJvdG90eXBlVmFsdWUgJiYgbmV4dFByb3RvdHlw
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG5leHRQcm90b3R5cGUgPSBh
c09iamVjdChuZXh0UHJvdG90eXBlVmFsdWUpLT51bndyYXBwZWRPYmplY3QoKTsKICAgICAgICAg
aWYgKG5leHRQcm90b3R5cGUgPT0gdGhpcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgbmV4dFByb3RvdHlwZVZhbHVlID0gbmV4dFByb3RvdHlwZS0+cHJvdG90eXBlKCk7CiAg
ICAgfQotICAgIHNldFByb3RvdHlwZShwcm90b3R5cGUpOwogICAgIHJldHVybiB0cnVlOwogfQog
CitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEVycm9ySGFuZGxpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBpZiAoY2hlY2tGb3JQcm90
b3R5cGVDeWNsZShwcm90b3R5cGUpKQorICAgICAgICBzZXRQcm90b3R5cGUocHJvdG90eXBlKTsK
KyAgICBlbHNlCisgICAgICAgIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiY3ljbGlj
IF9fcHJvdG9fXyB2YWx1ZSIpOworfQorCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90
eXBlKEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIEFTU0VSVChwcm90b3R5cGUpOwo=
</data>
<flag name="review"
          id="42292"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59259</attachid>
            <date>2010-06-21 09:40:07 -0700</date>
            <delta_ts>2010-06-22 03:46:10 -0700</delta_ts>
            <desc>Fix v1.1</desc>
            <filename>jsobj.diff</filename>
            <type>text/plain</type>
            <size>15412</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">Y29tbWl0IGViOWNhZTcwMDZhNjZkNTQ0Y2QyNTBlZmU5N2E5Y2E2YzkxMTE5NjgKQXV0aG9yOiBK
ZWRyemVqIE5vd2Fja2kgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CkRhdGU6ICAgTW9uIE1h
eSAzMSAxNjoxMzoxOSAyMDEwICswMjAwCgogICAgTmV3IEFQSSwgSlNPYmplY3RTZXRQcm90b3R5
cGVXaXRoRXJyb3JIYW5kbGluZy4KICAgIAogICAgU2V0dGluZyBwcm90b3R5cGUgaW4gSlNDIGNv
dWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gVGhlIEpTT2JqZWN0U2V0UHJvdG90eXBlCiAgICBmdW5j
dGlvbiBpZ25vcmVzIGFsbCBlcnJvcnMsIHNvIGRldmVsb3BlcnMgdXNpbmcgSlNDIEMgQVBJIGFy
ZSBub3QgYWJsZQogICAgdG8gY2hlY2sgd2hhdCB3ZW50IHdyb25nLiBUaGUgbmV3IGZ1bmN0aW9u
IGNvdmVycyB0aGlzIHVzZSBjYXNlIGJ5IHByb3ZpZGluZwogICAgYW5vdGhlciBhcmd1bWVudCB3
aGljaCBpcyBraW5kIG9mIGV4Y2VwdGlvbiBoYW5kbGVyLgoKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RS
ZWYuY3BwCmluZGV4IDVlMDUzNmYuLmM4NTY5N2IgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVm
LmNwcApAQCAtMjM1LDcgKzIzNSwyNCBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90eXBlKEpTQ29u
dGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNWYWx1ZVJlZiB2YWx1ZQogICAgIEpT
T2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0
b0pTKGV4ZWMsIHZhbHVlKTsKIAotICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoQ3ljbGVD
aGVjayhqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOworICAgIGpzT2Jq
ZWN0LT5zZXRQcm90b3R5cGVXaXRoRXJyb3JIYW5kbGluZyhleGVjLCBqc1ZhbHVlLmlzT2JqZWN0
KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOworICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cit9
CisKK3ZvaWQgSlNPYmplY3RTZXRQcm90b3R5cGVXaXRoRXJyb3JIYW5kbGluZyhKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgQVBJ
RW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKKworICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRv
SlMob2JqZWN0KTsKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKKwor
ICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoRXJyb3JIYW5kbGluZyhleGVjLCBqc1ZhbHVl
LmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0NvbnRl
eHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZlByaXZhdGUuaCBiL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZlByaXZhdGUuaAppbmRleCAzMmU4MGFiLi45NDhj
ZWI4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWZQcml2YXRlLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmUHJpdmF0ZS5oCkBAIC02Nyw2ICs2
NywxNiBAQCBKU19FWFBPUlQgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByaXZhdGVQcm9wZXJ0eShK
U0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYgogICovCiBKU19FWFBPUlQgYm9vbCBKU09i
amVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBv
YmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSk7CiAKKy8qIQorQGZ1bmN0aW9uCitAYWJz
dHJhY3QgU2V0cyBhbiBvYmplY3QncyBwcm90b3R5cGUuCitAcGFyYW0gY3R4ICBUaGUgZXhlY3V0
aW9uIGNvbnRleHQgdG8gdXNlLgorQHBhcmFtIG9iamVjdCBUaGUgSlNPYmplY3Qgd2hvc2UgcHJv
dG90eXBlIHlvdSB3YW50IHRvIHNldC4KK0BwYXJhbSB2YWx1ZSBBIEpTVmFsdWUgdG8gc2V0IGFz
IHRoZSBvYmplY3QncyBwcm90b3R5cGUuCitAcGFyYW0gZXhjZXB0aW9uIEEgcG9pbnRlciB0byBh
IEpTVmFsdWVSZWYgaW4gd2hpY2ggdG8gc3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBhbnkuIFBhc3Mg
TlVMTCBpZiB5b3UgZG8gbm90IGNhcmUgdG8gc3RvcmUgYW4gZXhjZXB0aW9uLgorKi8KK0pTX0VY
UE9SVCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90eXBlV2l0aEVycm9ySGFuZGxpbmcoSlNDb250ZXh0
UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYyBiL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpLmMKaW5kZXggNzgwZTk5Ni4uY2RjODk5NyAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYworKysgYi9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5jCkBAIC03NzYsNDMgKzc3Niw4MSBAQCBzdGF0aWMgYm9vbCBhc3NlcnRU
cnVlKGJvb2wgdmFsdWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi1zdGF0aWMgYm9vbCBjaGVja0ZvckN5Y2xlSW5Qcm90b3R5cGVDaGFpbigpCitzdGF0aWMg
Ym9vbCBjaGVja1NldEdldFByb3RvdHlwZSgpCiB7CiAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwog
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDAp
OwotICAgIEpTT2JqZWN0UmVmIG9iamVjdDEgPSBKU09iamVjdE1ha2UoY29udGV4dCwgLyoganND
bGFzcyAqLyAwLCAvKiBkYXRhICovIDApOwotICAgIEpTT2JqZWN0UmVmIG9iamVjdDIgPSBKU09i
amVjdE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiBkYXRhICovIDApOwotICAgIEpT
T2JqZWN0UmVmIG9iamVjdDMgPSBKU09iamVjdE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAw
LCAvKiBkYXRhICovIDApOwotCi0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2Jq
ZWN0MSwgSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzTnVs
bChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxKSkpOwotCi0g
ICAgLy8gb2JqZWN0MSAtPiBvYmplY3QxCi0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4
dCwgb2JqZWN0MSwgb2JqZWN0MSk7Ci0gICAgcmVzdWx0ICY9IGFzc2VydFRydWUoSlNWYWx1ZUlz
TnVsbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxKSksICJJ
dCBpcyBwb3NzaWJsZSB0byBhc3NpZ24gc2VsZiBhcyBhIHByb3RvdHlwZSIpOwotCi0gICAgLy8g
b2JqZWN0MSAtPiBvYmplY3QyIC0+IG9iamVjdDEKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShj
b250ZXh0LCBvYmplY3QyLCBvYmplY3QxKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzU3RyaWN0RXF1
YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MiksIG9iamVj
dDEpKTsKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxLCBvYmplY3Qy
KTsKLSAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZShKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIEpTT2Jq
ZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEpKSwgIkl0IGlzIHBvc3NpYmxlIHRvIGNs
b3NlIGEgcHJvdG90eXBlIGNoYWluIGN5Y2xlIik7Ci0KLSAgICAvLyBvYmplY3QxIC0+IG9iamVj
dDIgLT4gb2JqZWN0MyAtPiBvYmplY3QxCi0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4
dCwgb2JqZWN0Miwgb2JqZWN0Myk7Ci0gICAgQVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDIpLCBvYmplY3QzKSk7
Ci0gICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSwgb2JqZWN0Mik7Ci0g
ICAgQVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90
eXBlKGNvbnRleHQsIG9iamVjdDEpLCBvYmplY3QyKSk7Ci0gICAgSlNPYmplY3RTZXRQcm90b3R5
cGUoY29udGV4dCwgb2JqZWN0Mywgb2JqZWN0MSk7Ci0gICAgcmVzdWx0ICY9IGFzc2VydFRydWUo
IUpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRl
eHQsIG9iamVjdDMpLCBvYmplY3QxKSwgIkl0IGlzIHBvc3NpYmxlIHRvIGNsb3NlIGEgcHJvdG90
eXBlIGNoYWluIGN5Y2xlIik7Ci0KLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbjsKLSAgICBKU1N0
cmluZ1JlZiBjb2RlID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm8gPSB7IH07IHAg
PSB7IH07IG8uX19wcm90b19fID0gcDsgcC5fX3Byb3RvX18gPSBvIik7Ci0gICAgSlNTdHJpbmdS
ZWYgZmlsZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKTsKLSAgICByZXN1bHQg
Jj0gYXNzZXJ0VHJ1ZSghSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBjb2RlLCAvKiB0aGlzT2Jq
ZWN0Ki8gMCwgZmlsZSwgMSwgJmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAs
ICJBbiBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biIpOwotCi0gICAgSlNTdHJpbmdSZWxlYXNl
KGNvZGUpOwotICAgIEpTU3RyaW5nUmVsZWFzZShmaWxlKTsKKyAgICB7CisgICAgICAgIEpTT2Jq
ZWN0UmVmIG9iamVjdDEgPSBKU09iamVjdE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAv
KiBkYXRhICovIDApOworICAgICAgICBKU09iamVjdFJlZiBvYmplY3QyID0gSlNPYmplY3RNYWtl
KGNvbnRleHQsIC8qIGpzQ2xhc3MgKi8gMCwgLyogZGF0YSAqLyAwKTsKKyAgICAgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0MyA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0NsYXNzICovIDAsIC8q
IGRhdGEgKi8gMCk7CisKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2Jq
ZWN0MSwgSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpKTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJ
c051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkpKTsK
KworICAgICAgICAvLyBvYmplY3QxIC0+IG9iamVjdDEKKyAgICAgICAgSlNPYmplY3RTZXRQcm90
b3R5cGUoY29udGV4dCwgb2JqZWN0MSwgb2JqZWN0MSk7CisgICAgICAgIHJlc3VsdCAmPSBhc3Nl
cnRUcnVlKEpTVmFsdWVJc051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4
dCwgb2JqZWN0MSkpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlKSBJdCBpcyBwb3NzaWJsZSB0byBh
c3NpZ24gc2VsZiBhcyBhIHByb3RvdHlwZSIpOworCisgICAgICAgIC8vIG9iamVjdDEgLT4gb2Jq
ZWN0MiAtPiBvYmplY3QxCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHQsIG9i
amVjdDIsIG9iamVjdDEpOworICAgICAgICBBU1NFUlQoSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MiksIG9iamVjdDEpKTsK
KyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSwgb2JqZWN0Mik7
CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVlKEpTVmFsdWVJc051bGwoY29udGV4dCwgSlNP
YmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkpLCAiKEpTT2JqZWN0U2V0UHJvdG90
eXBlKSBJdCBpcyBwb3NzaWJsZSB0byBjbG9zZSBhIHByb3RvdHlwZSBjaGFpbiBjeWNsZSIpOwor
CisgICAgICAgIC8vIG9iamVjdDEgLT4gb2JqZWN0MiAtPiBvYmplY3QzIC0+IG9iamVjdDEKKyAg
ICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0Miwgb2JqZWN0Myk7Cisg
ICAgICAgIEFTU0VSVChKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250ZXh0LCBKU09iamVjdEdldFBy
b3RvdHlwZShjb250ZXh0LCBvYmplY3QyKSwgb2JqZWN0MykpOworICAgICAgICBKU09iamVjdFNl
dFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxLCBvYmplY3QyKTsKKyAgICAgICAgQVNTRVJUKEpT
VmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQs
IG9iamVjdDEpLCBvYmplY3QyKSk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRl
eHQsIG9iamVjdDMsIG9iamVjdDEpOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZSghSlNW
YWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwg
b2JqZWN0MyksIG9iamVjdDEpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlKSBJdCBpcyBwb3NzaWJs
ZSB0byBjbG9zZSBhIHByb3RvdHlwZSBjaGFpbiBjeWNsZSIpOworICAgIH0KKyAgICB7CisgICAg
ICAgIEpTU3RyaW5nUmVmIGNvZGUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibyA9
IHsgfTsgcCA9IHsgfTsgby5fX3Byb3RvX18gPSBwOyBwLl9fcHJvdG9fXyA9IG8iKTsKKyAgICAg
ICAgSlNTdHJpbmdSZWYgZmlsZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKTsK
KyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgICAgICByZXN1bHQgJj0gYXNz
ZXJ0VHJ1ZSghSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBjb2RlLCAvKiB0aGlzT2JqZWN0Ki8g
MCwgZmlsZSwgMSwgJmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAi
QW4gZXhjZXB0aW9uIHNob3VsZCBiZSB0aHJvd24iKTsKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNl
KGNvZGUpOworICAgICAgICBKU1N0cmluZ1JlbGVhc2UoZmlsZSk7CisgICAgfQorICAgIHsKKyAg
ICAgICAgSlNPYmplY3RSZWYgb2JqZWN0MSA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0Ns
YXNzICovIDAsIC8qIGRhdGEgKi8gMCk7CisgICAgICAgIEpTT2JqZWN0UmVmIG9iamVjdDIgPSBK
U09iamVjdE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiBkYXRhICovIDApOworICAg
ICAgICBKU09iamVjdFJlZiBvYmplY3QzID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIC8qIGpzQ2xh
c3MgKi8gMCwgLyogZGF0YSAqLyAwKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAw
OworCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlRXgoY29udGV4dCwgb2JqZWN0MSwgSlNW
YWx1ZU1ha2VOdWxsKGNvbnRleHQpLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgQVNTRVJUKEpTVmFs
dWVJc051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkp
KTsKKyAgICAgICAgQVNTRVJUKCFleGNlcHRpb24pOworCisgICAgICAgIC8vIG9iamVjdDEgLT4g
b2JqZWN0MQorICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZUV4KGNvbnRleHQsIG9iamVjdDEs
IG9iamVjdDEsICZleGNlcHRpb24pOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZShKU1Zh
bHVlSXNOdWxsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEp
KSwgIihKU09iamVjdFNldFByb3RvdHlwZUV4KSBJdCBpcyBwb3NzaWJsZSB0byBhc3NpZ24gc2Vs
ZiBhcyBhIHByb3RvdHlwZSIpOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZShleGNlcHRp
b24sICIoSlNPYmplY3RTZXRQcm90b3R5cGVFeCkgQXNzaWduaW5nIHNlbGYgYXMgYSBwcm90b3R5
cGUsIHNob3VsZCByaXNlIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICBleGNlcHRpb24gPSAwOwor
CisgICAgICAgIC8vIG9iamVjdDEgLT4gb2JqZWN0MiAtPiBvYmplY3QxCisgICAgICAgIEpTT2Jq
ZWN0U2V0UHJvdG90eXBlRXgoY29udGV4dCwgb2JqZWN0Miwgb2JqZWN0MSwgJmV4Y2VwdGlvbik7
CisgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250ZXh0LCBKU09iamVjdEdl
dFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QyKSwgb2JqZWN0MSkpOworICAgICAgICBBU1NFUlQo
IWV4Y2VwdGlvbik7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlRXgoY29udGV4dCwgb2Jq
ZWN0MSwgb2JqZWN0MiwgJmV4Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVl
KEpTVmFsdWVJc051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2Jq
ZWN0MSkpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlRXgpIEl0IGlzIHBvc3NpYmxlIHRvIGNsb3Nl
IGEgcHJvdG90eXBlIGNoYWluIGN5Y2xlIik7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVl
KGV4Y2VwdGlvbiwgIihKU09iamVjdFNldFByb3RvdHlwZUV4KSBDbG9zaW5nIG9mIGEgcHJvdG90
eXBlIGNoYWluIGN5Y2xlLCBzaG91bGQgcmVzdWx0IGluIGFuIGV4Y2VwdGlvbiIpOworICAgICAg
ICBleGNlcHRpb24gPSAwOworCisgICAgICAgIC8vIG9iamVjdDEgLT4gb2JqZWN0MiAtPiBvYmpl
Y3QzIC0+IG9iamVjdDEKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGVFeChjb250ZXh0LCBv
YmplY3QyLCBvYmplY3QzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc1N0
cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDIp
LCBvYmplY3QzKSk7CisgICAgICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICAgICAgSlNPYmpl
Y3RTZXRQcm90b3R5cGVFeChjb250ZXh0LCBvYmplY3QxLCBvYmplY3QyLCAmZXhjZXB0aW9uKTsK
KyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0
UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEpLCBvYmplY3QyKSk7CisgICAgICAgIEFTU0VSVCgh
ZXhjZXB0aW9uKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGVFeChjb250ZXh0LCBvYmpl
Y3QzLCBvYmplY3QxLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ICY9IGFzc2VydFRydWUo
IUpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRl
eHQsIG9iamVjdDMpLCBvYmplY3QxKSwgIihKU09iamVjdFNldFByb3RvdHlwZUV4KSBJdCBpcyBw
b3NzaWJsZSB0byBjbG9zZSBhIHByb3RvdHlwZSBjaGFpbiBjeWNsZSIpOworICAgICAgICByZXN1
bHQgJj0gYXNzZXJ0VHJ1ZShleGNlcHRpb24sICIoSlNPYmplY3RTZXRQcm90b3R5cGVFeCkgQ2xv
c2luZyBvZiBhIHByb3RvdHlwZSBjaGFpbiBjeWNsZSwgc2hvdWxkIHJlc3VsdCBpbiBhbiBleGNl
cHRpb24iKTsKKyAgICB9CiAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTM5OSwxMCArMTQzNywxMCBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY2hhciogYXJndltdKQogCiAgICAgcHJpbnRmKCJQQVNTOiBJbmZpbml0ZSBwcm90b3R5
cGUgY2hhaW4gZG9lcyBub3Qgb2NjdXIuXG4iKTsKIAotICAgIGlmIChjaGVja0ZvckN5Y2xlSW5Q
cm90b3R5cGVDaGFpbigpKQotICAgICAgICBwcmludGYoIlBBU1M6IEEgY3ljbGUgaW4gYSBwcm90
b3R5cGUgY2hhaW4gY2FuJ3QgYmUgY3JlYXRlZC5cbiIpOworICAgIGlmIChjaGVja1NldEdldFBy
b3RvdHlwZSgpKQorICAgICAgICBwcmludGYoIlBBU1M6IFNldHRpbmcgYW5kIGdldHRpbmcgYSBw
cm90b3R5cGUuXG4iKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJGQUlMOiBBIGN5Y2xl
IGluIGEgcHJvdG90eXBlIGNoYWluIGNhbiBiZSBjcmVhdGVkLlxuIik7CisgICAgICAgIHByaW50
ZigiRkFJTDogQSBwcm9ibGVtIHdhcyBmb3VuZCBkdXJpbmcgc2V0dGluZyBhbmQgZ2V0dGluZyBh
IHByb3RvdHlwZS5cbiIpOwogICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CmluZGV4IGIxOGQ1NWIuLmNmYmNhZTYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAx
MC0wNi0yMSAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgQVBJLCBK
U09iamVjdFNldFByb3RvdHlwZVdpdGhFcnJvckhhbmRsaW5nLgorCisgICAgICAgIFNldHRpbmcg
cHJvdG90eXBlIGluIEpTQyBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFRoZSBKU09iamVjdFNl
dFByb3RvdHlwZQorICAgICAgICBmdW5jdGlvbiBpZ25vcmVzIGFsbCBlcnJvcnMsIHNvIGRldmVs
b3BlcnMgdXNpbmcgSlNDIEMgQVBJIGFyZSBub3QgYWJsZQorICAgICAgICB0byBjaGVjayB3aGF0
IHdlbnQgd3JvbmcuIFRoZSBuZXcgZnVuY3Rpb24gY292ZXJzIHRoaXMgdXNlIGNhc2UgYnkgcHJv
dmlkaW5nCisgICAgICAgIGFub3RoZXIgYXJndW1lbnQgd2hpY2ggaXMga2luZCBvZiBleGNlcHRp
b24gaGFuZGxlci4KKworICAgICAgICBBZGQgYSB2ZXJzaW9uIG9mIEpTT2JqZWN0U2V0UHJvdG90
eXBlIHRoYXQgeWllbGRzIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBwcm90b3R5cGUgY2FuJ3QgYmUg
c2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA2
MAorCisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0U2V0
UHJvdG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJvdG90eXBlV2l0aEVycm9ySGFuZGxp
bmcpOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZlByaXZhdGUuaDoKKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAoY2hlY2tTZXRHZXRQcm90b3R5cGUpOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0ZvclBy
b3RvdHlwZUN5Y2xlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhF
cnJvckhhbmRsaW5nKToKKwogMjAxMC0wNi0xOCAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4u
dHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5u
LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDkzZTAxZTIuLmQ2OWE4ODMgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTQxLDYgKzQxLDcgQEAgX0pTT2JqZWN0U2V0UHJp
dmF0ZVByb3BlcnR5CiBfSlNPYmplY3RTZXRQcm9wZXJ0eQogX0pTT2JqZWN0U2V0UHJvcGVydHlB
dEluZGV4CiBfSlNPYmplY3RTZXRQcm90b3R5cGUKK19KU09iamVjdFNldFByb3RvdHlwZVdpdGhF
cnJvckhhbmRsaW5nCiBfSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUKIF9KU1Byb3Bl
cnR5TmFtZUFycmF5R2V0Q291bnQKIF9KU1Byb3BlcnR5TmFtZUFycmF5R2V0TmFtZUF0SW5kZXgK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKaW5kZXggY2FiYzQyOC4uZTFkNmI3MSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTEwMiwxMCArMTAyLDkgQEAgdm9pZCBK
U09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHUKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bykgewogICAgICAgICAvLyBTZXR0aW5nIF9fcHJvdG9f
XyB0byBhIG5vbi1vYmplY3QsIG5vbi1udWxsIHZhbHVlIGlzIHNpbGVudGx5IGlnbm9yZWQgdG8g
bWF0Y2ggTW96aWxsYS4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpICYmICF2YWx1ZS5p
c051bGwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFzZXRQcm90b3R5cGVX
aXRoQ3ljbGVDaGVjayh2YWx1ZSkpCi0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJjeWNsaWMgX19wcm90b19fIHZhbHVlIikpOworICAgICAgICBpZiAodmFs
dWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHNldFByb3RvdHlw
ZVdpdGhFcnJvckhhbmRsaW5nKGV4ZWMsIHZhbHVlKTsKKwogICAgICAgICByZXR1cm47CiAgICAg
fQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKaW5kZXggZWRkMzc2Yy4uM2E0YWVmNCAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtNTUsNiArNTUsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBTdHJ1Y3R1cmU7CiAgICAgc3RydWN0IEhhc2hUYWJsZTsKIAorICAgIEpT
T2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJik7CisgICAgSlNP
YmplY3QqIHRocm93RXJyb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKKwogICAgIC8vIEVDTUEg
MjYyLTMgOC42LjEKICAgICAvLyBQcm9wZXJ0eSBhdHRyaWJ1dGVzCiAgICAgZW51bSBBdHRyaWJ1
dGUgewpAQCAtODcsOSArOTAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwg
fkpTT2JqZWN0KCk7CiAKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdDsKKyAgICAg
ICAgLy8gU2V0IHByb3RvdHlwZSBvZiB0aGlzIG9iamVjdCB0byBnaXZlbiB2YWx1ZS4gTm90ZSB0
aGF0IHRoaXMgbWV0aG9kIGRvZXNuJ3QgY2hlY2sgYXJndW1lbnRzLgogICAgICAgICB2b2lkIHNl
dFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgICAgIGJvb2wgc2V0UHJvdG90eXBl
V2l0aEN5Y2xlQ2hlY2soSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgICAgICAKKyAgICAgICAgLy8g
U2V0IHByb3RvdHlwZSBvZiB0aGlzIG9iamVjdCB0byBnaXZlbiB2YWx1ZS4gVGhpcyBtZXRob2Qg
dGhyb3dzIGFuIGV4Y2VwdGlvbiBpZgorICAgICAgICAvLyBnaXZlbiBwcm90b3R5cGUgaXMgbm90
IHN1aXRhYmxlIGZvciBiZWluZyBhIHByb3RvdHlwZSBmb3IgdGhpcyBvYmplY3QuIFRydWUgaXMg
cmV0dXJuZWQKKyAgICAgICAgLy8gaWYgbmV3IHByb3RvdHlwZSB3YXMgc2V0IHN1Y2Nlc3NmdWxs
eSwgZmFsc2UgaW4gb3RoZXIgY2FzZS4KKyAgICAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRoRXJy
b3JIYW5kbGluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgZ2l2ZW4gdmFsdWUgY291bGQgYmUgc2V0IGFzIHByb3RvdHlwZSBmb3IgdGhp
cyBvYmplY3Qgd2l0aG91dCBjcmVhdGluZyBhIGN5Y2xlIGluCisgICAgICAgIC8vIHByb3RvdHlw
ZSBjaGFpbi4gUmV0dXJucyB0cnVlIGlmIGEgY3ljbGUgd2FzIGZvdW5kLCBmYWxzZSBpbiBvdGhl
ciBjYXNlLgorICAgICAgICBib29sIGNoZWNrRm9yUHJvdG90eXBlQ3ljbGUoSlNWYWx1ZSB2YWx1
ZSk7CisKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0
dXJlPik7CiAgICAgICAgIFN0cnVjdHVyZSogaW5oZXJpdG9ySUQoKTsKIApAQCAtMzE2LDE5ICsz
MjYsMjYgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKIH0KIAotaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTVmFsdWUgcHJvdG90eXBlKQor
aW5saW5lIGJvb2wgSlNPYmplY3Q6OmNoZWNrRm9yUHJvdG90eXBlQ3ljbGUoSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBKU1ZhbHVlIG5leHRQcm90b3R5cGVWYWx1ZSA9IHByb3RvdHlwZTsKKyAgICBK
U1ZhbHVlIG5leHRQcm90b3R5cGVWYWx1ZSA9IHZhbHVlOwogICAgIHdoaWxlIChuZXh0UHJvdG90
eXBlVmFsdWUgJiYgbmV4dFByb3RvdHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNP
YmplY3QqIG5leHRQcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG90eXBlVmFsdWUpLT51bndy
YXBwZWRPYmplY3QoKTsKICAgICAgICAgaWYgKG5leHRQcm90b3R5cGUgPT0gdGhpcykKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV4dFByb3RvdHlwZVZhbHVlID0gbmV4dFBy
b3RvdHlwZS0+cHJvdG90eXBlKCk7CiAgICAgfQotICAgIHNldFByb3RvdHlwZShwcm90b3R5cGUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90
eXBlV2l0aEVycm9ySGFuZGxpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICBpZiAoY2hlY2tGb3JQcm90b3R5cGVDeWNsZShwcm90b3R5cGUpKQorICAgICAgICBz
ZXRQcm90b3R5cGUocHJvdG90eXBlKTsKKyAgICBlbHNlCisgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlRXJyb3IoZXhlYywgImN5Y2xpYyBfX3Byb3RvX18gdmFsdWUiKSk7Cit9CisKIGlu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpCiB7CiAg
ICAgQVNTRVJUKHByb3RvdHlwZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59358</attachid>
            <date>2010-06-22 03:46:10 -0700</date>
            <delta_ts>2010-12-14 02:00:26 -0800</delta_ts>
            <desc>Fix v1.2</desc>
            <filename>setproto.diff</filename>
            <type>text/plain</type>
            <size>14876</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCmluZGV4IDVlMDUzNmYuLjAxMmE2NjUgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcApAQCAtMjM1LDcgKzIzNSwyNCBAQCB2b2lkIEpTT2Jq
ZWN0U2V0UHJvdG90eXBlKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNW
YWx1ZVJlZiB2YWx1ZQogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAotICAgIGpzT2JqZWN0LT5z
ZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDog
anNOdWxsKCkpOworICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGVXaXRoRXhjZXB0aW9uKGV4ZWMs
IGpzVmFsdWUuaXNPYmplY3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7CisgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKK30KKwordm9pZCBKU09iamVjdFNldFByb3RvdHlwZVdpdGhFeGNlcHRp
b24oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVl
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
dHgpOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CisKKyAgICBKU09iamVjdCog
anNPYmplY3QgPSB0b0pTKG9iamVjdCk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVj
LCB2YWx1ZSk7CisKKyAgICBqc09iamVjdC0+c2V0UHJvdG90eXBlV2l0aEV4Y2VwdGlvbihleGVj
LCBqc1ZhbHVlLmlzT2JqZWN0KCkgPyBqc1ZhbHVlIDoganNOdWxsKCkpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0
eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3Bl
cnR5TmFtZSkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZlByaXZh
dGUuaCBiL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZlByaXZhdGUuaAppbmRleCAzMmU4
MGFiLi41ZDY0MzZkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWZQ
cml2YXRlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmUHJpdmF0ZS5oCkBA
IC02Nyw2ICs2NywxNiBAQCBKU19FWFBPUlQgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByaXZhdGVQ
cm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYgogICovCiBKU19FWFBPUlQg
Ym9vbCBKU09iamVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSk7CiAKKy8qIQorQGZ1bmN0
aW9uCitAYWJzdHJhY3QgU2V0cyBhbiBvYmplY3QncyBwcm90b3R5cGUuCitAcGFyYW0gY3R4ICBU
aGUgZXhlY3V0aW9uIGNvbnRleHQgdG8gdXNlLgorQHBhcmFtIG9iamVjdCBUaGUgSlNPYmplY3Qg
d2hvc2UgcHJvdG90eXBlIHlvdSB3YW50IHRvIHNldC4KK0BwYXJhbSB2YWx1ZSBBIEpTVmFsdWUg
dG8gc2V0IGFzIHRoZSBvYmplY3QncyBwcm90b3R5cGUuCitAcGFyYW0gZXhjZXB0aW9uIEEgcG9p
bnRlciB0byBhIEpTVmFsdWVSZWYgaW4gd2hpY2ggdG8gc3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBh
bnkuIFBhc3MgTlVMTCBpZiB5b3UgZG8gbm90IGNhcmUgdG8gc3RvcmUgYW4gZXhjZXB0aW9uLgor
Ki8KK0pTX0VYUE9SVCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90eXBlV2l0aEV4Y2VwdGlvbihKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jIGIvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwppbmRleCA3ODBlOTk2Li5jZGM4OTk3IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLmMKQEAgLTc3Niw0MyArNzc2LDgxIEBAIHN0YXRpYyBib29sIGFz
c2VydFRydWUoYm9vbCB2YWx1ZSwgY29uc3QgY2hhciogbWVzc2FnZSkKICAgICByZXR1cm4gdmFs
dWU7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNrRm9yQ3ljbGVJblByb3RvdHlwZUNoYWluKCkKK3N0
YXRpYyBib29sIGNoZWNrU2V0R2V0UHJvdG90eXBlKCkKIHsKICAgICBib29sIHJlc3VsdCA9IHRy
dWU7CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVh
dGUoMCk7Ci0gICAgSlNPYmplY3RSZWYgb2JqZWN0MSA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAv
KiBqc0NsYXNzICovIDAsIC8qIGRhdGEgKi8gMCk7Ci0gICAgSlNPYmplY3RSZWYgb2JqZWN0MiA9
IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0NsYXNzICovIDAsIC8qIGRhdGEgKi8gMCk7Ci0g
ICAgSlNPYmplY3RSZWYgb2JqZWN0MyA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0NsYXNz
ICovIDAsIC8qIGRhdGEgKi8gMCk7Ci0KLSAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0
LCBvYmplY3QxLCBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCkpOwotICAgIEFTU0VSVChKU1ZhbHVl
SXNOdWxsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEpKSk7
Ci0KLSAgICAvLyBvYmplY3QxIC0+IG9iamVjdDEKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShj
b250ZXh0LCBvYmplY3QxLCBvYmplY3QxKTsKLSAgICByZXN1bHQgJj0gYXNzZXJ0VHJ1ZShKU1Zh
bHVlSXNOdWxsKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEp
KSwgIkl0IGlzIHBvc3NpYmxlIHRvIGFzc2lnbiBzZWxmIGFzIGEgcHJvdG90eXBlIik7Ci0KLSAg
ICAvLyBvYmplY3QxIC0+IG9iamVjdDIgLT4gb2JqZWN0MQotICAgIEpTT2JqZWN0U2V0UHJvdG90
eXBlKGNvbnRleHQsIG9iamVjdDIsIG9iamVjdDEpOwotICAgIEFTU0VSVChKU1ZhbHVlSXNTdHJp
Y3RFcXVhbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QyKSwg
b2JqZWN0MSkpOwotICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEsIG9i
amVjdDIpOwotICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVlKEpTVmFsdWVJc051bGwoY29udGV4dCwg
SlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSkpLCAiSXQgaXMgcG9zc2libGUg
dG8gY2xvc2UgYSBwcm90b3R5cGUgY2hhaW4gY3ljbGUiKTsKLQotICAgIC8vIG9iamVjdDEgLT4g
b2JqZWN0MiAtPiBvYmplY3QzIC0+IG9iamVjdDEKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShj
b250ZXh0LCBvYmplY3QyLCBvYmplY3QzKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzU3RyaWN0RXF1
YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MiksIG9iamVj
dDMpKTsKLSAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxLCBvYmplY3Qy
KTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSksIG9iamVjdDIpKTsKLSAgICBKU09iamVjdFNldFBy
b3RvdHlwZShjb250ZXh0LCBvYmplY3QzLCBvYmplY3QxKTsKLSAgICByZXN1bHQgJj0gYXNzZXJ0
VHJ1ZSghSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUo
Y29udGV4dCwgb2JqZWN0MyksIG9iamVjdDEpLCAiSXQgaXMgcG9zc2libGUgdG8gY2xvc2UgYSBw
cm90b3R5cGUgY2hhaW4gY3ljbGUiKTsKLQotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uOwotICAg
IEpTU3RyaW5nUmVmIGNvZGUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibyA9IHsg
fTsgcCA9IHsgfTsgby5fX3Byb3RvX18gPSBwOyBwLl9fcHJvdG9fXyA9IG8iKTsKLSAgICBKU1N0
cmluZ1JlZiBmaWxlID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpOwotICAgIHJl
c3VsdCAmPSBhc3NlcnRUcnVlKCFKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIGNvZGUsIC8qIHRo
aXNPYmplY3QqLyAwLCBmaWxlLCAxLCAmZXhjZXB0aW9uKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICwgIkFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIik7Ci0KLSAgICBKU1N0cmluZ1Jl
bGVhc2UoY29kZSk7Ci0gICAgSlNTdHJpbmdSZWxlYXNlKGZpbGUpOworICAgIHsKKyAgICAgICAg
SlNPYmplY3RSZWYgb2JqZWN0MSA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0NsYXNzICov
IDAsIC8qIGRhdGEgKi8gMCk7CisgICAgICAgIEpTT2JqZWN0UmVmIG9iamVjdDIgPSBKU09iamVj
dE1ha2UoY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiBkYXRhICovIDApOworICAgICAgICBK
U09iamVjdFJlZiBvYmplY3QzID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIC8qIGpzQ2xhc3MgKi8g
MCwgLyogZGF0YSAqLyAwKTsKKworICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0
LCBvYmplY3QxLCBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCkpOworICAgICAgICBBU1NFUlQoSlNW
YWx1ZUlzTnVsbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3Qx
KSkpOworCisgICAgICAgIC8vIG9iamVjdDEgLT4gb2JqZWN0MQorICAgICAgICBKU09iamVjdFNl
dFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxLCBvYmplY3QxKTsKKyAgICAgICAgcmVzdWx0ICY9
IGFzc2VydFRydWUoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShj
b250ZXh0LCBvYmplY3QxKSksICIoSlNPYmplY3RTZXRQcm90b3R5cGUpIEl0IGlzIHBvc3NpYmxl
IHRvIGFzc2lnbiBzZWxmIGFzIGEgcHJvdG90eXBlIik7CisKKyAgICAgICAgLy8gb2JqZWN0MSAt
PiBvYmplY3QyIC0+IG9iamVjdDEKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoY29udGV4
dCwgb2JqZWN0Miwgb2JqZWN0MSk7CisgICAgICAgIEFTU0VSVChKU1ZhbHVlSXNTdHJpY3RFcXVh
bChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QyKSwgb2JqZWN0
MSkpOworICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxLCBvYmpl
Y3QyKTsKKyAgICAgICAgcmVzdWx0ICY9IGFzc2VydFRydWUoSlNWYWx1ZUlzTnVsbChjb250ZXh0
LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QxKSksICIoSlNPYmplY3RTZXRQ
cm90b3R5cGUpIEl0IGlzIHBvc3NpYmxlIHRvIGNsb3NlIGEgcHJvdG90eXBlIGNoYWluIGN5Y2xl
Iik7CisKKyAgICAgICAgLy8gb2JqZWN0MSAtPiBvYmplY3QyIC0+IG9iamVjdDMgLT4gb2JqZWN0
MQorICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QyLCBvYmplY3Qz
KTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2JqZWN0
R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDIpLCBvYmplY3QzKSk7CisgICAgICAgIEpTT2Jq
ZWN0U2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDEsIG9iamVjdDIpOworICAgICAgICBBU1NF
UlQoSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29u
dGV4dCwgb2JqZWN0MSksIG9iamVjdDIpKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUo
Y29udGV4dCwgb2JqZWN0Mywgb2JqZWN0MSk7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVl
KCFKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250
ZXh0LCBvYmplY3QzKSwgb2JqZWN0MSksICIoSlNPYmplY3RTZXRQcm90b3R5cGUpIEl0IGlzIHBv
c3NpYmxlIHRvIGNsb3NlIGEgcHJvdG90eXBlIGNoYWluIGN5Y2xlIik7CisgICAgfQorICAgIHsK
KyAgICAgICAgSlNTdHJpbmdSZWYgY29kZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJvID0geyB9OyBwID0geyB9OyBvLl9fcHJvdG9fXyA9IHA7IHAuX19wcm90b19fID0gbyIpOwor
ICAgICAgICBKU1N0cmluZ1JlZiBmaWxlID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IiIpOworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIHJlc3VsdCAm
PSBhc3NlcnRUcnVlKCFKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIGNvZGUsIC8qIHRoaXNPYmpl
Y3QqLyAwLCBmaWxlLCAxLCAmZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsICJBbiBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93biIpOworICAgICAgICBKU1N0cmluZ1Jl
bGVhc2UoY29kZSk7CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShmaWxlKTsKKyAgICB9CisgICAg
eworICAgICAgICBKU09iamVjdFJlZiBvYmplY3QxID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIC8q
IGpzQ2xhc3MgKi8gMCwgLyogZGF0YSAqLyAwKTsKKyAgICAgICAgSlNPYmplY3RSZWYgb2JqZWN0
MiA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCAvKiBqc0NsYXNzICovIDAsIC8qIGRhdGEgKi8gMCk7
CisgICAgICAgIEpTT2JqZWN0UmVmIG9iamVjdDMgPSBKU09iamVjdE1ha2UoY29udGV4dCwgLyog
anNDbGFzcyAqLyAwLCAvKiBkYXRhICovIDApOworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7CisKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGVFeChjb250ZXh0LCBvYmplY3Qx
LCBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCksICZleGNlcHRpb24pOworICAgICAgICBBU1NFUlQo
SlNWYWx1ZUlzTnVsbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0LCBvYmpl
Y3QxKSkpOworICAgICAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisKKyAgICAgICAgLy8gb2JqZWN0
MSAtPiBvYmplY3QxCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlRXgoY29udGV4dCwgb2Jq
ZWN0MSwgb2JqZWN0MSwgJmV4Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVl
KEpTVmFsdWVJc051bGwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2Jq
ZWN0MSkpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlRXgpIEl0IGlzIHBvc3NpYmxlIHRvIGFzc2ln
biBzZWxmIGFzIGEgcHJvdG90eXBlIik7CisgICAgICAgIHJlc3VsdCAmPSBhc3NlcnRUcnVlKGV4
Y2VwdGlvbiwgIihKU09iamVjdFNldFByb3RvdHlwZUV4KSBBc3NpZ25pbmcgc2VsZiBhcyBhIHBy
b3RvdHlwZSwgc2hvdWxkIHJpc2UgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIGV4Y2VwdGlvbiA9
IDA7CisKKyAgICAgICAgLy8gb2JqZWN0MSAtPiBvYmplY3QyIC0+IG9iamVjdDEKKyAgICAgICAg
SlNPYmplY3RTZXRQcm90b3R5cGVFeChjb250ZXh0LCBvYmplY3QyLCBvYmplY3QxLCAmZXhjZXB0
aW9uKTsKKyAgICAgICAgQVNTRVJUKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIEpTT2Jq
ZWN0R2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdDIpLCBvYmplY3QxKSk7CisgICAgICAgIEFT
U0VSVCghZXhjZXB0aW9uKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGVFeChjb250ZXh0
LCBvYmplY3QxLCBvYmplY3QyLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ICY9IGFzc2Vy
dFRydWUoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCBKU09iamVjdEdldFByb3RvdHlwZShjb250ZXh0
LCBvYmplY3QxKSksICIoSlNPYmplY3RTZXRQcm90b3R5cGVFeCkgSXQgaXMgcG9zc2libGUgdG8g
Y2xvc2UgYSBwcm90b3R5cGUgY2hhaW4gY3ljbGUiKTsKKyAgICAgICAgcmVzdWx0ICY9IGFzc2Vy
dFRydWUoZXhjZXB0aW9uLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlRXgpIENsb3Npbmcgb2YgYSBw
cm90b3R5cGUgY2hhaW4gY3ljbGUsIHNob3VsZCByZXN1bHQgaW4gYW4gZXhjZXB0aW9uIik7Cisg
ICAgICAgIGV4Y2VwdGlvbiA9IDA7CisKKyAgICAgICAgLy8gb2JqZWN0MSAtPiBvYmplY3QyIC0+
IG9iamVjdDMgLT4gb2JqZWN0MQorICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZUV4KGNvbnRl
eHQsIG9iamVjdDIsIG9iamVjdDMsICZleGNlcHRpb24pOworICAgICAgICBBU1NFUlQoSlNWYWx1
ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2Jq
ZWN0MiksIG9iamVjdDMpKTsKKyAgICAgICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgICAgICBK
U09iamVjdFNldFByb3RvdHlwZUV4KGNvbnRleHQsIG9iamVjdDEsIG9iamVjdDIsICZleGNlcHRp
b24pOworICAgICAgICBBU1NFUlQoSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNPYmpl
Y3RHZXRQcm90b3R5cGUoY29udGV4dCwgb2JqZWN0MSksIG9iamVjdDIpKTsKKyAgICAgICAgQVNT
RVJUKCFleGNlcHRpb24pOworICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZUV4KGNvbnRleHQs
IG9iamVjdDMsIG9iamVjdDEsICZleGNlcHRpb24pOworICAgICAgICByZXN1bHQgJj0gYXNzZXJ0
VHJ1ZSghSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4dCwgSlNPYmplY3RHZXRQcm90b3R5cGUo
Y29udGV4dCwgb2JqZWN0MyksIG9iamVjdDEpLCAiKEpTT2JqZWN0U2V0UHJvdG90eXBlRXgpIEl0
IGlzIHBvc3NpYmxlIHRvIGNsb3NlIGEgcHJvdG90eXBlIGNoYWluIGN5Y2xlIik7CisgICAgICAg
IHJlc3VsdCAmPSBhc3NlcnRUcnVlKGV4Y2VwdGlvbiwgIihKU09iamVjdFNldFByb3RvdHlwZUV4
KSBDbG9zaW5nIG9mIGEgcHJvdG90eXBlIGNoYWluIGN5Y2xlLCBzaG91bGQgcmVzdWx0IGluIGFu
IGV4Y2VwdGlvbiIpOworICAgIH0KICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGNvbnRleHQp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMzk5LDEwICsxNDM3LDEwIEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAKICAgICBwcmludGYoIlBBU1M6IEluZmluaXRlIHBy
b3RvdHlwZSBjaGFpbiBkb2VzIG5vdCBvY2N1ci5cbiIpOwogCi0gICAgaWYgKGNoZWNrRm9yQ3lj
bGVJblByb3RvdHlwZUNoYWluKCkpCi0gICAgICAgIHByaW50ZigiUEFTUzogQSBjeWNsZSBpbiBh
IHByb3RvdHlwZSBjaGFpbiBjYW4ndCBiZSBjcmVhdGVkLlxuIik7CisgICAgaWYgKGNoZWNrU2V0
R2V0UHJvdG90eXBlKCkpCisgICAgICAgIHByaW50ZigiUEFTUzogU2V0dGluZyBhbmQgZ2V0dGlu
ZyBhIHByb3RvdHlwZS5cbiIpOwogICAgIGVsc2UgewotICAgICAgICBwcmludGYoIkZBSUw6IEEg
Y3ljbGUgaW4gYSBwcm90b3R5cGUgY2hhaW4gY2FuIGJlIGNyZWF0ZWQuXG4iKTsKKyAgICAgICAg
cHJpbnRmKCJGQUlMOiBBIHByb2JsZW0gd2FzIGZvdW5kIGR1cmluZyBzZXR0aW5nIGFuZCBnZXR0
aW5nIGEgcHJvdG90eXBlLlxuIik7CiAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKaW5kZXggYjE4ZDU1Yi4uNDY0MTU3NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBA
CisyMDEwLTA2LTIxICBKZWRyemVqIE5vd2Fja2kgIDxqZWRyemVqLm5vd2Fja2lAbm9raWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBB
UEksIEpTT2JqZWN0U2V0UHJvdG90eXBlV2l0aEV4Y2VwdGlvbi4KKworICAgICAgICBTZXR0aW5n
IHByb3RvdHlwZSBpbiBKU0MgY291bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBUaGUgSlNPYmplY3RT
ZXRQcm90b3R5cGUKKyAgICAgICAgZnVuY3Rpb24gaWdub3JlcyBhbGwgZXJyb3JzLCBzbyBkZXZl
bG9wZXJzIHVzaW5nIEpTQyBDIEFQSSBhcmUgbm90IGFibGUKKyAgICAgICAgdG8gY2hlY2sgd2hh
dCB3ZW50IHdyb25nLiBUaGUgbmV3IGZ1bmN0aW9uIGNvdmVycyB0aGlzIHVzZSBjYXNlIGJ5IHBy
b3ZpZGluZworICAgICAgICBhbm90aGVyIGFyZ3VtZW50IHdoaWNoIGlzIGtpbmQgb2YgZXhjZXB0
aW9uIGhhbmRsZXIuCisKKyAgICAgICAgQWRkIGEgdmVyc2lvbiBvZiBKU09iamVjdFNldFByb3Rv
dHlwZSB0aGF0IHlpZWxkcyBhbiBleGNlcHRpb24gd2hlbiB0aGUgcHJvdG90eXBlIGNhbid0IGJl
IHNldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAw
NjAKKworICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6CisgICAgICAgIChKU09iamVjdFNl
dFByb3RvdHlwZSk6CisgICAgICAgIChKU09iamVjdFNldFByb3RvdHlwZVdpdGhFeGNlcHRpb24p
OgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZlByaXZhdGUuaDoKKyAgICAgICAgKiBBUEkvdGVz
dHMvdGVzdGFwaS5jOgorICAgICAgICAoY2hlY2tTZXRHZXRQcm90b3R5cGUpOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0ZvclByb3Rv
dHlwZUN5Y2xlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhFeGNl
cHRpb24pOgorCiAyMDEwLTA2LTE4ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0
ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggOTNlMDFlMi4uMDdhODNhOSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cApAQCAtNDEsNiArNDEsNyBAQCBfSlNPYmplY3RTZXRQcml2YXRlUHJv
cGVydHkKIF9KU09iamVjdFNldFByb3BlcnR5CiBfSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgK
IF9KU09iamVjdFNldFByb3RvdHlwZQorX0pTT2JqZWN0U2V0UHJvdG90eXBlV2l0aEV4Y2VwdGlv
bgogX0pTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lCiBfSlNQcm9wZXJ0eU5hbWVBcnJh
eUdldENvdW50CiBfSlNQcm9wZXJ0eU5hbWVBcnJheUdldE5hbWVBdEluZGV4CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IGNhYmM0MjguLjJhOGNlNWYgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0xMDIsMTAgKzEwMiw5IEBAIHZvaWQgSlNPYmplY3Q6OnB1
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51
bmRlcnNjb3JlUHJvdG8pIHsKICAgICAgICAgLy8gU2V0dGluZyBfX3Byb3RvX18gdG8gYSBub24t
b2JqZWN0LCBub24tbnVsbCB2YWx1ZSBpcyBzaWxlbnRseSBpZ25vcmVkIHRvIG1hdGNoIE1vemls
bGEuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSAmJiAhdmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghc2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hl
Y2sodmFsdWUpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVj
LCAiY3ljbGljIF9fcHJvdG9fXyB2YWx1ZSIpKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzT2JqZWN0
KCkgfHwgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBzZXRQcm90b3R5cGVXaXRoRXhjZXB0
aW9uKGV4ZWMsIHZhbHVlKTsKKwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgKaW5kZXggZWRkMzc2Yy4uYTM1MGZkOCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaApAQCAtNTUsNiArNTUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBT
dHJ1Y3R1cmU7CiAgICAgc3RydWN0IEhhc2hUYWJsZTsKIAorICAgIEpTT2JqZWN0KiBjcmVhdGVF
cnJvcihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJik7CisgICAgSlNPYmplY3QqIHRocm93RXJy
b3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKKwogICAgIC8vIEVDTUEgMjYyLTMgOC42LjEKICAg
ICAvLyBQcm9wZXJ0eSBhdHRyaWJ1dGVzCiAgICAgZW51bSBBdHRyaWJ1dGUgewpAQCAtODcsOSAr
OTAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgfkpTT2JqZWN0KCk7CiAK
ICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdDsKKyAgICAgICAgLy8gU2V0IHByb3Rv
dHlwZSBvZiB0aGlzIG9iamVjdCB0byBnaXZlbiB2YWx1ZS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9k
IGRvZXNuJ3QgY2hlY2sgYXJndW1lbnRzLgogICAgICAgICB2b2lkIHNldFByb3RvdHlwZShKU1Zh
bHVlIHByb3RvdHlwZSk7Ci0gICAgICAgIGJvb2wgc2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2so
SlNWYWx1ZSBwcm90b3R5cGUpOwotICAgICAgICAKKyAgICAgICAgLy8gU2V0IHByb3RvdHlwZSBv
ZiB0aGlzIG9iamVjdCB0byBnaXZlbiB2YWx1ZS4gVGhpcyBtZXRob2QgdGhyb3dzIGFuIGV4Y2Vw
dGlvbiBpZgorICAgICAgICAvLyBnaXZlbiBwcm90b3R5cGUgaXMgbm90IHN1aXRhYmxlIGZvciBi
ZWluZyBhIHByb3RvdHlwZSBmb3IgdGhpcyBvYmplY3QuIFRydWUgaXMgcmV0dXJuZWQKKyAgICAg
ICAgLy8gaWYgbmV3IHByb3RvdHlwZSB3YXMgc2V0IHN1Y2Nlc3NmdWxseSwgZmFsc2UgaW4gb3Ro
ZXIgY2FzZS4KKyAgICAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgICAgICAvLyBDaGVjayBpZiBnaXZlbiB2
YWx1ZSBjb3VsZCBiZSBzZXQgYXMgcHJvdG90eXBlIGZvciB0aGlzIG9iamVjdCB3aXRob3V0IGNy
ZWF0aW5nIGEgY3ljbGUgaW4KKyAgICAgICAgLy8gcHJvdG90eXBlIGNoYWluLiBSZXR1cm5zIHRy
dWUgaWYgYSBjeWNsZSB3YXMgZm91bmQsIGZhbHNlIGluIG90aGVyIGNhc2UuCisgICAgICAgIGJv
b2wgY2hlY2tGb3JQcm90b3R5cGVDeWNsZShKU1ZhbHVlIHZhbHVlKTsKKwogICAgICAgICB2b2lk
IHNldFN0cnVjdHVyZShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKICAgICAgICAgU3Ry
dWN0dXJlKiBpbmhlcml0b3JJRCgpOwogCkBAIC0zMTYsMTkgKzMyNiwyNiBAQCBpbmxpbmUgSlNW
YWx1ZSBKU09iamVjdDo6cHJvdG90eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZSgpOwogfQogCi1pbmxpbmUgYm9vbCBKU09iamVjdDo6c2V0UHJvdG90
eXBlV2l0aEN5Y2xlQ2hlY2soSlNWYWx1ZSBwcm90b3R5cGUpCitpbmxpbmUgYm9vbCBKU09iamVj
dDo6Y2hlY2tGb3JQcm90b3R5cGVDeWNsZShKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTVmFsdWUg
bmV4dFByb3RvdHlwZVZhbHVlID0gcHJvdG90eXBlOworICAgIEpTVmFsdWUgbmV4dFByb3RvdHlw
ZVZhbHVlID0gdmFsdWU7CiAgICAgd2hpbGUgKG5leHRQcm90b3R5cGVWYWx1ZSAmJiBuZXh0UHJv
dG90eXBlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBKU09iamVjdCogbmV4dFByb3RvdHlw
ZSA9IGFzT2JqZWN0KG5leHRQcm90b3R5cGVWYWx1ZSktPnVud3JhcHBlZE9iamVjdCgpOwogICAg
ICAgICBpZiAobmV4dFByb3RvdHlwZSA9PSB0aGlzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBuZXh0UHJvdG90eXBlVmFsdWUgPSBuZXh0UHJvdG90eXBlLT5wcm90b3R5cGUo
KTsKICAgICB9Ci0gICAgc2V0UHJvdG90eXBlKHByb3RvdHlwZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgaWYgKGNoZWNrRm9yUHJv
dG90eXBlQ3ljbGUocHJvdG90eXBlKSkKKyAgICAgICAgc2V0UHJvdG90eXBlKHByb3RvdHlwZSk7
CisgICAgZWxzZQorICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJj
eWNsaWMgX19wcm90b19fIHZhbHVlIikpOworfQorCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0
UHJvdG90eXBlKEpTVmFsdWUgcHJvdG90eXBlKQogewogICAgIEFTU0VSVChwcm90b3R5cGUpOwo=
</data>
<flag name="review"
          id="46169"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>