<?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>42174</bug_id>
          
          <creation_ts>2010-07-13 09:38:48 -0700</creation_ts>
          <short_desc>[Qt] Implement QScriptEngine::newFunction() parts that doesn&apos;t depend on QScriptContext</short_desc>
          <delta_ts>2010-07-27 08:37:46 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Marcelo de Oliveira Filho">cmarcelo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>diegohcg</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>kent.hansen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>250571</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-07-13 09:38:48 -0700</bug_when>
    <thetext>[Qt] Implement QScriptEngine::newFunction() parts that doesn&apos;t depend on QScriptContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250576</commentid>
    <comment_count>1</comment_count>
      <attachid>61389</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-07-13 09:47:01 -0700</bug_when>
    <thetext>Created attachment 61389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251027</commentid>
    <comment_count>2</comment_count>
      <attachid>61389</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-07-14 01:37:18 -0700</bug_when>
    <thetext>Comment on attachment 61389
Patch

Small feedback (some of issues are reported once but exists in a few places):

Documentation is badly indented (2 instead of 4 spaces).

JavaScriptCore/qt/api/qscriptengine_p.cpp:141
 +      result-&gt;setProperty(QString::fromAscii(&quot;prototype&quot;), proto, QScriptValue::Undeletable);
 +      proto-&gt;setProperty(QString::fromAscii(&quot;constructor&quot;), result, QScriptValue::PropertyFlags(QScriptValue::Undeletable | QScriptValue::SkipInEnumeration));
Try to avoid the data conversion. In this place this function would be faster:
inline void QScriptValuePrivate::setProperty(T name, QScriptValuePrivate* value, const QScriptValue::PropertyFlags&amp; flags)

JavaScriptCore/qt/api/qscriptfunction.cpp:104
 +      Q_ASSERT(result-&gt;engine() == engine);
What will happen if fun() would return an invalid QSCP? I think it should be a qWarning. You can use an value returned from assignEngine() to trigger it. It would be nice to have an autotest to cover this case. Actually there is no test that checks what happen if unbounded value is returned (like for example QScriptValue(1024))

JavaScriptCore/qt/api/qscriptfunction_p.h:42
 +          : engine(engine), fun(fun), arg(arg) { }
If I remember correctly, this should be in separate line.

JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp:63
 +  static QScriptValue myFunction(QScriptContext *, QScriptEngine *eng)
* in wrong place (in all autotests).

JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp:94
 +              // QCOMPARE(fun.propertyFlags(&quot;prototype&quot;), QScriptValue::Undeletable);
Could you leave it as QEXPECT_FAIL instead of a comment? The API is there, so it would compile, even if a result is bad we know that it doesn&apos;t crash (it shouldn&apos;t). Btw. do you know why it doesn&apos;t work?

JavaScriptCore/qt/api/qscriptfunction_p.h:28
 +  struct NativeFunctionData
Could you add Q to the name?

JavaScriptCore/qt/api/qscriptfunction.cpp:54
 +  JSClassDefinition qt_NativeFunctionClass = {
JavaScriptCore/qt/api/qscriptengine_p.cpp:131
 +      static JSClassRef nativeFunctionClass = qt_createNativeFunctionClass();
I like symmetry what about qt_NativeFunctionWithoutArgClass, but it is not a strong opinion. If you like it it can stay :-)

JavaScriptCore/qt/api/qscriptengine.h:68
 +
You can remove this empty line.

JavaScriptCore/qt/api/qscriptengine_p.cpp:133
 +      // Note that this private data will be deleted in the class&apos; finalize function.
It is rather an object finalize function (which is defined in a class).

JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp:68
 +  static QScriptValue myFunctionWithVoidArg(QScriptContext *, QScriptEngine *eng, void *)
I think that we should return void* value, just to check if arguments are passed correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251048</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-07-14 02:08:41 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=61389) [details]
&gt; Patch

Nice start.
Why the &quot;### test return value!&quot; in the test?
Like Jedrzej said, it&apos;s nicer to use QEXPECT_FAIL or QSKIP, ideally with a link to the bug in the message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251092</commentid>
    <comment_count>4</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-07-14 03:31:43 -0700</bug_when>
    <thetext>Can we use the same instance of JSClassRef in a different context?

It is not necessary to release JSClassRef? If you don&apos;t release protected JSValueRef JSC would assert, it is not similar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255670</commentid>
    <comment_count>5</comment_count>
      <attachid>62488</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-07-23 23:28:58 -0700</bug_when>
    <thetext>Created attachment 62488
Patch v2

Thanks Jezdrej and Kent for the reviews. This patch fixes the issues pointed out, add suggested tests and added a new internal function to share code between the two newFunction() implementations. I&apos;ll be more careful with code style when importing the comments and test cases from Qt&apos;s upstream from now on ;-)

Some comments on specific issues:

- QEXPECT_FAIL was added for the commented tests. If I understood the issues right, the two cases of checking property flags fail due to different reasons:

The property &quot;constructor&quot; of the newly created prototype fails because of bug 40631 (can&apos;t change the property flags).
On the other hand, when checking the flags of the property &quot;prototype&quot; of the function object, it enters the if-statement in JSCallbackObject::getOwnPropertyDescriptor, which returns hardcoded values. If I understood correctly, this issue is related to the bug 33946 and the bug 41937.

- JSClassRef can be shared by different contexts, but after discussion with Jezdrej, I changed to instantiate it for each QScriptEngine, so we can properly release it. We can implementing the sharing of this later if necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255699</commentid>
    <comment_count>6</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-07-24 04:59:24 -0700</bug_when>
    <thetext>Bah. Late night typo, sorry :-P

Consider s/Jezdrej/Jędrzej/g in the last comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255928</commentid>
    <comment_count>7</comment_count>
      <attachid>62488</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-07-25 23:57:48 -0700</bug_when>
    <thetext>Comment on attachment 62488
Patch v2

(In reply to comment #5)
&gt; The property &quot;constructor&quot; of the newly created prototype fails because of bug 40631 (can&apos;t change the property flags).
Typo, it should be &quot;bug 40613&quot; ;-)

JavaScriptCore/qt/api/qscriptfunction.cpp:112
 +          return *new QScriptValuePrivate(engine, QScriptValue::UndefinedValue);
JavaScriptCore/qt/api/qscriptfunction.cpp:121
 +          return *new QScriptValuePrivate(engine, QScriptValue::UndefinedValue);
JavaScriptCore/qt/api/qscriptfunction.cpp:57
 +          return *new QScriptValuePrivate(engine, QScriptValue::UndefinedValue);
JavaScriptCore/qt/api/qscriptfunction.cpp:48
 +          return *new QScriptValuePrivate(engine, QScriptValue::UndefinedValue);
You should use engine-&gt;makeJSValue(QScriptValue::UndefinedValue) here. It would be faster and it wouldn&apos;t cause a memory leak.

JavaScriptCore/qt/api/qscriptfunction.cpp:109
 +      QScriptValuePrivate* result = QScriptValuePrivate::get(data-&gt;fun(0, QScriptEnginePrivate::get(engine), data-&gt;arg));
JavaScriptCore/qt/api/qscriptfunction.cpp:45
 +      QScriptValuePrivate* result = QScriptValuePrivate::get(data-&gt;fun(0, QScriptEnginePrivate::get(engine)));
Can you add comment about 0 value?

JavaScriptCore/qt/api/qscriptfunction.cpp:86
 +  JSClassRef qt_createNativeFunctionClass()
JavaScriptCore/qt/api/qscriptfunction.cpp:150
 +  JSClassRef qt_createNativeFunctionWithArgClass()
Why you need these functions? Can&apos;t you use JSClassCreate directly?

JavaScriptCore/qt/api/qscriptengine_p.cpp:112
 +  QScriptValuePrivate* QScriptEnginePrivate::newFunction_helper(JSObjectRef funJS, QScriptValuePrivate* prototype)
Could you rename it? Underscore should be avoided. I think that newFunction is the correct name.

JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp:128
 +              QEXPECT_FAIL(&quot;&quot;, &quot;JSCallbackObject::getOwnPropertyDescriptor() doesn&apos;t return correct information yet&quot;, Continue);
Can you provide a bug number? I have seen that the bug 33946 got fixed, maybe it works now :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256009</commentid>
    <comment_count>8</comment_count>
      <attachid>62565</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-07-26 06:22:57 -0700</bug_when>
    <thetext>Created attachment 62565
Patch v3

Fix issues pointed out by Jedrzej, in particular use JSClassCreate directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256418</commentid>
    <comment_count>9</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-07-27 00:10:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=62565) [details]
&gt; Patch v3
&gt; 
&gt; Fix issues pointed out by Jedrzej, in particular use JSClassCreate directly.

Looks good to me, thanks :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256590</commentid>
    <comment_count>10</comment_count>
      <attachid>62565</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-07-27 07:54:27 -0700</bug_when>
    <thetext>Comment on attachment 62565
Patch v3

Nice work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256622</commentid>
    <comment_count>11</comment_count>
      <attachid>62565</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-27 08:37:39 -0700</bug_when>
    <thetext>Comment on attachment 62565
Patch v3

Clearing flags on attachment: 62565

Committed r64130: &lt;http://trac.webkit.org/changeset/64130&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256623</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-27 08:37:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61389</attachid>
            <date>2010-07-13 09:47:01 -0700</date>
            <delta_ts>2010-07-23 23:28:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42174-20100713134658.patch</filename>
            <type>text/plain</type>
            <size>27559</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3Jl
