<?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>146060</bug_id>
          
          <creation_ts>2015-06-17 06:27:54 -0700</creation_ts>
          <short_desc>Bindings generator should generate code to catch exception and reject promises for Promise-based APIs</short_desc>
          <delta_ts>2015-06-19 10:49:43 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1102534</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-17 06:27:54 -0700</bug_when>
    <thetext>A promise returning function is not expected to throw exception.
In case of argument mismatch or other cases, the exceptions should be transmitted to the application by rejecting the promise.
The only case the function should throw is if the function is called on a this value which does not have the right type.
The binding generator should handle these cases properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102547</commentid>
    <comment_count>1</comment_count>
      <attachid>255017</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-17 08:16:14 -0700</bug_when>
    <thetext>Created attachment 255017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102675</commentid>
    <comment_count>2</comment_count>
      <attachid>255017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-17 15:27:26 -0700</bug_when>
    <thetext>Comment on attachment 255017
Patch

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

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:41
&gt; +    static void rejectPromiseWithException(JSC::ExecState*, JSDOMGlobalObject*, JSC::JSPromiseDeferred*);

I think all the arguments should be references.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2799
&gt; +                push(@implContent, &quot;static inline EncodedJSValue ${functionName}Promise(ExecState*, &quot; . $className . &quot;*, JSPromiseDeferred*);\n&quot;);
&gt; +                push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${functionName}(ExecState* exec)\n&quot;);
&gt; +                push(@implContent, &quot;{\n&quot;);
&gt; +
&gt; +                GenerateFunctionCastedThis($interface, $interfaceName, $className, $function);
&gt; +
&gt; +                push(@implContent, &quot;    JSPromiseDeferred* promiseDeferred = JSPromiseDeferred::create(exec, castedThis-&gt;globalObject());\n&quot;);
&gt; +                push(@implContent, &quot;    ${functionName}Promise(exec, castedThis, promiseDeferred);\n&quot;);
&gt; +
&gt; +                push(@implContent, &quot;    if (exec-&gt;hadException())\n&quot;);
&gt; +                push(@implContent, &quot;        DeferredWrapper::rejectPromiseWithException(exec, castedThis-&gt;globalObject(), promiseDeferred);\n&quot;);
&gt; +                push(@implContent, &quot;    ASSERT(!exec-&gt;hadException());\n&quot;);
&gt; +                push(@implContent, &quot;    return JSValue::encode(promiseDeferred-&gt;promise());\n&quot;);
&gt; +                push(@implContent, &quot;}\n&quot;);

Normally we try to make the generated code as small as possible, using normal C++ programming for everything we can. We’ve strayed from that a bit, but it’s important to not load the total amount of code this generates. Can we use a helper function or function template to make he actual generated code as small as possible? It seems that once we call xxxPromise we do nothing more that depends on the arguments. I’d like to see this entire thing be a one line invocation of a function template that is in JSDOMPromise.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102889</commentid>
    <comment_count>3</comment_count>
      <attachid>255109</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-18 05:48:54 -0700</bug_when>
    <thetext>Created attachment 255109
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102890</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-06-18 05:51:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 255017 [details]
&gt; Patch
&gt; 
&gt; nothing more that depends on the arguments. I’d like to see this entire
&gt; thing be a one line invocation of a function template that is in
&gt; JSDOMPromise.h.

Thanks for the idea.
Latest patch tries to integrate some of this.
Let me know if you would like further adjustment.
If not, I will cq+ it tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103202</commentid>
    <comment_count>5</comment_count>
      <attachid>255109</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-19 00:34:19 -0700</bug_when>
    <thetext>Comment on attachment 255109
Patch for landing

Clearing flags on attachment: 255109

Committed r185739: &lt;http://trac.webkit.org/changeset/185739&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103203</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-19 00:34:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103293</commentid>
    <comment_count>7</comment_count>
      <attachid>255109</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-19 10:49:43 -0700</bug_when>
    <thetext>Comment on attachment 255109
Patch for landing

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

Looks really good.

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:62
&gt; +template&lt;class JSClassName&gt;

The type here is the JavaScript class, not the JavaScript class name. I suggest the name WrapperClass here instead of JSClassName. Also, we almost always use typename rather than class in templates, although I’m not entirely sure why.

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:63
&gt; +inline JSC::JSValue callPromiseFunction(JSC::ExecState&amp; state, JSClassName&amp; jsObject, JSC::EncodedJSValue promiseFunction(JSC::ExecState*, JSClassName*, JSC::JSPromiseDeferred*))

A typical name used in bindings for what we are calling jsObject here is “wrapper”</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255017</attachid>
            <date>2015-06-17 08:16:14 -0700</date>
            <delta_ts>2015-06-18 05:48:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146060-20150617171536.patch</filename>
            <type>text/plain</type>
            <size>19807</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1NjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQ5ZjkxMjkzYzkwZWM5
ZDdiMDg2M2JmODk2ZDk5NzBiYWQ3MTJjNS4uMjJmMmU1ZDcxMzRlYjdlMTg4YmM2YzYwMzU0NzA5
ZGQ1ZjY1MjdhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE1LTA2LTE3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgQmluZGlu
Z3MgZ2VuZXJhdG9yIHNob3VsZCBnZW5lcmF0ZSBjb2RlIHRvIGNhdGNoIGV4Y2VwdGlvbiBhbmQg
cmVqZWN0IHByb21pc2VzIGZvciBQcm9taXNlLWJhc2VkIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjA2MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBiaW5kaW5nIGdlbmVyYXRvciBzcGxp
dHMgdGhlIGZ1bmN0aW9uIHRoYXQgYmluZHMgSlMgdG8gdGhlIERPTSBjbGFzcyBpbXBsZW1lbnRh
dGlvbiBpbiB0d28gZm9yIGZ1bmN0aW9ucyByZXR1cm5pbmcgcHJvbWlzZS4KKyAgICAgICAgVGhl
IGZpcnN0IGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBKUywgaXMgcmVzcG9uc2libGUgb2YgY2FzdGlu
ZyB0aGlzIHRvIHRoZSBleHBlY3RlZCBKU1hYWCBjbGFzcy4KKyAgICAgICAgSWYgY2FzdGluZyBm
YWlscywgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCBpdCBjYWxscyB0aGUgc2Vj
b25kIGZ1bmN0aW9uLgorICAgICAgICBBZnRlciBjYWxsaW5nIHRoZSBzZWNvbmQgZnVuY3Rpb24s
IGl0IGNoZWNrcyB3aGV0aGVyIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQsIGluIHdoaWNoIGNhc2Ug
aXQgcmV0dXJucyBhIHJlamVjdGVkIHByb21pc2UuCisgICAgICAgIFRoZSBzZWNvbmQgZnVuY3Rp
b24gaXMgcmVzcG9uc2libGUgb2YgYXJndW1lbnQgY29udmVyc2lvbiBhbmQgY2FsbGluZyB0aGUg
RE9NIGNsYXNzIGZ1bmN0aW9uLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhwZWN0YXRpb25zIGFu
ZCBBdWRpb0NvbnRleHQgcHJvbWlzZSBzdGlsbCB3b3JraW5nLgorICAgICAgICBBIHRlc3QgY2Fz
ZSBpcyBhZGRlZCBmb3IgYSBwcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0YWtpbmcgYSB0eXBl
ZCBhcmd1bWVudCBhcyBpbnB1dCAoaWYgYXJndW1lbnQgdmFsdWUgY2Fubm90IGJlIHR5cGVkLCB0
aGUgcHJvbWlzZSBpcyByZWplY3RlZCkuCisgICAgICAgIEEgc2Vjb25kIHRlc3QgY2FzZSBpcyBh
IHByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9uIHRoYXQgY2FuIHJhaXNlIGFuIGV4Y2VwdGlvbi4g
SW4gdGhhdCBjYXNlIHRoZSBET01FeGNlcHRpb24gaXMgdXNlZCBhcyByZWplY3Rpb24gdmFsdWUu
CisKKyAgICAgICAgQXMgY2FuIGJlIHNlZW4gZnJvbSBnZW5lcmF0ZWQgY29kZSwgdGhpcyBnZW5l
cmFsaXplZCBjb2RlIGFkZHMgYSBtYW5kYXRvcnkgY2hlY2sgKGlzIHRoZXJlIGFuIGV4Y2VwdGlv
bj8pIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICBUaGlzIGNoZWNrIGlzIGRv
bmUgZXZlbiBpbiBjYXNlcyB3ZSBrbm93IHRoZXJlIHdpbGwgYmUgbm8gZXhjZXB0aW9uLgorICAg
ICAgICBUaGlzIG1heSBiZSBjb3ZlcmVkIGJ5IGFub3RoZXIgcGF0Y2ggaWYgdGhpcyBvcHRpbWl6
YXRpb24gaXMgdGhvdWdodCB1c2VmdWwgZW5vdWdoLgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVq
ZWN0UHJvbWlzZVdpdGhFeGNlcHRpb24pOiBVdGlsaXR5IG1ldGhvZCBmb3IgdGhlIGJpbmRpbmcg
Y29kZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMpOiBFeHRy
YWN0ZWQgZnJvbSBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsIHRvIHJldXNlIGl0
IGluIGNhc2Ugb2YgcHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zLgorICAgICAgICAoR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNr
SW1wbGVtZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0
aEZsb2F0QXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRQcm9taXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDoKKwogMjAxNS0wNi0xNyAgWGFiaWVy
IFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxl
dCA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgW1N0cmVhbXMgQVBJXSBS
ZWFkYWJsZUpTU3RyZWFtIHNob3VsZCBoYW5kbGUgcHJvbWlzZXMgcmV0dXJuZWQgYnkgSlMgc291
cmNlIHB1bGwgY2FsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NUHJvbWlzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21p
c2UuY3BwCmluZGV4IGRmNmJjYjEzMDcwMzhkYTQyMTIwYTVhM2ZkYjZiNmQ2NDAwMzFiOTkuLmJk
MTI4NGU2MzMyMmJmNzlhNzFkODZlZGYwMWFkOGIxNTNkMjE2ODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVO
QUJMRShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlIDxy
dW50aW1lL0V4Y2VwdGlvbi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC02Miw2ICs2
MywxNSBAQCB2b2lkIERlZmVycmVkV3JhcHBlcjo6Y2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSYgZXhl
YywgSlNWYWx1ZSBmdW5jdGlvbiwgSlNWYWx1ZSByZQogICAgIG1fZGVmZXJyZWQuY2xlYXIoKTsK
IH0KIAordm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCkKK3sKKyAgICBBU1NFUlQoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIGVycm9yID0gc3RhdGUtPmV4Y2VwdGlvbigpLT52
YWx1ZSgpOworICAgIHN0YXRlLT5jbGVhckV4Y2VwdGlvbigpOworCisgICAgRGVmZXJyZWRXcmFw
cGVyKHN0YXRlLCBnbG9iYWxPYmplY3QsIHByb21pc2VEZWZlcnJlZCkucmVqZWN0KGVycm9yKTsK
K30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFBST01JU0VTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVByb21pc2UuaAppbmRleCAyMWM5ZjgyN2YwYzRhZmM5MTczMzg2YTcwYjJj
Yjg2ZjdjOTYwNGI0Li4zYWFkNjI1Yzk5NTExYTk4NWIwYmI1Mjc3NmQ3M2NjYWFkNzhiZGYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaApAQCAtMzgsNiArMzgs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERlZmVycmVkV3JhcHBlciB7CiBwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgcmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqKTsKKwog
ICAgIERlZmVycmVkV3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
SlNDOjpKU1Byb21pc2VEZWZlcnJlZCopOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgUmVzb2x2ZVJl
c3VsdFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCmluZGV4IGFiZWMyZWU1MDIzZTBiYzZiZGJmNDMwZjljOGM1Zjg1MTY4OTdi
NjYuLjU1ZTExMmE3YWZmZTVhOWZiNmU5N2NlOGIxMTRmOGJmNDBmZTBhZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0y
NzgwLDcgKzI3ODAsMjkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAg
ICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEFzIn0gfHwgJGNvZGVHZW5lcmF0b3It
PldLX2xjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOwogCi0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlv
bk5hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOworICAgICAgICAgICAgaWYgKElzUmV0dXJuaW5n
UHJvbWlzZSgkZnVuY3Rpb24pICYmICEkaXNDdXN0b20pIHsKKyAgICAgICAgICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiSlNET01Qcm9taXNlLmgiKTsKKworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFt
ZX1Qcm9taXNlKEV4ZWNTdGF0ZSosICIgLiAkY2xhc3NOYW1lIC4gIiosIEpTUHJvbWlzZURlZmVy
cmVkKik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisKKyAgICAgICAg
ICAgICAgICBHZW5lcmF0ZUZ1bmN0aW9uQ2FzdGVkVGhpcygkaW50ZXJmYWNlLCAkaW50ZXJmYWNl
TmFtZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9uKTsKKworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1By
b21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7ZnVuY3Rpb25O
YW1lfVByb21pc2UoZXhlYywgY2FzdGVkVGhpcywgcHJvbWlzZURlZmVycmVkKTtcbiIpOworCisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IERlZmVycmVkV3JhcHBlcjo6cmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb24oZXhlYywgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCkpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9u
TmFtZX1Qcm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgIiAuICRjbGFzc05hbWUgLiAiKiBjYXN0ZWRU
aGlzLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkKVxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0
ZSogZXhlYylcbiIpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwogCiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9FcnJv
ci5oPiJ9ID0gMTsKQEAgLTI3OTksMjMgKzI4MjEsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25D
YWxsKCRmdW5jdGlvbiwgJGZ1bmN0aW9uU3RyaW5nLCAiICAgICIsICRzdmdQcm9wZXJ0eVR5cGUs
ICRpbnRlcmZhY2VOYW1lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tUHJveHlUb0pTT2JqZWN0In0pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHRvJHtjbGFzc05hbWV9KGV4
ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7XG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSlcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2lmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiV29ya2VyR2xvYmFs
U2NvcGUifSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAk
Y2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+dGhpc1ZhbHVlKCku
dG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9ICIgLiBHZXRDYXN0aW5nSGVs
cGVyRm9yVGhpc09iamVjdCgkaW50ZXJmYWNlKSAuICIodGhpc1ZhbHVlKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICBteSAkZG9tRnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsIFwiJGlu
dGVyZmFjZU5hbWVcIiwgXCIkZG9tRnVuY3Rpb25OYW1lXCIpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAke2NsYXNzTmFtZX06OmluZm8oKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICBHZW5lcmF0ZUZ1bmN0aW9uQ2FzdGVkVGhpcygkaW50ZXJmYWNlLCAk
aW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9uKSBpZiBub3QgKElzUmV0dXJuaW5n
UHJvbWlzZSgkZnVuY3Rpb24pICYmICEkaXNDdXN0b20pOwogCiAgICAgICAgICAgICAgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5In0gYW5kCiAg
ICAgICAgICAgICAgICAgICAgICEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkRvTm90Q2hlY2tTZWN1cml0eSJ9KSB7CkBAIC0zMTExLDYgKzMxMTcsMzEgQEAgRU5E
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogfQogCitzdWIgR2VuZXJhdGVGdW5jdGlvbkNh
c3RlZFRoaXMKK3sKKyAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisgICAgbXkgJGludGVyZmFj
ZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJGZ1bmN0
aW9uID0gc2hpZnQ7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21Qcm94eVRvSlNPYmplY3QifSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+dGhpc1ZhbHVl
KCkudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtc
biIpOworICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJXb3Jr
ZXJHbG9iYWxTY29wZSJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFz
c05hbWUqIGNhc3RlZFRoaXMgPSB0byR7Y2xhc3NOYW1lfShleGVjLT50aGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgTm90U3RyaWN0TW9kZSkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpXG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gIiAuIEdldENhc3RpbmdIZWxwZXJGb3JU
aGlzT2JqZWN0KCRpbnRlcmZhY2UpIC4gIih0aGlzVmFsdWUpO1xuIik7CisgICAgICAgIG15ICRk
b21GdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSlcbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqZXhlYywgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRkb21GdW5jdGlvbk5hbWVcIik7XG4iKTsK
KyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtcbiIpOworfQorCiBzdWIg
R2VuZXJhdGVDYWxsV2l0aAogewogICAgIG15ICRjYWxsV2l0aCA9IHNoaWZ0OwpAQCAtMzU5NSw3
ICszNjI2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAg
IG15ICRub25kZXRlcm1pbmlzdGljID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOb25kZXRlcm1pbmlzdGljIn07CiAgICAgbXkgJHJhaXNlc0V4Y2VwdGlvbiA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0
aW9uIn07CiAKLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgInZvaWQiKSB7
CisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlIGVxICJ2b2lkIiB8fCBJc1JldHVy
bmluZ1Byb21pc2UoJGZ1bmN0aW9uKSkgewogICAgICAgICBpZiAoJG5vbmRldGVybWluaXN0aWMp
IHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cmVwbGF5L0lucHV0Q3Vyc29yLmg+
IiwgIldFQl9SRVBMQVkiKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVO
QUJMRShXRUJfUkVQTEFZKVxuIik7CkBAIC0zNjU2LDE3ICszNjg3LDkgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIjZWxzZVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAu
ICJyZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAk
aW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIik7Ci0gICAgICAgIH0gZWxz
aWYgKElzUmV0dXJuaW5nUHJvbWlzZSgkZnVuY3Rpb24pKSB7Ci0gICAgICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiSlNET01Qcm9taXNlLmgiKTsKLQotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRpbmRlbnQgLiAiSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpT
UHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICRmdW5jdGlv
blN0cmluZyAuICI7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50
IC4gIkpTVmFsdWUgcmVzdWx0ID0gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7XG4iKTsKLQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAiSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLCAxLCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAi
O1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgIyBGSVhNRTogSW4gY2FzZSBvZiBJc1JldHVybmlu
Z1Byb21pc2UoJGZ1bmN0aW9uKSwgdGhlIGZ1bmN0aW9uIHNob3VsZCBub3QgdGhyb3cuIEV4Y2Vw
dGlvbiBzaG91bGQgYmUgdXNlZCB0byByZWplY3QgdGhlIHByb21pc2UgY2FsbGJhY2suCiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpO1xuIikgaWYgJHJhaXNlc0V4Y2VwdGlvbjsKIAogICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCAiU2NyaXB0U3RhdGUiKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAppbmRleCA3MWIxMzQwNDc3ZmVhM2MxNmRlYTBjMjgzMjAzNjI3YjlkOWE3MmI5Li5lMzU4
MTExOTJhN2RiMzZiY2U4ZGNjZWFiY2MyZDZlMzFiYTA3ZDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMTU2
LDYgKzE1Niw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRo
b2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldp
dGhGbG9hdEFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTY1
MSw2ICs2NTMsOCBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAidmFyaWFkaWNOb2RlTWV0aG9kIiwgSlNDOjpGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QpLCAoaW50cHRyX3Qp
ICgyKSB9LAogICAgIHsgImFueSIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
QW55KSwgKGludHB0cl90KSAoMikgfSwKICAgICB7ICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uIiwgSlND
OjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uKSwgKGlu
dHB0cl90KSAoMCkgfSwKKyAgICB7ICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1l
bnQiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoRmxvYXRBcmd1bWVudCksIChpbnRwdHJfdCkgKDEpIH0sCisgICAgeyAidGVzdFByb21p
c2VGdW5jdGlvbldpdGhFeGNlcHRpb24iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKSwgKGludHB0cl90KSAoMCkgfSwK
IH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRl
c3RPYmplY3RQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTVGVzdE9ialByb3RvdHlwZSkgfTsKQEAgLTQ0MjYsNiArNDQzMCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkoRXhlY1N0YXRl
KiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
K3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZUZ1bmN0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1Byb21p
c2VEZWZlcnJlZCopOwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CkBAIC00NDMzLDExICs0NDM4
LDc2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uKEV4ZWNTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAidGVzdFByb21pc2VGdW5jdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpT
UHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21p
c2UoZXhlYywgY2FzdGVkVGhpcywgcHJvbWlzZURlZmVycmVkKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIERlZmVycmVkV3JhcHBlcjo6cmVqZWN0UHJvbWlzZVdpdGhF
eGNlcHRpb24oZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJl
ZCk7CisgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1
bmN0aW9uUHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCkKK3sKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbihEZWZlcnJlZFdy
YXBwZXIoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1l
bnRQcm9taXNlKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTUHJvbWlzZURlZmVycmVkKik7CitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1l
bnQiKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7
CisgICAganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZs
b2F0QXJndW1lbnRQcm9taXNlKGV4ZWMsIGNhc3RlZFRoaXMsIHByb21pc2VEZWZlcnJlZCk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBEZWZlcnJlZFdyYXBwZXI6OnJl
amVjdFByb21pc2VXaXRoRXhjZXB0aW9uKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpOworICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCkpOwor
fQorCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VE
ZWZlcnJlZCkKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOworICAgIGlm
IChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgZmxvYXQgYSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyk7CisgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoYSkpIHsKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIGltcGwudGVzdFByb21pc2VG
dW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KGEsIERlZmVycmVkV3JhcHBlcihleGVjLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhj
ZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1Byb21pc2VEZWZlcnJlZCop
OworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbiIp
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAg
ICBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0
aW9uUHJvbWlzZShleGVjLCBjYXN0ZWRUaGlzLCBwcm9taXNlRGVmZXJyZWQpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3RQcm9t
aXNlV2l0aEV4Y2VwdGlvbihleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKKyAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpKTsKK30KKworc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCkKK3sK
KyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oRGVmZXJy
ZWRXcmFwcGVyKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJy
ZWQpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiB2b2lkIEpTVGVzdE9iajo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDQyOGY0MDc0
NGQwYjYxMjU2NTdjZDFjZmU1MjQ2ZDVhNDg0ZDE0YWIuLjIyNmQwMDY1YmVmNTU5MWRjMmYzNzk0
ZmEwNDk5MzI2YjlhODU2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTI3Niw2ICsyNzYsOCBAQCBlbnVtIF9vcHRpb25hbCB7
ICIiLCAiT3B0aW9uYWxWYWx1ZTEiLCAiT3B0aW9uYWxWYWx1ZTIiLCAiT3B0aW9uYWxWYWx1ZTMi
IH07CiAKICAgICAvLyBQcm9taXNlIGZ1bmN0aW9uCiAgICAgUHJvbWlzZSB0ZXN0UHJvbWlzZUZ1
bmN0aW9uKCk7CisgICAgUHJvbWlzZSB0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1l
bnQoZmxvYXQgYSk7CisgICAgW1JhaXNlc0V4Y2VwdGlvbl0gUHJvbWlzZSB0ZXN0UHJvbWlzZUZ1
bmN0aW9uV2l0aEV4Y2VwdGlvbigpOwogfTsKIAogLy8gVGhlIGZvbGxvd2luZyBjb21tZW50IHNo
b3VsZCBub3QgZ2VuZXJhdGUgYW55IGNvZGUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255109</attachid>
            <date>2015-06-18 05:48:54 -0700</date>
            <delta_ts>2015-06-19 00:34:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-146060-20150618144815.patch</filename>
            <type>text/plain</type>
            <size>19004</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1Njk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJmOWFkNzEwMDNkNjcz
NWIyNDE3MWRhN2EzMGRhNTc1NGIyOTAwMy4uZDA2OGFkMDlhNjY1MGE4MzQ1MmM4NzBkNjgxYTdj
MzhjODExZDYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0IEBACiAyMDE1LTA2LTE4ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgQmluZGlu
Z3MgZ2VuZXJhdG9yIHNob3VsZCBnZW5lcmF0ZSBjb2RlIHRvIGNhdGNoIGV4Y2VwdGlvbiBhbmQg
cmVqZWN0IHByb21pc2VzIGZvciBQcm9taXNlLWJhc2VkIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjA2MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFRoZSBiaW5kaW5nIGdlbmVyYXRvciBzcGxpdHMg
dGhlIGZ1bmN0aW9uIHRoYXQgYmluZHMgSlMgdG8gdGhlIERPTSBjbGFzcyBpbXBsZW1lbnRhdGlv
biBpbiB0d28gZm9yIGZ1bmN0aW9ucyByZXR1cm5pbmcgcHJvbWlzZS4KKyAgICAgICAgVGhlIGZp
cnN0IGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBKUywgaXMgcmVzcG9uc2libGUgb2YgY2FzdGluZyB0
aGlzIHRvIHRoZSBleHBlY3RlZCBKU1hYWCBjbGFzcy4KKyAgICAgICAgSWYgY2FzdGluZyBmYWls
cywgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCBpdCBjYWxscyB0aGUgc2Vjb25k
IGZ1bmN0aW9uLgorICAgICAgICBBZnRlciBjYWxsaW5nIHRoZSBzZWNvbmQgZnVuY3Rpb24sIGl0
IGNoZWNrcyB3aGV0aGVyIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQsIGluIHdoaWNoIGNhc2UgaXQg
cmV0dXJucyBhIHJlamVjdGVkIHByb21pc2UuCisgICAgICAgIFRoZSBzZWNvbmQgZnVuY3Rpb24g
aXMgcmVzcG9uc2libGUgb2YgYXJndW1lbnQgY29udmVyc2lvbiBhbmQgY2FsbGluZyB0aGUgRE9N
IGNsYXNzIGZ1bmN0aW9uLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhwZWN0YXRpb25zIGFuZCBB
dWRpb0NvbnRleHQgcHJvbWlzZSBzdGlsbCB3b3JraW5nLgorICAgICAgICBBIHRlc3QgY2FzZSBp
cyBhZGRlZCBmb3IgYSBwcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0YWtpbmcgYSB0eXBlZCBh
cmd1bWVudCBhcyBpbnB1dCAoaWYgYXJndW1lbnQgdmFsdWUgY2Fubm90IGJlIHR5cGVkLCB0aGUg
cHJvbWlzZSBpcyByZWplY3RlZCkuCisgICAgICAgIEEgc2Vjb25kIHRlc3QgY2FzZSBpcyBhIHBy
b21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9uIHRoYXQgY2FuIHJhaXNlIGFuIGV4Y2VwdGlvbi4gSW4g
dGhhdCBjYXNlIHRoZSBET01FeGNlcHRpb24gaXMgdXNlZCBhcyByZWplY3Rpb24gdmFsdWUuCisK
KyAgICAgICAgQXMgY2FuIGJlIHNlZW4gZnJvbSBnZW5lcmF0ZWQgY29kZSwgdGhpcyBnZW5lcmFs
aXplZCBjb2RlIGFkZHMgYSBtYW5kYXRvcnkgY2hlY2sgKGlzIHRoZXJlIGFuIGV4Y2VwdGlvbj8p
IGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICBUaGlzIGNoZWNrIGlzIGRvbmUg
ZXZlbiBpbiBjYXNlcyB3ZSBrbm93IHRoZXJlIHdpbGwgYmUgbm8gZXhjZXB0aW9uLgorICAgICAg
ICBUaGlzIG1heSBiZSBjb3ZlcmVkIGJ5IGFub3RoZXIgcGF0Y2ggaWYgdGhpcyBvcHRpbWl6YXRp
b24gaXMgdGhvdWdodCB1c2VmdWwgZW5vdWdoLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2VXaXRoRXhjZXB0
aW9uSWZBbnkpOiBVdGlsaXR5IG1ldGhvZCBmb3IgdGhlIGJpbmRpbmcgY29kZS4KKyAgICAgICAg
KFdlYkNvcmU6OmNhbGxQcm9taXNlRnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAo
R2VuZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMpOiBFeHRyYWN0ZWQgZnJvbSBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uRnVuY3Rpb25DYWxsIHRvIHJldXNlIGl0IGluIGNhc2Ugb2YgcHJvbWlzZS1yZXR1
cm5pbmcgZnVuY3Rpb25zLgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9u
Q2FsbCk6CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOiBEZWxldGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvblByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEZsb2F0QXJndW1lbnRQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEV4Y2VwdGlvblByb21pc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbDoKKworMjAxNS0wNi0xOCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRA
Y3JmLmNhbm9uLmZyPgorCiAgICAgICAgIEdPYmplY3QgYW5kIE9iakMgYmluZGluZ3MgZ2VuZXJh
dG9yIHNob3VsZCBub3QgZ2VuZXJhdGUgY29kZSBmb3IgcHJvbWlzZS1iYXNlZCBBUElzCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYwNTkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKaW5kZXggZGY2YmNiMTMw
NzAzOGRhNDIxMjBhNWEzZmRiNmI2ZDY0MDAzMWI5OS4uOTY1NmUyMWVkYzdmYjI0NTM1MzdmYzY5
ODZkNTdhYzU4ODBmNTVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Qcm9taXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFBST01JU0VTKQogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTYyLDYgKzYzLDE3IEBAIHZvaWQgRGVmZXJyZWRX
cmFwcGVyOjpjYWxsRnVuY3Rpb24oRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uLCBK
U1ZhbHVlIHJlCiAgICAgbV9kZWZlcnJlZC5jbGVhcigpOwogfQogCit2b2lkIHJlamVjdFByb21p
c2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2VEZWZlcnJlZCYgcHJvbWlzZURlZmVycmVkKQor
eworICAgIGlmICghc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEpTVmFsdWUgZXJyb3IgPSBzdGF0ZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICBzdGF0ZS5j
bGVhckV4Y2VwdGlvbigpOworCisgICAgRGVmZXJyZWRXcmFwcGVyKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgJnByb21pc2VEZWZlcnJlZCkucmVqZWN0KGVycm9yKTsKK30KKwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFBST01JU0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21p
c2UuaAppbmRleCAyMWM5ZjgyN2YwYzRhZmM5MTczMzg2YTcwYjJjYjg2ZjdjOTYwNGI0Li4wOGRi
MjljYjdkYmFkYTUyNzYwZGJlYTQxNzU2ZTc4ZTIwM2Y3NjllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaApAQCAtNTcsNiArNTcsMTkgQEAgcHJpdmF0ZToKICAg
ICBKU0M6OlN0cm9uZzxKU0M6OkpTUHJvbWlzZURlZmVycmVkPiBtX2RlZmVycmVkOwogfTsKIAor
dm9pZCByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OkpTUHJvbWlzZURlZmVycmVkJik7CisKK3RlbXBsYXRlPGNs
YXNzIEpTQ2xhc3NOYW1lPgoraW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0aW9u
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDbGFzc05hbWUmIGpzT2JqZWN0LCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3NOYW1lKiwg
SlNDOjpKU1Byb21pc2VEZWZlcnJlZCopKQoreworICAgIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2VEZWZlcnJlZCA9IEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUs
IGpzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBwcm9taXNlRnVuY3Rpb24oJnN0YXRlLCAm
anNPYmplY3QsIHByb21pc2VEZWZlcnJlZCk7CisKKyAgICByZWplY3RQcm9taXNlV2l0aEV4Y2Vw
dGlvbklmQW55KHN0YXRlLCAqanNPYmplY3QuZ2xvYmFsT2JqZWN0KCksICpwcm9taXNlRGVmZXJy
ZWQpOworICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIHJldHVybiBwcm9t
aXNlRGVmZXJyZWQtPnByb21pc2UoKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFcnJvcj4KIGNsYXNzIERPTVByb21pc2UgewogcHVibGljOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBhYmVj
MmVlNTAyM2UwYmM2YmRiZjQzMGY5YzhjNWY4NTE2ODk3YjY2Li5iMGY4NWE0YWViODVhYTQ3ZDA1
MzViZjQ1NDExM2Y3NGQwYzQ3NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMjc4MCw3ICsyNzgwLDIzIEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVu
dGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW1wbGVtZW50ZWRBcyJ9IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5uYW1lKTsKIAotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMp
XG4iKTsKKyAgICAgICAgICAgIGlmIChJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKSAmJiAh
JGlzQ3VzdG9tKSB7CisgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NUHJv
bWlzZS5oIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqLCAi
IC4gJGNsYXNzTmFtZSAuICIqLCBKU1Byb21pc2VEZWZlcnJlZCopO1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7
ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOworCisgICAgICAgICAgICAgICAgR2VuZXJhdGVGdW5jdGlv
bkNhc3RlZFRoaXMoJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRmdW5j
dGlvbik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uKCpleGVjLCAqY2FzdGVkVGhpcywgJHtm
dW5jdGlvbk5hbWV9UHJvbWlzZSkpO1xuIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG5z
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2UoRXhlY1N0
YXRlKiBleGVjLCAiIC4gJGNsYXNzTmFtZSAuICIqIGNhc3RlZFRoaXMsIEpTUHJvbWlzZURlZmVy
cmVkKiBwcm9taXNlRGVmZXJyZWQpXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjKVxuIik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL0Vycm9yLmg+In0gPSAxOwpAQCAtMjc5
OSwyMyArMjgxNSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAg
ICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoJGZ1bmN0aW9uLCAkZnVu
Y3Rpb25TdHJpbmcsICIgICAgIiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGludGVyZmFjZU5hbWUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmpl
Y3QifSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xh
c3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+dGhpc1ZhbHVlKCkudG9U
aGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJXb3JrZXJHbG9iYWxTY29wZSJ9KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRo
aXMgPSB0byR7Y2xhc3NOYW1lfShleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgTm90U3Ry
aWN0TW9kZSkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
O1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xh
c3NOYW1lKiBjYXN0ZWRUaGlzID0gIiAuIEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRp
bnRlcmZhY2UpIC4gIih0aGlzVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRk
b21GdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSlcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRk
b21GdW5jdGlvbk5hbWVcIik7XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtcbiIpOworICAgICAgICAgICAgICAgIEdl
bmVyYXRlRnVuY3Rpb25DYXN0ZWRUaGlzKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xh
c3NOYW1lLCAkZnVuY3Rpb24pIGlmIG5vdCAoSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikg
JiYgISRpc0N1c3RvbSk7CiAKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHkifSBhbmQKICAgICAgICAgICAgICAgICAgICAg
ISRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja1Nl
Y3VyaXR5In0pIHsKQEAgLTMxMTEsNiArMzExMSwzMSBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9u
YWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FzdGVkVGhpcworeworICAgIG15
ICRpbnRlcmZhY2UgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAg
IG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKKyAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVByb3h5VG9KU09iamVj
dCJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3Rl
ZFRoaXMgPSB0byR7Y2xhc3NOYW1lfShleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgTm90
U3RyaWN0TW9kZSkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CisgICAgfSBlbHNpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ildvcmtlckdsb2JhbFNjb3BlIn0pIHsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9
IHRvJHtjbGFzc05hbWV9KGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RN
b2RlKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSlcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUq
IGNhc3RlZFRoaXMgPSAiIC4gR2V0Q2FzdGluZ0hlbHBlckZvclRoaXNPYmplY3QoJGludGVyZmFj
ZSkgLiAiKHRoaXNWYWx1ZSk7XG4iKTsKKyAgICAgICAgbXkgJGRvbUZ1bmN0aW9uTmFtZSA9ICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCBcIiRpbnRlcmZh
Y2VOYW1lXCIsIFwiJGRvbUZ1bmN0aW9uTmFtZVwiKTtcbiIpOworICAgIH0KKworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
JHtjbGFzc05hbWV9OjppbmZvKCkpO1xuIik7Cit9CisKIHN1YiBHZW5lcmF0ZUNhbGxXaXRoCiB7
CiAgICAgbXkgJGNhbGxXaXRoID0gc2hpZnQ7CkBAIC0zNTk1LDcgKzM2MjAsNyBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgbXkgJG5vbmRldGVybWluaXN0
aWMgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vbmRldGVy
bWluaXN0aWMifTsKICAgICBteSAkcmFpc2VzRXhjZXB0aW9uID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSYWlzZXNFeGNlcHRpb24ifTsKIAotICAgIGlmICgk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSBlcSAidm9pZCIpIHsKKyAgICBpZiAoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGUgZXEgInZvaWQiIHx8IElzUmV0dXJuaW5nUHJvbWlzZSgkZnVuY3Rp
b24pKSB7CiAgICAgICAgIGlmICgkbm9uZGV0ZXJtaW5pc3RpYykgewogICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIjxyZXBsYXkvSW5wdXRDdXJzb3IuaD4iLCAiV0VCX1JFUExBWSIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgRU5BQkxFKFdFQl9SRVBMQVkpXG4i
KTsKQEAgLTM2NTYsMTcgKzM2ODEsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0
aW9uQ2FsbCgpCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbHNlXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJlc3VsdCA9ICIgLiBOYXRp
dmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2VOYW1lLCAkZnVu
Y3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI2VuZGlmXG4iKTsKLSAgICAgICAgfSBlbHNpZiAoSXNSZXR1cm5pbmdQcm9t
aXNlKCRmdW5jdGlvbikpIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTVBy
b21pc2UuaCIpOwotCi0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJK
U1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNy
ZWF0ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gJGZ1bmN0aW9uU3RyaW5nIC4gIjtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiSlNWYWx1ZSByZXN1bHQg
PSBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTtcbiIpOwotCiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJKU1ZhbHVlIHJlc3VsdCA9
ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2VO
YW1lLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgfQot
ICAgICAgICAjIEZJWE1FOiBJbiBjYXNlIG9mIElzUmV0dXJuaW5nUHJvbWlzZSgkZnVuY3Rpb24p
LCB0aGUgZnVuY3Rpb24gc2hvdWxkIG5vdCB0aHJvdy4gRXhjZXB0aW9uIHNob3VsZCBiZSB1c2Vk
IHRvIHJlamVjdCB0aGUgcHJvbWlzZSBjYWxsYmFjay4KICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIgLiAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiAk
cmFpc2VzRXhjZXB0aW9uOwogCiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRB
dHRyaWJ1dGVDb250YWlucygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNhbGxXaXRoIn0sICJTY3JpcHRTdGF0ZSIpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDcxYjEzNDA0
NzdmZWEzYzE2ZGVhMGMyODMyMDM2MjdiOWQ5YTcyYjkuLjRhNzIyMzU2ZDY4NDFlMDhkYTlkMDk2
Y2JmYjllM2YzZWJiYWRmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xNTYsNiArMTU2LDggQEAgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFy
aWFkaWNEb3VibGVNZXRob2QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSop
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQW55KEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uKEpTQzo6
RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIApAQCAtNjUxLDYgKzY1Myw4IEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0K
ICAgICB7ICJ2YXJpYWRpY05vZGVNZXRob2QiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZCksIChpbnRwdHJfdCkgKDIpIH0sCiAgICAgeyAiYW55
IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkpLCAoaW50cHRyX3QpICgy
KSB9LAogICAgIHsgInRlc3RQcm9taXNlRnVuY3Rpb24iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJp
bnNpYywgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb24pLCAoaW50cHRyX3QpICgwKSB9LAorICAg
IHsgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudCIsIEpTQzo6RnVuY3Rpb24s
IE5vSW50cmluc2ljLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
KSwgKGludHB0cl90KSAoMSkgfSwKKyAgICB7ICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2Vw
dGlvbiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5j
dGlvbldpdGhFeGNlcHRpb24pLCAoaW50cHRyX3QpICgwKSB9LAogfTsKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90eXBl
KSB9OwpAQCAtNDQyNiw2ICs0NDMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25Q
cm9taXNlKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTUHJvbWlzZURlZmVycmVkKik7CiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKQEAgLTQ0MzMsMTEgKzQ0MzgsNjEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb24oRXhlY1MKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ0ZXN0UHJvbWlzZUZ1bmN0
aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RP
Ymo6OmluZm8oKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0
aW9uKCpleGVjLCAqY2FzdGVkVGhpcywganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uUHJvbWlzZSkpOworfQorCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UoRXhl
Y1N0YXRlKiBleGVjLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQpCit7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC50
ZXN0UHJvbWlzZUZ1bmN0aW9uKERlZmVycmVkV3JhcHBlcihleGVjLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBwcm9t
aXNlRGVmZXJyZWQtPnByb21pc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNQcm9taXNlRGVmZXJyZWQqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJn
dW1lbnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
dGhpc1ZhbHVlKCk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCisg
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudCIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbigqZXhlYywgKmNhc3RlZFRoaXMsIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
UHJvbWlzZSkpOworfQorCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50UHJvbWlz
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNQcm9taXNlRGVmZXJy
ZWQqIHByb21pc2VEZWZlcnJlZCkKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CisgICAgZmxvYXQgYSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyk7
CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpZiAoIXN0ZDo6aXNmaW5pdGUo
YSkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIGltcGwu
dGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KGEsIERlZmVycmVkV3JhcHBlcihl
eGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1Byb21p
c2VEZWZlcnJlZCopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1Zh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0
aEV4Y2VwdGlvbiIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21p
c2VGdW5jdGlvbigqZXhlYywgKmNhc3RlZFRoaXMsIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRlKiBleGVjLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpCit7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKERlZmVycmVkV3Jh
cHBlcihleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSwg
ZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogdm9pZCBKU1Rlc3RPYmo6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCA0MjhmNDA3NDRkMGI2
MTI1NjU3Y2QxY2ZlNTI0NmQ1YTQ4NGQxNGFiLi4yMjZkMDA2NWJlZjU1OTFkYzJmMzc5NGZhMDQ5
OTMyNmI5YTg1NmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsCkBAIC0yNzYsNiArMjc2LDggQEAgZW51bSBfb3B0aW9uYWwgeyAiIiwg
Ik9wdGlvbmFsVmFsdWUxIiwgIk9wdGlvbmFsVmFsdWUyIiwgIk9wdGlvbmFsVmFsdWUzIiB9Owog
CiAgICAgLy8gUHJvbWlzZSBmdW5jdGlvbgogICAgIFByb21pc2UgdGVzdFByb21pc2VGdW5jdGlv
bigpOworICAgIFByb21pc2UgdGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KGZs
b2F0IGEpOworICAgIFtSYWlzZXNFeGNlcHRpb25dIFByb21pc2UgdGVzdFByb21pc2VGdW5jdGlv
bldpdGhFeGNlcHRpb24oKTsKIH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBzaG91bGQg
bm90IGdlbmVyYXRlIGFueSBjb2RlLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>