L3F0L0NoYW5nZUxvZwppbmRleCA3MWI0YTIxZjgxZTcyODU3NTE4MzdhNDJmZGU1ZjAxOWNkZmM2
ODVlLi4zNjRmZmY5NjhiYjU1YzgwZTkwOWYwYmQ0ODY4NjlmMzJlNjlmMDYyIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9xdC9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTAtMDctMTMgIENhaW8gTWFyY2VsbyBkZSBPbGl2
ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBRU2NyaXB0
RW5naW5lOjpuZXdGdW5jdGlvbigpIHBhcnRzIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gUVNjcmlw
dENvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQyMTc0CisKKyAgICAgICAgU2luY2Ugb3VyIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW4gSmF2
YXNjcmlwdCBib3RoIGFzIGEgZnVuY3Rpb24KKyAgICAgICAgYW5kIGFzIGEgY29uc3RydWN0b3Is
IHdlIGNvdWxkbid0IHVzZSB0aGUgZXhpc3RpbmcKKyAgICAgICAgSlNPYmplY3RNYWtlRnVuY3Rp
b25XaXRoQ2FsbGJhY2soKSBhbmQgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoKS4KKworICAgICAg
ICBJbnN0ZWFkLCBhIEpTQ2xhc3NSZWYgd2FzIGNyZWF0ZWQsIGltcGxlbWVudGluZyB0aGUgbmVl
ZGVkCisgICAgICAgIGNhbGxiYWNrcyAodGhlIGNhbGxBc0NvbnN0cnVjdG9yIGlzIG5vdCB0aGVy
ZSB5ZXQgYmVjYXVzZSBpdHMKKyAgICAgICAgYmVoYXZpb3VyIGRlcGVuZHMgb24gUVNjcmlwdENv
bnRleHQpLgorCisgICAgICAgIEZvciB0aGUgbW9tZW50LCBRU2NyaXB0Q29udGV4dCBpcyBkZWZp
bmVkIGFzIGEgdm9pZCB0eXBlLCBzaW5jZSB3ZQorICAgICAgICBzdGlsbCBkb24ndCB1c2UgaXQu
CisKKyAgICAgICAgVGhlIHZhcmlhbnQgb2YgbmV3RnVuY3Rpb24oKSB0aGF0IGFsc28gdGFrZXMg
YW4gZXh0ZXJuYWwgYXJndW1lbnQKKyAgICAgICAgd2FzIGFsc28gaW1wbGVtZW50ZWQuIFRoZSBk
ZXRhaWxzIG9mIGltcGxlbWVudGF0aW9uIHdlcmUgYWRkZWQgdG8KKyAgICAgICAgdGhlIHFzY3Jp
cHRmdW5jdGlvbnsuYyxfcC5ofSBmaWxlcy4gVGVzdHMgd2VyZSBhbHNvIGltcG9ydGVkIGZyb20K
KyAgICAgICAgUXQncyB1cHN0cmVhbSByZXBvc2l0b3J5LgorCisgICAgICAgICogYXBpL1F0U2Ny
aXB0LnBybzoKKyAgICAgICAgKiBhcGkvcXNjcmlwdGVuZ2luZS5jcHA6CisgICAgICAgIChRU2Ny
aXB0RW5naW5lOjpuZXdGdW5jdGlvbik6CisgICAgICAgICogYXBpL3FzY3JpcHRlbmdpbmUuaDoK
KyAgICAgICAgKiBhcGkvcXNjcmlwdGVuZ2luZV9wLmNwcDoKKyAgICAgICAgKFFTY3JpcHRFbmdp
bmVQcml2YXRlOjpRU2NyaXB0RW5naW5lUHJpdmF0ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5l
UHJpdmF0ZTo6flFTY3JpcHRFbmdpbmVQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQ
cml2YXRlOjpuZXdGdW5jdGlvbik6CisgICAgICAgICogYXBpL3FzY3JpcHRlbmdpbmVfcC5oOgor
ICAgICAgICAqIGFwaS9xc2NyaXB0ZnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKHF0X05h
dGl2ZUZ1bmN0aW9uX2ZpbmFsaXplKToKKyAgICAgICAgKHF0X05hdGl2ZUZ1bmN0aW9uX2NhbGxB
c0Z1bmN0aW9uKToKKyAgICAgICAgKHF0X2NyZWF0ZU5hdGl2ZUZ1bmN0aW9uQ2xhc3MpOgorICAg
ICAgICAocXRfTmF0aXZlRnVuY3Rpb25XaXRoQXJnX2ZpbmFsaXplKToKKyAgICAgICAgKHF0X05h
dGl2ZUZ1bmN0aW9uV2l0aEFyZ19jYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChxdF9jcmVhdGVO
YXRpdmVGdW5jdGlvbldpdGhBcmdDbGFzcyk6CisgICAgICAgICogYXBpL3FzY3JpcHRmdW5jdGlv
bl9wLmg6IEFkZGVkLgorICAgICAgICAoTmF0aXZlRnVuY3Rpb25EYXRhOjpOYXRpdmVGdW5jdGlv
bkRhdGEpOgorICAgICAgICAoTmF0aXZlRnVuY3Rpb25XaXRoQXJnRGF0YTo6TmF0aXZlRnVuY3Rp
b25XaXRoQXJnRGF0YSk6CisgICAgICAgICogdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlw
dGVuZ2luZS5jcHA6CisgICAgICAgIChteUZ1bmN0aW9uKToKKyAgICAgICAgKG15RnVuY3Rpb25X
aXRoVm9pZEFyZyk6CisgICAgICAgIChteUZ1bmN0aW9uVGhhdFJldHVybnMpOgorICAgICAgICAo
dHN0X1FTY3JpcHRFbmdpbmU6Om5ld0Z1bmN0aW9uKToKKwogMjAxMC0wNy0wOSAgSmVkcnplaiBO
b3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNj
cmlwdC5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCmluZGV4IDNjMjY5
MWUwNmViOGI4NzhlMmFlZWVhMGViODc0ODg3OWY4YjNjMDUuLmRkY2I4OGU2MDBhNjJhMTFjYjYy
ZmFjZDdjOTk3MmQ4MzdiNzI1ZGMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9R
dFNjcmlwdC5wcm8KKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybwpAQCAt
MjcsNiArMjcsNyBAQCBTT1VSQ0VTICs9ICAkJFBXRC9xc2NyaXB0ZW5naW5lLmNwcCBcCiAgICAg
ICAgICAgICAkJFBXRC9xc2NyaXB0c3RyaW5nLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2Ny
aXB0cHJvZ3JhbS5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHN5bnRheGNoZWNrcmVz
dWx0LmNwcCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZnVuY3Rpb24uY3BwCiAKIEhFQURF
UlMgKz0gICQkUFdEL3F0c2NyaXB0Z2xvYmFsLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlw
dGVuZ2luZS5oIFwKQEAgLTM5LDYgKzQwLDcgQEAgSEVBREVSUyArPSAgJCRQV0QvcXRzY3JpcHRn
bG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0cHJvZ3JhbS5oIFwKICAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHRwcm9ncmFtX3AuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0
c3ludGF4Y2hlY2tyZXN1bHQuaCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZnVuY3Rpb25f
cC5oCiAKIAogIXN0YXRpYzogREVGSU5FUyArPSBRVF9NQUtFRExMCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZS5jcHAKaW5kZXggNGIyMzE5YmVhN2FhZTM1MjEzOWY2MDc0NDVjMTAy
Y2EzZjhjOGE0NC4uNzUzOTQzNGQ1NjAyNzlkNzJjMmJlOTFlOTY0ZmQ0NTQwMTIwNGU4NSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcApAQCAtMjU4LDYgKzI1OCw5MyBA
QCBRU2NyaXB0VmFsdWUgUVNjcmlwdEVuZ2luZTo6dW5kZWZpbmVkVmFsdWUoKQogfQogCiAvKiEK
KyAgQ3JlYXRlcyBhIFFTY3JpcHRWYWx1ZSB0aGF0IHdyYXBzIGEgbmF0aXZlIChDKyspIGZ1bmN0
aW9uLiBcYSBmdW4KKyAgbXVzdCBiZSBhIEMrKyBmdW5jdGlvbiB3aXRoIHNpZ25hdHVyZSBRU2Ny
aXB0RW5naW5lOjpGdW5jdGlvblNpZ25hdHVyZS4gIFxhCisgIGxlbmd0aCBpcyB0aGUgbnVtYmVy
IG9mIGFyZ3VtZW50cyB0aGF0IFxhIGZ1biBleHBlY3RzOyB0aGlzIGJlY29tZXMKKyAgdGhlIFxj
e2xlbmd0aH0gcHJvcGVydHkgb2YgdGhlIGNyZWF0ZWQgUVNjcmlwdFZhbHVlLgorCisgIE5vdGUg
dGhhdCBcYSBsZW5ndGggb25seSBnaXZlcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YK
KyAgYXJndW1lbnRzIHRoYXQgdGhlIGZ1bmN0aW9uIGV4cGVjdHM7IGFuIGFjdHVhbCBpbnZvY2F0
aW9uIG9mIGEKKyAgZnVuY3Rpb24gY2FuIGluY2x1ZGUgYW55IG51bWJlciBvZiBhcmd1bWVudHMu
IFlvdSBjYW4gY2hlY2sgdGhlCisgIFxse1FTY3JpcHRDb250ZXh0Ojphcmd1bWVudENvdW50KCl9
e2FyZ3VtZW50Q291bnQoKX0gb2YgdGhlCisgIFFTY3JpcHRDb250ZXh0IGFzc29jaWF0ZWQgd2l0
aCB0aGUgaW52b2NhdGlvbiB0byBkZXRlcm1pbmUgdGhlCisgIGFjdHVhbCBudW1iZXIgb2YgYXJn
dW1lbnRzIHBhc3NlZC4KKworICBBIFxje3Byb3RvdHlwZX0gcHJvcGVydHkgaXMgYXV0b21hdGlj
YWxseSBjcmVhdGVkIGZvciB0aGUgcmVzdWx0aW5nCisgIGZ1bmN0aW9uIG9iamVjdCwgdG8gcHJv
dmlkZSBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGZ1bmN0aW9uCisgIHdpbGwgYmUgdXNl
ZCBhcyBhIGNvbnN0cnVjdG9yLgorCisgIEJ5IGNvbWJpbmluZyBuZXdGdW5jdGlvbigpIGFuZCB0
aGUgcHJvcGVydHkgZmxhZ3MKKyAgUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUdldHRlciBhbmQgUVNj
cmlwdFZhbHVlOjpQcm9wZXJ0eVNldHRlciwgeW91CisgIGNhbiBjcmVhdGUgc2NyaXB0IG9iamVj
dCBwcm9wZXJ0aWVzIHRoYXQgYmVoYXZlIGxpa2Ugbm9ybWFsCisgIHByb3BlcnRpZXMgaW4gc2Ny
aXB0IGNvZGUsIGJ1dCBhcmUgaW4gZmFjdCBhY2Nlc3NlZCB0aHJvdWdoCisgIGZ1bmN0aW9ucyAo
YW5hbG9nb3VzIHRvIGhvdyBwcm9wZXJ0aWVzIHdvcmsgaW4gXGx7UXQncyBQcm9wZXJ0eQorICBT
eXN0ZW19KS4gRXhhbXBsZToKKworICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3Jj
X3NjcmlwdF9xc2NyaXB0ZW5naW5lLmNwcCAxMQorCisgIFdoZW4gdGhlIHByb3BlcnR5IFxje2Zv
b30gb2YgdGhlIHNjcmlwdCBvYmplY3QgaXMgc3Vic2VxdWVudGx5CisgIGFjY2Vzc2VkIGluIHNj
cmlwdCBjb2RlLCBcY3tnZXRTZXRGb28oKX0gd2lsbCBiZSBpbnZva2VkIHRvIGhhbmRsZQorICB0
aGUgYWNjZXNzLiAgSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIHdlIGNob3NlIHRvIHN0b3JlIHRo
ZSAicmVhbCIKKyAgdmFsdWUgb2YgXGN7Zm9vfSBhcyBhIHByb3BlcnR5IG9mIHRoZSBhY2Nlc3Nv
ciBmdW5jdGlvbiBpdHNlbGY7IHlvdQorICBhcmUgb2YgY291cnNlIGZyZWUgdG8gZG8gd2hhdGV2
ZXIgeW91IGxpa2UgaW4gdGhpcyBmdW5jdGlvbi4KKworICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwg
YSBzaW5nbGUgbmF0aXZlIGZ1bmN0aW9uIHdhcyB1c2VkIHRvIGhhbmRsZQorICBib3RoIHJlYWRz
IGFuZCB3cml0ZXMgdG8gdGhlIHByb3BlcnR5OyB0aGUgYXJndW1lbnQgY291bnQgaXMgdXNlZCB0
bworICBkZXRlcm1pbmUgaWYgd2UgYXJlIGhhbmRsaW5nIGEgcmVhZCBvciB3cml0ZS4gWW91IGNh
biBhbHNvIHVzZSB0d28KKyAgc2VwYXJhdGUgZnVuY3Rpb25zOyBqdXN0IHNwZWNpZnkgdGhlIHJl
bGV2YW50IGZsYWcKKyAgKFFTY3JpcHRWYWx1ZTo6UHJvcGVydHlHZXR0ZXIgb3IgUVNjcmlwdFZh
bHVlOjpQcm9wZXJ0eVNldHRlcikgd2hlbgorICBzZXR0aW5nIHRoZSBwcm9wZXJ0eSwgZS5nLjoK
KworICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3JjX3NjcmlwdF9xc2NyaXB0ZW5n
aW5lLmNwcCAxMgorCisgIFxzYSBRU2NyaXB0VmFsdWU6OmNhbGwoKQorKi8KK1FTY3JpcHRWYWx1
ZSBRU2NyaXB0RW5naW5lOjpuZXdGdW5jdGlvbihRU2NyaXB0RW5naW5lOjpGdW5jdGlvblNpZ25h
dHVyZSBmdW4sIGludCBsZW5ndGgpCit7CisgICAgcmV0dXJuIFFTY3JpcHRWYWx1ZVByaXZhdGU6
OmdldChkX3B0ci0+bmV3RnVuY3Rpb24oZnVuLCAwLCBsZW5ndGgpKTsKK30KKworLyohCisgIENy
ZWF0ZXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmcm9tIFxhIGZ1biwgd2l0aCB0aGUgZ2l2ZW4g
XGEgbGVuZ3RoLgorICBUaGUgXGN7cHJvdG90eXBlfSBwcm9wZXJ0eSBvZiB0aGUgcmVzdWx0aW5n
IGZ1bmN0aW9uIGlzIHNldCB0byBiZSB0aGUKKyAgZ2l2ZW4gXGEgcHJvdG90eXBlLiBUaGUgXGN7
Y29uc3RydWN0b3J9IHByb3BlcnR5IG9mIFxhIHByb3RvdHlwZSBpcworICBzZXQgdG8gYmUgdGhl
IHJlc3VsdGluZyBmdW5jdGlvbi4KKworICBXaGVuIGEgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGEg
Y29uc3RydWN0b3IgKGUuZy4gXGN7bmV3IEZvbygpfSksIHRoZQorICBgdGhpcycgb2JqZWN0IGFz
c29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24gY2FsbCBpcyB0aGUgbmV3IG9iamVjdAorICB0aGF0
IHRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplOyB0aGUgcHJvdG90eXBlIG9m
IHRoaXMKKyAgZGVmYXVsdCBjb25zdHJ1Y3RlZCBvYmplY3Qgd2lsbCBiZSB0aGUgZnVuY3Rpb24n
cyBwdWJsaWMKKyAgXGN7cHJvdG90eXBlfSBwcm9wZXJ0eS4gSWYgeW91IGFsd2F5cyB3YW50IHRo
ZSBmdW5jdGlvbiB0byBiZWhhdmUgYXMKKyAgYSBjb25zdHJ1Y3RvciAoZS5nLiBcY3tGb28oKX0g
c2hvdWxkIGFsc28gY3JlYXRlIGEgbmV3IG9iamVjdCksIG9yCisgIGlmIHlvdSBuZWVkIHRvIGNy
ZWF0ZSB5b3VyIG93biBvYmplY3QgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGRlZmF1bHQKKyAgYHRo
aXMnIG9iamVjdCwgeW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcHJvdG90eXBlIG9mIHlv
dXIKKyAgb2JqZWN0IGlzIHNldCBjb3JyZWN0bHk7IGVpdGhlciBieSBzZXR0aW5nIGl0IG1hbnVh
bGx5LCBvciwgd2hlbgorICB3cmFwcGluZyBhIGN1c3RvbSB0eXBlLCBieSBoYXZpbmcgcmVnaXN0
ZXJlZCB0aGUgZGVmYXVsdFByb3RvdHlwZSgpCisgIG9mIHRoYXQgdHlwZS4gRXhhbXBsZToKKwor
ICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3JjX3NjcmlwdF9xc2NyaXB0ZW5naW5l
LmNwcCA5CisKKyAgVG8gd3JhcCBhIGN1c3RvbSB0eXBlIGFuZCBwcm92aWRlIGEgY29uc3RydWN0
b3IgZm9yIGl0LCB5b3UnZCB0eXBpY2FsbHkKKyAgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKwor
ICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3JjX3NjcmlwdF9xc2NyaXB0ZW5naW5l
LmNwcCAxMAorKi8KK1FTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5lOjpuZXdGdW5jdGlvbihRU2Ny
aXB0RW5naW5lOjpGdW5jdGlvblNpZ25hdHVyZSBmdW4sIGNvbnN0IFFTY3JpcHRWYWx1ZSYgcHJv
dG90eXBlLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiBRU2NyaXB0VmFsdWVQcml2YXRlOjpn
ZXQoZF9wdHItPm5ld0Z1bmN0aW9uKGZ1biwgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KHByb3Rv
dHlwZSksIGxlbmd0aCkpOworfQorCisvKiEKKyAgXGludGVybmFsCisgIFxzaW5jZSA0LjQKKyov
CitRU2NyaXB0VmFsdWUgUVNjcmlwdEVuZ2luZTo6bmV3RnVuY3Rpb24oUVNjcmlwdEVuZ2luZTo6
RnVuY3Rpb25XaXRoQXJnU2lnbmF0dXJlIGZ1biwgdm9pZCogYXJnKQoreworICAgIHJldHVybiBR
U2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoZF9wdHItPm5ld0Z1bmN0aW9uKGZ1biwgYXJnKSk7Cit9
CisKKy8qIQogICBDcmVhdGVzIGEgUXRTY3JpcHQgb2JqZWN0IG9mIGNsYXNzIE9iamVjdC4KIAog
ICBUaGUgcHJvdG90eXBlIG9mIHRoZSBjcmVhdGVkIG9iamVjdCB3aWxsIGJlIHRoZSBPYmplY3QK
QEAgLTI5NCwzICszODEsMjMgQEAgUVNjcmlwdFZhbHVlIFFTY3JpcHRFbmdpbmU6Omdsb2JhbE9i
amVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFFTY3JpcHRWYWx1ZVByaXZhdGU6OmdldChkX3B0
ci0+Z2xvYmFsT2JqZWN0KCkpOwogfQorCisvKiEKKyAgXHR5cGVkZWYgUVNjcmlwdEVuZ2luZTo6
RnVuY3Rpb25TaWduYXR1cmUKKyAgXHJlbGF0ZXMgUVNjcmlwdEVuZ2luZQorCisgIFRoZSBmdW5j
dGlvbiBzaWduYXR1cmUgXGN7UVNjcmlwdFZhbHVlIGYoUVNjcmlwdENvbnRleHQgKiwgUVNjcmlw
dEVuZ2luZSAqKX0uCisKKyAgQSBmdW5jdGlvbiB3aXRoIHN1Y2ggYSBzaWduYXR1cmUgY2FuIGJl
IHBhc3NlZCB0bworICBRU2NyaXB0RW5naW5lOjpuZXdGdW5jdGlvbigpIHRvIHdyYXAgdGhlIGZ1
bmN0aW9uLgorKi8KKworLyohCisgIFx0eXBlZGVmIFFTY3JpcHRFbmdpbmU6OkZ1bmN0aW9uV2l0
aEFyZ1NpZ25hdHVyZQorICBccmVsYXRlcyBRU2NyaXB0RW5naW5lCisKKyAgVGhlIGZ1bmN0aW9u
IHNpZ25hdHVyZSBcY3tRU2NyaXB0VmFsdWUgZihRU2NyaXB0Q29udGV4dCAqLCBRU2NyaXB0RW5n
aW5lICosIHZvaWQgKil9LgorCisgIEEgZnVuY3Rpb24gd2l0aCBzdWNoIGEgc2lnbmF0dXJlIGNh
biBiZSBwYXNzZWQgdG8KKyAgUVNjcmlwdEVuZ2luZTo6bmV3RnVuY3Rpb24oKSB0byB3cmFwIHRo
ZSBmdW5jdGlvbi4KKyovCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlw
dGVuZ2luZS5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaAppbmRleCAx
YTg3YTM3Yjc3Zjg2NWUzNjQwMTcxZmRkNjIwZDhmNDU2MDBjYTVkLi41NmVmM2ZlZjkzY2M1NmI4
YTI0MWQwYjAzYzFjMDc1NjkxM2M0ZGVkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5n
aW5lLmgKQEAgLTMwLDYgKzMwLDkgQEAKIGNsYXNzIFFTY3JpcHRWYWx1ZTsKIGNsYXNzIFFTY3Jp
cHRFbmdpbmVQcml2YXRlOwogCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBRU2NyaXB0Q29u
dGV4dCBpcyBwcm9wZXJseSBkZWZpbmVkLgordHlwZWRlZiB2b2lkIFFTY3JpcHRDb250ZXh0Owor
CiAvLyBJbnRlcm5hbCB0eXBlZGVmCiB0eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50
ZXI8UVNjcmlwdEVuZ2luZVByaXZhdGU+IFFTY3JpcHRFbmdpbmVQdHI7CiAKQEAgLTU2LDYgKzU5
LDE1IEBAIHB1YmxpYzoKIAogICAgIFFTY3JpcHRWYWx1ZSBudWxsVmFsdWUoKTsKICAgICBRU2Ny
aXB0VmFsdWUgdW5kZWZpbmVkVmFsdWUoKTsKKworICAgIHR5cGVkZWYgUVNjcmlwdFZhbHVlICgq
RnVuY3Rpb25TaWduYXR1cmUpKFFTY3JpcHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUgKik7Cisg
ICAgdHlwZWRlZiBRU2NyaXB0VmFsdWUgKCpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUpKFFTY3Jp
cHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUgKiwgdm9pZCAqKTsKKworICAgIFFTY3JpcHRWYWx1
ZSBuZXdGdW5jdGlvbihGdW5jdGlvblNpZ25hdHVyZSBmdW4sIGludCBsZW5ndGggPSAwKTsKKyAg
ICBRU2NyaXB0VmFsdWUgbmV3RnVuY3Rpb24oRnVuY3Rpb25TaWduYXR1cmUgZnVuLCBjb25zdCBR
U2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgaW50IGxlbmd0aCA9IDApOworCisgICAgUVNjcmlwdFZh
bHVlIG5ld0Z1bmN0aW9uKEZ1bmN0aW9uV2l0aEFyZ1NpZ25hdHVyZSBmdW4sIHZvaWQqIGFyZyk7
CisKICAgICBRU2NyaXB0VmFsdWUgbmV3T2JqZWN0KCk7CiAgICAgUVNjcmlwdFZhbHVlIG5ld0Fy
cmF5KHVpbnQgbGVuZ3RoID0gMCk7CiAgICAgUVNjcmlwdFZhbHVlIGdsb2JhbE9iamVjdCgpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5j
cHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmNwcAppbmRleCAzNjBk
ZTI5OTQ4M2ZjZTJmMGJiYmQzMWJmYjRmZDNmZGI3ZWM1NGRlLi41OWJmYzhmNWU0M2I2MTg3MWEz
OWJiMzk2Y2E5MTY2NDUxZjU3ZjM1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
cXNjcmlwdGVuZ2luZV9wLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVu
Z2luZV9wLmNwcApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAicXNjcmlwdGVuZ2luZV9w
LmgiCiAKKyNpbmNsdWRlICJxc2NyaXB0ZnVuY3Rpb25fcC5oIgogI2luY2x1ZGUgInFzY3JpcHRw
cm9ncmFtX3AuaCIKICNpbmNsdWRlICJxc2NyaXB0dmFsdWVfcC5oIgogCkBAIC0zNCw2ICszNSw4
IEBAIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpRU2NyaXB0RW5naW5lUHJpdmF0ZShjb25zdCBRU2Ny
aXB0RW5naW5lKiBlbmdpbmUpCiAgICAgLCBtX2V4Y2VwdGlvbigwKQogICAgICwgbV9hcnJheUNv
bnN0cnVjdG9yKDApCiAgICAgLCBtX2FycmF5UHJvdG90eXBlKDApCisgICAgLCBtX2Z1bmN0aW9u
Q29uc3RydWN0b3IoMCkKKyAgICAsIG1fZnVuY3Rpb25Qcm90b3R5cGUoMCkKIHsKICAgICBKU09i
amVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QobV9jb250ZXh0
KTsKIApAQCAtNTIsMTIgKzU1LDI5IEBAIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpRU2NyaXB0RW5n
aW5lUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUpCiAgICAgUV9BU1NFUlQoSlNW
YWx1ZUlzT2JqZWN0KG1fY29udGV4dCwgYXJyYXlQcm90b3R5cGUpKTsKICAgICBtX2FycmF5UHJv
dG90eXBlID0gYXJyYXlQcm90b3R5cGU7CiAgICAgSlNWYWx1ZVByb3RlY3QobV9jb250ZXh0LCBt
X2FycmF5UHJvdG90eXBlKTsKKworICAgIC8vIFNhdmUgcmVmZXJlbmNlcyB0byB0aGUgRnVuY3Rp
b24gY29uc3RydWN0b3IgYW5kIHByb3RvdHlwZS4KKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gZnVuY3Rpb25OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRnVu
Y3Rpb24iKSk7CisgICAgSlNWYWx1ZVJlZiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShtX2NvbnRleHQsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25OYW1lLmdldCgpLCAv
KiBleGNlcHRpb24gKi8gMCk7CisgICAgUV9BU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KG1fY29udGV4
dCwgZnVuY3Rpb25Db25zdHJ1Y3RvcikpOworICAgIG1fZnVuY3Rpb25Db25zdHJ1Y3RvciA9IEpT
VmFsdWVUb09iamVjdChtX2NvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0b3IsIC8qIGV4Y2VwdGlv
biAqLyAwKTsKKyAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIG1fZnVuY3Rpb25Db25zdHJ1
Y3Rvcik7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIFtbUHJvdG90eXBlXV0g
aW50ZXJuYWwgcHJvcGVydHkgKHdoaWNoIHdlIGNvdWxkCisgICAgLy8gZ2V0IHZpYSBKU09iamVj
dEdldFByb3RvdHlwZSksIGJ1dCB0aGUgRnVuY3Rpb24ucHJvdG90eXBlLCB0aGF0IHdpbGwgYmUg
c2V0CisgICAgLy8gYXMgW1tQcm90b3R5cGVdXSBvZiBGdW5jdGlvbiBpbnN0YW5jZXMuCisgICAg
SlNWYWx1ZVJlZiBmdW5jdGlvblByb3RvdHlwZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkobV9jb250
ZXh0LCBtX2Z1bmN0aW9uQ29uc3RydWN0b3IsIHByb3RvdHlwZU5hbWUuZ2V0KCksIC8qIGV4Y2Vw
dGlvbiAqLyAwKTsKKyAgICBRX0FTU0VSVChKU1ZhbHVlSXNPYmplY3QobV9jb250ZXh0LCBmdW5j
dGlvblByb3RvdHlwZSkpOworICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUgPSBmdW5jdGlvblByb3Rv
dHlwZTsKKyAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIG1fZnVuY3Rpb25Qcm90b3R5cGUp
OwogfQogCiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6flFTY3JpcHRFbmdpbmVQcml2YXRlKCkKIHsK
ICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9hcnJheUNvbnN0cnVjdG9yKTsKICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9hcnJheVByb3RvdHlwZSk7CisgICAgSlNW
YWx1ZVByb3RlY3QobV9jb250ZXh0LCBtX2Z1bmN0aW9uQ29uc3RydWN0b3IpOworICAgIEpTVmFs
dWVQcm90ZWN0KG1fY29udGV4dCwgbV9mdW5jdGlvblByb3RvdHlwZSk7CiAgICAgaWYgKG1fZXhj
ZXB0aW9uKQogICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9leGNlcHRpb24p
OwogICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKQEAgLTEwNiw2ICsxMjYs
NDIgQEAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogUVNjcmlwdEVuZ2luZVByaXZhdGU6OnVuY2F1Z2h0
RXhjZXB0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9leGNlcHRpb24gPyBuZXcgUVNjcmlwdFZh
bHVlUHJpdmF0ZSh0aGlzLCBtX2V4Y2VwdGlvbikgOiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSgp
OwogfQogCitRU2NyaXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bmV3RnVu
Y3Rpb24oUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25TaWduYXR1cmUgZnVuLCBRU2NyaXB0VmFsdWVQ
cml2YXRlKiBwcm90b3R5cGUsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYg
bmF0aXZlRnVuY3Rpb25DbGFzcyA9IHF0X2NyZWF0ZU5hdGl2ZUZ1bmN0aW9uQ2xhc3MoKTsKKwor
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIHByaXZhdGUgZGF0YSB3aWxsIGJlIGRlbGV0ZWQgaW4gdGhl
IGNsYXNzJyBmaW5hbGl6ZSBmdW5jdGlvbi4KKyAgICBOYXRpdmVGdW5jdGlvbkRhdGEqIGRhdGEg
PSBuZXcgTmF0aXZlRnVuY3Rpb25EYXRhKHRoaXMsIGZ1bik7CisgICAgSlNPYmplY3RSZWYgZnVu
SlMgPSBKU09iamVjdE1ha2UobV9jb250ZXh0LCBuYXRpdmVGdW5jdGlvbkNsYXNzLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgSlNPYmplY3RTZXRQcm90b3R5cGUobV9jb250
ZXh0LCBmdW5KUywgbV9mdW5jdGlvblByb3RvdHlwZSk7CisKKyAgICBRU2NyaXB0VmFsdWVQcml2
YXRlKiByZXN1bHQgPSBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh0aGlzLCBmdW5KUyk7CisKKyAg
ICBRU2NyaXB0VmFsdWVQcml2YXRlKiBwcm90byA9IHByb3RvdHlwZSA/IHByb3RvdHlwZSA6IG5l
d09iamVjdCgpOworICAgIHJlc3VsdC0+c2V0UHJvcGVydHkoUVN0cmluZzo6ZnJvbUFzY2lpKCJw
cm90b3R5cGUiKSwgcHJvdG8sIFFTY3JpcHRWYWx1ZTo6VW5kZWxldGFibGUpOworICAgIHByb3Rv
LT5zZXRQcm9wZXJ0eShRU3RyaW5nOjpmcm9tQXNjaWkoImNvbnN0cnVjdG9yIiksIHJlc3VsdCwg
UVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzKFFTY3JpcHRWYWx1ZTo6VW5kZWxldGFibGUgfCBR
U2NyaXB0VmFsdWU6OlNraXBJbkVudW1lcmF0aW9uKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitRU2NyaXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bmV3RnVuY3Rp
b24oUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25XaXRoQXJnU2lnbmF0dXJlIGZ1biwgdm9pZCogYXJn
KQoreworICAgIHN0YXRpYyBKU0NsYXNzUmVmIG5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0NsYXNzID0g
cXRfY3JlYXRlTmF0aXZlRnVuY3Rpb25XaXRoQXJnQ2xhc3MoKTsKKworICAgIC8vIE5vdGUgdGhh
dCB0aGlzIHByaXZhdGUgZGF0YSB3aWxsIGJlIGRlbGV0ZWQgaW4gdGhlIGNsYXNzJyBmaW5hbGl6
ZSBmdW5jdGlvbi4KKyAgICBOYXRpdmVGdW5jdGlvbldpdGhBcmdEYXRhKiBkYXRhID0gbmV3IE5h
dGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGEodGhpcywgZnVuLCBhcmcpOworICAgIEpTT2JqZWN0UmVm
IGZ1bkpTID0gSlNPYmplY3RNYWtlKG1fY29udGV4dCwgbmF0aXZlRnVuY3Rpb25XaXRoQXJnQ2xh
c3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICBKU09iamVjdFNldFByb3Rv
dHlwZShtX2NvbnRleHQsIGZ1bkpTLCBtX2Z1bmN0aW9uUHJvdG90eXBlKTsKKworICAgIFFTY3Jp
cHRWYWx1ZVByaXZhdGUqIHJlc3VsdCA9IG5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKHRoaXMsIGZ1
bkpTKTsKKworICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIHByb3RvID0gbmV3T2JqZWN0KCk7Cisg
ICAgcmVzdWx0LT5zZXRQcm9wZXJ0eShRU3RyaW5nOjpmcm9tQXNjaWkoInByb3RvdHlwZSIpLCBw
cm90bywgUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSk7CisgICAgcHJvdG8tPnNldFByb3BlcnR5
KFFTdHJpbmc6OmZyb21Bc2NpaSgiY29uc3RydWN0b3IiKSwgcmVzdWx0LCBRU2NyaXB0VmFsdWU6
OlByb3BlcnR5RmxhZ3MoUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSB8IFFTY3JpcHRWYWx1ZTo6
U2tpcEluRW51bWVyYXRpb24pKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFFTY3JpcHRW
YWx1ZVByaXZhdGUqIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpuZXdPYmplY3QoKSBjb25zdAogewog
ICAgIHJldHVybiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh0aGlzLCBKU09iamVjdE1ha2UobV9j
b250ZXh0LCAvKiBqc0NsYXNzICovIDAsIC8qIHVzZXJEYXRhICovIDApKTsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaCBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaAppbmRleCA0MDFjMDUxZDM1MGEyYjc2ZmNjNTAzNzc4
NjBhMzc1MmY3OWE5MTYwLi5jZTYyODZkNDg2N2RiNmI4ZDIwZmE1MmM1N2FhMWNmOWIxNmNmZTA3
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCkBAIC03MCw2ICs3MCw5
IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgSlNWYWx1ZVJlZiBtYWtlSlNWYWx1ZShib29sIG51bWJl
cikgY29uc3Q7CiAgICAgaW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUoUVNjcmlwdFZhbHVl
OjpTcGVjaWFsVmFsdWUgdmFsdWUpIGNvbnN0OwogCisgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSog
bmV3RnVuY3Rpb24oUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25TaWduYXR1cmUgZnVuLCBRU2NyaXB0
VmFsdWVQcml2YXRlKiBwcm90b3R5cGUsIGludCBsZW5ndGgpOworICAgIFFTY3JpcHRWYWx1ZVBy
aXZhdGUqIG5ld0Z1bmN0aW9uKFFTY3JpcHRFbmdpbmU6OkZ1bmN0aW9uV2l0aEFyZ1NpZ25hdHVy
ZSBmdW4sIHZvaWQqIGFyZyk7CisKICAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiBuZXdPYmplY3Qo
KSBjb25zdDsKICAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiBuZXdBcnJheSh1aW50IGxlbmd0aCk7
CiAgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogZ2xvYmFsT2JqZWN0KCkgY29uc3Q7CkBAIC04Niw2
ICs4OSw5IEBAIHByaXZhdGU6CiAKICAgICBKU09iamVjdFJlZiBtX2FycmF5Q29uc3RydWN0b3I7
CiAgICAgSlNWYWx1ZVJlZiBtX2FycmF5UHJvdG90eXBlOworCisgICAgSlNPYmplY3RSZWYgbV9m
dW5jdGlvbkNvbnN0cnVjdG9yOworICAgIEpTVmFsdWVSZWYgbV9mdW5jdGlvblByb3RvdHlwZTsK
IH07CiAKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlv
bi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGZ1bmN0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45NDE0YTQxZjI0Zjg3NjZkZmU5YzJlNTU1ZmFhNGRhNWVlNTFiOTU5Ci0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbi5jcHAKQEAgLTAs
MCArMSwxMzUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKy8vIENvbnRhaW5zIHRoZSBuZWNlc3Nh
cnkgaGVscGVyIHN0cnVjdHVyZXMgdG8gbWFrZSBwb3NzaWJsZSBleHBvc2UKKy8vIEMvQysrIGZ1
bmN0aW9ucyB0byBKYXZhU2NyaXB0IGVudmlyb25tZW50LgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJxc2NyaXB0ZnVuY3Rpb25fcC5oIgorCitzdGF0aWMgdm9pZCBxdF9OYXRp
dmVGdW5jdGlvbl9maW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgdm9pZCogcHJp
diA9IEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOworICAgIGRlbGV0ZSByZWludGVycHJldF9j
YXN0PE5hdGl2ZUZ1bmN0aW9uRGF0YSo+KHByaXYpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBx
dF9OYXRpdmVGdW5jdGlvbl9jYWxsQXNGdW5jdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgb2JqZWN0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIE5hdGl2ZUZ1bmN0aW9uRGF0YSogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmF0
aXZlRnVuY3Rpb25EYXRhKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworCisgICAgLy8g
VE9ETzogYnVpbGQgYSBRU2NyaXB0Q29udGV4dCBhbmQgdXNlIGl0IGluIHRoZSBuYXRpdmUgY2Fs
bC4KKyAgICBRX1VOVVNFRChjb250ZXh0KTsKKyAgICBRX1VOVVNFRCh0aGlzT2JqZWN0KTsKKyAg
ICBRX1VOVVNFRChhcmd1bWVudENvdW50KTsKKyAgICBRX1VOVVNFRChhcmd1bWVudHMpOworICAg
IFFfVU5VU0VEKGV4Y2VwdGlvbik7CisKKyAgICBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5l
ID0gZGF0YS0+ZW5naW5lOworICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIHJlc3VsdCA9IFFTY3Jp
cHRWYWx1ZVByaXZhdGU6OmdldChkYXRhLT5mdW4oMCwgUVNjcmlwdEVuZ2luZVByaXZhdGU6Omdl
dChlbmdpbmUpKSk7CisgICAgaWYgKCFyZXN1bHQtPmVuZ2luZSgpKQorICAgICAgICByZXN1bHQt
PmFzc2lnbkVuZ2luZShlbmdpbmUpOworCisgICAgUV9BU1NFUlQocmVzdWx0LT5lbmdpbmUoKSA9
PSBlbmdpbmUpOworCisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK0pTQ2xhc3NEZWZpbml0aW9u
IHF0X05hdGl2ZUZ1bmN0aW9uQ2xhc3MgPSB7CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdmVyc2lvbgorICAgIGtKU0NsYXNzQXR0cmlidXRlTm9BdXRvbWF0
aWNQcm90b3R5cGUsIC8vIGF0dHJpYnV0ZXMKKworICAgICIiLCAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjbGFzc05hbWUKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFy
ZW50Q2xhc3MKKworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0aWNWYWx1
ZXMKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGljRnVuY3Rpb25zCisK
KyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZQorICAg
IHF0X05hdGl2ZUZ1bmN0aW9uX2ZpbmFsaXplLCAgICAgICAvLyBmaW5hbGl6ZQorICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXNQcm9wZXJ0eQorICAgIDAsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRQcm9wZXJ0eQorICAgIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXRwcm9wZXJ0eQorICAgIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGVQcm9wZXJ0eQorICAgIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBnZXRQcm9wZXJ0eU5hbWVzCisgICAgcXRfTmF0aXZlRnVu
Y3Rpb25fY2FsbEFzRnVuY3Rpb24sIC8vIGNhbGxBc0Z1bmN0aW9uCisgICAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxBc0NvbnN0cnVjdG9yCisgICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc0luc3RhbmNlCisgICAgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnRUb1R5cGUKK307CisKK0pTQ2xhc3NSZWYg
cXRfY3JlYXRlTmF0aXZlRnVuY3Rpb25DbGFzcygpCit7CisgICAgcmV0dXJuIEpTQ2xhc3NDcmVh
dGUoJnF0X05hdGl2ZUZ1bmN0aW9uQ2xhc3MpOworfQorCitzdGF0aWMgdm9pZCBxdF9OYXRpdmVG
dW5jdGlvbldpdGhBcmdfZmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHZvaWQq
IHByaXYgPSBKU09iamVjdEdldFByaXZhdGUob2JqZWN0KTsKKyAgICBkZWxldGUgcmVpbnRlcnBy
ZXRfY2FzdDxOYXRpdmVGdW5jdGlvbldpdGhBcmdEYXRhKj4ocHJpdik7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIHF0X05hdGl2ZUZ1bmN0aW9uV2l0aEFyZ19jYWxsQXNGdW5jdGlvbihKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIE5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGEqIGRh
dGEgPSByZWludGVycHJldF9jYXN0PE5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGEqPihKU09iamVj
dEdldFByaXZhdGUob2JqZWN0KSk7CisKKyAgICAvLyBUT0RPOiBidWlsZCBhIFFTY3JpcHRDb250
ZXh0IGFuZCB1c2UgaXQgaW4gdGhlIG5hdGl2ZSBjYWxsLgorICAgIFFfVU5VU0VEKGNvbnRleHQp
OworICAgIFFfVU5VU0VEKHRoaXNPYmplY3QpOworICAgIFFfVU5VU0VEKGFyZ3VtZW50Q291bnQp
OworICAgIFFfVU5VU0VEKGFyZ3VtZW50cyk7CisgICAgUV9VTlVTRUQoZXhjZXB0aW9uKTsKKwor
ICAgIFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmUgPSBkYXRhLT5lbmdpbmU7CisgICAgUVNj
cmlwdFZhbHVlUHJpdmF0ZSogcmVzdWx0ID0gUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGRhdGEt
PmZ1bigwLCBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Z2V0KGVuZ2luZSksIGRhdGEtPmFyZykpOwor
ICAgIGlmICghcmVzdWx0LT5lbmdpbmUoKSkKKyAgICAgICAgcmVzdWx0LT5hc3NpZ25FbmdpbmUo
ZW5naW5lKTsKKworICAgIFFfQVNTRVJUKHJlc3VsdC0+ZW5naW5lKCkgPT0gZW5naW5lKTsKKwor
ICAgIHJldHVybiAqcmVzdWx0OworfQorCitKU0NsYXNzRGVmaW5pdGlvbiBxdF9OYXRpdmVGdW5j
dGlvbldpdGhBcmdDbGFzcyA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB2ZXJzaW9uCisgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb0F1dG9tYXRpY1Byb3Rv
dHlwZSwgLy8gYXR0cmlidXRlcworCisgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNsYXNzTmFtZQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJlbnRDbGFz
cworCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRpY1ZhbHVlcworICAg
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0aWNGdW5jdGlvbnMKKworICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZQorICAg
IHF0X05hdGl2ZUZ1bmN0aW9uV2l0aEFyZ19maW5hbGl6ZSwgICAgICAgLy8gZmluYWxpemUKKyAg
ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc1Byb3BlcnR5
CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRQcm9w
ZXJ0eQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0
cHJvcGVydHkKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGRlbGV0ZVByb3BlcnR5CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBnZXRQcm9wZXJ0eU5hbWVzCisgICAgcXRfTmF0aXZlRnVuY3Rpb25XaXRoQXJnX2Nh
bGxBc0Z1bmN0aW9uLCAvLyBjYWxsQXNGdW5jdGlvbgorICAgIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbEFzQ29uc3RydWN0b3IKKyAgICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc0luc3RhbmNlCisgICAgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0VG9UeXBlCit9Owor
CitKU0NsYXNzUmVmIHF0X2NyZWF0ZU5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0NsYXNzKCkKK3sKKyAg
ICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmcXRfTmF0aXZlRnVuY3Rpb25XaXRoQXJnQ2xhc3MpOwor
fQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbl9wLmgg
Yi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGZ1bmN0aW9uX3AuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
Mjc5MDZlMmRhZGRlZjk2NzdkNDhhMzliOTEzNjUwY2M5YzhhMGY3Ci0tLSAvZGV2L251bGwKKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbl9wLmgKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0ZnVuY3Rpb25fcF9oCisj
ZGVmaW5lIHFzY3JpcHRmdW5jdGlvbl9wX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAicXNjcmlwdGVuZ2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZV9wLmgiCisKK3N0
cnVjdCBOYXRpdmVGdW5jdGlvbkRhdGEKK3sKKyAgICBOYXRpdmVGdW5jdGlvbkRhdGEoUVNjcmlw
dEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25TaWduYXR1cmUg
ZnVuKQorICAgICAgICA6IGVuZ2luZShlbmdpbmUpLCBmdW4oZnVuKSB7IH0KKworICAgIFFTY3Jp
cHRFbmdpbmVQcml2YXRlKiBlbmdpbmU7CisgICAgUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25TaWdu
YXR1cmUgZnVuOworfTsKKworSlNDbGFzc1JlZiBxdF9jcmVhdGVOYXRpdmVGdW5jdGlvbkNsYXNz
KCk7CisKK3N0cnVjdCBOYXRpdmVGdW5jdGlvbldpdGhBcmdEYXRhCit7CisgICAgTmF0aXZlRnVu
Y3Rpb25XaXRoQXJnRGF0YShRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lLCBRU2NyaXB0RW5n
aW5lOjpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUgZnVuLCB2b2lkKiBhcmcpCisgICAgICAgIDog
ZW5naW5lKGVuZ2luZSksIGZ1bihmdW4pLCBhcmcoYXJnKSB7IH0KKworICAgIFFTY3JpcHRFbmdp
bmVQcml2YXRlKiBlbmdpbmU7CisgICAgUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25XaXRoQXJnU2ln
bmF0dXJlIGZ1bjsKKyAgICB2b2lkKiBhcmc7Cit9OworCitKU0NsYXNzUmVmIHF0X2NyZWF0ZU5h
dGl2ZUZ1bmN0aW9uV2l0aEFyZ0NsYXNzKCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAgYi9K
YXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNw
cAppbmRleCA3MmNhOWIxNWQ3YzM1ZWJlNDQ3ZTQ1OTBiMjRkMzAzMzI1Njk4YjQxLi4xMWY5OTgw
NGE0YmY3NDgyNjNlODFjNmIyZTg4YzE4ZjYzZWJkMWI5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNw
cApAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBjbGVhbnVwKCkge30K
IAogcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG5ld0Z1bmN0aW9uKCk7CiAgICAgdm9pZCBuZXdP
YmplY3QoKTsKICAgICB2b2lkIGdsb2JhbE9iamVjdCgpOwogICAgIHZvaWQgZXZhbHVhdGUoKTsK
QEAgLTU5LDYgKzYwLDEwNiBAQCB2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpldmFsdWF0ZSgpCiAg
ICAgUVZFUklGWTIoZW5naW5lLmV2YWx1YXRlKCJwaW5nIikuaXNWYWxpZCgpLCAiU2NyaXB0IHRo
cm93aW5nIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gc2hvdWxkIHJldHVybiBhbiBleGNlcHRpb24g
dmFsdWUiKTsKIH0KIAorc3RhdGljIFFTY3JpcHRWYWx1ZSBteUZ1bmN0aW9uKFFTY3JpcHRDb250
ZXh0ICosIFFTY3JpcHRFbmdpbmUgKmVuZykKK3sKKyAgICByZXR1cm4gZW5nLT5udWxsVmFsdWUo
KTsKK30KKworc3RhdGljIFFTY3JpcHRWYWx1ZSBteUZ1bmN0aW9uV2l0aFZvaWRBcmcoUVNjcmlw
dENvbnRleHQgKiwgUVNjcmlwdEVuZ2luZSAqZW5nLCB2b2lkICopCit7CisgICAgcmV0dXJuIGVu
Zy0+bnVsbFZhbHVlKCk7Cit9CisKK3N0YXRpYyBRU2NyaXB0VmFsdWUgbXlGdW5jdGlvblRoYXRS
ZXR1cm5zKFFTY3JpcHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUgKmVuZykKK3sKKyAgICByZXR1
cm4gUVNjcmlwdFZhbHVlKGVuZywgNDIpOworfQorCit2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpu
ZXdGdW5jdGlvbigpCit7CisgICAgLy8gIyMjIHRlc3QgcmV0dXJuIHZhbHVlIQorICAgIFFTY3Jp
cHRFbmdpbmUgZW5nOworCisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgZnVuID0gZW5nLm5l
d0Z1bmN0aW9uKG15RnVuY3Rpb24pOworICAgICAgICBRQ09NUEFSRShmdW4uaXNWYWxpZCgpLCB0
cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzRnVuY3Rpb24oKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKGZ1bi5pc09iamVjdCgpLCB0cnVlKTsKKyAgICAgICAgLy8gUUNPTVBBUkUoZnVu
LnNjcmlwdENsYXNzKCksIChRU2NyaXB0Q2xhc3MqKTApOworICAgICAgICAvLyBhIHByb3RvdHlw
ZSBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdGVkCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFFTY3JpcHRWYWx1ZSBwcm90ID0gZnVuLnByb3BlcnR5KCJwcm90b3R5cGUiLCBRU2Ny
aXB0VmFsdWU6OlJlc29sdmVMb2NhbCk7CisgICAgICAgICAgICBRVkVSSUZZKHByb3QuaXNPYmpl
Y3QoKSk7CisgICAgICAgICAgICBRVkVSSUZZKHByb3QucHJvcGVydHkoImNvbnN0cnVjdG9yIiku
c3RyaWN0bHlFcXVhbHMoZnVuKSk7CisgICAgICAgICAgICAvLyBRQ09NUEFSRShmdW4ucHJvcGVy
dHlGbGFncygicHJvdG90eXBlIiksIFFTY3JpcHRWYWx1ZTo6VW5kZWxldGFibGUpOworICAgICAg
ICAgICAgLy8gUUNPTVBBUkUocHJvdC5wcm9wZXJ0eUZsYWdzKCJjb25zdHJ1Y3RvciIpLCBRU2Ny
aXB0VmFsdWU6OlVuZGVsZXRhYmxlIHwgUVNjcmlwdFZhbHVlOjpTa2lwSW5FbnVtZXJhdGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgLy8gcHJvdG90eXBlIHNob3VsZCBiZSBGdW5jdGlvbi5wcm90
b3R5cGUKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlwZSgpLmlzVmFsaWQoKSwgdHJ1ZSk7
CisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm90b3R5cGUoKS5pc0Z1bmN0aW9uKCksIHRydWUpOwor
ICAgICAgICBRQ09NUEFSRShmdW4ucHJvdG90eXBlKCkuc3RyaWN0bHlFcXVhbHMoZW5nLmV2YWx1
YXRlKCJGdW5jdGlvbi5wcm90b3R5cGUiKSksIHRydWUpOworCisgICAgICAgIFFDT01QQVJFKGZ1
bi5jYWxsKCkuaXNOdWxsKCksIHRydWUpOworICAgICAgICAvLyBRQ09NUEFSRShmdW4uY29uc3Ry
dWN0KCkuaXNPYmplY3QoKSwgdHJ1ZSk7CisgICAgfQorCisgICAgLy8gdGhlIG92ZXJsb2FkIHRo
YXQgdGFrZXMgYSB2b2lkKgorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIGZ1biA9IGVuZy5u
ZXdGdW5jdGlvbihteUZ1bmN0aW9uV2l0aFZvaWRBcmcsICh2b2lkKil0aGlzKTsKKyAgICAgICAg
UVZFUklGWShmdW4uaXNGdW5jdGlvbigpKTsKKyAgICAgICAgLy8gUUNPTVBBUkUoZnVuLnNjcmlw
dENsYXNzKCksIChRU2NyaXB0Q2xhc3MqKTApOworICAgICAgICAvLyBhIHByb3RvdHlwZSBwcm9w
ZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdGVkCisgICAgICAgIHsKKyAgICAgICAgICAg
IFFTY3JpcHRWYWx1ZSBwcm90ID0gZnVuLnByb3BlcnR5KCJwcm90b3R5cGUiLCBRU2NyaXB0VmFs
dWU6OlJlc29sdmVMb2NhbCk7CisgICAgICAgICAgICBRVkVSSUZZKHByb3QuaXNPYmplY3QoKSk7
CisgICAgICAgICAgICBRVkVSSUZZKHByb3QucHJvcGVydHkoImNvbnN0cnVjdG9yIikuc3RyaWN0
bHlFcXVhbHMoZnVuKSk7CisgICAgICAgICAgICAvLyBRQ09NUEFSRShmdW4ucHJvcGVydHlGbGFn
cygicHJvdG90eXBlIiksIFFTY3JpcHRWYWx1ZTo6VW5kZWxldGFibGUpOworICAgICAgICAgICAg
Ly8gUUNPTVBBUkUocHJvdC5wcm9wZXJ0eUZsYWdzKCJjb25zdHJ1Y3RvciIpLCBRU2NyaXB0VmFs
dWU6OlVuZGVsZXRhYmxlIHwgUVNjcmlwdFZhbHVlOjpTa2lwSW5FbnVtZXJhdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gcHJvdG90eXBlIHNob3VsZCBiZSBGdW5jdGlvbi5wcm90b3R5cGUK
KyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlwZSgpLmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKGZ1bi5wcm90b3R5cGUoKS5pc0Z1bmN0aW9uKCksIHRydWUpOworICAgICAg
ICBRQ09NUEFSRShmdW4ucHJvdG90eXBlKCkuc3RyaWN0bHlFcXVhbHMoZW5nLmV2YWx1YXRlKCJG
dW5jdGlvbi5wcm90b3R5cGUiKSksIHRydWUpOworCisgICAgICAgIFFDT01QQVJFKGZ1bi5jYWxs
KCkuaXNOdWxsKCksIHRydWUpOworICAgICAgICAvLyBRQ09NUEFSRShmdW4uY29uc3RydWN0KCku
aXNPYmplY3QoKSwgdHJ1ZSk7CisgICAgfQorCisgICAgLy8gdGhlIG92ZXJsb2FkIHRoYXQgdGFr
ZXMgYSBwcm90b3R5cGUKKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSBwcm90byA9IGVuZy5u
ZXdPYmplY3QoKTsKKyAgICAgICAgUVNjcmlwdFZhbHVlIGZ1biA9IGVuZy5uZXdGdW5jdGlvbiht
eUZ1bmN0aW9uLCBwcm90byk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5pc1ZhbGlkKCksIHRydWUp
OworICAgICAgICBRQ09NUEFSRShmdW4uaXNGdW5jdGlvbigpLCB0cnVlKTsKKyAgICAgICAgUUNP
TVBBUkUoZnVuLmlzT2JqZWN0KCksIHRydWUpOworICAgICAgICAvLyBpbnRlcm5hbCBwcm90b3R5
cGUgc2hvdWxkIGJlIEZ1bmN0aW9uLnByb3RvdHlwZQorICAgICAgICBRQ09NUEFSRShmdW4ucHJv
dG90eXBlKCkuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlw
ZSgpLmlzRnVuY3Rpb24oKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm90b3R5cGUo
KS5zdHJpY3RseUVxdWFscyhlbmcuZXZhbHVhdGUoIkZ1bmN0aW9uLnByb3RvdHlwZSIpKSwgdHJ1
ZSk7CisgICAgICAgIC8vIHB1YmxpYyBwcm90b3R5cGUgc2hvdWxkIGJlIHRoZSBvbmUgd2UgcGFz
c2VkCisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm9wZXJ0eSgicHJvdG90eXBlIikuc3RyaWN0bHlF
cXVhbHMocHJvdG8pLCB0cnVlKTsKKyAgICAgICAgLy8gUUNPTVBBUkUoZnVuLnByb3BlcnR5Rmxh
Z3MoInByb3RvdHlwZSIpLCBRU2NyaXB0VmFsdWU6OlVuZGVsZXRhYmxlKTsKKyAgICAgICAgUUNP
TVBBUkUocHJvdG8ucHJvcGVydHkoImNvbnN0cnVjdG9yIikuc3RyaWN0bHlFcXVhbHMoZnVuKSwg
dHJ1ZSk7CisgICAgICAgIC8vIFFDT01QQVJFKHByb3RvLnByb3BlcnR5RmxhZ3MoImNvbnN0cnVj
dG9yIiksCisgICAgICAgIC8vICAgICAgICAgIFFTY3JpcHRWYWx1ZTo6VW5kZWxldGFibGUgfCBR
U2NyaXB0VmFsdWU6OlNraXBJbkVudW1lcmF0aW9uKTsKKworICAgICAgICBRQ09NUEFSRShmdW4u
Y2FsbCgpLmlzTnVsbCgpLCB0cnVlKTsKKyAgICAgICAgLy8gUUNPTVBBUkUoZnVuLmNvbnN0cnVj
dCgpLmlzT2JqZWN0KCksIHRydWUpOworICAgIH0KKworICAgIC8vIHdoZXRoZXIgdGhlIHJldHVy
biB2YWx1ZSBpcyBjb3JyZWN0CisgICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgZnVuID0gZW5n
Lm5ld0Z1bmN0aW9uKG15RnVuY3Rpb25UaGF0UmV0dXJucyk7CisgICAgICAgIFFDT01QQVJFKGZ1
bi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShmdW4uaXNGdW5jdGlvbigpLCB0
cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzT2JqZWN0KCksIHRydWUpOworCisgICAgICAg
IFFTY3JpcHRWYWx1ZSByZXN1bHQgPSBmdW4uY2FsbCgpOworICAgICAgICBRQ09NUEFSRShyZXN1
bHQuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHJlc3VsdC50b0ludDMyKCks
IDQyKTsKKyAgICB9Cit9CisKIHZvaWQgdHN0X1FTY3JpcHRFbmdpbmU6Om5ld09iamVjdCgpCiB7
CiAgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62488</attachid>
            <date>2010-07-23 23:28:58 -0700</date>
            <delta_ts>2010-07-26 06:22:57 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>0001-Add-newFunction-support-still-without-QScriptContext.patch</filename>
            <type>text/plain</type>
            <size>33493</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSA2MWVkOWRlMzM2YzE4ZDEyODA0OTM4NDQyYWE1NDljNzA3NzQzMDkwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogVGh1LCA4IEp1bCAyMDEwIDA0OjQwOjU1IC0w
MzAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIG5ld0Z1bmN0aW9uKCkgc3VwcG9ydCwgc3RpbGwgd2l0
aG91dCBRU2NyaXB0Q29udGV4dAoKLS0tCiBKYXZhU2NyaXB0Q29yZS9xdC9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgNTYgKysrKysrKwogSmF2YVNjcmlwdENvcmUvcXQvYXBp
L1F0U2NyaXB0LnBybyAgICAgICAgICAgICAgICAgfCAgICAzICstCiBKYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAgICAgICAgICAgICB8ICAxMDcgKysrKysrKysrKysrKysK
IEphdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmggICAgICAgICAgICAgIHwgICAx
MSArKwogSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAgICAgICAgICAg
fCAgIDM2ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmggICAg
ICAgICAgICB8ICAgIDcgKwogSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbi5j
cHAgICAgICAgICAgfCAgMTUzICsrKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGZ1bmN0aW9uX3AuaCAgICAgICAgICB8ICAgNTggKysrKysrKysKIC4uLi9x
dC9hcGkvcXNjcmlwdG9yaWdpbmFsZ2xvYmFsb2JqZWN0X3AuaCAgICAgICAgIHwgICAxMiArKwog
Li4uL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwICAgfCAgMTQx
ICsrKysrKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgNTgzIGluc2VydGlvbnMoKyks
IDEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvcXQvYXBp
L3FzY3JpcHRmdW5jdGlvbi5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGZ1bmN0aW9uX3AuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0
L0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL3F0L0NoYW5nZUxvZwppbmRleCA0NDhhNTllLi5i
ODdhZmFjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9DaGFuZ2VMb2cKKysrIGIvSmF2
YVNjcmlwdENvcmUvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDctMjMgIENh
aW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
IEltcGxlbWVudCBRU2NyaXB0RW5naW5lOjpuZXdGdW5jdGlvbigpIHBhcnRzIHRoYXQgZG9lc24n
dCBkZXBlbmQgb24gUVNjcmlwdENvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQyMTc0CisKKyAgICAgICAgU2luY2Ugb3VyIGZ1bmN0aW9uIGNh
biBiZSBjYWxsZWQgaW4gSmF2YXNjcmlwdCBib3RoIGFzIGEgZnVuY3Rpb24KKyAgICAgICAgYW5k
IGFzIGEgY29uc3RydWN0b3IsIHdlIGNvdWxkbid0IHVzZSB0aGUgZXhpc3RpbmcKKyAgICAgICAg
SlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soKSBhbmQgSlNPYmplY3RNYWtlQ29uc3Ry
dWN0b3IoKS4KKworICAgICAgICBJbnN0ZWFkLCBhIEpTQ2xhc3NSZWYgd2FzIGNyZWF0ZWQsIGlt
cGxlbWVudGluZyB0aGUgbmVlZGVkCisgICAgICAgIGNhbGxiYWNrcyAodGhlIGNhbGxBc0NvbnN0
cnVjdG9yIGlzIG5vdCB0aGVyZSB5ZXQgYmVjYXVzZSBpdHMKKyAgICAgICAgYmVoYXZpb3VyIGRl
cGVuZHMgb24gUVNjcmlwdENvbnRleHQpLgorCisgICAgICAgIEZvciB0aGUgbW9tZW50LCBRU2Ny
aXB0Q29udGV4dCBpcyBkZWZpbmVkIGFzIGEgdm9pZCB0eXBlLCBzaW5jZSB3ZQorICAgICAgICBz
dGlsbCBkb24ndCB1c2UgaXQuCisKKyAgICAgICAgVGhlIHZhcmlhbnQgb2YgbmV3RnVuY3Rpb24o
KSB0aGF0IGFsc28gdGFrZXMgYW4gZXh0ZXJuYWwgYXJndW1lbnQKKyAgICAgICAgd2FzIGFsc28g
aW1wbGVtZW50ZWQuIFRoZSBkZXRhaWxzIG9mIGltcGxlbWVudGF0aW9uIHdlcmUgYWRkZWQgdG8K
KyAgICAgICAgdGhlIHFzY3JpcHRmdW5jdGlvbnsuYyxfcC5ofSBmaWxlcy4KKworICAgICAgICBU
aGlzIGNvbW1pdCBhbHNvIGFkZHMgdGVzdHMsIHNvbWUgb2YgdGhlbSBmcm9tIFF0J3MgdXBzdHJl
YW0uCisKKyAgICAgICAgKiBhcGkvUXRTY3JpcHQucHJvOgorICAgICAgICAqIGFwaS9xc2NyaXB0
ZW5naW5lLmNwcDoKKyAgICAgICAgKFFTY3JpcHRFbmdpbmU6Om5ld0Z1bmN0aW9uKToKKyAgICAg
ICAgKiBhcGkvcXNjcmlwdGVuZ2luZS5oOgorICAgICAgICAqIGFwaS9xc2NyaXB0ZW5naW5lX3Au
Y3BwOgorICAgICAgICAoUVNjcmlwdEVuZ2luZVByaXZhdGU6OlFTY3JpcHRFbmdpbmVQcml2YXRl
KToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjp+UVNjcmlwdEVuZ2luZVByaXZhdGUp
OgorICAgICAgICAoUVNjcmlwdEVuZ2luZVByaXZhdGU6Om5ld0Z1bmN0aW9uKToKKyAgICAgICAg
KFFTY3JpcHRFbmdpbmVQcml2YXRlOjpuZXdGdW5jdGlvbl9oZWxwZXIpOgorICAgICAgICAqIGFw
aS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKiBhcGkvcXNjcmlwdGZ1bmN0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgIChxdF9OYXRpdmVGdW5jdGlvbl9maW5hbGl6ZSk6CisgICAgICAgIChx
dF9OYXRpdmVGdW5jdGlvbl9jYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChxdF9jcmVhdGVOYXRp
dmVGdW5jdGlvbkNsYXNzKToKKyAgICAgICAgKHF0X05hdGl2ZUZ1bmN0aW9uV2l0aEFyZ19maW5h
bGl6ZSk6CisgICAgICAgIChxdF9OYXRpdmVGdW5jdGlvbldpdGhBcmdfY2FsbEFzRnVuY3Rpb24p
OgorICAgICAgICAocXRfY3JlYXRlTmF0aXZlRnVuY3Rpb25XaXRoQXJnQ2xhc3MpOgorICAgICAg
ICAqIGFwaS9xc2NyaXB0ZnVuY3Rpb25fcC5oOiBBZGRlZC4KKyAgICAgICAgKFFOYXRpdmVGdW5j
dGlvbkRhdGE6OlFOYXRpdmVGdW5jdGlvbkRhdGEpOgorICAgICAgICAoUU5hdGl2ZUZ1bmN0aW9u
V2l0aEFyZ0RhdGE6OlFOYXRpdmVGdW5jdGlvbldpdGhBcmdEYXRhKToKKyAgICAgICAgKiBhcGkv
cXNjcmlwdG9yaWdpbmFsZ2xvYmFsb2JqZWN0X3AuaDoKKyAgICAgICAgKFFTY3JpcHRPcmlnaW5h
bEdsb2JhbE9iamVjdDo6UVNjcmlwdE9yaWdpbmFsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFFT
Y3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdDo6flFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdCk6
CisgICAgICAgIChRU2NyaXB0T3JpZ2luYWxHbG9iYWxPYmplY3Q6OmZ1bmN0aW9uUHJvdG90eXBl
KToKKyAgICAgICAgKiB0ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcDoK
KyAgICAgICAgKG15RnVuY3Rpb24pOgorICAgICAgICAobXlGdW5jdGlvbldpdGhBcmcpOgorICAg
ICAgICAobXlGdW5jdGlvblRoYXRSZXR1cm5zKToKKyAgICAgICAgKG15RnVuY3Rpb25UaGF0UmV0
dXJuc1dpdGhvdXRFbmdpbmUpOgorICAgICAgICAobXlGdW5jdGlvblRoYXRSZXR1cm5zV3JvbmdF
bmdpbmUpOgorICAgICAgICAodHN0X1FTY3JpcHRFbmdpbmU6Om5ld0Z1bmN0aW9uKToKKwogMjAx
MC0wNy0xNCAgSmVkcnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8gYi9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvUXRTY3JpcHQucHJvCmluZGV4IGMyYzZmODMuLjQ5MDc1OGMgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KKysrIGIvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL1F0U2NyaXB0LnBybwpAQCAtMjgsNiArMjgsNyBAQCBTT1VSQ0VTICs9ICAkJFBXRC9xc2Ny
aXB0ZW5naW5lLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0c3RyaW5nLmNwcCBcCiAg
ICAgICAgICAgICAkJFBXRC9xc2NyaXB0cHJvZ3JhbS5jcHAgXAogICAgICAgICAgICAgJCRQV0Qv
cXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmNwcCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0
ZnVuY3Rpb24uY3BwCiAKIEhFQURFUlMgKz0gICQkUFdEL3F0c2NyaXB0Z2xvYmFsLmggXAogICAg
ICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2luZS5oIFwKQEAgLTQzLDcgKzQ0LDcgQEAgSEVBREVS
UyArPSAgJCRQV0QvcXRzY3JpcHRnbG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0
cHJvZ3JhbV9wLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0
LmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdG9yaWdpbmFsZ2xvYmFsb2JqZWN0X3AuaCBc
Ci0KKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRmdW5jdGlvbl9wLmgKIAogIXN0YXRpYzogREVG
SU5FUyArPSBRVF9NQUtFRExMCiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNw
cAppbmRleCA0YjIzMTliLi43ZWY3YzhlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRl
bmdpbmUuY3BwCkBAIC0yNTgsNiArMjU4LDkzIEBAIFFTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5l
Ojp1bmRlZmluZWRWYWx1ZSgpCiB9CiAKIC8qIQorICAgIENyZWF0ZXMgYSBRU2NyaXB0VmFsdWUg
dGhhdCB3cmFwcyBhIG5hdGl2ZSAoQysrKSBmdW5jdGlvbi4gXGEgZnVuCisgICAgbXVzdCBiZSBh
IEMrKyBmdW5jdGlvbiB3aXRoIHNpZ25hdHVyZSBRU2NyaXB0RW5naW5lOjpGdW5jdGlvblNpZ25h
dHVyZS4KKyAgICBcYSBsZW5ndGggaXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCBcYSBm
dW4gZXhwZWN0czsgdGhpcyBiZWNvbWVzCisgICAgdGhlIFxje2xlbmd0aH0gcHJvcGVydHkgb2Yg
dGhlIGNyZWF0ZWQgUVNjcmlwdFZhbHVlLgorCisgICAgTm90ZSB0aGF0IFxhIGxlbmd0aCBvbmx5
IGdpdmVzIGFuIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZgorICAgIGFyZ3VtZW50cyB0aGF0
IHRoZSBmdW5jdGlvbiBleHBlY3RzOyBhbiBhY3R1YWwgaW52b2NhdGlvbiBvZiBhCisgICAgZnVu
Y3Rpb24gY2FuIGluY2x1ZGUgYW55IG51bWJlciBvZiBhcmd1bWVudHMuIFlvdSBjYW4gY2hlY2sg
dGhlCisgICAgXGx7UVNjcmlwdENvbnRleHQ6OmFyZ3VtZW50Q291bnQoKX17YXJndW1lbnRDb3Vu
dCgpfSBvZiB0aGUKKyAgICBRU2NyaXB0Q29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGludm9j
YXRpb24gdG8gZGV0ZXJtaW5lIHRoZQorICAgIGFjdHVhbCBudW1iZXIgb2YgYXJndW1lbnRzIHBh
c3NlZC4KKworICAgIEEgXGN7cHJvdG90eXBlfSBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGNy
ZWF0ZWQgZm9yIHRoZSByZXN1bHRpbmcKKyAgICBmdW5jdGlvbiBvYmplY3QsIHRvIHByb3ZpZGUg
Zm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBmdW5jdGlvbgorICAgIHdpbGwgYmUgdXNlZCBh
cyBhIGNvbnN0cnVjdG9yLgorCisgICAgQnkgY29tYmluaW5nIG5ld0Z1bmN0aW9uKCkgYW5kIHRo
ZSBwcm9wZXJ0eSBmbGFncworICAgIFFTY3JpcHRWYWx1ZTo6UHJvcGVydHlHZXR0ZXIgYW5kIFFT
Y3JpcHRWYWx1ZTo6UHJvcGVydHlTZXR0ZXIsIHlvdQorICAgIGNhbiBjcmVhdGUgc2NyaXB0IG9i
amVjdCBwcm9wZXJ0aWVzIHRoYXQgYmVoYXZlIGxpa2Ugbm9ybWFsCisgICAgcHJvcGVydGllcyBp
biBzY3JpcHQgY29kZSwgYnV0IGFyZSBpbiBmYWN0IGFjY2Vzc2VkIHRocm91Z2gKKyAgICBmdW5j
dGlvbnMgKGFuYWxvZ291cyB0byBob3cgcHJvcGVydGllcyB3b3JrIGluIFxse1F0J3MgUHJvcGVy
dHkKKyAgICBTeXN0ZW19KS4gRXhhbXBsZToKKworICAgIFxzbmlwcGV0IGRvYy9zcmMvc25pcHBl
dHMvY29kZS9zcmNfc2NyaXB0X3FzY3JpcHRlbmdpbmUuY3BwIDExCisKKyAgICBXaGVuIHRoZSBw
cm9wZXJ0eSBcY3tmb299IG9mIHRoZSBzY3JpcHQgb2JqZWN0IGlzIHN1YnNlcXVlbnRseQorICAg
IGFjY2Vzc2VkIGluIHNjcmlwdCBjb2RlLCBcY3tnZXRTZXRGb28oKX0gd2lsbCBiZSBpbnZva2Vk
IHRvIGhhbmRsZQorICAgIHRoZSBhY2Nlc3MuICBJbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSwgd2Ug
Y2hvc2UgdG8gc3RvcmUgdGhlICJyZWFsIgorICAgIHZhbHVlIG9mIFxje2Zvb30gYXMgYSBwcm9w
ZXJ0eSBvZiB0aGUgYWNjZXNzb3IgZnVuY3Rpb24gaXRzZWxmOyB5b3UKKyAgICBhcmUgb2YgY291
cnNlIGZyZWUgdG8gZG8gd2hhdGV2ZXIgeW91IGxpa2UgaW4gdGhpcyBmdW5jdGlvbi4KKworICAg
IEluIHRoZSBhYm92ZSBleGFtcGxlLCBhIHNpbmdsZSBuYXRpdmUgZnVuY3Rpb24gd2FzIHVzZWQg
dG8gaGFuZGxlCisgICAgYm90aCByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBwcm9wZXJ0eTsgdGhl
IGFyZ3VtZW50IGNvdW50IGlzIHVzZWQgdG8KKyAgICBkZXRlcm1pbmUgaWYgd2UgYXJlIGhhbmRs
aW5nIGEgcmVhZCBvciB3cml0ZS4gWW91IGNhbiBhbHNvIHVzZSB0d28KKyAgICBzZXBhcmF0ZSBm
dW5jdGlvbnM7IGp1c3Qgc3BlY2lmeSB0aGUgcmVsZXZhbnQgZmxhZworICAgIChRU2NyaXB0VmFs
dWU6OlByb3BlcnR5R2V0dGVyIG9yIFFTY3JpcHRWYWx1ZTo6UHJvcGVydHlTZXR0ZXIpIHdoZW4K
KyAgICBzZXR0aW5nIHRoZSBwcm9wZXJ0eSwgZS5nLjoKKworICAgIFxzbmlwcGV0IGRvYy9zcmMv
c25pcHBldHMvY29kZS9zcmNfc2NyaXB0X3FzY3JpcHRlbmdpbmUuY3BwIDEyCisKKyAgICBcc2Eg
UVNjcmlwdFZhbHVlOjpjYWxsKCkKKyovCitRU2NyaXB0VmFsdWUgUVNjcmlwdEVuZ2luZTo6bmV3
RnVuY3Rpb24oUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25TaWduYXR1cmUgZnVuLCBpbnQgbGVuZ3Ro
KQoreworICAgIHJldHVybiBRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoZF9wdHItPm5ld0Z1bmN0
aW9uKGZ1biwgMCwgbGVuZ3RoKSk7Cit9CisKKy8qIQorICAgIENyZWF0ZXMgYSBjb25zdHJ1Y3Rv
ciBmdW5jdGlvbiBmcm9tIFxhIGZ1biwgd2l0aCB0aGUgZ2l2ZW4gXGEgbGVuZ3RoLgorICAgIFRo
ZSBcY3twcm90b3R5cGV9IHByb3BlcnR5IG9mIHRoZSByZXN1bHRpbmcgZnVuY3Rpb24gaXMgc2V0
IHRvIGJlIHRoZQorICAgIGdpdmVuIFxhIHByb3RvdHlwZS4gVGhlIFxje2NvbnN0cnVjdG9yfSBw
cm9wZXJ0eSBvZiBcYSBwcm90b3R5cGUgaXMKKyAgICBzZXQgdG8gYmUgdGhlIHJlc3VsdGluZyBm
dW5jdGlvbi4KKworICAgIFdoZW4gYSBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgYSBjb25zdHJ1Y3Rv
ciAoZS5nLiBcY3tuZXcgRm9vKCl9KSwgdGhlCisgICAgYHRoaXMnIG9iamVjdCBhc3NvY2lhdGVk
IHdpdGggdGhlIGZ1bmN0aW9uIGNhbGwgaXMgdGhlIG5ldyBvYmplY3QKKyAgICB0aGF0IHRoZSBm
dW5jdGlvbiBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplOyB0aGUgcHJvdG90eXBlIG9mIHRoaXMK
KyAgICBkZWZhdWx0IGNvbnN0cnVjdGVkIG9iamVjdCB3aWxsIGJlIHRoZSBmdW5jdGlvbidzIHB1
YmxpYworICAgIFxje3Byb3RvdHlwZX0gcHJvcGVydHkuIElmIHlvdSBhbHdheXMgd2FudCB0aGUg
ZnVuY3Rpb24gdG8gYmVoYXZlIGFzCisgICAgYSBjb25zdHJ1Y3RvciAoZS5nLiBcY3tGb28oKX0g
c2hvdWxkIGFsc28gY3JlYXRlIGEgbmV3IG9iamVjdCksIG9yCisgICAgaWYgeW91IG5lZWQgdG8g
Y3JlYXRlIHlvdXIgb3duIG9iamVjdCByYXRoZXIgdGhhbiB1c2luZyB0aGUgZGVmYXVsdAorICAg
IGB0aGlzJyBvYmplY3QsIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHByb3RvdHlwZSBv
ZiB5b3VyCisgICAgb2JqZWN0IGlzIHNldCBjb3JyZWN0bHk7IGVpdGhlciBieSBzZXR0aW5nIGl0
IG1hbnVhbGx5LCBvciwgd2hlbgorICAgIHdyYXBwaW5nIGEgY3VzdG9tIHR5cGUsIGJ5IGhhdmlu
ZyByZWdpc3RlcmVkIHRoZSBkZWZhdWx0UHJvdG90eXBlKCkKKyAgICBvZiB0aGF0IHR5cGUuIEV4
YW1wbGU6CisKKyAgICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3JjX3NjcmlwdF9x
c2NyaXB0ZW5naW5lLmNwcCA5CisKKyAgICBUbyB3cmFwIGEgY3VzdG9tIHR5cGUgYW5kIHByb3Zp
ZGUgYSBjb25zdHJ1Y3RvciBmb3IgaXQsIHlvdSdkIHR5cGljYWxseQorICAgIGRvIHNvbWV0aGlu
ZyBsaWtlIHRoaXM6CisKKyAgICBcc25pcHBldCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3JjX3Nj
cmlwdF9xc2NyaXB0ZW5naW5lLmNwcCAxMAorKi8KK1FTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5l
OjpuZXdGdW5jdGlvbihRU2NyaXB0RW5naW5lOjpGdW5jdGlvblNpZ25hdHVyZSBmdW4sIGNvbnN0
IFFTY3JpcHRWYWx1ZSYgcHJvdG90eXBlLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiBRU2Ny
aXB0VmFsdWVQcml2YXRlOjpnZXQoZF9wdHItPm5ld0Z1bmN0aW9uKGZ1biwgUVNjcmlwdFZhbHVl
UHJpdmF0ZTo6Z2V0KHByb3RvdHlwZSksIGxlbmd0aCkpOworfQorCisvKiEKKyAgICBcaW50ZXJu
YWwKKyAgICBcc2luY2UgNC40CisqLworUVNjcmlwdFZhbHVlIFFTY3JpcHRFbmdpbmU6Om5ld0Z1
bmN0aW9uKFFTY3JpcHRFbmdpbmU6OkZ1bmN0aW9uV2l0aEFyZ1NpZ25hdHVyZSBmdW4sIHZvaWQq
IGFyZykKK3sKKyAgICByZXR1cm4gUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGRfcHRyLT5uZXdG
dW5jdGlvbihmdW4sIGFyZykpOworfQorCisvKiEKICAgQ3JlYXRlcyBhIFF0U2NyaXB0IG9iamVj
dCBvZiBjbGFzcyBPYmplY3QuCiAKICAgVGhlIHByb3RvdHlwZSBvZiB0aGUgY3JlYXRlZCBvYmpl
Y3Qgd2lsbCBiZSB0aGUgT2JqZWN0CkBAIC0yOTQsMyArMzgxLDIzIEBAIFFTY3JpcHRWYWx1ZSBR
U2NyaXB0RW5naW5lOjpnbG9iYWxPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBRU2NyaXB0
VmFsdWVQcml2YXRlOjpnZXQoZF9wdHItPmdsb2JhbE9iamVjdCgpKTsKIH0KKworLyohCisgICAg
XHR5cGVkZWYgUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25TaWduYXR1cmUKKyAgICBccmVsYXRlcyBR
U2NyaXB0RW5naW5lCisKKyAgICBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIFxje1FTY3JpcHRWYWx1
ZSBmKFFTY3JpcHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUgKil9LgorCisgICAgQSBmdW5jdGlv
biB3aXRoIHN1Y2ggYSBzaWduYXR1cmUgY2FuIGJlIHBhc3NlZCB0bworICAgIFFTY3JpcHRFbmdp
bmU6Om5ld0Z1bmN0aW9uKCkgdG8gd3JhcCB0aGUgZnVuY3Rpb24uCisqLworCisvKiEKKyAgICBc
dHlwZWRlZiBRU2NyaXB0RW5naW5lOjpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUKKyAgICBccmVs
YXRlcyBRU2NyaXB0RW5naW5lCisKKyAgICBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIFxje1FTY3Jp
cHRWYWx1ZSBmKFFTY3JpcHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUgKiwgdm9pZCAqKX0uCisK
KyAgICBBIGZ1bmN0aW9uIHdpdGggc3VjaCBhIHNpZ25hdHVyZSBjYW4gYmUgcGFzc2VkIHRvCisg
ICAgUVNjcmlwdEVuZ2luZTo6bmV3RnVuY3Rpb24oKSB0byB3cmFwIHRoZSBmdW5jdGlvbi4KKyov
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuaAppbmRleCAxYTg3YTM3Li5iODVkYzUy
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmgKQEAgLTMwLDYgKzMwLDkgQEAK
IGNsYXNzIFFTY3JpcHRWYWx1ZTsKIGNsYXNzIFFTY3JpcHRFbmdpbmVQcml2YXRlOwogCisvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgb25jZSBRU2NyaXB0Q29udGV4dCBpcyBwcm9wZXJseSBkZWZpbmVk
LgordHlwZWRlZiB2b2lkIFFTY3JpcHRDb250ZXh0OworCiAvLyBJbnRlcm5hbCB0eXBlZGVmCiB0
eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI8UVNjcmlwdEVuZ2luZVByaXZhdGU+
IFFTY3JpcHRFbmdpbmVQdHI7CiAKQEAgLTU2LDYgKzU5LDE0IEBAIHB1YmxpYzoKIAogICAgIFFT
Y3JpcHRWYWx1ZSBudWxsVmFsdWUoKTsKICAgICBRU2NyaXB0VmFsdWUgdW5kZWZpbmVkVmFsdWUo
KTsKKworICAgIHR5cGVkZWYgUVNjcmlwdFZhbHVlICgqRnVuY3Rpb25TaWduYXR1cmUpKFFTY3Jp
cHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUgKik7CisgICAgdHlwZWRlZiBRU2NyaXB0VmFsdWUg
KCpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUpKFFTY3JpcHRDb250ZXh0ICosIFFTY3JpcHRFbmdp
bmUgKiwgdm9pZCAqKTsKKworICAgIFFTY3JpcHRWYWx1ZSBuZXdGdW5jdGlvbihGdW5jdGlvblNp
Z25hdHVyZSBmdW4sIGludCBsZW5ndGggPSAwKTsKKyAgICBRU2NyaXB0VmFsdWUgbmV3RnVuY3Rp
b24oRnVuY3Rpb25TaWduYXR1cmUgZnVuLCBjb25zdCBRU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwg
aW50IGxlbmd0aCA9IDApOworICAgIFFTY3JpcHRWYWx1ZSBuZXdGdW5jdGlvbihGdW5jdGlvbldp
dGhBcmdTaWduYXR1cmUgZnVuLCB2b2lkKiBhcmcpOworCiAgICAgUVNjcmlwdFZhbHVlIG5ld09i
amVjdCgpOwogICAgIFFTY3JpcHRWYWx1ZSBuZXdBcnJheSh1aW50IGxlbmd0aCA9IDApOwogICAg
IFFTY3JpcHRWYWx1ZSBnbG9iYWxPYmplY3QoKSBjb25zdDsKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBp
L3FzY3JpcHRlbmdpbmVfcC5jcHAKaW5kZXggZTMzMTFlZC4uNmVkMjM4MyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2lu
Y2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgogCisjaW5jbHVkZSAicXNjcmlwdGZ1bmN0aW9uX3Au
aCIKICNpbmNsdWRlICJxc2NyaXB0cHJvZ3JhbV9wLmgiCiAjaW5jbHVkZSAicXNjcmlwdHZhbHVl
X3AuaCIKIApAQCAtMzMsMTEgKzM0LDE1IEBAIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpRU2NyaXB0
RW5naW5lUHJpdmF0ZShjb25zdCBRU2NyaXB0RW5naW5lKiBlbmdpbmUpCiAgICAgLCBtX2NvbnRl
eHQoSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApKQogICAgICwgbV9leGNlcHRpb24oMCkKICAgICAs
IG1fb3JpZ2luYWxHbG9iYWxPYmplY3QobV9jb250ZXh0KQorICAgICwgbV9uYXRpdmVGdW5jdGlv
bkNsYXNzKHF0X2NyZWF0ZU5hdGl2ZUZ1bmN0aW9uQ2xhc3MoKSkKKyAgICAsIG1fbmF0aXZlRnVu
Y3Rpb25XaXRoQXJnQ2xhc3MocXRfY3JlYXRlTmF0aXZlRnVuY3Rpb25XaXRoQXJnQ2xhc3MoKSkK
IHsKIH0KIAogUVNjcmlwdEVuZ2luZVByaXZhdGU6On5RU2NyaXB0RW5naW5lUHJpdmF0ZSgpCiB7
CisgICAgSlNDbGFzc1JlbGVhc2UobV9uYXRpdmVGdW5jdGlvbkNsYXNzKTsKKyAgICBKU0NsYXNz
UmVsZWFzZShtX25hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0NsYXNzKTsKICAgICBpZiAobV9leGNlcHRp
b24pCiAgICAgICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBtX2V4Y2VwdGlvbik7CiAg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRleHQpOwpAQCAtODYsNiArOTEsMzcgQEAg
UVNjcmlwdFZhbHVlUHJpdmF0ZSogUVNjcmlwdEVuZ2luZVByaXZhdGU6OnVuY2F1Z2h0RXhjZXB0
aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9leGNlcHRpb24gPyBuZXcgUVNjcmlwdFZhbHVlUHJp
dmF0ZSh0aGlzLCBtX2V4Y2VwdGlvbikgOiBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSgpOwogfQog
CitRU2NyaXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bmV3RnVuY3Rpb24o
UVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25TaWduYXR1cmUgZnVuLCBRU2NyaXB0VmFsdWVQcml2YXRl
KiBwcm90b3R5cGUsIGludCBsZW5ndGgpCit7CisgICAgLy8gTm90ZSB0aGF0IHRoaXMgcHJpdmF0
ZSBkYXRhIHdpbGwgYmUgZGVsZXRlZCBpbiB0aGUgb2JqZWN0IGZpbmFsaXplIGZ1bmN0aW9uLgor
ICAgIFFOYXRpdmVGdW5jdGlvbkRhdGEqIGRhdGEgPSBuZXcgUU5hdGl2ZUZ1bmN0aW9uRGF0YSh0
aGlzLCBmdW4pOworICAgIEpTT2JqZWN0UmVmIGZ1bkpTID0gSlNPYmplY3RNYWtlKG1fY29udGV4
dCwgbV9uYXRpdmVGdW5jdGlvbkNsYXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihkYXRhKSk7
CisgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogcHJvdG8gPSBwcm90b3R5cGUgPyBwcm90b3R5cGUg
OiBuZXdPYmplY3QoKTsKKyAgICByZXR1cm4gbmV3RnVuY3Rpb25faGVscGVyKGZ1bkpTLCBwcm90
byk7Cit9CisKK1FTY3JpcHRWYWx1ZVByaXZhdGUqIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpuZXdG
dW5jdGlvbihRU2NyaXB0RW5naW5lOjpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUgZnVuLCB2b2lk
KiBhcmcpCit7CisgICAgLy8gTm90ZSB0aGF0IHRoaXMgcHJpdmF0ZSBkYXRhIHdpbGwgYmUgZGVs
ZXRlZCBpbiB0aGUgb2JqZWN0IGZpbmFsaXplIGZ1bmN0aW9uLgorICAgIFFOYXRpdmVGdW5jdGlv
bldpdGhBcmdEYXRhKiBkYXRhID0gbmV3IFFOYXRpdmVGdW5jdGlvbldpdGhBcmdEYXRhKHRoaXMs
IGZ1biwgYXJnKTsKKyAgICBKU09iamVjdFJlZiBmdW5KUyA9IEpTT2JqZWN0TWFrZShtX2NvbnRl
eHQsIG1fbmF0aXZlRnVuY3Rpb25XaXRoQXJnQ2xhc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGRhdGEpKTsKKyAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiBwcm90byA9IG5ld09iamVjdCgpOwor
ICAgIHJldHVybiBuZXdGdW5jdGlvbl9oZWxwZXIoZnVuSlMsIHByb3RvKTsKK30KKworUVNjcmlw
dFZhbHVlUHJpdmF0ZSogUVNjcmlwdEVuZ2luZVByaXZhdGU6Om5ld0Z1bmN0aW9uX2hlbHBlcihK
U09iamVjdFJlZiBmdW5KUywgUVNjcmlwdFZhbHVlUHJpdmF0ZSogcHJvdG90eXBlKQoreworICAg
IEpTT2JqZWN0U2V0UHJvdG90eXBlKG1fY29udGV4dCwgZnVuSlMsIG1fb3JpZ2luYWxHbG9iYWxP
YmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKSk7CisKKyAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiBy
ZXN1bHQgPSBuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZSh0aGlzLCBmdW5KUyk7CisgICAgc3RhdGlj
IEpTU3RyaW5nUmVmIHByb3RvTmFtZSA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKCJwcm90
b3R5cGUiKTsKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYgY29uc3RydWN0b3JOYW1lID0gUVNjcmlw
dENvbnZlcnRlcjo6dG9TdHJpbmcoImNvbnN0cnVjdG9yIik7CisgICAgcmVzdWx0LT5zZXRQcm9w
ZXJ0eShwcm90b05hbWUsIHByb3RvdHlwZSwgUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSk7Cisg
ICAgcHJvdG90eXBlLT5zZXRQcm9wZXJ0eShjb25zdHJ1Y3Rvck5hbWUsIHJlc3VsdCwgUVNjcmlw
dFZhbHVlOjpQcm9wZXJ0eUZsYWdzKFFTY3JpcHRWYWx1ZTo6VW5kZWxldGFibGUgfCBRU2NyaXB0
VmFsdWU6OlNraXBJbkVudW1lcmF0aW9uKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBR
U2NyaXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6bmV3T2JqZWN0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywgSlNPYmplY3RN
YWtlKG1fY29udGV4dCwgLyoganNDbGFzcyAqLyAwLCAvKiB1c2VyRGF0YSAqLyAwKSk7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmggYi9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmgKaW5kZXggZDU0Y2RjYy4uYTkyOTRiNiAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaApAQCAtNzEsNiArNzEsMTAg
QEAgcHVibGljOgogICAgIGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKGJvb2wgbnVtYmVy
KSBjb25zdDsKICAgICBpbmxpbmUgSlNWYWx1ZVJlZiBtYWtlSlNWYWx1ZShRU2NyaXB0VmFsdWU6
OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3Q7CiAKKyAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiBu
ZXdGdW5jdGlvbihRU2NyaXB0RW5naW5lOjpGdW5jdGlvblNpZ25hdHVyZSBmdW4sIFFTY3JpcHRW
YWx1ZVByaXZhdGUqIHByb3RvdHlwZSwgaW50IGxlbmd0aCk7CisgICAgUVNjcmlwdFZhbHVlUHJp
dmF0ZSogbmV3RnVuY3Rpb24oUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25XaXRoQXJnU2lnbmF0dXJl
IGZ1biwgdm9pZCogYXJnKTsKKyAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiBuZXdGdW5jdGlvbl9o
ZWxwZXIoSlNPYmplY3RSZWYgZnVuT2JqZWN0LCBRU2NyaXB0VmFsdWVQcml2YXRlKiBwcm90b3R5
cGUpOworCiAgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogbmV3T2JqZWN0KCkgY29uc3Q7CiAgICAg
UVNjcmlwdFZhbHVlUHJpdmF0ZSogbmV3QXJyYXkodWludCBsZW5ndGgpOwogICAgIFFTY3JpcHRW
YWx1ZVByaXZhdGUqIGdsb2JhbE9iamVjdCgpIGNvbnN0OwpAQCAtODksNiArOTMsOSBAQCBwcml2
YXRlOgogICAgIEpTVmFsdWVSZWYgbV9leGNlcHRpb247CiAKICAgICBRU2NyaXB0T3JpZ2luYWxH
bG9iYWxPYmplY3QgbV9vcmlnaW5hbEdsb2JhbE9iamVjdDsKKworICAgIEpTQ2xhc3NSZWYgbV9u
YXRpdmVGdW5jdGlvbkNsYXNzOworICAgIEpTQ2xhc3NSZWYgbV9uYXRpdmVGdW5jdGlvbldpdGhB
cmdDbGFzczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRmdW5jdGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGZ1bmN0aW9uLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGZhODEzCi0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbi5jcHAKQEAgLTAs
MCArMSwxNTMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKy8vIENvbnRhaW5zIHRoZSBuZWNlc3Nh
cnkgaGVscGVyIHN0cnVjdHVyZXMgdG8gbWFrZSBwb3NzaWJsZSBleHBvc2UKKy8vIEMvQysrIGZ1
bmN0aW9ucyB0byBKYXZhU2NyaXB0IGVudmlyb25tZW50LgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJxc2NyaXB0ZnVuY3Rpb25fcC5oIgorCitzdGF0aWMgdm9pZCBxdF9OYXRp
dmVGdW5jdGlvbl9maW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgdm9pZCogcHJp
diA9IEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOworICAgIGRlbGV0ZSByZWludGVycHJldF9j
YXN0PFFOYXRpdmVGdW5jdGlvbkRhdGEqPihwcml2KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
cXRfTmF0aXZlRnVuY3Rpb25fY2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIG9iamVjdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBRTmF0aXZlRnVuY3Rpb25EYXRhKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxR
TmF0aXZlRnVuY3Rpb25EYXRhKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworCisgICAg
Ly8gVE9ETzogYnVpbGQgYSBRU2NyaXB0Q29udGV4dCBhbmQgdXNlIGl0IGluIHRoZSBuYXRpdmUg
Y2FsbC4KKyAgICBRX1VOVVNFRChjb250ZXh0KTsKKyAgICBRX1VOVVNFRCh0aGlzT2JqZWN0KTsK
KyAgICBRX1VOVVNFRChhcmd1bWVudENvdW50KTsKKyAgICBRX1VOVVNFRChhcmd1bWVudHMpOwor
ICAgIFFfVU5VU0VEKGV4Y2VwdGlvbik7CisKKyAgICBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5n
aW5lID0gZGF0YS0+ZW5naW5lOworICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIHJlc3VsdCA9IFFT
Y3JpcHRWYWx1ZVByaXZhdGU6OmdldChkYXRhLT5mdW4oMCwgUVNjcmlwdEVuZ2luZVByaXZhdGU6
OmdldChlbmdpbmUpKSk7CisgICAgaWYgKCFyZXN1bHQtPmlzVmFsaWQoKSkgeworICAgICAgICBx
V2FybmluZygiSW52YWxpZCB2YWx1ZSByZXR1cm5lZCBmcm9tIG5hdGl2ZSBmdW5jdGlvbiwgcmV0
dXJuaW5nIHVuZGVmaW5lZCB2YWx1ZSBpbnN0ZWFkLiIpOworICAgICAgICByZXR1cm4gKm5ldyBR
U2NyaXB0VmFsdWVQcml2YXRlKGVuZ2luZSwgUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7
CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIGFzc2ln
bmVkIHRvIHRoZSBjb3JyZWN0IGVuZ2luZS4KKyAgICBpZiAoIXJlc3VsdC0+ZW5naW5lKCkpIHsK
KyAgICAgICAgUV9BU1NFUlQocmVzdWx0LT5pc1ZhbGlkKCkpOworICAgICAgICByZXN1bHQtPmFz
c2lnbkVuZ2luZShlbmdpbmUpOworICAgIH0gZWxzZSBpZiAocmVzdWx0LT5lbmdpbmUoKSAhPSBl
bmdpbmUpIHsKKyAgICAgICAgcVdhcm5pbmcoIlZhbHVlIGZyb20gZGlmZmVyZW50IGVuZ2luZSBy
ZXR1cm5lZCBmcm9tIG5hdGl2ZSBmdW5jdGlvbiwgcmV0dXJuaW5nIHVuZGVmaW5lZCB2YWx1ZSBp
bnN0ZWFkLiIpOworICAgICAgICByZXR1cm4gKm5ldyBRU2NyaXB0VmFsdWVQcml2YXRlKGVuZ2lu
ZSwgUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuICpy
ZXN1bHQ7Cit9CisKK0pTQ2xhc3NEZWZpbml0aW9uIHF0X05hdGl2ZUZ1bmN0aW9uQ2xhc3MgPSB7
CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbgor
ICAgIGtKU0NsYXNzQXR0cmlidXRlTm9BdXRvbWF0aWNQcm90b3R5cGUsIC8vIGF0dHJpYnV0ZXMK
KworICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGFzc05hbWUKKyAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyZW50Q2xhc3MKKworICAgIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzdGF0aWNWYWx1ZXMKKyAgICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc3RhdGljRnVuY3Rpb25zCisKKyAgICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZQorICAgIHF0X05hdGl2ZUZ1bmN0aW9uX2ZpbmFsaXpl
LCAgICAgICAvLyBmaW5hbGl6ZQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBoYXNQcm9wZXJ0eQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBnZXRQcm9wZXJ0eQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
ZXRQcm9wZXJ0eQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxl
dGVQcm9wZXJ0eQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRQ
cm9wZXJ0eU5hbWVzCisgICAgcXRfTmF0aXZlRnVuY3Rpb25fY2FsbEFzRnVuY3Rpb24sIC8vIGNh
bGxBc0Z1bmN0aW9uCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNh
bGxBc0NvbnN0cnVjdG9yCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGhhc0luc3RhbmNlCisgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNv
bnZlcnRUb1R5cGUKK307CisKK0pTQ2xhc3NSZWYgcXRfY3JlYXRlTmF0aXZlRnVuY3Rpb25DbGFz
cygpCit7CisgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJnF0X05hdGl2ZUZ1bmN0aW9uQ2xhc3Mp
OworfQorCitzdGF0aWMgdm9pZCBxdF9OYXRpdmVGdW5jdGlvbldpdGhBcmdfZmluYWxpemUoSlNP
YmplY3RSZWYgb2JqZWN0KQoreworICAgIHZvaWQqIHByaXYgPSBKU09iamVjdEdldFByaXZhdGUo
b2JqZWN0KTsKKyAgICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxRTmF0aXZlRnVuY3Rpb25XaXRo
QXJnRGF0YSo+KHByaXYpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBxdF9OYXRpdmVGdW5jdGlv
bldpdGhBcmdfY2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IG9iamVjdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBRTmF0aXZlRnVuY3Rpb25XaXRoQXJnRGF0YSogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UU5h
dGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisK
KyAgICAvLyBUT0RPOiBidWlsZCBhIFFTY3JpcHRDb250ZXh0IGFuZCB1c2UgaXQgaW4gdGhlIG5h
dGl2ZSBjYWxsLgorICAgIFFfVU5VU0VEKGNvbnRleHQpOworICAgIFFfVU5VU0VEKHRoaXNPYmpl
Y3QpOworICAgIFFfVU5VU0VEKGFyZ3VtZW50Q291bnQpOworICAgIFFfVU5VU0VEKGFyZ3VtZW50
cyk7CisgICAgUV9VTlVTRUQoZXhjZXB0aW9uKTsKKworICAgIFFTY3JpcHRFbmdpbmVQcml2YXRl
KiBlbmdpbmUgPSBkYXRhLT5lbmdpbmU7CisgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogcmVzdWx0
ID0gUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KGRhdGEtPmZ1bigwLCBRU2NyaXB0RW5naW5lUHJp
dmF0ZTo6Z2V0KGVuZ2luZSksIGRhdGEtPmFyZykpOworICAgIGlmICghcmVzdWx0LT5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgcVdhcm5pbmcoIkludmFsaWQgdmFsdWUgcmV0dXJuZWQgZnJvbSBuYXRp
dmUgZnVuY3Rpb24sIHJldHVybmluZyB1bmRlZmluZWQgdmFsdWUgaW5zdGVhZC4iKTsKKyAgICAg
ICAgcmV0dXJuICpuZXcgUVNjcmlwdFZhbHVlUHJpdmF0ZShlbmdpbmUsIFFTY3JpcHRWYWx1ZTo6
VW5kZWZpbmVkVmFsdWUpOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXN1
bHQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgY29ycmVjdCBlbmdpbmUuCisgICAgaWYgKCFyZXN1
bHQtPmVuZ2luZSgpKSB7CisgICAgICAgIFFfQVNTRVJUKHJlc3VsdC0+aXNWYWxpZCgpKTsKKyAg
ICAgICAgcmVzdWx0LT5hc3NpZ25FbmdpbmUoZW5naW5lKTsKKyAgICB9IGVsc2UgaWYgKHJlc3Vs
dC0+ZW5naW5lKCkgIT0gZW5naW5lKSB7CisgICAgICAgIHFXYXJuaW5nKCJWYWx1ZSBmcm9tIGRp
ZmZlcmVudCBlbmdpbmUgcmV0dXJuZWQgZnJvbSBuYXRpdmUgZnVuY3Rpb24sIHJldHVybmluZyB1
bmRlZmluZWQgdmFsdWUgaW5zdGVhZC4iKTsKKyAgICAgICAgcmV0dXJuICpuZXcgUVNjcmlwdFZh
bHVlUHJpdmF0ZShlbmdpbmUsIFFTY3JpcHRWYWx1ZTo6VW5kZWZpbmVkVmFsdWUpOworICAgIH0K
KworICAgIHJldHVybiAqcmVzdWx0OworfQorCitKU0NsYXNzRGVmaW5pdGlvbiBxdF9OYXRpdmVG
dW5jdGlvbldpdGhBcmdDbGFzcyA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB2ZXJzaW9uCisgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb0F1dG9tYXRpY1By
b3RvdHlwZSwgLy8gYXR0cmlidXRlcworCisgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNsYXNzTmFtZQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJlbnRD
bGFzcworCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRpY1ZhbHVlcwor
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0aWNGdW5jdGlvbnMKKworICAg
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZQor
ICAgIHF0X05hdGl2ZUZ1bmN0aW9uV2l0aEFyZ19maW5hbGl6ZSwgICAgICAgLy8gZmluYWxpemUK
KyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc1Byb3Bl
cnR5CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRQ
cm9wZXJ0eQorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c2V0UHJvcGVydHkKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGRlbGV0ZVByb3BlcnR5CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBnZXRQcm9wZXJ0eU5hbWVzCisgICAgcXRfTmF0aXZlRnVuY3Rpb25XaXRoQXJn
X2NhbGxBc0Z1bmN0aW9uLCAvLyBjYWxsQXNGdW5jdGlvbgorICAgIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbEFzQ29uc3RydWN0b3IKKyAgICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc0luc3RhbmNlCisgICAgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0VG9UeXBlCit9
OworCitKU0NsYXNzUmVmIHF0X2NyZWF0ZU5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0NsYXNzKCkKK3sK
KyAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmcXRfTmF0aXZlRnVuY3Rpb25XaXRoQXJnQ2xhc3Mp
OworfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbl9w
LmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGZ1bmN0aW9uX3AuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTA0MTA1Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbl9wLmgKQEAgLTAsMCArMSw1OCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0ZnVuY3Rpb25fcF9oCisjZGVmaW5l
IHFzY3JpcHRmdW5jdGlvbl9wX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
cXNjcmlwdGVuZ2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHR2YWx1ZV9wLmgiCisKK3N0cnVjdCBR
TmF0aXZlRnVuY3Rpb25EYXRhCit7CisgICAgUU5hdGl2ZUZ1bmN0aW9uRGF0YShRU2NyaXB0RW5n
aW5lUHJpdmF0ZSogZW5naW5lLCBRU2NyaXB0RW5naW5lOjpGdW5jdGlvblNpZ25hdHVyZSBmdW4p
CisgICAgICAgIDogZW5naW5lKGVuZ2luZSkKKyAgICAgICAgLCBmdW4oZnVuKQorICAgIHsKKyAg
ICB9CisKKyAgICBRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lOworICAgIFFTY3JpcHRFbmdp
bmU6OkZ1bmN0aW9uU2lnbmF0dXJlIGZ1bjsKK307CisKK0pTQ2xhc3NSZWYgcXRfY3JlYXRlTmF0
aXZlRnVuY3Rpb25DbGFzcygpOworCitzdHJ1Y3QgUU5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGEK
K3sKKyAgICBRTmF0aXZlRnVuY3Rpb25XaXRoQXJnRGF0YShRU2NyaXB0RW5naW5lUHJpdmF0ZSog
ZW5naW5lLCBRU2NyaXB0RW5naW5lOjpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUgZnVuLCB2b2lk
KiBhcmcpCisgICAgICAgIDogZW5naW5lKGVuZ2luZSkKKyAgICAgICAgLCBmdW4oZnVuKQorICAg
ICAgICAsIGFyZyhhcmcpCisgICAgeworICAgIH0KKworICAgIFFTY3JpcHRFbmdpbmVQcml2YXRl
KiBlbmdpbmU7CisgICAgUVNjcmlwdEVuZ2luZTo6RnVuY3Rpb25XaXRoQXJnU2lnbmF0dXJlIGZ1
bjsKKyAgICB2b2lkKiBhcmc7Cit9OworCitKU0NsYXNzUmVmIHF0X2NyZWF0ZU5hdGl2ZUZ1bmN0
aW9uV2l0aEFyZ0NsYXNzKCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cXQvYXBpL3FzY3JpcHRvcmlnaW5hbGdsb2JhbG9iamVjdF9wLmggYi9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdG9yaWdpbmFsZ2xvYmFsb2JqZWN0X3AuaAppbmRleCA4ZDA4MGZiLi4zMWU5
NGY3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdG9yaWdpbmFsZ2xv
YmFsb2JqZWN0X3AuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdG9yaWdpbmFs
Z2xvYmFsb2JqZWN0X3AuaApAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUg
Ym9vbCBpc0FycmF5KEpTVmFsdWVSZWYgdmFsdWUpIGNvbnN0OwogICAgIGlubGluZSBib29sIGlz
RXJyb3IoSlNWYWx1ZVJlZiB2YWx1ZSkgY29uc3Q7CisKKyAgICBpbmxpbmUgSlNWYWx1ZVJlZiBm
dW5jdGlvblByb3RvdHlwZSgpIGNvbnN0OwogcHJpdmF0ZToKICAgICBpbmxpbmUgYm9vbCBpc1R5
cGUoSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmplY3RSZWYgY29uc3RydWN0b3IsIEpTVmFsdWVSZWYg
cHJvdG90eXBlKSBjb25zdDsKICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplTWVtYmVyKEpTT2Jq
ZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgcHJvdG90eXBlTmFtZSwgY29uc3QgY2hh
ciogdHlwZSwgSlNPYmplY3RSZWYmIGNvbnN0cnVjdG9yLCBKU1ZhbHVlUmVmJiBwcm90b3R5cGUp
OwpAQCAtNTcsNiArNTksOCBAQCBwcml2YXRlOgogICAgIEpTVmFsdWVSZWYgbV9hcnJheVByb3Rv
dHlwZTsKICAgICBKU09iamVjdFJlZiBtX2Vycm9yQ29uc3RydWN0b3I7CiAgICAgSlNWYWx1ZVJl
ZiBtX2Vycm9yUHJvdG90eXBlOworICAgIEpTT2JqZWN0UmVmIG1fZnVuY3Rpb25Db25zdHJ1Y3Rv
cjsKKyAgICBKU1ZhbHVlUmVmIG1fZnVuY3Rpb25Qcm90b3R5cGU7CiAKICAgICAvLyBSZWZlcmVu
Y2UgdG8gc3RhbmRhcmQgSlMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBleHBvc2VkIGJ5IEpTQyBD
IEFQSS4KICAgICBKU09iamVjdFJlZiBtX2hhc093blByb3BlcnR5RnVuY3Rpb247CkBAIC03Myw2
ICs3Nyw3IEBAIFFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdDo6UVNjcmlwdE9yaWdpbmFsR2xv
YmFsT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBjb250CiAgICAgcHJvcGVydHlOYW1lLmFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm90b3R5cGUiKSk7CiAgICAgaW5pdGlh
bGl6ZU1lbWJlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS5nZXQoKSwgIkFycmF5IiwgbV9h
cnJheUNvbnN0cnVjdG9yLCBtX2FycmF5UHJvdG90eXBlKTsKICAgICBpbml0aWFsaXplTWVtYmVy
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLmdldCgpLCAiRXJyb3IiLCBtX2Vycm9yQ29uc3Ry
dWN0b3IsIG1fZXJyb3JQcm90b3R5cGUpOworICAgIGluaXRpYWxpemVNZW1iZXIoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0KCksICJGdW5jdGlvbiIsIG1fZnVuY3Rpb25Db25zdHJ1Y3Rv
ciwgbV9mdW5jdGlvblByb3RvdHlwZSk7CiAKICAgICBwcm9wZXJ0eU5hbWUuYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhhc093blByb3BlcnR5IikpOwogICAgIG1faGFzT3du
UHJvcGVydHlGdW5jdGlvbiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KEpTT2JqZWN0R2V0UHJv
cGVydHkobV9jb250ZXh0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS5nZXQoKSwgJmV4Y2Vw
dGlvbikpOwpAQCAtMTE5LDYgKzEyNCw4IEBAIFFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdDo6
flFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdCgpCiAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2Nv
bnRleHQsIG1fYXJyYXlQcm90b3R5cGUpOwogICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0
LCBtX2Vycm9yQ29uc3RydWN0b3IpOwogICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBt
X2Vycm9yUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9mdW5j
dGlvbkNvbnN0cnVjdG9yKTsKKyAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9mdW5j
dGlvblByb3RvdHlwZSk7CiAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIG1faGFzT3du
UHJvcGVydHlGdW5jdGlvbik7CiAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIG1fZ2V0
T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uKTsKICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKG1f
Y29udGV4dCk7CkBAIC0xNzMsNiArMTgwLDExIEBAIGlubGluZSBib29sIFFTY3JpcHRPcmlnaW5h
bEdsb2JhbE9iamVjdDo6aXNFcnJvcihKU1ZhbHVlUmVmIHZhbHVlKSBjb25zdAogICAgIHJldHVy
biBpc1R5cGUodmFsdWUsIG1fZXJyb3JDb25zdHJ1Y3RvciwgbV9lcnJvclByb3RvdHlwZSk7CiB9
CiAKK2lubGluZSBKU1ZhbHVlUmVmIFFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdDo6ZnVuY3Rp
b25Qcm90b3R5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2Z1bmN0aW9uUHJvdG90eXBlOwor
fQorCiBpbmxpbmUgYm9vbCBRU2NyaXB0T3JpZ2luYWxHbG9iYWxPYmplY3Q6OmlzVHlwZShKU1Zh
bHVlUmVmIHZhbHVlLCBKU09iamVjdFJlZiBjb25zdHJ1Y3RvciwgSlNWYWx1ZVJlZiBwcm90b3R5
cGUpIGNvbnN0CiB7CiAgICAgLy8gSlNDIEFQSSBkb2Vzbid0IGV4cG9ydCB0aGUgW1tDbGFzc11d
IGluZm9ybWF0aW9uIGZvciB0aGUgYnVpbHRpbnMuIEJ1dCB3ZSBrbm93IHRoYXQgYSB2YWx1ZQpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNj
cmlwdGVuZ2luZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3Rz
dF9xc2NyaXB0ZW5naW5lLmNwcAppbmRleCA3MmNhOWIxLi41OGExNTg3IDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0ZW5naW5lL3RzdF9xc2NyaXB0
ZW5naW5lLmNwcApAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBjbGVh
bnVwKCkge30KIAogcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG5ld0Z1bmN0aW9uKCk7CiAgICAg
dm9pZCBuZXdPYmplY3QoKTsKICAgICB2b2lkIGdsb2JhbE9iamVjdCgpOwogICAgIHZvaWQgZXZh
bHVhdGUoKTsKQEAgLTU5LDYgKzYwLDE0NiBAQCB2b2lkIHRzdF9RU2NyaXB0RW5naW5lOjpldmFs
dWF0ZSgpCiAgICAgUVZFUklGWTIoZW5naW5lLmV2YWx1YXRlKCJwaW5nIikuaXNWYWxpZCgpLCAi
U2NyaXB0IHRocm93aW5nIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gc2hvdWxkIHJldHVybiBhbiBl
eGNlcHRpb24gdmFsdWUiKTsKIH0KIAorc3RhdGljIFFTY3JpcHRWYWx1ZSBteUZ1bmN0aW9uKFFT
Y3JpcHRDb250ZXh0KiwgUVNjcmlwdEVuZ2luZSogZW5nKQoreworICAgIHJldHVybiBlbmctPm51
bGxWYWx1ZSgpOworfQorCitzdGF0aWMgUVNjcmlwdFZhbHVlIG15RnVuY3Rpb25XaXRoQXJnKFFT
Y3JpcHRDb250ZXh0KiwgUVNjcmlwdEVuZ2luZSogZW5nLCB2b2lkKiBhcmcpCit7CisgICAgaW50
KiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludCo+KGFyZyk7CisgICAgcmV0dXJuIFFTY3Jp
cHRWYWx1ZShlbmcsICpyZXN1bHQpOworfQorCitzdGF0aWMgUVNjcmlwdFZhbHVlIG15RnVuY3Rp
b25UaGF0UmV0dXJucyhRU2NyaXB0Q29udGV4dCosIFFTY3JpcHRFbmdpbmUqIGVuZykKK3sKKyAg
ICByZXR1cm4gUVNjcmlwdFZhbHVlKGVuZywgNDIpOworfQorCitzdGF0aWMgUVNjcmlwdFZhbHVl
IG15RnVuY3Rpb25UaGF0UmV0dXJuc1dpdGhvdXRFbmdpbmUoUVNjcmlwdENvbnRleHQqLCBRU2Ny
aXB0RW5naW5lKikKK3sKKyAgICByZXR1cm4gUVNjcmlwdFZhbHVlKDEwMjQpOworfQorCitzdGF0
aWMgUVNjcmlwdFZhbHVlIG15RnVuY3Rpb25UaGF0UmV0dXJuc1dyb25nRW5naW5lKFFTY3JpcHRD
b250ZXh0KiwgUVNjcmlwdEVuZ2luZSosIHZvaWQqIGFyZykKK3sKKyAgICBRU2NyaXB0RW5naW5l
KiB3cm9uZ0VuZ2luZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVNjcmlwdEVuZ2luZSo+KGFyZyk7Cisg
ICAgcmV0dXJuIFFTY3JpcHRWYWx1ZSh3cm9uZ0VuZ2luZSwgNDIpOworfQorCit2b2lkIHRzdF9R
U2NyaXB0RW5naW5lOjpuZXdGdW5jdGlvbigpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmc7Cisg
ICAgeworICAgICAgICBRU2NyaXB0VmFsdWUgZnVuID0gZW5nLm5ld0Z1bmN0aW9uKG15RnVuY3Rp
b24pOworICAgICAgICBRQ09NUEFSRShmdW4uaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNP
TVBBUkUoZnVuLmlzRnVuY3Rpb24oKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5pc09i
amVjdCgpLCB0cnVlKTsKKyAgICAgICAgLy8gUUNPTVBBUkUoZnVuLnNjcmlwdENsYXNzKCksIChR
U2NyaXB0Q2xhc3MqKTApOworICAgICAgICAvLyBhIHByb3RvdHlwZSBwcm9wZXJ0eSBpcyBhdXRv
bWF0aWNhbGx5IGNvbnN0cnVjdGVkCisgICAgICAgIHsKKyAgICAgICAgICAgIFFTY3JpcHRWYWx1
ZSBwcm90ID0gZnVuLnByb3BlcnR5KCJwcm90b3R5cGUiLCBRU2NyaXB0VmFsdWU6OlJlc29sdmVM
b2NhbCk7CisgICAgICAgICAgICBRVkVSSUZZKHByb3QuaXNPYmplY3QoKSk7CisgICAgICAgICAg
ICBRVkVSSUZZKHByb3QucHJvcGVydHkoImNvbnN0cnVjdG9yIikuc3RyaWN0bHlFcXVhbHMoZnVu
KSk7CisgICAgICAgICAgICBRRVhQRUNUX0ZBSUwoIiIsICJKU0NhbGxiYWNrT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoKSBkb2Vzbid0IHJldHVybiBjb3JyZWN0IGluZm9ybWF0aW9u
IHlldCIsIENvbnRpbnVlKTsKKyAgICAgICAgICAgIFFDT01QQVJFKGZ1bi5wcm9wZXJ0eUZsYWdz
KCJwcm90b3R5cGUiKSwgUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSk7CisgICAgICAgICAgICBR
RVhQRUNUX0ZBSUwoIiIsICJXZWJLaXQgYnVnOiA0MDYxMyAoVGhlIEpTT2JqZWN0U2V0UHJvcGVy
dHkgZG9lc24ndCBvdmVyd3JpdGUgcHJvcGVydHkgZmxhZ3MpIiwgQ29udGludWUpOworICAgICAg
ICAgICAgUUNPTVBBUkUocHJvdC5wcm9wZXJ0eUZsYWdzKCJjb25zdHJ1Y3RvciIpLCBRU2NyaXB0
VmFsdWU6OlByb3BlcnR5RmxhZ3MoUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSB8IFFTY3JpcHRW
YWx1ZTo6U2tpcEluRW51bWVyYXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICAvLyBwcm90b3R5
cGUgc2hvdWxkIGJlIEZ1bmN0aW9uLnByb3RvdHlwZQorICAgICAgICBRQ09NUEFSRShmdW4ucHJv
dG90eXBlKCkuaXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlw
ZSgpLmlzRnVuY3Rpb24oKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm90b3R5cGUo
KS5zdHJpY3RseUVxdWFscyhlbmcuZXZhbHVhdGUoIkZ1bmN0aW9uLnByb3RvdHlwZSIpKSwgdHJ1
ZSk7CisKKyAgICAgICAgUUNPTVBBUkUoZnVuLmNhbGwoKS5pc051bGwoKSwgdHJ1ZSk7CisgICAg
ICAgIC8vIFFDT01QQVJFKGZ1bi5jb25zdHJ1Y3QoKS5pc09iamVjdCgpLCB0cnVlKTsKKyAgICB9
CisgICAgLy8gdGhlIG92ZXJsb2FkIHRoYXQgdGFrZXMgYW4gZXh0cmEgYXJndW1lbnQKKyAgICB7
CisgICAgICAgIGludCBleHBlY3RlZFJlc3VsdCA9IDQyOworICAgICAgICBRU2NyaXB0VmFsdWUg
ZnVuID0gZW5nLm5ld0Z1bmN0aW9uKG15RnVuY3Rpb25XaXRoQXJnLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigmZXhwZWN0ZWRSZXN1bHQpKTsKKyAgICAgICAgUVZFUklGWShmdW4uaXNGdW5jdGlv
bigpKTsKKyAgICAgICAgLy8gUUNPTVBBUkUoZnVuLnNjcmlwdENsYXNzKCksIChRU2NyaXB0Q2xh
c3MqKTApOworICAgICAgICAvLyBhIHByb3RvdHlwZSBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5
IGNvbnN0cnVjdGVkCisgICAgICAgIHsKKyAgICAgICAgICAgIFFTY3JpcHRWYWx1ZSBwcm90ID0g
ZnVuLnByb3BlcnR5KCJwcm90b3R5cGUiLCBRU2NyaXB0VmFsdWU6OlJlc29sdmVMb2NhbCk7Cisg
ICAgICAgICAgICBRVkVSSUZZKHByb3QuaXNPYmplY3QoKSk7CisgICAgICAgICAgICBRVkVSSUZZ
KHByb3QucHJvcGVydHkoImNvbnN0cnVjdG9yIikuc3RyaWN0bHlFcXVhbHMoZnVuKSk7CisgICAg
ICAgICAgICBRRVhQRUNUX0ZBSUwoIiIsICJKU0NhbGxiYWNrT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoKSBkb2Vzbid0IHJldHVybiBjb3JyZWN0IGluZm9ybWF0aW9uIHlldCIsIENv
bnRpbnVlKTsKKyAgICAgICAgICAgIFFDT01QQVJFKGZ1bi5wcm9wZXJ0eUZsYWdzKCJwcm90b3R5
cGUiKSwgUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSk7CisgICAgICAgICAgICBRRVhQRUNUX0ZB
SUwoIiIsICJXZWJLaXQgYnVnOiA0MDYxMyAoVGhlIEpTT2JqZWN0U2V0UHJvcGVydHkgZG9lc24n
dCBvdmVyd3JpdGUgcHJvcGVydHkgZmxhZ3MpIiwgQ29udGludWUpOworICAgICAgICAgICAgUUNP
TVBBUkUocHJvdC5wcm9wZXJ0eUZsYWdzKCJjb25zdHJ1Y3RvciIpLCBRU2NyaXB0VmFsdWU6OlBy
b3BlcnR5RmxhZ3MoUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSB8IFFTY3JpcHRWYWx1ZTo6U2tp
cEluRW51bWVyYXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICAvLyBwcm90b3R5cGUgc2hvdWxk
IGJlIEZ1bmN0aW9uLnByb3RvdHlwZQorICAgICAgICBRQ09NUEFSRShmdW4ucHJvdG90eXBlKCku
aXNWYWxpZCgpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlwZSgpLmlzRnVu
Y3Rpb24oKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm90b3R5cGUoKS5zdHJpY3Rs
eUVxdWFscyhlbmcuZXZhbHVhdGUoIkZ1bmN0aW9uLnByb3RvdHlwZSIpKSwgdHJ1ZSk7CisKKyAg
ICAgICAgUVNjcmlwdFZhbHVlIHJlc3VsdCA9IGZ1bi5jYWxsKCk7CisgICAgICAgIFFDT01QQVJF
KHJlc3VsdC5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUocmVzdWx0LnRvSW50
MzIoKSwgZXhwZWN0ZWRSZXN1bHQpOworICAgIH0KKyAgICAvLyB0aGUgb3ZlcmxvYWQgdGhhdCB0
YWtlcyBhIHByb3RvdHlwZQorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIHByb3RvID0gZW5n
Lm5ld09iamVjdCgpOworICAgICAgICBRU2NyaXB0VmFsdWUgZnVuID0gZW5nLm5ld0Z1bmN0aW9u
KG15RnVuY3Rpb24sIHByb3RvKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzVmFsaWQoKSwgdHJ1
ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5pc0Z1bmN0aW9uKCksIHRydWUpOworICAgICAgICBR
Q09NUEFSRShmdW4uaXNPYmplY3QoKSwgdHJ1ZSk7CisgICAgICAgIC8vIGludGVybmFsIHByb3Rv
dHlwZSBzaG91bGQgYmUgRnVuY3Rpb24ucHJvdG90eXBlCisgICAgICAgIFFDT01QQVJFKGZ1bi5w
cm90b3R5cGUoKS5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShmdW4ucHJvdG90
eXBlKCkuaXNGdW5jdGlvbigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlw
ZSgpLnN0cmljdGx5RXF1YWxzKGVuZy5ldmFsdWF0ZSgiRnVuY3Rpb24ucHJvdG90eXBlIikpLCB0
cnVlKTsKKyAgICAgICAgLy8gcHVibGljIHByb3RvdHlwZSBzaG91bGQgYmUgdGhlIG9uZSB3ZSBw
YXNzZWQKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3BlcnR5KCJwcm90b3R5cGUiKS5zdHJpY3Rs
eUVxdWFscyhwcm90byksIHRydWUpOworICAgICAgICBRRVhQRUNUX0ZBSUwoIiIsICJKU0NhbGxi
YWNrT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSBkb2Vzbid0IHJldHVybiBjb3Jy
ZWN0IGluZm9ybWF0aW9uIHlldCIsIENvbnRpbnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLnBy
b3BlcnR5RmxhZ3MoInByb3RvdHlwZSIpLCBRU2NyaXB0VmFsdWU6OlVuZGVsZXRhYmxlKTsKKyAg
ICAgICAgUUNPTVBBUkUocHJvdG8ucHJvcGVydHkoImNvbnN0cnVjdG9yIikuc3RyaWN0bHlFcXVh
bHMoZnVuKSwgdHJ1ZSk7CisgICAgICAgIFFFWFBFQ1RfRkFJTCgiIiwgIldlYktpdCBidWc6IDQw
NjEzIChUaGUgSlNPYmplY3RTZXRQcm9wZXJ0eSBkb2Vzbid0IG92ZXJ3cml0ZSBwcm9wZXJ0eSBm
bGFncykiLCBDb250aW51ZSk7CisgICAgICAgIFFDT01QQVJFKHByb3RvLnByb3BlcnR5RmxhZ3Mo
ImNvbnN0cnVjdG9yIiksIFFTY3JpcHRWYWx1ZTo6UHJvcGVydHlGbGFncyhRU2NyaXB0VmFsdWU6
OlVuZGVsZXRhYmxlIHwgUVNjcmlwdFZhbHVlOjpTa2lwSW5FbnVtZXJhdGlvbikpOworCisgICAg
ICAgIFFDT01QQVJFKGZ1bi5jYWxsKCkuaXNOdWxsKCksIHRydWUpOworICAgICAgICAvLyBRQ09N
UEFSRShmdW4uY29uc3RydWN0KCkuaXNPYmplY3QoKSwgdHJ1ZSk7CisgICAgfQorICAgIC8vIHdo
ZXRoZXIgdGhlIHJldHVybiB2YWx1ZSBpcyBjb3JyZWN0CisgICAgeworICAgICAgICBRU2NyaXB0
VmFsdWUgZnVuID0gZW5nLm5ld0Z1bmN0aW9uKG15RnVuY3Rpb25UaGF0UmV0dXJucyk7CisgICAg
ICAgIFFDT01QQVJFKGZ1bi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShmdW4u
aXNGdW5jdGlvbigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzT2JqZWN0KCksIHRy
dWUpOworCisgICAgICAgIFFTY3JpcHRWYWx1ZSByZXN1bHQgPSBmdW4uY2FsbCgpOworICAgICAg
ICBRQ09NUEFSRShyZXN1bHQuaXNOdW1iZXIoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHJl
c3VsdC50b0ludDMyKCksIDQyKTsKKyAgICB9CisgICAgLy8gd2hldGhlciB0aGUgcmV0dXJuIHZh
bHVlIGlzIGFzc2lnbmVkIHRvIHRoZSBjb3JyZWN0IGVuZ2luZQorICAgIHsKKyAgICAgICAgUVNj
cmlwdFZhbHVlIGZ1biA9IGVuZy5uZXdGdW5jdGlvbihteUZ1bmN0aW9uVGhhdFJldHVybnNXaXRo
b3V0RW5naW5lKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKGZ1bi5pc0Z1bmN0aW9uKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShm
dW4uaXNPYmplY3QoKSwgdHJ1ZSk7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIHJlc3VsdCA9IGZ1
bi5jYWxsKCk7CisgICAgICAgIFFDT01QQVJFKHJlc3VsdC5lbmdpbmUoKSwgJmVuZyk7CisgICAg
ICAgIFFDT01QQVJFKHJlc3VsdC5pc051bWJlcigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUo
cmVzdWx0LnRvSW50MzIoKSwgMTAyNCk7CisgICAgfQorICAgIC8vIHdoZXRoZXIgdGhlIHJldHVy
biB2YWx1ZSBpcyB1bmRlZmluZWQgd2hlbiByZXR1cm5pbmcgYSB2YWx1ZSB3aXRoIHdyb25nIGVu
Z2luZQorICAgIHsKKyAgICAgICAgUVNjcmlwdEVuZ2luZSB3cm9uZ0VuZ2luZTsKKworICAgICAg
ICBRU2NyaXB0VmFsdWUgZnVuID0gZW5nLm5ld0Z1bmN0aW9uKG15RnVuY3Rpb25UaGF0UmV0dXJu
c1dyb25nRW5naW5lLCByZWludGVycHJldF9jYXN0PHZvaWQqPigmd3JvbmdFbmdpbmUpKTsKKyAg
ICAgICAgUUNPTVBBUkUoZnVuLmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1
bi5pc0Z1bmN0aW9uKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShmdW4uaXNPYmplY3QoKSwg
dHJ1ZSk7CisKKyAgICAgICAgUVRlc3Q6Omlnbm9yZU1lc3NhZ2UoUXRXYXJuaW5nTXNnLCAiVmFs
dWUgZnJvbSBkaWZmZXJlbnQgZW5naW5lIHJldHVybmVkIGZyb20gbmF0aXZlIGZ1bmN0aW9uLCBy
ZXR1cm5pbmcgdW5kZWZpbmVkIHZhbHVlIGluc3RlYWQuIik7CisgICAgICAgIFFTY3JpcHRWYWx1
ZSByZXN1bHQgPSBmdW4uY2FsbCgpOworICAgICAgICBRQ09NUEFSRShyZXN1bHQuaXNWYWxpZCgp
LCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUocmVzdWx0LmlzVW5kZWZpbmVkKCksIHRydWUpOwor
ICAgIH0KK30KKwogdm9pZCB0c3RfUVNjcmlwdEVuZ2luZTo6bmV3T2JqZWN0KCkKIHsKICAgICBR
U2NyaXB0RW5naW5lIGVuZ2luZTsKLS0gCjEuNy4xLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62565</attachid>
            <date>2010-07-26 06:22:57 -0700</date>
            <delta_ts>2010-07-27 08:37:39 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>0001-Add-newFunction-support-still-without-QScriptContext.patch</filename>
            <type>text/plain</type>
            <size>33182</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSBiMzY2MmU4M2Q3ZTYzM2MxOGJhZjVjNGMwNTE2YjgzOGI2YzQ0ZmEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogVGh1LCA4IEp1bCAyMDEwIDA0OjQwOjU1IC0w
MzAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIG5ld0Z1bmN0aW9uKCkgc3VwcG9ydCwgc3RpbGwgd2l0
aG91dCBRU2NyaXB0Q29udGV4dAoKLS0tCiBKYXZhU2NyaXB0Q29yZS9xdC9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgNTMgKysrKysrKwogSmF2YVNjcmlwdENvcmUvcXQvYXBp
L1F0U2NyaXB0LnBybyAgICAgICAgICAgICAgICAgfCAgICAzICstCiBKYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAgICAgICAgICAgICB8ICAxMDcgKysrKysrKysrKysrKysK
IEphdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmggICAgICAgICAgICAgIHwgICAx
MSArKwogSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAgICAgICAgICAg
fCAgIDM2ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmggICAg
ICAgICAgICB8ICAgIDcgKwogSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbi5j
cHAgICAgICAgICAgfCAgMTQ1ICsrKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGZ1bmN0aW9uX3AuaCAgICAgICAgICB8ICAgNTcgKysrKysrKysKIC4uLi9x
dC9hcGkvcXNjcmlwdG9yaWdpbmFsZ2xvYmFsb2JqZWN0X3AuaCAgICAgICAgIHwgICAxMiArKwog
Li4uL3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwICAgfCAgMTQx
ICsrKysrKysrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDU3MSBpbnNlcnRpb25zKCsp
LCAxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZnVuY3Rpb24uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUv
cXQvYXBpL3FzY3JpcHRmdW5jdGlvbl9wLmgKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9x
dC9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9xdC9DaGFuZ2VMb2cKaW5kZXggMjMwM2E1My4u
NzQxNmI0ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvQ2hhbmdlTG9nCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEwLTA3LTI2ICBD
YWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBJbXBsZW1lbnQgUVNjcmlwdEVuZ2luZTo6bmV3RnVuY3Rpb24oKSBwYXJ0cyB0aGF0IGRvZXNu
J3QgZGVwZW5kIG9uIFFTY3JpcHRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MjE3NAorCisgICAgICAgIFNpbmNlIG91ciBmdW5jdGlvbiBj
YW4gYmUgY2FsbGVkIGluIEphdmFzY3JpcHQgYm90aCBhcyBhIGZ1bmN0aW9uCisgICAgICAgIGFu
ZCBhcyBhIGNvbnN0cnVjdG9yLCB3ZSBjb3VsZG4ndCB1c2UgdGhlIGV4aXN0aW5nCisgICAgICAg
IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKCkgYW5kIEpTT2JqZWN0TWFrZUNvbnN0
cnVjdG9yKCkuCisKKyAgICAgICAgSW5zdGVhZCwgYSBKU0NsYXNzUmVmIHdhcyBjcmVhdGVkLCBp
bXBsZW1lbnRpbmcgdGhlIG5lZWRlZAorICAgICAgICBjYWxsYmFja3MgKHRoZSBjYWxsQXNDb25z
dHJ1Y3RvciBpcyBub3QgdGhlcmUgeWV0IGJlY2F1c2UgaXRzCisgICAgICAgIGJlaGF2aW91ciBk
ZXBlbmRzIG9uIFFTY3JpcHRDb250ZXh0KS4KKworICAgICAgICBGb3IgdGhlIG1vbWVudCwgUVNj
cmlwdENvbnRleHQgaXMgZGVmaW5lZCBhcyBhIHZvaWQgdHlwZSwgc2luY2Ugd2UKKyAgICAgICAg
c3RpbGwgZG9uJ3QgdXNlIGl0LgorCisgICAgICAgIFRoZSB2YXJpYW50IG9mIG5ld0Z1bmN0aW9u
KCkgdGhhdCBhbHNvIHRha2VzIGFuIGV4dGVybmFsIGFyZ3VtZW50CisgICAgICAgIHdhcyBhbHNv
IGltcGxlbWVudGVkLiBUaGUgZGV0YWlscyBvZiBpbXBsZW1lbnRhdGlvbiB3ZXJlIGFkZGVkIHRv
CisgICAgICAgIHRoZSBxc2NyaXB0ZnVuY3Rpb257LmMsX3AuaH0gZmlsZXMuCisKKyAgICAgICAg
VGhpcyBjb21taXQgYWxzbyBhZGRzIHRlc3RzLCBzb21lIG9mIHRoZW0gZnJvbSBRdCdzIHVwc3Ry
ZWFtLgorCisgICAgICAgICogYXBpL1F0U2NyaXB0LnBybzoKKyAgICAgICAgKiBhcGkvcXNjcmlw
dGVuZ2luZS5jcHA6CisgICAgICAgIChRU2NyaXB0RW5naW5lOjpuZXdGdW5jdGlvbik6CisgICAg
ICAgICogYXBpL3FzY3JpcHRlbmdpbmUuaDoKKyAgICAgICAgKiBhcGkvcXNjcmlwdGVuZ2luZV9w
LmNwcDoKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpRU2NyaXB0RW5naW5lUHJpdmF0
ZSk6CisgICAgICAgIChRU2NyaXB0RW5naW5lUHJpdmF0ZTo6flFTY3JpcHRFbmdpbmVQcml2YXRl
KToKKyAgICAgICAgKFFTY3JpcHRFbmdpbmVQcml2YXRlOjpuZXdGdW5jdGlvbik6CisgICAgICAg
ICogYXBpL3FzY3JpcHRlbmdpbmVfcC5oOgorICAgICAgICAqIGFwaS9xc2NyaXB0ZnVuY3Rpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHF0X05hdGl2ZUZ1bmN0aW9uX2ZpbmFsaXplKToKKyAgICAg
ICAgKHF0X05hdGl2ZUZ1bmN0aW9uX2NhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKHF0X05hdGl2
ZUZ1bmN0aW9uV2l0aEFyZ19maW5hbGl6ZSk6CisgICAgICAgIChxdF9OYXRpdmVGdW5jdGlvbldp
dGhBcmdfY2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIGFwaS9xc2NyaXB0ZnVuY3Rpb25fcC5o
OiBBZGRlZC4KKyAgICAgICAgKFFOYXRpdmVGdW5jdGlvbkRhdGE6OlFOYXRpdmVGdW5jdGlvbkRh
dGEpOgorICAgICAgICAoUU5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGE6OlFOYXRpdmVGdW5jdGlv
bldpdGhBcmdEYXRhKToKKyAgICAgICAgKiBhcGkvcXNjcmlwdG9yaWdpbmFsZ2xvYmFsb2JqZWN0
X3AuaDoKKyAgICAgICAgKFFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdDo6UVNjcmlwdE9yaWdp
bmFsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdDo6
flFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdCk6CisgICAgICAgIChRU2NyaXB0T3JpZ2luYWxH
bG9iYWxPYmplY3Q6OmZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKiB0ZXN0cy9xc2NyaXB0
ZW5naW5lL3RzdF9xc2NyaXB0ZW5naW5lLmNwcDoKKyAgICAgICAgKG15RnVuY3Rpb24pOgorICAg
ICAgICAobXlGdW5jdGlvbldpdGhBcmcpOgorICAgICAgICAobXlGdW5jdGlvblRoYXRSZXR1cm5z
KToKKyAgICAgICAgKG15RnVuY3Rpb25UaGF0UmV0dXJuc1dpdGhvdXRFbmdpbmUpOgorICAgICAg
ICAobXlGdW5jdGlvblRoYXRSZXR1cm5zV3JvbmdFbmdpbmUpOgorICAgICAgICAodHN0X1FTY3Jp
cHRFbmdpbmU6Om5ld0Z1bmN0aW9uKToKKwogMjAxMC0wNy0yMyAgSmVkcnplaiBOb3dhY2tpICA8
amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRo
IFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9R
dFNjcmlwdC5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCmluZGV4IGMy
YzZmODMuLjQ5MDc1OGMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlw
dC5wcm8KKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0U2NyaXB0LnBybwpAQCAtMjgsNiAr
MjgsNyBAQCBTT1VSQ0VTICs9ICAkJFBXRC9xc2NyaXB0ZW5naW5lLmNwcCBcCiAgICAgICAgICAg
ICAkJFBXRC9xc2NyaXB0c3RyaW5nLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0cHJv
Z3JhbS5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmNw
cCBcCisgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZnVuY3Rpb24uY3BwCiAKIEhFQURFUlMgKz0g
ICQkUFdEL3F0c2NyaXB0Z2xvYmFsLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2lu
ZS5oIFwKQEAgLTQzLDcgKzQ0LDcgQEAgSEVBREVSUyArPSAgJCRQV0QvcXRzY3JpcHRnbG9iYWwu
aCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0cHJvZ3JhbV9wLmggXAogICAgICAgICAgICAg
JCRQV0QvcXNjcmlwdHN5bnRheGNoZWNrcmVzdWx0LmggXAogICAgICAgICAgICAgJCRQV0QvcXNj
cmlwdG9yaWdpbmFsZ2xvYmFsb2JqZWN0X3AuaCBcCi0KKyAgICAgICAgICAgICQkUFdEL3FzY3Jp
cHRmdW5jdGlvbl9wLmgKIAogIXN0YXRpYzogREVGSU5FUyArPSBRVF9NQUtFRExMCiAKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcAppbmRleCA0YjIzMTliLi43ZWY3YzhlIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCkBAIC0yNTgsNiArMjU4LDkz
IEBAIFFTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5lOjp1bmRlZmluZWRWYWx1ZSgpCiB9CiAKIC8q
IQorICAgIENyZWF0ZXMgYSBRU2NyaXB0VmFsdWUgdGhhdCB3cmFwcyBhIG5hdGl2ZSAoQysrKSBm
dW5jdGlvbi4gXGEgZnVuCisgICAgbXVzdCBiZSBhIEMrKyBmdW5jdGlvbiB3aXRoIHNpZ25hdHVy
ZSBRU2NyaXB0RW5naW5lOjpGdW5jdGlvblNpZ25hdHVyZS4KKyAgICBcYSBsZW5ndGggaXMgdGhl
IG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCBcYSBmdW4gZXhwZWN0czsgdGhpcyBiZWNvbWVzCisg
ICAgdGhlIFxje2xlbmd0aH0gcHJvcGVydHkgb2YgdGhlIGNyZWF0ZWQgUVNjcmlwdFZhbHVlLgor
CisgICAgTm90ZSB0aGF0IFxhIGxlbmd0aCBvbmx5IGdpdmVzIGFuIGluZGljYXRpb24gb2YgdGhl
IG51bWJlciBvZgorICAgIGFyZ3VtZW50cyB0aGF0IHRoZSBmdW5jdGlvbiBleHBlY3RzOyBhbiBh
Y3R1YWwgaW52b2NhdGlvbiBvZiBhCisgICAgZnVuY3Rpb24gY2FuIGluY2x1ZGUgYW55IG51bWJl
ciBvZiBhcmd1bWVudHMuIFlvdSBjYW4gY2hlY2sgdGhlCisgICAgXGx7UVNjcmlwdENvbnRleHQ6
OmFyZ3VtZW50Q291bnQoKX17YXJndW1lbnRDb3VudCgpfSBvZiB0aGUKKyAgICBRU2NyaXB0Q29u
dGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGludm9jYXRpb24gdG8gZGV0ZXJtaW5lIHRoZQorICAg
IGFjdHVhbCBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZC4KKworICAgIEEgXGN7cHJvdG90eXBl
fSBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9yIHRoZSByZXN1bHRpbmcKKyAg
ICBmdW5jdGlvbiBvYmplY3QsIHRvIHByb3ZpZGUgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRo
ZSBmdW5jdGlvbgorICAgIHdpbGwgYmUgdXNlZCBhcyBhIGNvbnN0cnVjdG9yLgorCisgICAgQnkg
Y29tYmluaW5nIG5ld0Z1bmN0aW9uKCkgYW5kIHRoZSBwcm9wZXJ0eSBmbGFncworICAgIFFTY3Jp
cHRWYWx1ZTo6UHJvcGVydHlHZXR0ZXIgYW5kIFFTY3JpcHRWYWx1ZTo6UHJvcGVydHlTZXR0ZXIs
IHlvdQorICAgIGNhbiBjcmVhdGUgc2NyaXB0IG9iamVjdCBwcm9wZXJ0aWVzIHRoYXQgYmVoYXZl
IGxpa2Ugbm9ybWFsCisgICAgcHJvcGVydGllcyBpbiBzY3JpcHQgY29kZSwgYnV0IGFyZSBpbiBm
YWN0IGFjY2Vzc2VkIHRocm91Z2gKKyAgICBmdW5jdGlvbnMgKGFuYWxvZ291cyB0byBob3cgcHJv
cGVydGllcyB3b3JrIGluIFxse1F0J3MgUHJvcGVydHkKKyAgICBTeXN0ZW19KS4gRXhhbXBsZToK
KworICAgIFxzbmlwcGV0IGRvYy9zcmMvc25pcHBldHMvY29kZS9zcmNfc2NyaXB0X3FzY3JpcHRl
bmdpbmUuY3BwIDExCisKKyAgICBXaGVuIHRoZSBwcm9wZXJ0eSBcY3tmb299IG9mIHRoZSBzY3Jp
cHQgb2JqZWN0IGlzIHN1YnNlcXVlbnRseQorICAgIGFjY2Vzc2VkIGluIHNjcmlwdCBjb2RlLCBc
Y3tnZXRTZXRGb28oKX0gd2lsbCBiZSBpbnZva2VkIHRvIGhhbmRsZQorICAgIHRoZSBhY2Nlc3Mu
ICBJbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSwgd2UgY2hvc2UgdG8gc3RvcmUgdGhlICJyZWFsIgor
ICAgIHZhbHVlIG9mIFxje2Zvb30gYXMgYSBwcm9wZXJ0eSBvZiB0aGUgYWNjZXNzb3IgZnVuY3Rp
b24gaXRzZWxmOyB5b3UKKyAgICBhcmUgb2YgY291cnNlIGZyZWUgdG8gZG8gd2hhdGV2ZXIgeW91
IGxpa2UgaW4gdGhpcyBmdW5jdGlvbi4KKworICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCBhIHNp
bmdsZSBuYXRpdmUgZnVuY3Rpb24gd2FzIHVzZWQgdG8gaGFuZGxlCisgICAgYm90aCByZWFkcyBh
bmQgd3JpdGVzIHRvIHRoZSBwcm9wZXJ0eTsgdGhlIGFyZ3VtZW50IGNvdW50IGlzIHVzZWQgdG8K
KyAgICBkZXRlcm1pbmUgaWYgd2UgYXJlIGhhbmRsaW5nIGEgcmVhZCBvciB3cml0ZS4gWW91IGNh
biBhbHNvIHVzZSB0d28KKyAgICBzZXBhcmF0ZSBmdW5jdGlvbnM7IGp1c3Qgc3BlY2lmeSB0aGUg
cmVsZXZhbnQgZmxhZworICAgIChRU2NyaXB0VmFsdWU6OlByb3BlcnR5R2V0dGVyIG9yIFFTY3Jp
cHRWYWx1ZTo6UHJvcGVydHlTZXR0ZXIpIHdoZW4KKyAgICBzZXR0aW5nIHRoZSBwcm9wZXJ0eSwg
ZS5nLjoKKworICAgIFxzbmlwcGV0IGRvYy9zcmMvc25pcHBldHMvY29kZS9zcmNfc2NyaXB0X3Fz
Y3JpcHRlbmdpbmUuY3BwIDEyCisKKyAgICBcc2EgUVNjcmlwdFZhbHVlOjpjYWxsKCkKKyovCitR
U2NyaXB0VmFsdWUgUVNjcmlwdEVuZ2luZTo6bmV3RnVuY3Rpb24oUVNjcmlwdEVuZ2luZTo6RnVu
Y3Rpb25TaWduYXR1cmUgZnVuLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiBRU2NyaXB0VmFs
dWVQcml2YXRlOjpnZXQoZF9wdHItPm5ld0Z1bmN0aW9uKGZ1biwgMCwgbGVuZ3RoKSk7Cit9CisK
Ky8qIQorICAgIENyZWF0ZXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmcm9tIFxhIGZ1biwgd2l0
aCB0aGUgZ2l2ZW4gXGEgbGVuZ3RoLgorICAgIFRoZSBcY3twcm90b3R5cGV9IHByb3BlcnR5IG9m
IHRoZSByZXN1bHRpbmcgZnVuY3Rpb24gaXMgc2V0IHRvIGJlIHRoZQorICAgIGdpdmVuIFxhIHBy
b3RvdHlwZS4gVGhlIFxje2NvbnN0cnVjdG9yfSBwcm9wZXJ0eSBvZiBcYSBwcm90b3R5cGUgaXMK
KyAgICBzZXQgdG8gYmUgdGhlIHJlc3VsdGluZyBmdW5jdGlvbi4KKworICAgIFdoZW4gYSBmdW5j
dGlvbiBpcyBjYWxsZWQgYXMgYSBjb25zdHJ1Y3RvciAoZS5nLiBcY3tuZXcgRm9vKCl9KSwgdGhl
CisgICAgYHRoaXMnIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1bmN0aW9uIGNhbGwgaXMg
dGhlIG5ldyBvYmplY3QKKyAgICB0aGF0IHRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBpbml0
aWFsaXplOyB0aGUgcHJvdG90eXBlIG9mIHRoaXMKKyAgICBkZWZhdWx0IGNvbnN0cnVjdGVkIG9i
amVjdCB3aWxsIGJlIHRoZSBmdW5jdGlvbidzIHB1YmxpYworICAgIFxje3Byb3RvdHlwZX0gcHJv
cGVydHkuIElmIHlvdSBhbHdheXMgd2FudCB0aGUgZnVuY3Rpb24gdG8gYmVoYXZlIGFzCisgICAg
YSBjb25zdHJ1Y3RvciAoZS5nLiBcY3tGb28oKX0gc2hvdWxkIGFsc28gY3JlYXRlIGEgbmV3IG9i
amVjdCksIG9yCisgICAgaWYgeW91IG5lZWQgdG8gY3JlYXRlIHlvdXIgb3duIG9iamVjdCByYXRo
ZXIgdGhhbiB1c2luZyB0aGUgZGVmYXVsdAorICAgIGB0aGlzJyBvYmplY3QsIHlvdSBzaG91bGQg
bWFrZSBzdXJlIHRoYXQgdGhlIHByb3RvdHlwZSBvZiB5b3VyCisgICAgb2JqZWN0IGlzIHNldCBj
b3JyZWN0bHk7IGVpdGhlciBieSBzZXR0aW5nIGl0IG1hbnVhbGx5LCBvciwgd2hlbgorICAgIHdy
YXBwaW5nIGEgY3VzdG9tIHR5cGUsIGJ5IGhhdmluZyByZWdpc3RlcmVkIHRoZSBkZWZhdWx0UHJv
dG90eXBlKCkKKyAgICBvZiB0aGF0IHR5cGUuIEV4YW1wbGU6CisKKyAgICBcc25pcHBldCBkb2Mv
c3JjL3NuaXBwZXRzL2NvZGUvc3JjX3NjcmlwdF9xc2NyaXB0ZW5naW5lLmNwcCA5CisKKyAgICBU
byB3cmFwIGEgY3VzdG9tIHR5cGUgYW5kIHByb3ZpZGUgYSBjb25zdHJ1Y3RvciBmb3IgaXQsIHlv
dSdkIHR5cGljYWxseQorICAgIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKyAgICBcc25pcHBl
dCBkb2Mvc3JjL3NuaXBwZXRzL2NvZGUvc3JjX3NjcmlwdF9xc2NyaXB0ZW5naW5lLmNwcCAxMAor
Ki8KK1FTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5lOjpuZXdGdW5jdGlvbihRU2NyaXB0RW5naW5l
OjpGdW5jdGlvblNpZ25hdHVyZSBmdW4sIGNvbnN0IFFTY3JpcHRWYWx1ZSYgcHJvdG90eXBlLCBp
bnQgbGVuZ3RoKQoreworICAgIHJldHVybiBRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoZF9wdHIt
Pm5ld0Z1bmN0aW9uKGZ1biwgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6Z2V0KHByb3RvdHlwZSksIGxl
bmd0aCkpOworfQorCisvKiEKKyAgICBcaW50ZXJuYWwKKyAgICBcc2luY2UgNC40CisqLworUVNj
cmlwdFZhbHVlIFFTY3JpcHRFbmdpbmU6Om5ld0Z1bmN0aW9uKFFTY3JpcHRFbmdpbmU6OkZ1bmN0
aW9uV2l0aEFyZ1NpZ25hdHVyZSBmdW4sIHZvaWQqIGFyZykKK3sKKyAgICByZXR1cm4gUVNjcmlw
dFZhbHVlUHJpdmF0ZTo6Z2V0KGRfcHRyLT5uZXdGdW5jdGlvbihmdW4sIGFyZykpOworfQorCisv
KiEKICAgQ3JlYXRlcyBhIFF0U2NyaXB0IG9iamVjdCBvZiBjbGFzcyBPYmplY3QuCiAKICAgVGhl
IHByb3RvdHlwZSBvZiB0aGUgY3JlYXRlZCBvYmplY3Qgd2lsbCBiZSB0aGUgT2JqZWN0CkBAIC0y
OTQsMyArMzgxLDIzIEBAIFFTY3JpcHRWYWx1ZSBRU2NyaXB0RW5naW5lOjpnbG9iYWxPYmplY3Qo
KSBjb25zdAogewogICAgIHJldHVybiBRU2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoZF9wdHItPmds
b2JhbE9iamVjdCgpKTsKIH0KKworLyohCisgICAgXHR5cGVkZWYgUVNjcmlwdEVuZ2luZTo6RnVu
Y3Rpb25TaWduYXR1cmUKKyAgICBccmVsYXRlcyBRU2NyaXB0RW5naW5lCisKKyAgICBUaGUgZnVu
Y3Rpb24gc2lnbmF0dXJlIFxje1FTY3JpcHRWYWx1ZSBmKFFTY3JpcHRDb250ZXh0ICosIFFTY3Jp
cHRFbmdpbmUgKil9LgorCisgICAgQSBmdW5jdGlvbiB3aXRoIHN1Y2ggYSBzaWduYXR1cmUgY2Fu
IGJlIHBhc3NlZCB0bworICAgIFFTY3JpcHRFbmdpbmU6Om5ld0Z1bmN0aW9uKCkgdG8gd3JhcCB0
aGUgZnVuY3Rpb24uCisqLworCisvKiEKKyAgICBcdHlwZWRlZiBRU2NyaXB0RW5naW5lOjpGdW5j
dGlvbldpdGhBcmdTaWduYXR1cmUKKyAgICBccmVsYXRlcyBRU2NyaXB0RW5naW5lCisKKyAgICBU
aGUgZnVuY3Rpb24gc2lnbmF0dXJlIFxje1FTY3JpcHRWYWx1ZSBmKFFTY3JpcHRDb250ZXh0ICos
IFFTY3JpcHRFbmdpbmUgKiwgdm9pZCAqKX0uCisKKyAgICBBIGZ1bmN0aW9uIHdpdGggc3VjaCBh
IHNpZ25hdHVyZSBjYW4gYmUgcGFzc2VkIHRvCisgICAgUVNjcmlwdEVuZ2luZTo6bmV3RnVuY3Rp
b24oKSB0byB3cmFwIHRoZSBmdW5jdGlvbi4KKyovCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRl
bmdpbmUuaAppbmRleCAxYTg3YTM3Li5iODVkYzUyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2Ny
aXB0ZW5naW5lLmgKQEAgLTMwLDYgKzMwLDkgQEAKIGNsYXNzIFFTY3JpcHRWYWx1ZTsKIGNsYXNz
IFFTY3JpcHRFbmdpbmVQcml2YXRlOwogCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBRU2Ny
aXB0Q29udGV4dCBpcyBwcm9wZXJseSBkZWZpbmVkLgordHlwZWRlZiB2b2lkIFFTY3JpcHRDb250
ZXh0OworCiAvLyBJbnRlcm5hbCB0eXBlZGVmCiB0eXBlZGVmIFFFeHBsaWNpdGx5U2hhcmVkRGF0
YVBvaW50ZXI8UVNjcmlwdEVuZ2luZVByaXZhdGU+IFFTY3JpcHRFbmdpbmVQdHI7CiAKQEAgLTU2
LDYgKzU5LDE0IEBAIHB1YmxpYzoKIAogICAgIFFTY3JpcHRWYWx1ZSBudWxsVmFsdWUoKTsKICAg
ICBRU2NyaXB0VmFsdWUgdW5kZWZpbmVkVmFsdWUoKTsKKworICAgIHR5cGVkZWYgUVNjcmlwdFZh
bHVlICgqRnVuY3Rpb25TaWduYXR1cmUpKFFTY3JpcHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUg
Kik7CisgICAgdHlwZWRlZiBRU2NyaXB0VmFsdWUgKCpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUp
KFFTY3JpcHRDb250ZXh0ICosIFFTY3JpcHRFbmdpbmUgKiwgdm9pZCAqKTsKKworICAgIFFTY3Jp
cHRWYWx1ZSBuZXdGdW5jdGlvbihGdW5jdGlvblNpZ25hdHVyZSBmdW4sIGludCBsZW5ndGggPSAw
KTsKKyAgICBRU2NyaXB0VmFsdWUgbmV3RnVuY3Rpb24oRnVuY3Rpb25TaWduYXR1cmUgZnVuLCBj
b25zdCBRU2NyaXB0VmFsdWUmIHByb3RvdHlwZSwgaW50IGxlbmd0aCA9IDApOworICAgIFFTY3Jp
cHRWYWx1ZSBuZXdGdW5jdGlvbihGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUgZnVuLCB2b2lkKiBh
cmcpOworCiAgICAgUVNjcmlwdFZhbHVlIG5ld09iamVjdCgpOwogICAgIFFTY3JpcHRWYWx1ZSBu
ZXdBcnJheSh1aW50IGxlbmd0aCA9IDApOwogICAgIFFTY3JpcHRWYWx1ZSBnbG9iYWxPYmplY3Qo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
X3AuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5jcHAKaW5kZXgg
ZTMzMTFlZC4uYTcwOGEzNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmVfcC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVf
cC5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgInFzY3JpcHRlbmdpbmVfcC5oIgog
CisjaW5jbHVkZSAicXNjcmlwdGZ1bmN0aW9uX3AuaCIKICNpbmNsdWRlICJxc2NyaXB0cHJvZ3Jh
bV9wLmgiCiAjaW5jbHVkZSAicXNjcmlwdHZhbHVlX3AuaCIKIApAQCAtMzMsMTEgKzM0LDE1IEBA
IFFTY3JpcHRFbmdpbmVQcml2YXRlOjpRU2NyaXB0RW5naW5lUHJpdmF0ZShjb25zdCBRU2NyaXB0
RW5naW5lKiBlbmdpbmUpCiAgICAgLCBtX2NvbnRleHQoSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDAp
KQogICAgICwgbV9leGNlcHRpb24oMCkKICAgICAsIG1fb3JpZ2luYWxHbG9iYWxPYmplY3QobV9j
b250ZXh0KQorICAgICwgbV9uYXRpdmVGdW5jdGlvbkNsYXNzKEpTQ2xhc3NDcmVhdGUoJnF0X05h
dGl2ZUZ1bmN0aW9uQ2xhc3MpKQorICAgICwgbV9uYXRpdmVGdW5jdGlvbldpdGhBcmdDbGFzcyhK
U0NsYXNzQ3JlYXRlKCZxdF9OYXRpdmVGdW5jdGlvbldpdGhBcmdDbGFzcykpCiB7CiB9CiAKIFFT
Y3JpcHRFbmdpbmVQcml2YXRlOjp+UVNjcmlwdEVuZ2luZVByaXZhdGUoKQogeworICAgIEpTQ2xh
c3NSZWxlYXNlKG1fbmF0aXZlRnVuY3Rpb25DbGFzcyk7CisgICAgSlNDbGFzc1JlbGVhc2UobV9u
YXRpdmVGdW5jdGlvbldpdGhBcmdDbGFzcyk7CiAgICAgaWYgKG1fZXhjZXB0aW9uKQogICAgICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9leGNlcHRpb24pOwogICAgIEpTR2xvYmFs
Q29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKQEAgLTg2LDYgKzkxLDM3IEBAIFFTY3JpcHRWYWx1
ZVByaXZhdGUqIFFTY3JpcHRFbmdpbmVQcml2YXRlOjp1bmNhdWdodEV4Y2VwdGlvbigpIGNvbnN0
CiAgICAgcmV0dXJuIG1fZXhjZXB0aW9uID8gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUodGhpcywg
bV9leGNlcHRpb24pIDogbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUoKTsKIH0KIAorUVNjcmlwdFZh
bHVlUHJpdmF0ZSogUVNjcmlwdEVuZ2luZVByaXZhdGU6Om5ld0Z1bmN0aW9uKFFTY3JpcHRFbmdp
bmU6OkZ1bmN0aW9uU2lnbmF0dXJlIGZ1biwgUVNjcmlwdFZhbHVlUHJpdmF0ZSogcHJvdG90eXBl
LCBpbnQgbGVuZ3RoKQoreworICAgIC8vIE5vdGUgdGhhdCB0aGlzIHByaXZhdGUgZGF0YSB3aWxs
IGJlIGRlbGV0ZWQgaW4gdGhlIG9iamVjdCBmaW5hbGl6ZSBmdW5jdGlvbi4KKyAgICBRTmF0aXZl
RnVuY3Rpb25EYXRhKiBkYXRhID0gbmV3IFFOYXRpdmVGdW5jdGlvbkRhdGEodGhpcywgZnVuKTsK
KyAgICBKU09iamVjdFJlZiBmdW5KUyA9IEpTT2JqZWN0TWFrZShtX2NvbnRleHQsIG1fbmF0aXZl
RnVuY3Rpb25DbGFzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGF0YSkpOworICAgIFFTY3Jp
cHRWYWx1ZVByaXZhdGUqIHByb3RvID0gcHJvdG90eXBlID8gcHJvdG90eXBlIDogbmV3T2JqZWN0
KCk7CisgICAgcmV0dXJuIG5ld0Z1bmN0aW9uKGZ1bkpTLCBwcm90byk7Cit9CisKK1FTY3JpcHRW
YWx1ZVByaXZhdGUqIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpuZXdGdW5jdGlvbihRU2NyaXB0RW5n
aW5lOjpGdW5jdGlvbldpdGhBcmdTaWduYXR1cmUgZnVuLCB2b2lkKiBhcmcpCit7CisgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgcHJpdmF0ZSBkYXRhIHdpbGwgYmUgZGVsZXRlZCBpbiB0aGUgb2JqZWN0
IGZpbmFsaXplIGZ1bmN0aW9uLgorICAgIFFOYXRpdmVGdW5jdGlvbldpdGhBcmdEYXRhKiBkYXRh
ID0gbmV3IFFOYXRpdmVGdW5jdGlvbldpdGhBcmdEYXRhKHRoaXMsIGZ1biwgYXJnKTsKKyAgICBK
U09iamVjdFJlZiBmdW5KUyA9IEpTT2JqZWN0TWFrZShtX2NvbnRleHQsIG1fbmF0aXZlRnVuY3Rp
b25XaXRoQXJnQ2xhc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICBRU2Ny
aXB0VmFsdWVQcml2YXRlKiBwcm90byA9IG5ld09iamVjdCgpOworICAgIHJldHVybiBuZXdGdW5j
dGlvbihmdW5KUywgcHJvdG8pOworfQorCitRU2NyaXB0VmFsdWVQcml2YXRlKiBRU2NyaXB0RW5n
aW5lUHJpdmF0ZTo6bmV3RnVuY3Rpb24oSlNPYmplY3RSZWYgZnVuSlMsIFFTY3JpcHRWYWx1ZVBy
aXZhdGUqIHByb3RvdHlwZSkKK3sKKyAgICBKU09iamVjdFNldFByb3RvdHlwZShtX2NvbnRleHQs
IGZ1bkpTLCBtX29yaWdpbmFsR2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCkpOworCisg
ICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogcmVzdWx0ID0gbmV3IFFTY3JpcHRWYWx1ZVByaXZhdGUo
dGhpcywgZnVuSlMpOworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBwcm90b05hbWUgPSBRU2NyaXB0
Q29udmVydGVyOjp0b1N0cmluZygicHJvdG90eXBlIik7CisgICAgc3RhdGljIEpTU3RyaW5nUmVm
IGNvbnN0cnVjdG9yTmFtZSA9IFFTY3JpcHRDb252ZXJ0ZXI6OnRvU3RyaW5nKCJjb25zdHJ1Y3Rv
ciIpOworICAgIHJlc3VsdC0+c2V0UHJvcGVydHkocHJvdG9OYW1lLCBwcm90b3R5cGUsIFFTY3Jp
cHRWYWx1ZTo6VW5kZWxldGFibGUpOworICAgIHByb3RvdHlwZS0+c2V0UHJvcGVydHkoY29uc3Ry
dWN0b3JOYW1lLCByZXN1bHQsIFFTY3JpcHRWYWx1ZTo6UHJvcGVydHlGbGFncyhRU2NyaXB0VmFs
dWU6OlVuZGVsZXRhYmxlIHwgUVNjcmlwdFZhbHVlOjpTa2lwSW5FbnVtZXJhdGlvbikpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogUVNjcmlwdFZhbHVlUHJpdmF0ZSogUVNjcmlwdEVuZ2lu
ZVByaXZhdGU6Om5ld09iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG5ldyBRU2NyaXB0VmFs
dWVQcml2YXRlKHRoaXMsIEpTT2JqZWN0TWFrZShtX2NvbnRleHQsIC8qIGpzQ2xhc3MgKi8gMCwg
LyogdXNlckRhdGEgKi8gMCkpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3Fz
Y3JpcHRlbmdpbmVfcC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5o
CmluZGV4IGQ1NGNkY2MuLmVlYzE5MjkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lX3AuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVu
Z2luZV9wLmgKQEAgLTcxLDYgKzcxLDEwIEBAIHB1YmxpYzoKICAgICBpbmxpbmUgSlNWYWx1ZVJl
ZiBtYWtlSlNWYWx1ZShib29sIG51bWJlcikgY29uc3Q7CiAgICAgaW5saW5lIEpTVmFsdWVSZWYg
bWFrZUpTVmFsdWUoUVNjcmlwdFZhbHVlOjpTcGVjaWFsVmFsdWUgdmFsdWUpIGNvbnN0OwogCisg
ICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogbmV3RnVuY3Rpb24oUVNjcmlwdEVuZ2luZTo6RnVuY3Rp
b25TaWduYXR1cmUgZnVuLCBRU2NyaXB0VmFsdWVQcml2YXRlKiBwcm90b3R5cGUsIGludCBsZW5n
dGgpOworICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIG5ld0Z1bmN0aW9uKFFTY3JpcHRFbmdpbmU6
OkZ1bmN0aW9uV2l0aEFyZ1NpZ25hdHVyZSBmdW4sIHZvaWQqIGFyZyk7CisgICAgUVNjcmlwdFZh
bHVlUHJpdmF0ZSogbmV3RnVuY3Rpb24oSlNPYmplY3RSZWYgZnVuT2JqZWN0LCBRU2NyaXB0VmFs
dWVQcml2YXRlKiBwcm90b3R5cGUpOworCiAgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogbmV3T2Jq
ZWN0KCkgY29uc3Q7CiAgICAgUVNjcmlwdFZhbHVlUHJpdmF0ZSogbmV3QXJyYXkodWludCBsZW5n
dGgpOwogICAgIFFTY3JpcHRWYWx1ZVByaXZhdGUqIGdsb2JhbE9iamVjdCgpIGNvbnN0OwpAQCAt
ODksNiArOTMsOSBAQCBwcml2YXRlOgogICAgIEpTVmFsdWVSZWYgbV9leGNlcHRpb247CiAKICAg
ICBRU2NyaXB0T3JpZ2luYWxHbG9iYWxPYmplY3QgbV9vcmlnaW5hbEdsb2JhbE9iamVjdDsKKwor
ICAgIEpTQ2xhc3NSZWYgbV9uYXRpdmVGdW5jdGlvbkNsYXNzOworICAgIEpTQ2xhc3NSZWYgbV9u
YXRpdmVGdW5jdGlvbldpdGhBcmdDbGFzczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
cXNjcmlwdGZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
ZmUzN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRm
dW5jdGlvbi5jcHAKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKy8vIENv
bnRhaW5zIHRoZSBuZWNlc3NhcnkgaGVscGVyIHN0cnVjdHVyZXMgdG8gbWFrZSBwb3NzaWJsZSBl
eHBvc2UKKy8vIEMvQysrIGZ1bmN0aW9ucyB0byBKYXZhU2NyaXB0IGVudmlyb25tZW50LgorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0ZnVuY3Rpb25fcC5oIgorCitz
dGF0aWMgdm9pZCBxdF9OYXRpdmVGdW5jdGlvbl9maW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3Qp
Cit7CisgICAgdm9pZCogcHJpdiA9IEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOworICAgIGRl
bGV0ZSByZWludGVycHJldF9jYXN0PFFOYXRpdmVGdW5jdGlvbkRhdGEqPihwcml2KTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgcXRfTmF0aXZlRnVuY3Rpb25fY2FsbEFzRnVuY3Rpb24oSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBRTmF0aXZlRnVuY3Rpb25EYXRhKiBkYXRhID0g
cmVpbnRlcnByZXRfY2FzdDxRTmF0aXZlRnVuY3Rpb25EYXRhKj4oSlNPYmplY3RHZXRQcml2YXRl
KG9iamVjdCkpOworCisgICAgLy8gVE9ETzogYnVpbGQgYSBRU2NyaXB0Q29udGV4dCBhbmQgdXNl
IGl0IGluIHRoZSBuYXRpdmUgY2FsbC4KKyAgICBRU2NyaXB0Q29udGV4dCogc2NyaXB0Q29udGV4
dCA9IDA7CisgICAgUV9VTlVTRUQoY29udGV4dCk7CisgICAgUV9VTlVTRUQodGhpc09iamVjdCk7
CisgICAgUV9VTlVTRUQoYXJndW1lbnRDb3VudCk7CisgICAgUV9VTlVTRUQoYXJndW1lbnRzKTsK
KyAgICBRX1VOVVNFRChleGNlcHRpb24pOworCisgICAgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVu
Z2luZSA9IGRhdGEtPmVuZ2luZTsKKyAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiByZXN1bHQgPSBR
U2NyaXB0VmFsdWVQcml2YXRlOjpnZXQoZGF0YS0+ZnVuKHNjcmlwdENvbnRleHQsIFFTY3JpcHRF
bmdpbmVQcml2YXRlOjpnZXQoZW5naW5lKSkpOworICAgIGlmICghcmVzdWx0LT5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgcVdhcm5pbmcoIkludmFsaWQgdmFsdWUgcmV0dXJuZWQgZnJvbSBuYXRpdmUg
ZnVuY3Rpb24sIHJldHVybmluZyB1bmRlZmluZWQgdmFsdWUgaW5zdGVhZC4iKTsKKyAgICAgICAg
cmV0dXJuIGVuZ2luZS0+bWFrZUpTVmFsdWUoUVNjcmlwdFZhbHVlOjpVbmRlZmluZWRWYWx1ZSk7
CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIGFzc2ln
bmVkIHRvIHRoZSBjb3JyZWN0IGVuZ2luZS4KKyAgICBpZiAoIXJlc3VsdC0+ZW5naW5lKCkpIHsK
KyAgICAgICAgUV9BU1NFUlQocmVzdWx0LT5pc1ZhbGlkKCkpOworICAgICAgICByZXN1bHQtPmFz
c2lnbkVuZ2luZShlbmdpbmUpOworICAgIH0gZWxzZSBpZiAocmVzdWx0LT5lbmdpbmUoKSAhPSBl
bmdpbmUpIHsKKyAgICAgICAgcVdhcm5pbmcoIlZhbHVlIGZyb20gZGlmZmVyZW50IGVuZ2luZSBy
ZXR1cm5lZCBmcm9tIG5hdGl2ZSBmdW5jdGlvbiwgcmV0dXJuaW5nIHVuZGVmaW5lZCB2YWx1ZSBp
bnN0ZWFkLiIpOworICAgICAgICByZXR1cm4gZW5naW5lLT5tYWtlSlNWYWx1ZShRU2NyaXB0VmFs
dWU6OlVuZGVmaW5lZFZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKwor
SlNDbGFzc0RlZmluaXRpb24gcXRfTmF0aXZlRnVuY3Rpb25DbGFzcyA9IHsKKyAgICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uCisgICAga0pTQ2xhc3NB
dHRyaWJ1dGVOb0F1dG9tYXRpY1Byb3RvdHlwZSwgLy8gYXR0cmlidXRlcworCisgICAgIiIsICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzTmFtZQorICAgIDAsICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBwYXJlbnRDbGFzcworCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0YXRpY1ZhbHVlcworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
dGF0aWNGdW5jdGlvbnMKKworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbml0aWFsaXplCisgICAgcXRfTmF0aXZlRnVuY3Rpb25fZmluYWxpemUsICAgICAgIC8vIGZp
bmFsaXplCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc1Byb3Bl
cnR5CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldFByb3BlcnR5
CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldFByb3BlcnR5Cisg
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVByb3BlcnR5Cisg
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldFByb3BlcnR5TmFtZXMK
KyAgICBxdF9OYXRpdmVGdW5jdGlvbl9jYWxsQXNGdW5jdGlvbiwgLy8gY2FsbEFzRnVuY3Rpb24K
KyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbEFzQ29uc3RydWN0
b3IKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzSW5zdGFuY2UK
KyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydFRvVHlwZQor
fTsKKworc3RhdGljIHZvaWQgcXRfTmF0aXZlRnVuY3Rpb25XaXRoQXJnX2ZpbmFsaXplKEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICB2b2lkKiBwcml2ID0gSlNPYmplY3RHZXRQcml2YXRlKG9i
amVjdCk7CisgICAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8UU5hdGl2ZUZ1bmN0aW9uV2l0aEFy
Z0RhdGEqPihwcml2KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcXRfTmF0aXZlRnVuY3Rpb25X
aXRoQXJnX2NhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBv
YmplY3QsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
UU5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGEqIGRhdGEgPSByZWludGVycHJldF9jYXN0PFFOYXRp
dmVGdW5jdGlvbldpdGhBcmdEYXRhKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworCisg
ICAgLy8gVE9ETzogYnVpbGQgYSBRU2NyaXB0Q29udGV4dCBhbmQgdXNlIGl0IGluIHRoZSBuYXRp
dmUgY2FsbC4KKyAgICBRU2NyaXB0Q29udGV4dCogc2NyaXB0Q29udGV4dCA9IDA7CisgICAgUV9V
TlVTRUQoY29udGV4dCk7CisgICAgUV9VTlVTRUQodGhpc09iamVjdCk7CisgICAgUV9VTlVTRUQo
YXJndW1lbnRDb3VudCk7CisgICAgUV9VTlVTRUQoYXJndW1lbnRzKTsKKyAgICBRX1VOVVNFRChl
eGNlcHRpb24pOworCisgICAgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSA9IGRhdGEtPmVu
Z2luZTsKKyAgICBRU2NyaXB0VmFsdWVQcml2YXRlKiByZXN1bHQgPSBRU2NyaXB0VmFsdWVQcml2
YXRlOjpnZXQoZGF0YS0+ZnVuKHNjcmlwdENvbnRleHQsIFFTY3JpcHRFbmdpbmVQcml2YXRlOjpn
ZXQoZW5naW5lKSwgZGF0YS0+YXJnKSk7CisgICAgaWYgKCFyZXN1bHQtPmlzVmFsaWQoKSkgewor
ICAgICAgICBxV2FybmluZygiSW52YWxpZCB2YWx1ZSByZXR1cm5lZCBmcm9tIG5hdGl2ZSBmdW5j
dGlvbiwgcmV0dXJuaW5nIHVuZGVmaW5lZCB2YWx1ZSBpbnN0ZWFkLiIpOworICAgICAgICByZXR1
cm4gZW5naW5lLT5tYWtlSlNWYWx1ZShRU2NyaXB0VmFsdWU6OlVuZGVmaW5lZFZhbHVlKTsKKyAg
ICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgYXNzaWduZWQg
dG8gdGhlIGNvcnJlY3QgZW5naW5lLgorICAgIGlmICghcmVzdWx0LT5lbmdpbmUoKSkgeworICAg
ICAgICBRX0FTU0VSVChyZXN1bHQtPmlzVmFsaWQoKSk7CisgICAgICAgIHJlc3VsdC0+YXNzaWdu
RW5naW5lKGVuZ2luZSk7CisgICAgfSBlbHNlIGlmIChyZXN1bHQtPmVuZ2luZSgpICE9IGVuZ2lu
ZSkgeworICAgICAgICBxV2FybmluZygiVmFsdWUgZnJvbSBkaWZmZXJlbnQgZW5naW5lIHJldHVy
bmVkIGZyb20gbmF0aXZlIGZ1bmN0aW9uLCByZXR1cm5pbmcgdW5kZWZpbmVkIHZhbHVlIGluc3Rl
YWQuIik7CisgICAgICAgIHJldHVybiBlbmdpbmUtPm1ha2VKU1ZhbHVlKFFTY3JpcHRWYWx1ZTo6
VW5kZWZpbmVkVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiAqcmVzdWx0OworfQorCitKU0Ns
YXNzRGVmaW5pdGlvbiBxdF9OYXRpdmVGdW5jdGlvbldpdGhBcmdDbGFzcyA9IHsKKyAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uCisgICAga0pTQ2xh
c3NBdHRyaWJ1dGVOb0F1dG9tYXRpY1Byb3RvdHlwZSwgLy8gYXR0cmlidXRlcworCisgICAgIiIs
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzTmFtZQorICAgIDAsICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBwYXJlbnRDbGFzcworCisgICAgMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHN0YXRpY1ZhbHVlcworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzdGF0aWNGdW5jdGlvbnMKKworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW5pdGlhbGl6ZQorICAgIHF0X05hdGl2ZUZ1bmN0aW9uV2l0aEFyZ19maW5h
bGl6ZSwgICAgICAgLy8gZmluYWxpemUKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhc1Byb3BlcnR5CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBnZXRQcm9wZXJ0eQorICAgIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2V0UHJvcGVydHkKKyAgICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVByb3BlcnR5CisgICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRQcm9wZXJ0eU5hbWVzCisgICAg
cXRfTmF0aXZlRnVuY3Rpb25XaXRoQXJnX2NhbGxBc0Z1bmN0aW9uLCAvLyBjYWxsQXNGdW5jdGlv
bgorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbEFz
Q29uc3RydWN0b3IKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhhc0luc3RhbmNlCisgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjb252ZXJ0VG9UeXBlCit9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL3FzY3JpcHRmdW5jdGlvbl9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGZ1
bmN0aW9uX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI2MDQ2Ci0t
LSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRmdW5jdGlvbl9w
LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0
ZnVuY3Rpb25fcF9oCisjZGVmaW5lIHFzY3JpcHRmdW5jdGlvbl9wX2gKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHR2
YWx1ZV9wLmgiCisKK2V4dGVybiBKU0NsYXNzRGVmaW5pdGlvbiBxdF9OYXRpdmVGdW5jdGlvbkNs
YXNzOworZXh0ZXJuIEpTQ2xhc3NEZWZpbml0aW9uIHF0X05hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0Ns
YXNzOworCitzdHJ1Y3QgUU5hdGl2ZUZ1bmN0aW9uRGF0YQoreworICAgIFFOYXRpdmVGdW5jdGlv
bkRhdGEoUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZSwgUVNjcmlwdEVuZ2luZTo6RnVuY3Rp
b25TaWduYXR1cmUgZnVuKQorICAgICAgICA6IGVuZ2luZShlbmdpbmUpCisgICAgICAgICwgZnVu
KGZ1bikKKyAgICB7CisgICAgfQorCisgICAgUVNjcmlwdEVuZ2luZVByaXZhdGUqIGVuZ2luZTsK
KyAgICBRU2NyaXB0RW5naW5lOjpGdW5jdGlvblNpZ25hdHVyZSBmdW47Cit9OworCitzdHJ1Y3Qg
UU5hdGl2ZUZ1bmN0aW9uV2l0aEFyZ0RhdGEKK3sKKyAgICBRTmF0aXZlRnVuY3Rpb25XaXRoQXJn
RGF0YShRU2NyaXB0RW5naW5lUHJpdmF0ZSogZW5naW5lLCBRU2NyaXB0RW5naW5lOjpGdW5jdGlv
bldpdGhBcmdTaWduYXR1cmUgZnVuLCB2b2lkKiBhcmcpCisgICAgICAgIDogZW5naW5lKGVuZ2lu
ZSkKKyAgICAgICAgLCBmdW4oZnVuKQorICAgICAgICAsIGFyZyhhcmcpCisgICAgeworICAgIH0K
KworICAgIFFTY3JpcHRFbmdpbmVQcml2YXRlKiBlbmdpbmU7CisgICAgUVNjcmlwdEVuZ2luZTo6
RnVuY3Rpb25XaXRoQXJnU2lnbmF0dXJlIGZ1bjsKKyAgICB2b2lkKiBhcmc7Cit9OworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0b3JpZ2luYWxnbG9i
YWxvYmplY3RfcC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRvcmlnaW5hbGdsb2Jh
bG9iamVjdF9wLmgKaW5kZXggOGQwODBmYi4uMzFlOTRmNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRvcmlnaW5hbGdsb2JhbG9iamVjdF9wLmgKKysrIGIvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3FzY3JpcHRvcmlnaW5hbGdsb2JhbG9iamVjdF9wLmgKQEAgLTQ1LDYg
KzQ1LDggQEAgcHVibGljOgogCiAgICAgaW5saW5lIGJvb2wgaXNBcnJheShKU1ZhbHVlUmVmIHZh
bHVlKSBjb25zdDsKICAgICBpbmxpbmUgYm9vbCBpc0Vycm9yKEpTVmFsdWVSZWYgdmFsdWUpIGNv
bnN0OworCisgICAgaW5saW5lIEpTVmFsdWVSZWYgZnVuY3Rpb25Qcm90b3R5cGUoKSBjb25zdDsK
IHByaXZhdGU6CiAgICAgaW5saW5lIGJvb2wgaXNUeXBlKEpTVmFsdWVSZWYgdmFsdWUsIEpTT2Jq
ZWN0UmVmIGNvbnN0cnVjdG9yLCBKU1ZhbHVlUmVmIHByb3RvdHlwZSkgY29uc3Q7CiAgICAgaW5s
aW5lIHZvaWQgaW5pdGlhbGl6ZU1lbWJlcihKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nUmVmIHByb3RvdHlwZU5hbWUsIGNvbnN0IGNoYXIqIHR5cGUsIEpTT2JqZWN0UmVmJiBjb25z
dHJ1Y3RvciwgSlNWYWx1ZVJlZiYgcHJvdG90eXBlKTsKQEAgLTU3LDYgKzU5LDggQEAgcHJpdmF0
ZToKICAgICBKU1ZhbHVlUmVmIG1fYXJyYXlQcm90b3R5cGU7CiAgICAgSlNPYmplY3RSZWYgbV9l
cnJvckNvbnN0cnVjdG9yOwogICAgIEpTVmFsdWVSZWYgbV9lcnJvclByb3RvdHlwZTsKKyAgICBK
U09iamVjdFJlZiBtX2Z1bmN0aW9uQ29uc3RydWN0b3I7CisgICAgSlNWYWx1ZVJlZiBtX2Z1bmN0
aW9uUHJvdG90eXBlOwogCiAgICAgLy8gUmVmZXJlbmNlIHRvIHN0YW5kYXJkIEpTIGZ1bmN0aW9u
cyB0aGF0IGFyZSBub3QgZXhwb3NlZCBieSBKU0MgQyBBUEkuCiAgICAgSlNPYmplY3RSZWYgbV9o
YXNPd25Qcm9wZXJ0eUZ1bmN0aW9uOwpAQCAtNzMsNiArNzcsNyBAQCBRU2NyaXB0T3JpZ2luYWxH
bG9iYWxPYmplY3Q6OlFTY3JpcHRPcmlnaW5hbEdsb2JhbE9iamVjdChKU0dsb2JhbENvbnRleHRS
ZWYgY29udAogICAgIHByb3BlcnR5TmFtZS5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygicHJvdG90eXBlIikpOwogICAgIGluaXRpYWxpemVNZW1iZXIoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUuZ2V0KCksICJBcnJheSIsIG1fYXJyYXlDb25zdHJ1Y3RvciwgbV9hcnJheVBy
b3RvdHlwZSk7CiAgICAgaW5pdGlhbGl6ZU1lbWJlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZS5nZXQoKSwgIkVycm9yIiwgbV9lcnJvckNvbnN0cnVjdG9yLCBtX2Vycm9yUHJvdG90eXBlKTsK
KyAgICBpbml0aWFsaXplTWVtYmVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLmdldCgpLCAi
RnVuY3Rpb24iLCBtX2Z1bmN0aW9uQ29uc3RydWN0b3IsIG1fZnVuY3Rpb25Qcm90b3R5cGUpOwog
CiAgICAgcHJvcGVydHlOYW1lLmFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJo
YXNPd25Qcm9wZXJ0eSIpKTsKICAgICBtX2hhc093blByb3BlcnR5RnVuY3Rpb24gPSBjb25zdF9j
YXN0PEpTT2JqZWN0UmVmPihKU09iamVjdEdldFByb3BlcnR5KG1fY29udGV4dCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0KCksICZleGNlcHRpb24pKTsKQEAgLTExOSw2ICsxMjQsOCBA
QCBRU2NyaXB0T3JpZ2luYWxHbG9iYWxPYmplY3Q6On5RU2NyaXB0T3JpZ2luYWxHbG9iYWxPYmpl
Y3QoKQogICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBtX2FycmF5UHJvdG90eXBlKTsK
ICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9lcnJvckNvbnN0cnVjdG9yKTsKICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9lcnJvclByb3RvdHlwZSk7CisgICAgSlNW
YWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIG1fZnVuY3Rpb25Db25zdHJ1Y3Rvcik7CisgICAgSlNW
YWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIG1fZnVuY3Rpb25Qcm90b3R5cGUpOwogICAgIEpTVmFs
dWVVbnByb3RlY3QobV9jb250ZXh0LCBtX2hhc093blByb3BlcnR5RnVuY3Rpb24pOwogICAgIEpT
VmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBtX2dldE93blByb3BlcnR5TmFtZXNGdW5jdGlvbik7
CiAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRleHQpOwpAQCAtMTczLDYgKzE4MCwx
MSBAQCBpbmxpbmUgYm9vbCBRU2NyaXB0T3JpZ2luYWxHbG9iYWxPYmplY3Q6OmlzRXJyb3IoSlNW
YWx1ZVJlZiB2YWx1ZSkgY29uc3QKICAgICByZXR1cm4gaXNUeXBlKHZhbHVlLCBtX2Vycm9yQ29u
c3RydWN0b3IsIG1fZXJyb3JQcm90b3R5cGUpOwogfQogCitpbmxpbmUgSlNWYWx1ZVJlZiBRU2Ny
aXB0T3JpZ2luYWxHbG9iYWxPYmplY3Q6OmZ1bmN0aW9uUHJvdG90eXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9mdW5jdGlvblByb3RvdHlwZTsKK30KKwogaW5saW5lIGJvb2wgUVNjcmlwdE9y
aWdpbmFsR2xvYmFsT2JqZWN0Ojppc1R5cGUoSlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmplY3RSZWYg
Y29uc3RydWN0b3IsIEpTVmFsdWVSZWYgcHJvdG90eXBlKSBjb25zdAogewogICAgIC8vIEpTQyBB
UEkgZG9lc24ndCBleHBvcnQgdGhlIFtbQ2xhc3NdXSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1aWx0
aW5zLiBCdXQgd2Uga25vdyB0aGF0IGEgdmFsdWUKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3F0L3Rlc3RzL3FzY3JpcHRlbmdpbmUvdHN0X3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2YVNjcmlw
dENvcmUvcXQvdGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKaW5kZXgg
NzJjYTliMS4uNThhMTU4NyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNj
cmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQv
dGVzdHMvcXNjcmlwdGVuZ2luZS90c3RfcXNjcmlwdGVuZ2luZS5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgY2xlYW51cCgpIHt9CiAKIHByaXZhdGUgc2xvdHM6
CisgICAgdm9pZCBuZXdGdW5jdGlvbigpOwogICAgIHZvaWQgbmV3T2JqZWN0KCk7CiAgICAgdm9p
ZCBnbG9iYWxPYmplY3QoKTsKICAgICB2b2lkIGV2YWx1YXRlKCk7CkBAIC01OSw2ICs2MCwxNDYg
QEAgdm9pZCB0c3RfUVNjcmlwdEVuZ2luZTo6ZXZhbHVhdGUoKQogICAgIFFWRVJJRlkyKGVuZ2lu
ZS5ldmFsdWF0ZSgicGluZyIpLmlzVmFsaWQoKSwgIlNjcmlwdCB0aHJvd2luZyBhbiB1bmhhbmRs
ZWQgZXhjZXB0aW9uIHNob3VsZCByZXR1cm4gYW4gZXhjZXB0aW9uIHZhbHVlIik7CiB9CiAKK3N0
YXRpYyBRU2NyaXB0VmFsdWUgbXlGdW5jdGlvbihRU2NyaXB0Q29udGV4dCosIFFTY3JpcHRFbmdp
bmUqIGVuZykKK3sKKyAgICByZXR1cm4gZW5nLT5udWxsVmFsdWUoKTsKK30KKworc3RhdGljIFFT
Y3JpcHRWYWx1ZSBteUZ1bmN0aW9uV2l0aEFyZyhRU2NyaXB0Q29udGV4dCosIFFTY3JpcHRFbmdp
bmUqIGVuZywgdm9pZCogYXJnKQoreworICAgIGludCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQqPihhcmcpOworICAgIHJldHVybiBRU2NyaXB0VmFsdWUoZW5nLCAqcmVzdWx0KTsKK30K
Kworc3RhdGljIFFTY3JpcHRWYWx1ZSBteUZ1bmN0aW9uVGhhdFJldHVybnMoUVNjcmlwdENvbnRl
eHQqLCBRU2NyaXB0RW5naW5lKiBlbmcpCit7CisgICAgcmV0dXJuIFFTY3JpcHRWYWx1ZShlbmcs
IDQyKTsKK30KKworc3RhdGljIFFTY3JpcHRWYWx1ZSBteUZ1bmN0aW9uVGhhdFJldHVybnNXaXRo
b3V0RW5naW5lKFFTY3JpcHRDb250ZXh0KiwgUVNjcmlwdEVuZ2luZSopCit7CisgICAgcmV0dXJu
IFFTY3JpcHRWYWx1ZSgxMDI0KTsKK30KKworc3RhdGljIFFTY3JpcHRWYWx1ZSBteUZ1bmN0aW9u
VGhhdFJldHVybnNXcm9uZ0VuZ2luZShRU2NyaXB0Q29udGV4dCosIFFTY3JpcHRFbmdpbmUqLCB2
b2lkKiBhcmcpCit7CisgICAgUVNjcmlwdEVuZ2luZSogd3JvbmdFbmdpbmUgPSByZWludGVycHJl
dF9jYXN0PFFTY3JpcHRFbmdpbmUqPihhcmcpOworICAgIHJldHVybiBRU2NyaXB0VmFsdWUod3Jv
bmdFbmdpbmUsIDQyKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdEVuZ2luZTo6bmV3RnVuY3Rpb24o
KQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5nOworICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVl
IGZ1biA9IGVuZy5uZXdGdW5jdGlvbihteUZ1bmN0aW9uKTsKKyAgICAgICAgUUNPTVBBUkUoZnVu
LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5pc0Z1bmN0aW9uKCksIHRy
dWUpOworICAgICAgICBRQ09NUEFSRShmdW4uaXNPYmplY3QoKSwgdHJ1ZSk7CisgICAgICAgIC8v
IFFDT01QQVJFKGZ1bi5zY3JpcHRDbGFzcygpLCAoUVNjcmlwdENsYXNzKikwKTsKKyAgICAgICAg
Ly8gYSBwcm90b3R5cGUgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZAorICAg
ICAgICB7CisgICAgICAgICAgICBRU2NyaXB0VmFsdWUgcHJvdCA9IGZ1bi5wcm9wZXJ0eSgicHJv
dG90eXBlIiwgUVNjcmlwdFZhbHVlOjpSZXNvbHZlTG9jYWwpOworICAgICAgICAgICAgUVZFUklG
WShwcm90LmlzT2JqZWN0KCkpOworICAgICAgICAgICAgUVZFUklGWShwcm90LnByb3BlcnR5KCJj
b25zdHJ1Y3RvciIpLnN0cmljdGx5RXF1YWxzKGZ1bikpOworICAgICAgICAgICAgUUVYUEVDVF9G
QUlMKCIiLCAiSlNDYWxsYmFja09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgZG9l
c24ndCByZXR1cm4gY29ycmVjdCBpbmZvcm1hdGlvbiB5ZXQiLCBDb250aW51ZSk7CisgICAgICAg
ICAgICBRQ09NUEFSRShmdW4ucHJvcGVydHlGbGFncygicHJvdG90eXBlIiksIFFTY3JpcHRWYWx1
ZTo6VW5kZWxldGFibGUpOworICAgICAgICAgICAgUUVYUEVDVF9GQUlMKCIiLCAiV2ViS2l0IGJ1
ZzogNDA2MTMgKFRoZSBKU09iamVjdFNldFByb3BlcnR5IGRvZXNuJ3Qgb3ZlcndyaXRlIHByb3Bl
cnR5IGZsYWdzKSIsIENvbnRpbnVlKTsKKyAgICAgICAgICAgIFFDT01QQVJFKHByb3QucHJvcGVy
dHlGbGFncygiY29uc3RydWN0b3IiKSwgUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzKFFTY3Jp
cHRWYWx1ZTo6VW5kZWxldGFibGUgfCBRU2NyaXB0VmFsdWU6OlNraXBJbkVudW1lcmF0aW9uKSk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gcHJvdG90eXBlIHNob3VsZCBiZSBGdW5jdGlvbi5wcm90
b3R5cGUKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlwZSgpLmlzVmFsaWQoKSwgdHJ1ZSk7
CisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm90b3R5cGUoKS5pc0Z1bmN0aW9uKCksIHRydWUpOwor
ICAgICAgICBRQ09NUEFSRShmdW4ucHJvdG90eXBlKCkuc3RyaWN0bHlFcXVhbHMoZW5nLmV2YWx1
YXRlKCJGdW5jdGlvbi5wcm90b3R5cGUiKSksIHRydWUpOworCisgICAgICAgIFFDT01QQVJFKGZ1
bi5jYWxsKCkuaXNOdWxsKCksIHRydWUpOworICAgICAgICAvLyBRQ09NUEFSRShmdW4uY29uc3Ry
dWN0KCkuaXNPYmplY3QoKSwgdHJ1ZSk7CisgICAgfQorICAgIC8vIHRoZSBvdmVybG9hZCB0aGF0
IHRha2VzIGFuIGV4dHJhIGFyZ3VtZW50CisgICAgeworICAgICAgICBpbnQgZXhwZWN0ZWRSZXN1
bHQgPSA0MjsKKyAgICAgICAgUVNjcmlwdFZhbHVlIGZ1biA9IGVuZy5uZXdGdW5jdGlvbihteUZ1
bmN0aW9uV2l0aEFyZywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJmV4cGVjdGVkUmVzdWx0KSk7
CisgICAgICAgIFFWRVJJRlkoZnVuLmlzRnVuY3Rpb24oKSk7CisgICAgICAgIC8vIFFDT01QQVJF
KGZ1bi5zY3JpcHRDbGFzcygpLCAoUVNjcmlwdENsYXNzKikwKTsKKyAgICAgICAgLy8gYSBwcm90
b3R5cGUgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZAorICAgICAgICB7Cisg
ICAgICAgICAgICBRU2NyaXB0VmFsdWUgcHJvdCA9IGZ1bi5wcm9wZXJ0eSgicHJvdG90eXBlIiwg
UVNjcmlwdFZhbHVlOjpSZXNvbHZlTG9jYWwpOworICAgICAgICAgICAgUVZFUklGWShwcm90Lmlz
T2JqZWN0KCkpOworICAgICAgICAgICAgUVZFUklGWShwcm90LnByb3BlcnR5KCJjb25zdHJ1Y3Rv
ciIpLnN0cmljdGx5RXF1YWxzKGZ1bikpOworICAgICAgICAgICAgUUVYUEVDVF9GQUlMKCIiLCAi
SlNDYWxsYmFja09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgZG9lc24ndCByZXR1
cm4gY29ycmVjdCBpbmZvcm1hdGlvbiB5ZXQiLCBDb250aW51ZSk7CisgICAgICAgICAgICBRQ09N
UEFSRShmdW4ucHJvcGVydHlGbGFncygicHJvdG90eXBlIiksIFFTY3JpcHRWYWx1ZTo6VW5kZWxl
dGFibGUpOworICAgICAgICAgICAgUUVYUEVDVF9GQUlMKCIiLCAiV2ViS2l0IGJ1ZzogNDA2MTMg
KFRoZSBKU09iamVjdFNldFByb3BlcnR5IGRvZXNuJ3Qgb3ZlcndyaXRlIHByb3BlcnR5IGZsYWdz
KSIsIENvbnRpbnVlKTsKKyAgICAgICAgICAgIFFDT01QQVJFKHByb3QucHJvcGVydHlGbGFncygi
Y29uc3RydWN0b3IiKSwgUVNjcmlwdFZhbHVlOjpQcm9wZXJ0eUZsYWdzKFFTY3JpcHRWYWx1ZTo6
VW5kZWxldGFibGUgfCBRU2NyaXB0VmFsdWU6OlNraXBJbkVudW1lcmF0aW9uKSk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gcHJvdG90eXBlIHNob3VsZCBiZSBGdW5jdGlvbi5wcm90b3R5cGUKKyAg
ICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlwZSgpLmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAg
IFFDT01QQVJFKGZ1bi5wcm90b3R5cGUoKS5pc0Z1bmN0aW9uKCksIHRydWUpOworICAgICAgICBR
Q09NUEFSRShmdW4ucHJvdG90eXBlKCkuc3RyaWN0bHlFcXVhbHMoZW5nLmV2YWx1YXRlKCJGdW5j
dGlvbi5wcm90b3R5cGUiKSksIHRydWUpOworCisgICAgICAgIFFTY3JpcHRWYWx1ZSByZXN1bHQg
PSBmdW4uY2FsbCgpOworICAgICAgICBRQ09NUEFSRShyZXN1bHQuaXNOdW1iZXIoKSwgdHJ1ZSk7
CisgICAgICAgIFFDT01QQVJFKHJlc3VsdC50b0ludDMyKCksIGV4cGVjdGVkUmVzdWx0KTsKKyAg
ICB9CisgICAgLy8gdGhlIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBwcm90b3R5cGUKKyAgICB7Cisg
ICAgICAgIFFTY3JpcHRWYWx1ZSBwcm90byA9IGVuZy5uZXdPYmplY3QoKTsKKyAgICAgICAgUVNj
cmlwdFZhbHVlIGZ1biA9IGVuZy5uZXdGdW5jdGlvbihteUZ1bmN0aW9uLCBwcm90byk7CisgICAg
ICAgIFFDT01QQVJFKGZ1bi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShmdW4u
aXNGdW5jdGlvbigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzT2JqZWN0KCksIHRy
dWUpOworICAgICAgICAvLyBpbnRlcm5hbCBwcm90b3R5cGUgc2hvdWxkIGJlIEZ1bmN0aW9uLnBy
b3RvdHlwZQorICAgICAgICBRQ09NUEFSRShmdW4ucHJvdG90eXBlKCkuaXNWYWxpZCgpLCB0cnVl
KTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLnByb3RvdHlwZSgpLmlzRnVuY3Rpb24oKSwgdHJ1ZSk7
CisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm90b3R5cGUoKS5zdHJpY3RseUVxdWFscyhlbmcuZXZh
bHVhdGUoIkZ1bmN0aW9uLnByb3RvdHlwZSIpKSwgdHJ1ZSk7CisgICAgICAgIC8vIHB1YmxpYyBw
cm90b3R5cGUgc2hvdWxkIGJlIHRoZSBvbmUgd2UgcGFzc2VkCisgICAgICAgIFFDT01QQVJFKGZ1
bi5wcm9wZXJ0eSgicHJvdG90eXBlIikuc3RyaWN0bHlFcXVhbHMocHJvdG8pLCB0cnVlKTsKKyAg
ICAgICAgUUVYUEVDVF9GQUlMKCIiLCAiSlNDYWxsYmFja09iamVjdDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKCkgZG9lc24ndCByZXR1cm4gY29ycmVjdCBpbmZvcm1hdGlvbiB5ZXQiLCBDb250
aW51ZSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5wcm9wZXJ0eUZsYWdzKCJwcm90b3R5cGUiKSwg
UVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSk7CisgICAgICAgIFFDT01QQVJFKHByb3RvLnByb3Bl
cnR5KCJjb25zdHJ1Y3RvciIpLnN0cmljdGx5RXF1YWxzKGZ1biksIHRydWUpOworICAgICAgICBR
RVhQRUNUX0ZBSUwoIiIsICJXZWJLaXQgYnVnOiA0MDYxMyAoVGhlIEpTT2JqZWN0U2V0UHJvcGVy
dHkgZG9lc24ndCBvdmVyd3JpdGUgcHJvcGVydHkgZmxhZ3MpIiwgQ29udGludWUpOworICAgICAg
ICBRQ09NUEFSRShwcm90by5wcm9wZXJ0eUZsYWdzKCJjb25zdHJ1Y3RvciIpLCBRU2NyaXB0VmFs
dWU6OlByb3BlcnR5RmxhZ3MoUVNjcmlwdFZhbHVlOjpVbmRlbGV0YWJsZSB8IFFTY3JpcHRWYWx1
ZTo6U2tpcEluRW51bWVyYXRpb24pKTsKKworICAgICAgICBRQ09NUEFSRShmdW4uY2FsbCgpLmlz
TnVsbCgpLCB0cnVlKTsKKyAgICAgICAgLy8gUUNPTVBBUkUoZnVuLmNvbnN0cnVjdCgpLmlzT2Jq
ZWN0KCksIHRydWUpOworICAgIH0KKyAgICAvLyB3aGV0aGVyIHRoZSByZXR1cm4gdmFsdWUgaXMg
Y29ycmVjdAorICAgIHsKKyAgICAgICAgUVNjcmlwdFZhbHVlIGZ1biA9IGVuZy5uZXdGdW5jdGlv
bihteUZ1bmN0aW9uVGhhdFJldHVybnMpOworICAgICAgICBRQ09NUEFSRShmdW4uaXNWYWxpZCgp
LCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzRnVuY3Rpb24oKSwgdHJ1ZSk7CisgICAg
ICAgIFFDT01QQVJFKGZ1bi5pc09iamVjdCgpLCB0cnVlKTsKKworICAgICAgICBRU2NyaXB0VmFs
dWUgcmVzdWx0ID0gZnVuLmNhbGwoKTsKKyAgICAgICAgUUNPTVBBUkUocmVzdWx0LmlzTnVtYmVy
KCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShyZXN1bHQudG9JbnQzMigpLCA0Mik7CisgICAg
fQorICAgIC8vIHdoZXRoZXIgdGhlIHJldHVybiB2YWx1ZSBpcyBhc3NpZ25lZCB0byB0aGUgY29y
cmVjdCBlbmdpbmUKKyAgICB7CisgICAgICAgIFFTY3JpcHRWYWx1ZSBmdW4gPSBlbmcubmV3RnVu
Y3Rpb24obXlGdW5jdGlvblRoYXRSZXR1cm5zV2l0aG91dEVuZ2luZSk7CisgICAgICAgIFFDT01Q
QVJFKGZ1bi5pc1ZhbGlkKCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShmdW4uaXNGdW5jdGlv
bigpLCB0cnVlKTsKKyAgICAgICAgUUNPTVBBUkUoZnVuLmlzT2JqZWN0KCksIHRydWUpOworCisg
ICAgICAgIFFTY3JpcHRWYWx1ZSByZXN1bHQgPSBmdW4uY2FsbCgpOworICAgICAgICBRQ09NUEFS
RShyZXN1bHQuZW5naW5lKCksICZlbmcpOworICAgICAgICBRQ09NUEFSRShyZXN1bHQuaXNOdW1i
ZXIoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJFKHJlc3VsdC50b0ludDMyKCksIDEwMjQpOwor
ICAgIH0KKyAgICAvLyB3aGV0aGVyIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIHdoZW4g
cmV0dXJuaW5nIGEgdmFsdWUgd2l0aCB3cm9uZyBlbmdpbmUKKyAgICB7CisgICAgICAgIFFTY3Jp
cHRFbmdpbmUgd3JvbmdFbmdpbmU7CisKKyAgICAgICAgUVNjcmlwdFZhbHVlIGZ1biA9IGVuZy5u
ZXdGdW5jdGlvbihteUZ1bmN0aW9uVGhhdFJldHVybnNXcm9uZ0VuZ2luZSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oJndyb25nRW5naW5lKSk7CisgICAgICAgIFFDT01QQVJFKGZ1bi5pc1ZhbGlk
KCksIHRydWUpOworICAgICAgICBRQ09NUEFSRShmdW4uaXNGdW5jdGlvbigpLCB0cnVlKTsKKyAg
ICAgICAgUUNPTVBBUkUoZnVuLmlzT2JqZWN0KCksIHRydWUpOworCisgICAgICAgIFFUZXN0Ojpp
Z25vcmVNZXNzYWdlKFF0V2FybmluZ01zZywgIlZhbHVlIGZyb20gZGlmZmVyZW50IGVuZ2luZSBy
ZXR1cm5lZCBmcm9tIG5hdGl2ZSBmdW5jdGlvbiwgcmV0dXJuaW5nIHVuZGVmaW5lZCB2YWx1ZSBp
bnN0ZWFkLiIpOworICAgICAgICBRU2NyaXB0VmFsdWUgcmVzdWx0ID0gZnVuLmNhbGwoKTsKKyAg
ICAgICAgUUNPTVBBUkUocmVzdWx0LmlzVmFsaWQoKSwgdHJ1ZSk7CisgICAgICAgIFFDT01QQVJF
KHJlc3VsdC5pc1VuZGVmaW5lZCgpLCB0cnVlKTsKKyAgICB9Cit9CisKIHZvaWQgdHN0X1FTY3Jp
cHRFbmdpbmU6Om5ld09iamVjdCgpCiB7CiAgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7Ci0tIAox
LjcuMS4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>