<?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>195574</bug_id>
          
          <creation_ts>2019-03-11 15:00:12 -0700</creation_ts>
          <short_desc>[GLib] Returning G_TYPE_OBJECT from a method does not work</short_desc>
          <delta_ts>2019-03-21 08:11:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Marcelo Lopes">meo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1515022</commentid>
    <comment_count>0</comment_count>
      <attachid>364290</attachid>
    <who name="Marcelo Lopes">meo</who>
    <bug_when>2019-03-11 15:00:12 -0700</bug_when>
    <thetext>Created attachment 364290
jscobj.c: Example code to reproduce the issue

Found a problem similar to bug 195206

When a method is installed with jsc_class_add_method(), and the
return type is specified as G_TYPE_OBJECT, the reference count of
the returned object is decreased, which may delete the object.

I made an example based on the one Adrian attached to the bug
mentioned above:

This example adds an &apos;id&apos; function to the JS object, which returns
a reference to itself. After it is called, the object is deleted
and the call to getPath fails.

Tested on WebKit version 2.23.92</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515426</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-12 06:29:51 -0700</bug_when>
    <thetext>Yes, handling of wrapped objects is also wrong in methods. I&apos;m looking at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515942</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-13 05:53:49 -0700</bug_when>
    <thetext>Ok, it&apos;s not actually wrong, you are supposed to return a new reference, the same way that methods returning a string are expected to return a new allocated string. I know it&apos;s confusing and needs to be documented, but functions, methods and constructors are all transfer full. In the case of constructors the ownership is taken the JSCClass. I&apos;ll add some comments to your test case to clarify things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515943</commentid>
    <comment_count>3</comment_count>
      <attachid>364290</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-13 05:57:41 -0700</bug_when>
    <thetext>Comment on attachment 364290
jscobj.c: Example code to reproduce the issue

&gt;/*
&gt; * Build with:
&gt; *    gcc -o jscobj jscobj.c $(pkg-config javascriptcoregtk-4.0 gio-2.0 --cflags --libs)
&gt; */
&gt;
&gt;#include &lt;gio/gio.h&gt;
&gt;#include &lt;jsc/jsc.h&gt;
&gt;
&gt;static GFile *js_GFile_constructor(const char *path) {
&gt;  GFile* ret =  g_file_new_for_path(path);
&gt;  g_object_ref(ret);
&gt;  return ret;
&gt;}

You should not ref again here, the object ownership is transferred to the JSCClass.

&gt;static GFile *js_GFile_id(GFile* self) {
&gt;  return self;
&gt;}

And here you need to g_object_ref(), the object will be unrefed after being converted to a JSCValue.

&gt;static void setup_jsc_context(JSCContext *ctx) {
&gt;  JSCClass *klass =
&gt;      jsc_context_register_class(ctx, &quot;GFile&quot; /* name */, NULL /* parent */,
&gt;                                 NULL /* vtable */, NULL /* destroy_notify */);

You should pass g_object_unref as destroy_notify, since the instance is owned by the JSCClass.

&gt;  g_autoptr(JSCValue) ctor = jsc_class_add_constructor(
&gt;      klass, NULL /* name: same as class */, G_CALLBACK(js_GFile_constructor),
&gt;      NULL /* user_data */, NULL /* user_data destroy_notify */,
&gt;      G_TYPE_OBJECT /* return type */, 1 /* n_params */, G_TYPE_STRING);
&gt;  jsc_class_add_method(klass, &quot;getPath&quot; /* name */, G_CALLBACK(g_file_get_path),
&gt;                       NULL /* user_data */,
&gt;                       NULL /* user_data destroy_notify */,
&gt;                       G_TYPE_STRING /* return type */, 0 /* n_params */);
&gt;  jsc_class_add_method(klass, &quot;id&quot; /* name */, G_CALLBACK(js_GFile_id),
&gt;                       NULL /* user_data */,
&gt;                       NULL /* user_data destroy_notify */,
&gt;                       G_TYPE_OBJECT /* return type */, 0 /* n_params */);
&gt;
&gt;  jsc_context_set_value(ctx, jsc_class_get_name(klass) /* name */,
&gt;                        ctor /* value */);
&gt;}
&gt;
&gt;int main(int argc, char *argv[]) {
&gt;  g_autoptr(JSCContext) ctx = jsc_context_new();
&gt;  setup_jsc_context(ctx);
&gt;
&gt;  g_autoptr(JSCValue) result =
&gt;      jsc_context_evaluate(ctx, &quot;(new GFile(&apos;.&apos;)).getPath()&quot;, -1);
&gt;  g_autofree char *result_string = jsc_value_to_string(result);
&gt;  g_print(&quot;Path: %s\n&quot;, result_string);
&gt;
&gt;  result =
&gt;      jsc_context_evaluate(ctx, &quot;var file = new GFile(&apos;.&apos;); var file_copy = file.id(); file.getPath()&quot;, -1);
&gt;  g_assert(jsc_value_is_string(result));
&gt;
&gt;  result_string = jsc_value_to_string(result);
&gt;  g_print(&quot;Path after copy: %s\n&quot;, result_string);
&gt;
&gt;  return 0;
&gt;}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515944</commentid>
    <comment_count>4</comment_count>
      <attachid>364525</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-13 06:02:14 -0700</bug_when>
    <thetext>Created attachment 364525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515945</commentid>
    <comment_count>5</comment_count>
    <who name="Marcelo Lopes">meo</who>
    <bug_when>2019-03-13 06:19:19 -0700</bug_when>
    <thetext>Thanks!

Your comments and the tests on the patch helped to clarify how to handle the lifetime of the objects created and also how to correctly implement a function that creates and returns a new native object (factory function).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516484</commentid>
    <comment_count>6</comment_count>
      <attachid>364525</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2019-03-14 04:59:05 -0700</bug_when>
    <thetext>Comment on attachment 364525
Patch

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

Informally reviewing… There is a couple of places where I think the wording
could be improved to avoid ambiguity. Otherwise the added text is a welcome
improvement 👍

&gt; Source/JavaScriptCore/API/glib/JSCClass.cpp:593
&gt; + * passed to jsc_context_register_class().

Using “freed with” here does not make 100% clear that the GDestroyNotify 
supplied by the user of the API is responsible to free the value. How about
writing:

  Note  that the value returned by @callback is adopted by @jsc_class, and
  must be freed by the #GDestroyNotify passed to jsc_context_register_class().

WDYT?

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:594
&gt; + * When @instance is provided, @jsc_class must be provided too. @jscClass takes ownership of

@jscClass → @jsc_class

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:595
&gt; + * @instance that will be freed with the #GDestroyNotify passed to jsc_context_register_class().

How about the same as above?

  …@instance must be freed by the #GDestroyNotify passed to jsc_context_register_class().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516491</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-14 06:00:59 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #6)
&gt; Comment on attachment 364525 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=364525&amp;action=review
&gt; 
&gt; Informally reviewing…

Thanks!

&gt; There is a couple of places where I think the wording
&gt; could be improved to avoid ambiguity. Otherwise the added text is a welcome
&gt; improvement 👍
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCClass.cpp:593
&gt; &gt; + * passed to jsc_context_register_class().
&gt; 
&gt; Using “freed with” here does not make 100% clear that the GDestroyNotify 
&gt; supplied by the user of the API is responsible to free the value.

No? What do you understand then?

&gt; How about
&gt; writing:
&gt; 
&gt;   Note  that the value returned by @callback is adopted by @jsc_class, and
&gt;   must be freed by the #GDestroyNotify passed to
&gt; jsc_context_register_class().
&gt; 
&gt; WDYT?

I&apos;m not sure, the &quot;must&quot; here sounds to me like the user should free the instance, while it will be freed by the JSCClass using the destroy function passed on class registration.

&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:594
&gt; &gt; + * When @instance is provided, @jsc_class must be provided too. @jscClass takes ownership of
&gt; 
&gt; @jscClass → @jsc_class

Oops

&gt; &gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:595
&gt; &gt; + * @instance that will be freed with the #GDestroyNotify passed to jsc_context_register_class().
&gt; 
&gt; How about the same as above?
&gt; 
&gt;   …@instance must be freed by the #GDestroyNotify passed to
&gt; jsc_context_register_class().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516492</commentid>
    <comment_count>8</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2019-03-14 06:32:50 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #7)
&gt; (In reply to Adrian Perez from comment #6)
&gt; &gt; Comment on attachment 364525 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=364525&amp;action=review
&gt; &gt; 
&gt; &gt; Informally reviewing…
&gt; 
&gt; Thanks!
&gt; 
&gt; &gt; There is a couple of places where I think the wording
&gt; &gt; could be improved to avoid ambiguity. Otherwise the added text is a welcome
&gt; &gt; improvement 👍
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/API/glib/JSCClass.cpp:593
&gt; &gt; &gt; + * passed to jsc_context_register_class().
&gt; &gt; 
&gt; &gt; Using “freed with” here does not make 100% clear that the GDestroyNotify 
&gt; &gt; supplied by the user of the API is responsible to free the value.
&gt; 
&gt; No? What do you understand then?

Using “freed with” can be parsed as “freed [alongside] with”, which to me
means that the GDestroyNotify will be called, but the freeing will happen
automatically, after the GDestroyNotify callback returns (i.e. the callback
notifies that the item will be freed, but does not need itself to do the
freeing).

If you just change the “with” preposition and use “by” instead, as in “freed
by the GDestroyNotify callback”, then it&apos;s clear that freeing has to be done
“by” the callback itself.

&gt; &gt; How about
&gt; &gt; writing:
&gt; &gt; 
&gt; &gt;   Note  that the value returned by @callback is adopted by @jsc_class, and
&gt; &gt;   must be freed by the #GDestroyNotify passed to
&gt; &gt; jsc_context_register_class().
&gt; &gt; 
&gt; &gt; WDYT?
&gt; 
&gt; I&apos;m not sure, the &quot;must&quot; here sounds to me like the user should free the
&gt; instance, while it will be freed by the JSCClass using the destroy function
&gt; passed on class registration.

But the user has to “tell” how to free the data after all by passing a suitable
GDestroyNotify that will free the data… so yes, the user “has to” control how
the data will be freed.

Maybe it is even clearer by writing instead:

  Note that the value returned by @callback is adopted by @jsc_class,
  and the #GDestroyNotify passed to jsc_context_register_class() is
  responsible for disposing of it.
 
Does this sound any better to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516498</commentid>
    <comment_count>9</comment_count>
      <attachid>364658</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-14 07:59:48 -0700</bug_when>
    <thetext>Created attachment 364658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516499</commentid>
    <comment_count>10</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2019-03-14 08:05:26 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #9)
&gt; Created attachment 364658 [details]
&gt; Patch

I think the wording now leaves less chances of confusion, thanks.
Patch LGTM now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519171</commentid>
    <comment_count>11</comment_count>
      <attachid>364658</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-03-20 14:19:24 -0700</bug_when>
    <thetext>Comment on attachment 364658
Patch

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

&gt; Source/JavaScriptCore/API/glib/JSCClass.cpp:735
&gt; + * Note that the value returned by @callback must be fully transferred. In case of boxed types, you could use

fully transferred -&gt; transfer full

could -&gt; should?

(Ditto for copypaste below)

&gt; Source/JavaScriptCore/API/glib/JSCClass.cpp:738
&gt; + * with jsc_value_new_object() that receives the copy as instance parameter.

as an instance

(Ditto for copypaste below)

&gt; Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:1628
&gt; +static GString* getGStringCopyWillRaise(GString* str)
&gt; +{
&gt; +    return static_cast&lt;GString*&gt;(g_boxed_copy(G_TYPE_GSTRING, str));
&gt; +}

I don&apos;t understand, why does this cause a JS exception?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519538</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-21 00:42:52 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #11)
&gt; Comment on attachment 364658 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=364658&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCClass.cpp:735
&gt; &gt; + * Note that the value returned by @callback must be fully transferred. In case of boxed types, you could use
&gt; 
&gt; fully transferred -&gt; transfer full

Ok.

&gt; could -&gt; should?

You could, not necessarily should. It depends on the boxed type, if it&apos;s refcounted, you could use the actual boxed type and return a ref, because the same pointer will be returned in the end. If the boxed type is not refcounted and you don&apos;t want to make a copy, you should use G_TYPE_POINTER instead to ensure the same pointer is returned. If you really want to make a copy, then you should use JSC_TYPE_VALUE and use jsc_value_new_object() passing the copy as the instance parameter. I&apos;ll clarify it better.

&gt; (Ditto for copypaste below)
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCClass.cpp:738
&gt; &gt; + * with jsc_value_new_object() that receives the copy as instance parameter.
&gt; 
&gt; as an instance

No, it&apos;s *the* instance parameter in:

JSCValue* jsc_value_new_object(JSCContext* context, gpointer instance, JSCClass* jscClass)

&gt; (Ditto for copypaste below)
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:1628
&gt; &gt; +static GString* getGStringCopyWillRaise(GString* str)
&gt; &gt; +{
&gt; &gt; +    return static_cast&lt;GString*&gt;(g_boxed_copy(G_TYPE_GSTRING, str));
&gt; &gt; +}
&gt; 
&gt; I don&apos;t understand, why does this cause a JS exception?

Because we are returning a pointer to a new boxed type that doesn&apos;t have a JSValue associated. Functions returning object, boxed or pointer should return a pointer of a previously wrapped object, either with jsc_value_new_object() or jsc_value_constructor_call() or new Foo called by JavaScript. That&apos;s why the documention says that if you really want to make a copy of the boxed type you should use JSC_TYPE_VALUE and return the value created with jsc_value_new_object(). That&apos;s what the other test case does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519577</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-21 02:43:21 -0700</bug_when>
    <thetext>Committed r243283: &lt;https://trac.webkit.org/changeset/243283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519578</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-21 02:44:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/49101273&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519623</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-03-21 07:17:11 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #12)
&gt; No, it&apos;s *the* instance parameter in:

@instance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519629</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-03-21 08:11:05 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #15)
&gt; (In reply to Carlos Garcia Campos from comment #12)
&gt; &gt; No, it&apos;s *the* instance parameter in:
&gt; 
&gt; @instance

No, because it&apos;s not a parameter of that function.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>364290</attachid>
            <date>2019-03-11 15:00:12 -0700</date>
            <delta_ts>2019-03-11 15:00:12 -0700</delta_ts>
            <desc>jscobj.c: Example code to reproduce the issue</desc>
            <filename>jscobj.c</filename>
            <type>text/x-csrc</type>
            <size>2065</size>
            <attacher name="Marcelo Lopes">meo</attacher>
            
              <data encoding="base64">LyoKICogQnVpbGQgd2l0aDoKICogICAgZ2NjIC1vIGpzY29iaiBqc2NvYmouYyAkKHBrZy1jb25m
aWcgamF2YXNjcmlwdGNvcmVndGstNC4wIGdpby0yLjAgLS1jZmxhZ3MgLS1saWJzKQogKi8KCiNp
bmNsdWRlIDxnaW8vZ2lvLmg+CiNpbmNsdWRlIDxqc2MvanNjLmg+CgpzdGF0aWMgR0ZpbGUgKmpz
X0dGaWxlX2NvbnN0cnVjdG9yKGNvbnN0IGNoYXIgKnBhdGgpIHsKICBHRmlsZSogcmV0ID0gIGdf
ZmlsZV9uZXdfZm9yX3BhdGgocGF0aCk7CiAgZ19vYmplY3RfcmVmKHJldCk7CiAgcmV0dXJuIHJl
dDsKfQoKc3RhdGljIEdGaWxlICpqc19HRmlsZV9pZChHRmlsZSogc2VsZikgewogIHJldHVybiBz
ZWxmOwp9CgpzdGF0aWMgdm9pZCBzZXR1cF9qc2NfY29udGV4dChKU0NDb250ZXh0ICpjdHgpIHsK
ICBKU0NDbGFzcyAqa2xhc3MgPQogICAgICBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjdHgs
ICJHRmlsZSIgLyogbmFtZSAqLywgTlVMTCAvKiBwYXJlbnQgKi8sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwgLyogdnRhYmxlICovLCBOVUxMIC8qIGRlc3Ryb3lfbm90aWZ5
ICovKTsKICBnX2F1dG9wdHIoSlNDVmFsdWUpIGN0b3IgPSBqc2NfY2xhc3NfYWRkX2NvbnN0cnVj
dG9yKAogICAgICBrbGFzcywgTlVMTCAvKiBuYW1lOiBzYW1lIGFzIGNsYXNzICovLCBHX0NBTExC
QUNLKGpzX0dGaWxlX2NvbnN0cnVjdG9yKSwKICAgICAgTlVMTCAvKiB1c2VyX2RhdGEgKi8sIE5V
TEwgLyogdXNlcl9kYXRhIGRlc3Ryb3lfbm90aWZ5ICovLAogICAgICBHX1RZUEVfT0JKRUNUIC8q
IHJldHVybiB0eXBlICovLCAxIC8qIG5fcGFyYW1zICovLCBHX1RZUEVfU1RSSU5HKTsKICBqc2Nf
Y2xhc3NfYWRkX21ldGhvZChrbGFzcywgImdldFBhdGgiIC8qIG5hbWUgKi8sIEdfQ0FMTEJBQ0so
Z19maWxlX2dldF9wYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICBOVUxMIC8qIHVzZXJfZGF0
YSAqLywKICAgICAgICAgICAgICAgICAgICAgICBOVUxMIC8qIHVzZXJfZGF0YSBkZXN0cm95X25v
dGlmeSAqLywKICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HIC8qIHJldHVybiB0
eXBlICovLCAwIC8qIG5fcGFyYW1zICovKTsKICBqc2NfY2xhc3NfYWRkX21ldGhvZChrbGFzcywg
ImlkIiAvKiBuYW1lICovLCBHX0NBTExCQUNLKGpzX0dGaWxlX2lkKSwKICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMIC8qIHVzZXJfZGF0YSAqLywKICAgICAgICAgICAgICAgICAgICAgICBOVUxM
IC8qIHVzZXJfZGF0YSBkZXN0cm95X25vdGlmeSAqLywKICAgICAgICAgICAgICAgICAgICAgICBH
X1RZUEVfT0JKRUNUIC8qIHJldHVybiB0eXBlICovLCAwIC8qIG5fcGFyYW1zICovKTsKCiAganNj
X2NvbnRleHRfc2V0X3ZhbHVlKGN0eCwganNjX2NsYXNzX2dldF9uYW1lKGtsYXNzKSAvKiBuYW1l
ICovLAogICAgICAgICAgICAgICAgICAgICAgICBjdG9yIC8qIHZhbHVlICovKTsKfQoKaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewogIGdfYXV0b3B0cihKU0NDb250ZXh0KSBjdHgg
PSBqc2NfY29udGV4dF9uZXcoKTsKICBzZXR1cF9qc2NfY29udGV4dChjdHgpOwoKICBnX2F1dG9w
dHIoSlNDVmFsdWUpIHJlc3VsdCA9CiAgICAgIGpzY19jb250ZXh0X2V2YWx1YXRlKGN0eCwgIihu
ZXcgR0ZpbGUoJy4nKSkuZ2V0UGF0aCgpIiwgLTEpOwogIGdfYXV0b2ZyZWUgY2hhciAqcmVzdWx0
X3N0cmluZyA9IGpzY192YWx1ZV90b19zdHJpbmcocmVzdWx0KTsKICBnX3ByaW50KCJQYXRoOiAl
c1xuIiwgcmVzdWx0X3N0cmluZyk7CgogIHJlc3VsdCA9CiAgICAgIGpzY19jb250ZXh0X2V2YWx1
YXRlKGN0eCwgInZhciBmaWxlID0gbmV3IEdGaWxlKCcuJyk7IHZhciBmaWxlX2NvcHkgPSBmaWxl
LmlkKCk7IGZpbGUuZ2V0UGF0aCgpIiwgLTEpOwogIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19zdHJp
bmcocmVzdWx0KSk7CgogIHJlc3VsdF9zdHJpbmcgPSBqc2NfdmFsdWVfdG9fc3RyaW5nKHJlc3Vs
dCk7CiAgZ19wcmludCgiUGF0aCBhZnRlciBjb3B5OiAlc1xuIiwgcmVzdWx0X3N0cmluZyk7Cgog
IHJldHVybiAwOwp9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364525</attachid>
            <date>2019-03-13 06:02:14 -0700</date>
            <delta_ts>2019-03-14 07:59:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>jsc-ownerships.diff</filename>
            <type>text/plain</type>
            <size>23606</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcAppbmRleCA0MWE5MDk3NjRkMy4uN2JkMmMxYTdiNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5jcHAK
QEAgLTIwNCw2ICsyMDQsNyBAQCBKU09iamVjdFJlZiBKU0NDYWxsYmFja0Z1bmN0aW9uOjpjb25z
dHJ1Y3QoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIHNpemVfdCBhcgogCiAgICAgc3dpdGNo
IChnX3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKCZyZXR1cm5WYWx1ZSkpKSB7CiAgICAg
Y2FzZSBHX1RZUEVfUE9JTlRFUjoKKyAgICBjYXNlIEdfVFlQRV9CT1hFRDoKICAgICBjYXNlIEdf
VFlQRV9PQkpFQ1Q6CiAgICAgICAgIGlmIChhdXRvKiBwdHIgPSByZXR1cm5WYWx1ZS5kYXRhWzBd
LnZfcG9pbnRlcikKICAgICAgICAgICAgIHJldHVybiB0b1JlZihqc2NDbGFzc0dldE9yQ3JlYXRl
SlNXcmFwcGVyKG1fY2xhc3MuZ2V0KCksIHB0cikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NDbGFzcy5jcHAKaW5kZXggNDljM2ZlZWUyN2YuLjVjZDUxMjdjZWJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAKQEAgLTU4OSw2ICs1
ODksOSBAQCBzdGF0aWMgR1JlZlB0cjxKU0NWYWx1ZT4ganNjQ2xhc3NDcmVhdGVDb25zdHJ1Y3Rv
cihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYQogICogVGhpcyBmdW5jdGlvbiBjcmVhdGVz
IHRoZSBjb25zdHJ1Y3Rvciwgd2hpY2ggbmVlZHMgdG8gYmUgYWRkZWQgdG8gYW4gb2JqZWN0IGFz
IGEgcHJvcGVydHkgdG8gYmUgYWJsZSB0byB1c2UgaXQuIFVzZQogICoganNjX2NvbnRleHRfc2V0
X3ZhbHVlKCkgdG8gbWFrZSB0aGUgY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwg
b2JqZWN0LgogICoKKyAqIE5vdGUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNhbGxiYWNr
IGlzIGFkb3B0ZWQgYnkgQGpzY19jbGFzcyBhbmQgd2lsbCBiZSBmcmVlZCB3aXRoIHRoZSAjR0Rl
c3Ryb3lOb3RpZnkKKyAqIHBhc3NlZCB0byBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcygpLgor
ICoKICAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjSlNDVmFsdWUgcmVwcmVzZW50aW5n
IHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KICAqLwogSlNDVmFsdWUqIGpzY19jbGFzc19hZGRfY29u
c3RydWN0b3IoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sg
Y2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5
LCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCkBAIC02MzUsNiAr
NjM4LDkgQEAgSlNDVmFsdWUqIGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoSlNDQ2xhc3MqIGpz
Y0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGIKICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRl
cyB0aGUgY29uc3RydWN0b3IsIHdoaWNoIG5lZWRzIHRvIGJlIGFkZGVkIHRvIGFuIG9iamVjdCBh
cyBhIHByb3BlcnR5IHRvIGJlIGFibGUgdG8gdXNlIGl0LiBVc2UKICAqIGpzY19jb250ZXh0X3Nl
dF92YWx1ZSgpIHRvIG1ha2UgdGhlIGNvbnN0cnVjdG9yIGF2YWlsYWJsZSBpbiB0aGUgZ2xvYmFs
IG9iamVjdC4KICAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjYWxsYmFj
ayBpcyBhZG9wdGVkIGJ5IEBqc2NfY2xhc3MgYW5kIHdpbGwgYmUgZnJlZWQgd2l0aCB0aGUgI0dE
ZXN0cm95Tm90aWZ5CisgKiBwYXNzZWQgdG8ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoKS4K
KyAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlIHJlcHJlc2VudGlu
ZyB0aGUgY2xhc3MgY29uc3RydWN0b3IuCiAgKi8KIEpTQ1ZhbHVlKiBqc2NfY2xhc3NfYWRkX2Nv
bnN0cnVjdG9ydihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFj
ayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3Rp
ZnksIEdUeXBlIHJldHVyblR5cGUsIHVuc2lnbmVkIHBhcmFtZXRlcnNDb3VudCwgR1R5cGUqIHBh
cmFtZXRlclR5cGVzKQpAQCAtNjc2LDYgKzY4Miw5IEBAIEpTQ1ZhbHVlKiBqc2NfY2xhc3NfYWRk
X2NvbnN0cnVjdG9ydihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxs
CiAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGNvbnN0cnVjdG9yLCB3aGljaCBuZWVkcyB0
byBiZSBhZGRlZCB0byBhbiBvYmplY3QgYXMgYSBwcm9wZXJ0eSB0byBiZSBhYmxlIHRvIHVzZSBp
dC4gVXNlCiAgKiBqc2NfY29udGV4dF9zZXRfdmFsdWUoKSB0byBtYWtlIHRoZSBjb25zdHJ1Y3Rv
ciBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBvYmplY3QuCiAgKgorICogTm90ZSB0aGF0IHRoZSB2
YWx1ZSByZXR1cm5lZCBieSBAY2FsbGJhY2sgaXMgYWRvcHRlZCBieSBAanNjX2NsYXNzIGFuZCB3
aWxsIGJlIGZyZWVkIHdpdGggdGhlICNHRGVzdHJveU5vdGlmeQorICogcGFzc2VkIHRvIGpzY19j
b250ZXh0X3JlZ2lzdGVyX2NsYXNzKCkuCisgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBhICNKU0NWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGNvbnN0cnVjdG9yLgogICovCiBK
U0NWYWx1ZSoganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcl92YXJpYWRpYyhKU0NDbGFzcyoganNj
Q2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNl
ckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnksIEdUeXBlIHJldHVyblR5cGUpCkBA
IC03MjIsNiArNzMxLDExIEBAIHN0YXRpYyB2b2lkIGpzY0NsYXNzQWRkTWV0aG9kKEpTQ0NsYXNz
KiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNrIGNhCiAgKiBAY2FsbGJhY2sg
aXMgY2FsbGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5zdGFuY2UgYXMgZmlyc3QgcGFyYW1ldGVy
LCBmb2xsb3dlZCBieSB0aGUgbWV0aG9kIHBhcmFtZXRlcnMgYW5kIHRoZW4KICAqIEB1c2VyX2Rh
dGEgYXMgbGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGluIHRoZSAj
SlNDQ2xhc3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoCiAgKiBAdXNl
cl9kYXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVk
IGJ5IEBjYWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9mIGJveGVk
IHR5cGVzLCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBvZiB0aGUg
YWN0dWFsIGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkg
I0pTQ0NsYXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3
IGNvcHkgb2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJldHVybiBh
ICNKU0NWYWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCBy
ZWNlaXZlcyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCiAgKi8KIHZvaWQganNjX2Ns
YXNzX2FkZF9tZXRob2QoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2Fs
bGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95
Tm90aWZ5LCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCiB7CkBA
IC03NTgsNiArNzcyLDExIEBAIHZvaWQganNjX2NsYXNzX2FkZF9tZXRob2QoSlNDQ2xhc3MqIGpz
Y0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJhCiAgKiBAY2FsbGJhY2sg
aXMgY2FsbGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5zdGFuY2UgYXMgZmlyc3QgcGFyYW1ldGVy
LCBmb2xsb3dlZCBieSB0aGUgbWV0aG9kIHBhcmFtZXRlcnMgYW5kIHRoZW4KICAqIEB1c2VyX2Rh
dGEgYXMgbGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGluIHRoZSAj
SlNDQ2xhc3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoCiAgKiBAdXNl
cl9kYXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVk
IGJ5IEBjYWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9mIGJveGVk
IHR5cGVzLCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBvZiB0aGUg
YWN0dWFsIGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkg
I0pTQ0NsYXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3
IGNvcHkgb2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJldHVybiBh
ICNKU0NWYWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCBy
ZWNlaXZlcyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCiAgKi8KIHZvaWQganNjX2Ns
YXNzX2FkZF9tZXRob2R2KEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwgR0Nh
bGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJv
eU5vdGlmeSwgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1ldGVyc0NvdW50LCBHVHlw
ZSAqcGFyYW1ldGVyVHlwZXMpCiB7CkBAIC03OTAsNiArODA5LDExIEBAIHZvaWQganNjX2NsYXNz
X2FkZF9tZXRob2R2KEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxi
YWNrIGNhbGxiCiAgKiBAY2FsbGJhY2sgaXMgY2FsbGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5z
dGFuY2UgYXMgZmlyc3QgcGFyYW1ldGVyLCBmb2xsb3dlZCBieSBhICNHUHRyQXJyYXkgb2YgI0pT
Q1ZhbHVlPCEtLSAtLT5zCiAgKiB3aXRoIHRoZSBtZXRob2QgYXJndW1lbnRzIGFuZCB0aGVuIEB1
c2VyX2RhdGEgYXMgbGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGlu
IHRoZSAjSlNDQ2xhc3MgY29udGV4dCwKICAqIEBkZXN0cm95X25vdGlmeSBpcyBjYWxsZWQgd2l0
aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJl
dHVybmVkIGJ5IEBjYWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9m
IGJveGVkIHR5cGVzLCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBv
ZiB0aGUgYWN0dWFsIGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3du
ZWQgYnkgI0pTQ0NsYXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJu
IGEgbmV3IGNvcHkgb2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJl
dHVybiBhICNKU0NWYWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkg
dGhhdCByZWNlaXZlcyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCiAgKi8KIHZvaWQg
anNjX2NsYXNzX2FkZF9tZXRob2RfdmFyaWFkaWMoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBj
aGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJv
eU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBHVHlwZSByZXR1cm5UeXBlKQogewpAQCAtODE2LDYgKzg0
MCwxMSBAQCB2b2lkIGpzY19jbGFzc19hZGRfbWV0aG9kX3ZhcmlhZGljKEpTQ0NsYXNzKiBqc2ND
bGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYQogICogdmFsdWUgbmVlZHMgdG8gYmUgc2V0
LCBAc2V0dGVyIGlzIGNhbGxlZCByZWNlaXZpbmcgdGhlIHRoZSBjbGFzcyBpbnN0YW5jZSBhcyBm
aXJzdCBwYXJhbWV0ZXIsIGZvbGxvd2VkCiAgKiBieSB0aGUgdmFsdWUgdG8gYmUgc2V0IGFuZCB0
aGVuIEB1c2VyX2RhdGEgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLiBXaGVuIHRoZSBwcm9wZXJ0eSBp
cyBjbGVhcmVkIGluIHRoZQogICogI0pTQ0NsYXNzIGNvbnRleHQsIEBkZXN0cm95X25vdGlmeSBp
cyBjYWxsZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQg
dGhlIHZhbHVlIHJldHVybmVkIGJ5IEBnZXR0ZXIgbXVzdCBiZSBmdWxseSB0cmFuc2ZlcnJlZC4g
SW4gY2FzZSBvZiBib3hlZCB0eXBlcywgeW91IGNvdWxkIHVzZQorICogJUdfVFlQRV9QT0lOVEVS
IGluc3RlYWQgb2YgdGhlIGFjdHVhbCBib3hlZCAjR1R5cGUgdG8gZW5zdXJlIHRoYXQgdGhlIGlu
c3RhbmNlIG93bmVkIGJ5ICNKU0NDbGFzcyBpcyB1c2VkLgorICogSWYgeW91IHJlYWxseSB3YW50
IHRvIHJldHVybiBhIG5ldyBjb3B5IG9mIHRoZSBib3hlZCB0eXBlLCB1c2UgI0pTQ19UWVBFX1ZB
TFVFIGFuZCByZXR1cm4gYSAjSlNDVmFsdWUgY3JlYXRlZAorICogd2l0aCBqc2NfdmFsdWVfbmV3
X29iamVjdCgpIHRoYXQgcmVjZWl2ZXMgdGhlIGNvcHkgYXMgaW5zdGFuY2UgcGFyYW1ldGVyLgog
ICovCiB2b2lkIGpzY19jbGFzc19hZGRfcHJvcGVydHkoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25z
dCBjaGFyKiBuYW1lLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdDYWxsYmFjayBnZXR0ZXIsIEdDYWxs
YmFjayBzZXR0ZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90
aWZ5KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1Zh
bHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKaW5k
ZXggODVlZDBhYWYxN2QuLjBiNjk4NzdlOWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NWYWx1ZS5jcHAKQEAgLTU4NywxMSArNTg3LDEyIEBAIGdib29sZWFuIGpzY192
YWx1ZV9pc19hcnJheShKU0NWYWx1ZSogdmFsdWUpCiAvKioKICAqIGpzY192YWx1ZV9uZXdfb2Jq
ZWN0OgogICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKLSAqIEBpbnN0YW5jZTogKG51bGxhYmxl
KTogYW4gb2JqZWN0IGluc3RhbmNlIG9yICVOVUxMCisgKiBAaW5zdGFuY2U6IChudWxsYWJsZSkg
KHRyYW5zZmVyIGZ1bGwpOiBhbiBvYmplY3QgaW5zdGFuY2Ugb3IgJU5VTEwKICAqIEBqc2NfY2xh
c3M6IChudWxsYWJsZSk6IHRoZSAjSlNDQ2xhc3Mgb2YgQGluc3RhbmNlCiAgKgogICogQ3JlYXRl
IGEgbmV3ICNKU0NWYWx1ZSBmcm9tIEBpbnN0YW5jZS4gSWYgQGluc3RhbmNlIGlzICVOVUxMIGEg
bmV3IGVtcHR5IG9iamVjdCBpcyBjcmVhdGVkLgotICogV2hlbiBAaW5zdGFuY2UgaXMgcHJvdmlk
ZWQsIEBqc2NfY2xhc3MgbXVzdCBiZSBwcm92aWRlZCB0b28uCisgKiBXaGVuIEBpbnN0YW5jZSBp
cyBwcm92aWRlZCwgQGpzY19jbGFzcyBtdXN0IGJlIHByb3ZpZGVkIHRvby4gQGpzY0NsYXNzIHRh
a2VzIG93bmVyc2hpcCBvZgorICogQGluc3RhbmNlIHRoYXQgd2lsbCBiZSBmcmVlZCB3aXRoIHRo
ZSAjR0Rlc3Ryb3lOb3RpZnkgcGFzc2VkIHRvIGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKCku
CiAgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZS4KICAqLwpAQCAt
MTA2Nyw2ICsxMDY4LDExIEBAIHZvaWQganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlf
ZGF0YShKU0NWYWx1ZSogdmFsdWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5CiAgKiBXaGVuIHRoZSBw
cm9wZXJ0eSBpcyBjbGVhcmVkIGluIHRoZSAjSlNDQ2xhc3MgY29udGV4dCwgQGRlc3Ryb3lfbm90
aWZ5IGlzIGNhbGxlZCB3aXRoCiAgKiBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlci4gVGhpcyBpcyBl
cXVpdmFsZW50IHRvIEphdmFTY3JpcHQgPGZ1bmN0aW9uPk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgp
PC9mdW5jdGlvbj4KICAqIHdoZW4gdXNlZCB3aXRoIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3IuCisg
KgorICogTm90ZSB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBAZ2V0dGVyIG11c3QgYmUgZnVs
bHkgdHJhbnNmZXJyZWQuIEluIGNhc2Ugb2YgYm94ZWQgdHlwZXMsIHlvdSBjb3VsZCB1c2UKKyAq
ICVHX1RZUEVfUE9JTlRFUiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYm94ZWQgI0dUeXBlIHRvIGVu
c3VyZSB0aGF0IHRoZSBpbnN0YW5jZSBvd25lZCBieSAjSlNDQ2xhc3MgaXMgdXNlZC4KKyAqIElm
IHlvdSByZWFsbHkgd2FudCB0byByZXR1cm4gYSBuZXcgY29weSBvZiB0aGUgYm94ZWQgdHlwZSwg
dXNlICNKU0NfVFlQRV9WQUxVRSBhbmQgcmV0dXJuIGEgI0pTQ1ZhbHVlIGNyZWF0ZWQKKyAqIHdp
dGgganNjX3ZhbHVlX25ld19vYmplY3QoKSB0aGF0IHJlY2VpdmVzIHRoZSBjb3B5IGFzIGluc3Rh
bmNlIHBhcmFtZXRlci4KICAqLwogdm9pZCBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0
eV9hY2Nlc3NvcihKU0NWYWx1ZSogdmFsdWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgSlND
VmFsdWVQcm9wZXJ0eUZsYWdzIGZsYWdzLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdDYWxsYmFjayBn
ZXR0ZXIsIEdDYWxsYmFjayBzZXR0ZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlm
eSBkZXN0cm95Tm90aWZ5KQogewpAQCAtMTEzMiw2ICsxMTM4LDExIEBAIHN0YXRpYyBHUmVmUHRy
PEpTQ1ZhbHVlPiBqc2NWYWx1ZUZ1bmN0aW9uQ3JlYXRlKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqCiAgKiByZWNlaXZpbmcgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIHRoZW4g
QHVzZXJfZGF0YSBhcyBsYXN0IHBhcmFtZXRlci4gV2hlbiB0aGUgZnVuY3Rpb24gaXMKICAqIGNs
ZWFyZWQgaW4gQGNvbnRleHQsIEBkZXN0cm95X25vdGlmeSBpcyBjYWxsZWQgd2l0aCBAdXNlcl9k
YXRhIGFzIHBhcmFtZXRlci4KICAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5
IEBjYWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9mIGJveGVkIHR5
cGVzLCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBvZiB0aGUgYWN0
dWFsIGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkgI0pT
Q0NsYXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3IGNv
cHkgb2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJldHVybiBhICNK
U0NWYWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCByZWNl
aXZlcyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCisgKgogICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZS4KICAqLwogSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdf
ZnVuY3Rpb24oSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNr
IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlm
eSwgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1Db3VudCwgLi4uKQpAQCAtMTE2OCw2
ICsxMTc5LDExIEBAIEpTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKEpTQ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjCiAgKiByZWNlaXZpbmcgdGhlIGZ1
bmN0aW9uIHBhcmFtZXRlcnMgYW5kIHRoZW4gQHVzZXJfZGF0YSBhcyBsYXN0IHBhcmFtZXRlci4g
V2hlbiB0aGUgZnVuY3Rpb24gaXMKICAqIGNsZWFyZWQgaW4gQGNvbnRleHQsIEBkZXN0cm95X25v
dGlmeSBpcyBjYWxsZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlci4KICAqCisgKiBOb3Rl
IHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjYWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5z
ZmVycmVkLiBJbiBjYXNlIG9mIGJveGVkIHR5cGVzLCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBF
X1BPSU5URVIgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhh
dCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkgI0pTQ0NsYXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVh
bGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3IGNvcHkgb2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlND
X1RZUEVfVkFMVUUgYW5kIHJldHVybiBhICNKU0NWYWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192
YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCByZWNlaXZlcyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJh
bWV0ZXIuCisgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZS4KICAq
LwogSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfZnVuY3Rpb252KEpTQ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEs
IEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnksIEdUeXBlIHJldHVyblR5cGUsIHVuc2lnbmVk
IHBhcmFtZXRlcnNDb3VudCwgR1R5cGUgKnBhcmFtZXRlclR5cGVzKQpAQCAtMTIwMCw2ICsxMjE2
LDExIEBAIEpTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Z1bmN0aW9udihKU0NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhCiAgKiByZWNlaXZpbmcgYW4gI0dQdHJBcnJh
eSBvZiAjSlNDVmFsdWU8IS0tIC0tPnMgd2l0aCB0aGUgYXJndW1lbnRzIGFuZCB0aGVuIEB1c2Vy
X2RhdGEgYXMgbGFzdCBwYXJhbWV0ZXIuCiAgKiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjbGVhcmVk
IGluIEBjb250ZXh0LCBAZGVzdHJveV9ub3RpZnkgaXMgY2FsbGVkIHdpdGggQHVzZXJfZGF0YSBh
cyBwYXJhbWV0ZXIuCiAgKgorICogTm90ZSB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBAY2Fs
bGJhY2sgbXVzdCBiZSBmdWxseSB0cmFuc2ZlcnJlZC4gSW4gY2FzZSBvZiBib3hlZCB0eXBlcywg
eW91IGNvdWxkIHVzZQorICogJUdfVFlQRV9QT0lOVEVSIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBi
b3hlZCAjR1R5cGUgdG8gZW5zdXJlIHRoYXQgdGhlIGluc3RhbmNlIG93bmVkIGJ5ICNKU0NDbGFz
cyBpcyB1c2VkLgorICogSWYgeW91IHJlYWxseSB3YW50IHRvIHJldHVybiBhIG5ldyBjb3B5IG9m
IHRoZSBib3hlZCB0eXBlLCB1c2UgI0pTQ19UWVBFX1ZBTFVFIGFuZCByZXR1cm4gYSAjSlNDVmFs
dWUgY3JlYXRlZAorICogd2l0aCBqc2NfdmFsdWVfbmV3X29iamVjdCgpIHRoYXQgcmVjZWl2ZXMg
dGhlIGNvcHkgYXMgaW5zdGFuY2UgcGFyYW1ldGVyLgorICoKICAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogYSAjSlNDVmFsdWUuCiAgKi8KIEpTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Z1bmN0
aW9uX3ZhcmlhZGljKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxs
YmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lO
b3RpZnksIEdUeXBlIHJldHVyblR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBkMWI4
YzEyZjdjYS4uODdmZWQ5NzcyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDE5LTAzLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR0xpYl0gUmV0dXJuaW5nIEdfVFlQRV9PQkpFQ1QgZnJvbSBhIG1l
dGhvZCBkb2VzIG5vdCB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTU1NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgbW9yZSBkb2N1bWVudGF0aW9uIHRvIGNsYXJpZnkgdGhlIG93bmVyc2hp
cCBvZiB3cmFwcGVkIG9iamVjdHMgd2hlbiBjcmVhdGVkIGFuZCB3aGVuIHJldHVybmVkIGJ5IGZ1
bmN0aW9ucy4KKworICAgICAgICAqIEFQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOiBBbHNvIGFsbG93
IHRvIHJldHVybiBib3hlZCB0eXBlcyBmcm9tIGEgY29uc3RydWN0b3IuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDQ2xhc3MuY3BwOgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmNwcDoKKwog
MjAxOS0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFtKU0NdIE9TUiBlbnRyeSBzaG91bGQgcmVzcGVjdCBhYnN0cmFjdCB2YWx1ZXMgaW4gYWRkaXRp
b24gdG8gZmx1c2ggZm9ybWF0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDlkMjNjODYzYjA3Li4zZDA4NjEzMGRhYSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE5
LTAzLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR0xpYl0gUmV0dXJuaW5nIEdfVFlQRV9PQkpFQ1QgZnJvbSBhIG1ldGhvZCBkb2VzIG5v
dCB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTU1NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgbmV3IHRlc3QgY2FzZXMgdG8gY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGNvbnN0cnVjdG9ycyBh
bmQgZnVuY3Rpb25zIHJldHVybmluZyBHT2JqZWN0IGFuZCBib3hlZCB0eXBlcy4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcDoK
KyAgICAgICAgKGdldEdGaWxlKToKKyAgICAgICAgKGdldFBhcmVudCk6CisgICAgICAgIChjcmVh
dGVHU3RyaW5nKToKKyAgICAgICAgKGdldEdTdHJpbmcpOgorICAgICAgICAoZ2V0R1N0cmluZ0Nv
cHlXaWxsUmFpc2UpOgorICAgICAgICAoZ2V0R1N0cmluZ0NvcHkpOgorICAgICAgICAoZ2V0R1N0
cmluZ1N0cik6CisgICAgICAgIChnZXRHU3RyaW5nTGVuKToKKyAgICAgICAgKGZyZWVHU3RyaW5n
KToKKyAgICAgICAgKHRlc3RKU0NDbGFzcyk6CisKIDIwMTktMDMtMTIgIFJvc3MgS2lyc2xpbmcg
IDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dIEZpeCBhIHNsZXcgb2Yg
c2ltcGxlIGNsYW5nLWNsIHdhcm5pbmdzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCmluZGV4IDIwYmIyZmVk
ODhlLi5mNWY2NWQ5ZGI1MyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9K
YXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcApAQCAtMTU5Nyw2ICsxNTk3LDYw
IEBAIHN0YXRpYyBHRmlsZSogY3JlYXRlR0ZpbGUoY29uc3QgY2hhciogcGF0aCkKICAgICByZXR1
cm4gZmlsZTsKIH0KIAorc3RhdGljIEdGaWxlKiBnZXRHRmlsZShHRmlsZSogZmlsZSkKK3sKKyAg
ICByZXR1cm4gR19GSUxFKGdfb2JqZWN0X3JlZihmaWxlKSk7Cit9CisKK3N0YXRpYyBKU0NWYWx1
ZSogZ2V0UGFyZW50KEdGaWxlKiBmaWxlLCBKU0NDbGFzcyoganNjQ2xhc3MpCit7CisgICAgYXV0
byogY2hlY2tlciA9IHN0YXRpY19jYXN0PExlYWtDaGVja2VyKj4oZ19vYmplY3RfZ2V0X2RhdGEo
R19PQkpFQ1QoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSksICJsZWFrLWNoZWNrZXIiKSk7Cisg
ICAgR0ZpbGUqIHBhcmVudCA9IGdfZmlsZV9nZXRfcGFyZW50KGZpbGUpOworICAgIGNoZWNrZXIt
PndhdGNoKHBhcmVudCk7CisgICAgYXV0byogdmFsdWUgPSBqc2NfdmFsdWVfbmV3X29iamVjdChq
c2NfY29udGV4dF9nZXRfY3VycmVudCgpLCBwYXJlbnQsIGpzY0NsYXNzKTsKKyAgICBjaGVja2Vy
LT53YXRjaCh2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgR1N0cmluZyog
Y3JlYXRlR1N0cmluZyhjb25zdCBjaGFyKiBzdHIpCit7CisgICAgcmV0dXJuIGdfc3RyaW5nX25l
dyhzdHIpOworfQorCitzdGF0aWMgR1N0cmluZyogZ2V0R1N0cmluZyhHU3RyaW5nKiBzdHIpCit7
CisgICAgcmV0dXJuIHN0cjsKK30KKworc3RhdGljIEdTdHJpbmcqIGdldEdTdHJpbmdDb3B5V2ls
bFJhaXNlKEdTdHJpbmcqIHN0cikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1N0cmluZyo+
KGdfYm94ZWRfY29weShHX1RZUEVfR1NUUklORywgc3RyKSk7Cit9CisKK3N0YXRpYyBKU0NWYWx1
ZSogZ2V0R1N0cmluZ0NvcHkoR1N0cmluZyAqc3RyLCBKU0NDbGFzcyoganNjQ2xhc3MpCit7Cisg
ICAgYXV0byogY2hlY2tlciA9IHN0YXRpY19jYXN0PExlYWtDaGVja2VyKj4oZ19vYmplY3RfZ2V0
X2RhdGEoR19PQkpFQ1QoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSksICJsZWFrLWNoZWNrZXIi
KSk7CisgICAgYXV0byogY29weSA9IGdldEdTdHJpbmdDb3B5V2lsbFJhaXNlKHN0cik7CisgICAg
YXV0byogdmFsdWUgPSBqc2NfdmFsdWVfbmV3X29iamVjdChqc2NfY29udGV4dF9nZXRfY3VycmVu
dCgpLCBjb3B5LCBqc2NDbGFzcyk7CisgICAgY2hlY2tlci0+d2F0Y2godmFsdWUpOworICAgIHJl
dHVybiB2YWx1ZTsKK30KKworc3RhdGljIGNoYXIqIGdldEdTdHJpbmdTdHIoR1N0cmluZyogc3Ry
KQoreworICAgIHJldHVybiBnX3N0cmR1cChzdHItPnN0cik7Cit9CisKK3N0YXRpYyBndWludDY0
IGdldEdTdHJpbmdMZW4oR1N0cmluZyogc3RyKQoreworICAgIHJldHVybiBzdHItPmxlbjsKK30K
Kworc3RhdGljIHZvaWQgZnJlZUdTdHJpbmcoR1N0cmluZyogc3RyKQoreworICAgIGdfc3RyaW5n
X2ZyZWUoc3RyLCBUUlVFKTsKK30KKwogc3RhdGljIHZvaWQgdGVzdEpTQ0NsYXNzKCkKIHsKICAg
ICB7CkBAIC0yMjk2LDYgKzIzNTAsMTM1IEBAIHN0YXRpYyB2b2lkIHRlc3RKU0NDbGFzcygpCiAg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZTIuZ2V0KCkpKTsK
ICAgICAgICAgcmVzdWx0U3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUyLmdl
dCgpKSk7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHRTdHJpbmcuZ2V0KCksID09LCBj
dXJyZW50RGlyZWN0b3J5LmdldCgpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChq
c2NDbGFzcywgImdldEdGaWxlIiwgR19DQUxMQkFDSyhnZXRHRmlsZSksIG51bGxwdHIsIG51bGxw
dHIsIEdfVFlQRV9PQkpFQ1QsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAgcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEdGaWxl
KCcuJyk7IGYyID0gZi5nZXRHRmlsZSgpOyBmMi5nZXRQYXRoKCkiLCAtMSkpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX2lzX3N0cmluZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0U3RyaW5nLnJlc2V0
KGpzY192YWx1ZV90b19zdHJpbmcocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cihyZXN1bHRTdHJpbmcuZ2V0KCksID09LCBjdXJyZW50RGlyZWN0b3J5LmdldCgpKTsKKwor
ICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2Qo
ZmlsZS5nZXQoKSwgImdldEdGaWxlIiwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodmFsdWUuZ2V0KCkgPT0g
ZmlsZS5nZXQoKSk7CisKKyAgICAgICAganNjX2NsYXNzX2FkZF9tZXRob2QoanNjQ2xhc3MsICJn
ZXRQYXJlbnQiLCBHX0NBTExCQUNLKGdldFBhcmVudCksIGpzY0NsYXNzLCBudWxscHRyLCBKU0Nf
VFlQRV9WQUxVRSwgMCwgR19UWVBFX05PTkUpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgR0ZpbGUoJy4nKTsg
cCA9IGYuZ2V0UGFyZW50KCk7IHAuZ2V0UGF0aCgpIiwgLTEpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19z
dHJpbmcocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdFN0cmluZy5yZXNldChqc2NfdmFs
dWVfdG9fc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHBh
cmVudERpcmVjdG9yeShnX3BhdGhfZ2V0X2Rpcm5hbWUoY3VycmVudERpcmVjdG9yeS5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0U3RyaW5nLmdldCgpLCA9PSwgcGFyZW50
RGlyZWN0b3J5LmdldCgpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChqc2NDbGFz
cywgImVxdWFsIiwgR19DQUxMQkFDSyhnX2ZpbGVfZXF1YWwpLCBudWxscHRyLCBudWxscHRyLCBH
X1RZUEVfQk9PTEVBTiwgMSwgR19UWVBFX09CSkVDVCk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEgPSBuZXcgR0ZpbGUo
Jy4nKTsgZjIgPSBuZXcgR0ZpbGUoJy4nKTsgZjEuZXF1YWwoZjIpOyIsIC0xKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2Nf
dmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBHRmlsZSogZmls
ZU9iamVjdCA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoIi4iKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChmaWxlT2JqZWN0KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZmlsZVZhbHVlID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIGZpbGVPYmplY3QsIGpz
Y0NsYXNzKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZmlsZVZhbHVlLmdldCgpKTsKKworICAg
ICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZp
bGUuZ2V0KCksICJlcXVhbCIsIEdfVFlQRV9PQkpFQ1QsIGZpbGVPYmplY3QsIEdfVFlQRV9OT05F
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAg
ICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZpbGUu
Z2V0KCksICJlcXVhbCIsIEpTQ19UWVBFX1ZBTFVFLCBmaWxlVmFsdWUuZ2V0KCksIEdfVFlQRV9O
T05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAg
Z19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8
SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfb2JqZWN0X3NldF9k
YXRhKEdfT0JKRUNUKGNvbnRleHQuZ2V0KCkpLCAibGVhay1jaGVja2VyIiwgJmNoZWNrZXIpOwor
ICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7
CisKKyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xh
c3MoY29udGV4dC5nZXQoKSwgIkdTdHJpbmciLCBudWxscHRyLCBudWxscHRyLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5PihmcmVlR1N0cmluZykpOworICAgICAgICBjaGVja2VyLndh
dGNoKGpzY0NsYXNzKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvciA9
IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRyLCBH
X0NBTExCQUNLKGNyZWF0ZUdTdHJpbmcpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfR1NUUklO
RywgMSwgR19UWVBFX1NUUklORykpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9y
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3Io
Y29uc3RydWN0b3IuZ2V0KCkpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGpz
Y0NsYXNzLCAic3RyIiwgR19UWVBFX1NUUklORywgR19DQUxMQkFDSyhnZXRHU3RyaW5nU3RyKSwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGpzY19jbGFzc19hZGRfcHJvcGVy
dHkoanNjQ2xhc3MsICJsZW4iLCBHX1RZUEVfVUlOVDY0LCBHX0NBTExCQUNLKGdldEdTdHJpbmdM
ZW4pLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBqc2NfY29udGV4dF9z
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSwgY29u
c3RydWN0b3IuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHN0ciA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicyA9IG5ldyBHU3RyaW5n
KCdGb28nKTsiLCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHN0ci5nZXQoKSk7CisgICAg
ICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChzdHIuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKHN0ci5nZXQo
KSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgICAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgInMgaW5zdGFuY2VvZiBHU3RyaW5nOyIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVh
bihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9v
bGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9v
YmplY3RfaGFzX3Byb3BlcnR5KHN0ci5nZXQoKSwgInN0ciIpKTsKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHko
c3RyLmdldCgpLCAic3RyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHZhbHVlLmdldCgpKSk7
CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gcmVzdWx0U3RyaW5nKGpzY192YWx1ZV90b19zdHJp
bmcodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdFN0cmluZy5n
ZXQoKSwgPT0sICJGb28iKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZTIgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInMuc3RyIiwgLTEp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZTIuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc19zdHJpbmcodmFsdWUyLmdldCgpKSk7CisgICAgICAgIHJlc3Vs
dFN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlMi5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0U3RyaW5nLmdldCgpLCA9PSwgIkZvbyIpOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlMyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAicy5sZW4iLCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlMy5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJl
cih2YWx1ZTMuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19p
bnQzMih2YWx1ZTMuZ2V0KCkpLCA9PSwgMyk7CisKKyAgICAgICAganNjX2NsYXNzX2FkZF9tZXRo
b2QoanNjQ2xhc3MsICJnZXRHU3RyaW5nIiwgR19DQUxMQkFDSyhnZXRHU3RyaW5nKSwgbnVsbHB0
ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJzID0g
bmV3IEdTdHJpbmcoJ1NlbGYnKTsgczIgPSBzLmdldEdTdHJpbmcoKTsgczIuc3RyOyIsIC0xKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHRT
dHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHJlc3VsdFN0cmluZy5nZXQoKSwgPT0sICJTZWxmIik7CisKKyAgICAg
ICAganNjX2NsYXNzX2FkZF9tZXRob2QoanNjQ2xhc3MsICJnZXRHU3RyaW5nQ29weSIsIEdfQ0FM
TEJBQ0soZ2V0R1N0cmluZ0NvcHkpLCBqc2NDbGFzcywgbnVsbHB0ciwgSlNDX1RZUEVfVkFMVUUs
IDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJzID0gbmV3IEdTdHJpbmcoJ0NvcHknKTsgczIgPSBz
LmdldEdTdHJpbmdDb3B5KCk7IHMyLnN0cjsiLCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3N0cmlu
ZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0U3RyaW5nLnJlc2V0KGpzY192YWx1ZV90
b19zdHJpbmcocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHRT
dHJpbmcuZ2V0KCksID09LCAiQ29weSIpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfbWV0aG9k
KGpzY0NsYXNzLCAiZ2V0R1N0cmluZ0NvcHlXaWxsUmFpc2UiLCBHX0NBTExCQUNLKGdldEdTdHJp
bmdDb3B5V2lsbFJhaXNlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX0dTVFJJTkcsIDAsIEdf
VFlQRV9OT05FKTsKKyAgICAgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBnX2Fz
c2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicyA9
IG5ldyBHU3RyaW5nKCdDb3B5Jyk7IHMyID0gcy5nZXRHU3RyaW5nQ29weVdpbGxSYWlzZSgpOyBz
Mi5zdHI7IiwgLTEpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7
CisKKyAgICAgICAganNjX2NsYXNzX2FkZF9tZXRob2QoanNjQ2xhc3MsICJlcXVhbCIsIEdfQ0FM
TEJBQ0soZ19zdHJpbmdfZXF1YWwpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfQk9PTEVBTiwg
MSwgR19UWVBFX0dTVFJJTkcpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInMxID0gbmV3IEdTdHJpbmcoJ0JhcicpOyBzMiA9
IG5ldyBHU3RyaW5nKCdCYXInKTsgczEuZXF1YWwoczIpOyIsIC0xKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
aXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBHU3RyaW5nKiBzdHJCb3hl
ZCA9IGdfc3RyaW5nX25ldygiRm9vIik7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHN0clZh
bHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIHN0ckJv
eGVkLCBqc2NDbGFzcykpOworICAgICAgICBjaGVja2VyLndhdGNoKHN0clZhbHVlLmdldCgpKTsK
KworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0
aG9kKHN0ci5nZXQoKSwgImVxdWFsIiwgR19UWVBFX0dTVFJJTkcsIHN0ckJveGVkLCBHX1RZUEVf
Tk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChz
dHIuZ2V0KCksICJlcXVhbCIsIEpTQ19UWVBFX1ZBTFVFLCBzdHJWYWx1ZS5nZXQoKSwgR19UWVBF
X05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOwogICAg
IH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364658</attachid>
            <date>2019-03-14 07:59:48 -0700</date>
            <delta_ts>2019-03-20 14:19:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>jsc-wrapped-object-lifetime.diff</filename>
            <type>text/plain</type>
            <size>23656</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcAppbmRleCA0MWE5MDk3NjRkMy4uN2JkMmMxYTdiNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5jcHAK
QEAgLTIwNCw2ICsyMDQsNyBAQCBKU09iamVjdFJlZiBKU0NDYWxsYmFja0Z1bmN0aW9uOjpjb25z
dHJ1Y3QoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIHNpemVfdCBhcgogCiAgICAgc3dpdGNo
IChnX3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKCZyZXR1cm5WYWx1ZSkpKSB7CiAgICAg
Y2FzZSBHX1RZUEVfUE9JTlRFUjoKKyAgICBjYXNlIEdfVFlQRV9CT1hFRDoKICAgICBjYXNlIEdf
VFlQRV9PQkpFQ1Q6CiAgICAgICAgIGlmIChhdXRvKiBwdHIgPSByZXR1cm5WYWx1ZS5kYXRhWzBd
LnZfcG9pbnRlcikKICAgICAgICAgICAgIHJldHVybiB0b1JlZihqc2NDbGFzc0dldE9yQ3JlYXRl
SlNXcmFwcGVyKG1fY2xhc3MuZ2V0KCksIHB0cikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NDbGFzcy5jcHAKaW5kZXggNDljM2ZlZWUyN2YuLmM4Y2NjOTNhYWIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAKQEAgLTU4OSw2ICs1
ODksOSBAQCBzdGF0aWMgR1JlZlB0cjxKU0NWYWx1ZT4ganNjQ2xhc3NDcmVhdGVDb25zdHJ1Y3Rv
cihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYQogICogVGhpcyBmdW5jdGlvbiBjcmVhdGVz
IHRoZSBjb25zdHJ1Y3Rvciwgd2hpY2ggbmVlZHMgdG8gYmUgYWRkZWQgdG8gYW4gb2JqZWN0IGFz
IGEgcHJvcGVydHkgdG8gYmUgYWJsZSB0byB1c2UgaXQuIFVzZQogICoganNjX2NvbnRleHRfc2V0
X3ZhbHVlKCkgdG8gbWFrZSB0aGUgY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwg
b2JqZWN0LgogICoKKyAqIE5vdGUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNhbGxiYWNr
IGlzIGFkb3B0ZWQgYnkgQGpzY19jbGFzcywgYW5kIHRoZSAjR0Rlc3Ryb3lOb3RpZnkgcGFzc2Vk
IHRvCisgKiBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcygpIGlzIHJlc3BvbnNpYmxlIGZvciBk
aXNwb3Npbmcgb2YgaXQuCisgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NW
YWx1ZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGNvbnN0cnVjdG9yLgogICovCiBKU0NWYWx1ZSog
anNjX2NsYXNzX2FkZF9jb25zdHJ1Y3RvcihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIq
IG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEsIEdEZXN0cm95Tm90
aWZ5IGRlc3Ryb3lOb3RpZnksIEdUeXBlIHJldHVyblR5cGUsIHVuc2lnbmVkIHBhcmFtQ291bnQs
IC4uLikKQEAgLTYzNSw2ICs2MzgsOSBAQCBKU0NWYWx1ZSoganNjX2NsYXNzX2FkZF9jb25zdHJ1
Y3RvcihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYgogICogVGhp
cyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBjb25zdHJ1Y3Rvciwgd2hpY2ggbmVlZHMgdG8gYmUgYWRk
ZWQgdG8gYW4gb2JqZWN0IGFzIGEgcHJvcGVydHkgdG8gYmUgYWJsZSB0byB1c2UgaXQuIFVzZQog
ICoganNjX2NvbnRleHRfc2V0X3ZhbHVlKCkgdG8gbWFrZSB0aGUgY29uc3RydWN0b3IgYXZhaWxh
YmxlIGluIHRoZSBnbG9iYWwgb2JqZWN0LgogICoKKyAqIE5vdGUgdGhhdCB0aGUgdmFsdWUgcmV0
dXJuZWQgYnkgQGNhbGxiYWNrIGlzIGFkb3B0ZWQgYnkgQGpzY19jbGFzcywgYW5kIHRoZSAjR0Rl
c3Ryb3lOb3RpZnkgcGFzc2VkIHRvCisgKiBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcygpIGlz
IHJlc3BvbnNpYmxlIGZvciBkaXNwb3Npbmcgb2YgaXQuCisgKgogICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGNvbnN0cnVjdG9y
LgogICovCiBKU0NWYWx1ZSoganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3RvcnYoSlNDQ2xhc3MqIGpz
Y0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVz
ZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBHVHlwZSByZXR1cm5UeXBlLCB1
bnNpZ25lZCBwYXJhbWV0ZXJzQ291bnQsIEdUeXBlKiBwYXJhbWV0ZXJUeXBlcykKQEAgLTY3Niw2
ICs2ODIsOSBAQCBKU0NWYWx1ZSoganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3RvcnYoSlNDQ2xhc3Mq
IGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbAogICogVGhpcyBmdW5jdGlvbiBjcmVh
dGVzIHRoZSBjb25zdHJ1Y3Rvciwgd2hpY2ggbmVlZHMgdG8gYmUgYWRkZWQgdG8gYW4gb2JqZWN0
IGFzIGEgcHJvcGVydHkgdG8gYmUgYWJsZSB0byB1c2UgaXQuIFVzZQogICoganNjX2NvbnRleHRf
c2V0X3ZhbHVlKCkgdG8gbWFrZSB0aGUgY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHRoZSBnbG9i
YWwgb2JqZWN0LgogICoKKyAqIE5vdGUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNhbGxi
YWNrIGlzIGFkb3B0ZWQgYnkgQGpzY19jbGFzcywgYW5kIHRoZSAjR0Rlc3Ryb3lOb3RpZnkgcGFz
c2VkIHRvCisgKiBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcygpIGlzIHJlc3BvbnNpYmxlIGZv
ciBkaXNwb3Npbmcgb2YgaXQuCisgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNK
U0NWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGNvbnN0cnVjdG9yLgogICovCiBKU0NWYWx1
ZSoganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcl92YXJpYWRpYyhKU0NDbGFzcyoganNjQ2xhc3Ms
IGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEs
IEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnksIEdUeXBlIHJldHVyblR5cGUpCkBAIC03MjIs
NiArNzMxLDExIEBAIHN0YXRpYyB2b2lkIGpzY0NsYXNzQWRkTWV0aG9kKEpTQ0NsYXNzKiBqc2ND
bGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNrIGNhCiAgKiBAY2FsbGJhY2sgaXMgY2Fs
bGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5zdGFuY2UgYXMgZmlyc3QgcGFyYW1ldGVyLCBmb2xs
b3dlZCBieSB0aGUgbWV0aG9kIHBhcmFtZXRlcnMgYW5kIHRoZW4KICAqIEB1c2VyX2RhdGEgYXMg
bGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGluIHRoZSAjSlNDQ2xh
c3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoCiAgKiBAdXNlcl9kYXRh
IGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBj
YWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9mIGJveGVkIHR5cGVz
LCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBvZiB0aGUgYWN0dWFs
IGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkgI0pTQ0Ns
YXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3IGNvcHkg
b2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJldHVybiBhICNKU0NW
YWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCByZWNlaXZl
cyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCiAgKi8KIHZvaWQganNjX2NsYXNzX2Fk
ZF9tZXRob2QoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sg
Y2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5
LCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCiB7CkBAIC03NTgs
NiArNzcyLDExIEBAIHZvaWQganNjX2NsYXNzX2FkZF9tZXRob2QoSlNDQ2xhc3MqIGpzY0NsYXNz
LCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJhCiAgKiBAY2FsbGJhY2sgaXMgY2Fs
bGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5zdGFuY2UgYXMgZmlyc3QgcGFyYW1ldGVyLCBmb2xs
b3dlZCBieSB0aGUgbWV0aG9kIHBhcmFtZXRlcnMgYW5kIHRoZW4KICAqIEB1c2VyX2RhdGEgYXMg
bGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGluIHRoZSAjSlNDQ2xh
c3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoCiAgKiBAdXNlcl9kYXRh
IGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBj
YWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9mIGJveGVkIHR5cGVz
LCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBvZiB0aGUgYWN0dWFs
IGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkgI0pTQ0Ns
YXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3IGNvcHkg
b2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJldHVybiBhICNKU0NW
YWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCByZWNlaXZl
cyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCiAgKi8KIHZvaWQganNjX2NsYXNzX2Fk
ZF9tZXRob2R2KEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNr
IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlm
eSwgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1ldGVyc0NvdW50LCBHVHlwZSAqcGFy
YW1ldGVyVHlwZXMpCiB7CkBAIC03OTAsNiArODA5LDExIEBAIHZvaWQganNjX2NsYXNzX2FkZF9t
ZXRob2R2KEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNrIGNh
bGxiCiAgKiBAY2FsbGJhY2sgaXMgY2FsbGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5zdGFuY2Ug
YXMgZmlyc3QgcGFyYW1ldGVyLCBmb2xsb3dlZCBieSBhICNHUHRyQXJyYXkgb2YgI0pTQ1ZhbHVl
PCEtLSAtLT5zCiAgKiB3aXRoIHRoZSBtZXRob2QgYXJndW1lbnRzIGFuZCB0aGVuIEB1c2VyX2Rh
dGEgYXMgbGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGluIHRoZSAj
SlNDQ2xhc3MgY29udGV4dCwKICAqIEBkZXN0cm95X25vdGlmeSBpcyBjYWxsZWQgd2l0aCBAdXNl
cl9kYXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVk
IGJ5IEBjYWxsYmFjayBtdXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9mIGJveGVk
IHR5cGVzLCB5b3UgY291bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBvZiB0aGUg
YWN0dWFsIGJveGVkICNHVHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkg
I0pTQ0NsYXNzIGlzIHVzZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3
IGNvcHkgb2YgdGhlIGJveGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJldHVybiBh
ICNKU0NWYWx1ZSBjcmVhdGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCBy
ZWNlaXZlcyB0aGUgY29weSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCiAgKi8KIHZvaWQganNjX2Ns
YXNzX2FkZF9tZXRob2RfdmFyaWFkaWMoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBu
YW1lLCBHQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlm
eSBkZXN0cm95Tm90aWZ5LCBHVHlwZSByZXR1cm5UeXBlKQogewpAQCAtODE2LDYgKzg0MCwxMSBA
QCB2b2lkIGpzY19jbGFzc19hZGRfbWV0aG9kX3ZhcmlhZGljKEpTQ0NsYXNzKiBqc2NDbGFzcywg
Y29uc3QgY2hhciogbmFtZSwgR0NhbGxiYQogICogdmFsdWUgbmVlZHMgdG8gYmUgc2V0LCBAc2V0
dGVyIGlzIGNhbGxlZCByZWNlaXZpbmcgdGhlIHRoZSBjbGFzcyBpbnN0YW5jZSBhcyBmaXJzdCBw
YXJhbWV0ZXIsIGZvbGxvd2VkCiAgKiBieSB0aGUgdmFsdWUgdG8gYmUgc2V0IGFuZCB0aGVuIEB1
c2VyX2RhdGEgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLiBXaGVuIHRoZSBwcm9wZXJ0eSBpcyBjbGVh
cmVkIGluIHRoZQogICogI0pTQ0NsYXNzIGNvbnRleHQsIEBkZXN0cm95X25vdGlmeSBpcyBjYWxs
ZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHZh
bHVlIHJldHVybmVkIGJ5IEBnZXR0ZXIgbXVzdCBiZSBmdWxseSB0cmFuc2ZlcnJlZC4gSW4gY2Fz
ZSBvZiBib3hlZCB0eXBlcywgeW91IGNvdWxkIHVzZQorICogJUdfVFlQRV9QT0lOVEVSIGluc3Rl
YWQgb2YgdGhlIGFjdHVhbCBib3hlZCAjR1R5cGUgdG8gZW5zdXJlIHRoYXQgdGhlIGluc3RhbmNl
IG93bmVkIGJ5ICNKU0NDbGFzcyBpcyB1c2VkLgorICogSWYgeW91IHJlYWxseSB3YW50IHRvIHJl
dHVybiBhIG5ldyBjb3B5IG9mIHRoZSBib3hlZCB0eXBlLCB1c2UgI0pTQ19UWVBFX1ZBTFVFIGFu
ZCByZXR1cm4gYSAjSlNDVmFsdWUgY3JlYXRlZAorICogd2l0aCBqc2NfdmFsdWVfbmV3X29iamVj
dCgpIHRoYXQgcmVjZWl2ZXMgdGhlIGNvcHkgYXMgaW5zdGFuY2UgcGFyYW1ldGVyLgogICovCiB2
b2lkIGpzY19jbGFzc19hZGRfcHJvcGVydHkoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFy
KiBuYW1lLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdDYWxsYmFjayBnZXR0ZXIsIEdDYWxsYmFjayBz
ZXR0ZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5KQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKaW5kZXggODVl
ZDBhYWYxN2QuLmFjMWVkMWY1YjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NWYWx1ZS5jcHAKQEAgLTU4NywxMSArNTg3LDEyIEBAIGdib29sZWFuIGpzY192YWx1ZV9p
c19hcnJheShKU0NWYWx1ZSogdmFsdWUpCiAvKioKICAqIGpzY192YWx1ZV9uZXdfb2JqZWN0Ogog
ICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKLSAqIEBpbnN0YW5jZTogKG51bGxhYmxlKTogYW4g
b2JqZWN0IGluc3RhbmNlIG9yICVOVUxMCisgKiBAaW5zdGFuY2U6IChudWxsYWJsZSkgKHRyYW5z
ZmVyIGZ1bGwpOiBhbiBvYmplY3QgaW5zdGFuY2Ugb3IgJU5VTEwKICAqIEBqc2NfY2xhc3M6IChu
dWxsYWJsZSk6IHRoZSAjSlNDQ2xhc3Mgb2YgQGluc3RhbmNlCiAgKgogICogQ3JlYXRlIGEgbmV3
ICNKU0NWYWx1ZSBmcm9tIEBpbnN0YW5jZS4gSWYgQGluc3RhbmNlIGlzICVOVUxMIGEgbmV3IGVt
cHR5IG9iamVjdCBpcyBjcmVhdGVkLgotICogV2hlbiBAaW5zdGFuY2UgaXMgcHJvdmlkZWQsIEBq
c2NfY2xhc3MgbXVzdCBiZSBwcm92aWRlZCB0b28uCisgKiBXaGVuIEBpbnN0YW5jZSBpcyBwcm92
aWRlZCwgQGpzY19jbGFzcyBtdXN0IGJlIHByb3ZpZGVkIHRvby4gQGpzY19jbGFzcyB0YWtlcyBv
d25lcnNoaXAgb2YKKyAqIEBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZnJlZWQgYnkgdGhlICNHRGVz
dHJveU5vdGlmeSBwYXNzZWQgdG8ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoKS4KICAqCiAg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlLgogICovCkBAIC0xMDY3LDYg
KzEwNjgsMTEgQEAgdm9pZCBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKEpT
Q1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogcHJvcGVydHkKICAqIFdoZW4gdGhlIHByb3BlcnR5
IGlzIGNsZWFyZWQgaW4gdGhlICNKU0NDbGFzcyBjb250ZXh0LCBAZGVzdHJveV9ub3RpZnkgaXMg
Y2FsbGVkIHdpdGgKICAqIEB1c2VyX2RhdGEgYXMgcGFyYW1ldGVyLiBUaGlzIGlzIGVxdWl2YWxl
bnQgdG8gSmF2YVNjcmlwdCA8ZnVuY3Rpb24+T2JqZWN0LmRlZmluZVByb3BlcnR5KCk8L2Z1bmN0
aW9uPgogICogd2hlbiB1c2VkIHdpdGggYW4gYWNjZXNzb3IgZGVzY3JpcHRvci4KKyAqCisgKiBO
b3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBnZXR0ZXIgbXVzdCBiZSBmdWxseSB0cmFu
c2ZlcnJlZC4gSW4gY2FzZSBvZiBib3hlZCB0eXBlcywgeW91IGNvdWxkIHVzZQorICogJUdfVFlQ
RV9QT0lOVEVSIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBib3hlZCAjR1R5cGUgdG8gZW5zdXJlIHRo
YXQgdGhlIGluc3RhbmNlIG93bmVkIGJ5ICNKU0NDbGFzcyBpcyB1c2VkLgorICogSWYgeW91IHJl
YWxseSB3YW50IHRvIHJldHVybiBhIG5ldyBjb3B5IG9mIHRoZSBib3hlZCB0eXBlLCB1c2UgI0pT
Q19UWVBFX1ZBTFVFIGFuZCByZXR1cm4gYSAjSlNDVmFsdWUgY3JlYXRlZAorICogd2l0aCBqc2Nf
dmFsdWVfbmV3X29iamVjdCgpIHRoYXQgcmVjZWl2ZXMgdGhlIGNvcHkgYXMgaW5zdGFuY2UgcGFy
YW1ldGVyLgogICovCiB2b2lkIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vz
c29yKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0NWYWx1ZVBy
b3BlcnR5RmxhZ3MgZmxhZ3MsIEdUeXBlIHByb3BlcnR5VHlwZSwgR0NhbGxiYWNrIGdldHRlciwg
R0NhbGxiYWNrIHNldHRlciwgZ3BvaW50ZXIgdXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ry
b3lOb3RpZnkpCiB7CkBAIC0xMTMyLDYgKzExMzgsMTEgQEAgc3RhdGljIEdSZWZQdHI8SlNDVmFs
dWU+IGpzY1ZhbHVlRnVuY3Rpb25DcmVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hh
cioKICAqIHJlY2VpdmluZyB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgdGhlbiBAdXNlcl9k
YXRhIGFzIGxhc3QgcGFyYW1ldGVyLiBXaGVuIHRoZSBmdW5jdGlvbiBpcwogICogY2xlYXJlZCBp
biBAY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoIEB1c2VyX2RhdGEgYXMg
cGFyYW1ldGVyLgogICoKKyAqIE5vdGUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNhbGxi
YWNrIG11c3QgYmUgZnVsbHkgdHJhbnNmZXJyZWQuIEluIGNhc2Ugb2YgYm94ZWQgdHlwZXMsIHlv
dSBjb3VsZCB1c2UKKyAqICVHX1RZUEVfUE9JTlRFUiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYm94
ZWQgI0dUeXBlIHRvIGVuc3VyZSB0aGF0IHRoZSBpbnN0YW5jZSBvd25lZCBieSAjSlNDQ2xhc3Mg
aXMgdXNlZC4KKyAqIElmIHlvdSByZWFsbHkgd2FudCB0byByZXR1cm4gYSBuZXcgY29weSBvZiB0
aGUgYm94ZWQgdHlwZSwgdXNlICNKU0NfVFlQRV9WQUxVRSBhbmQgcmV0dXJuIGEgI0pTQ1ZhbHVl
IGNyZWF0ZWQKKyAqIHdpdGgganNjX3ZhbHVlX25ld19vYmplY3QoKSB0aGF0IHJlY2VpdmVzIHRo
ZSBjb3B5IGFzIGluc3RhbmNlIHBhcmFtZXRlci4KKyAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IGEgI0pTQ1ZhbHVlLgogICovCiBKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19mdW5jdGlv
bihKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJh
Y2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBHVHlw
ZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCkBAIC0xMTY4LDYgKzExNzks
MTEgQEAgSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWMKICAqIHJlY2VpdmluZyB0aGUgZnVuY3Rpb24g
cGFyYW1ldGVycyBhbmQgdGhlbiBAdXNlcl9kYXRhIGFzIGxhc3QgcGFyYW1ldGVyLiBXaGVuIHRo
ZSBmdW5jdGlvbiBpcwogICogY2xlYXJlZCBpbiBAY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlz
IGNhbGxlZCB3aXRoIEB1c2VyX2RhdGEgYXMgcGFyYW1ldGVyLgogICoKKyAqIE5vdGUgdGhhdCB0
aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNhbGxiYWNrIG11c3QgYmUgZnVsbHkgdHJhbnNmZXJyZWQu
IEluIGNhc2Ugb2YgYm94ZWQgdHlwZXMsIHlvdSBjb3VsZCB1c2UKKyAqICVHX1RZUEVfUE9JTlRF
UiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYm94ZWQgI0dUeXBlIHRvIGVuc3VyZSB0aGF0IHRoZSBp
bnN0YW5jZSBvd25lZCBieSAjSlNDQ2xhc3MgaXMgdXNlZC4KKyAqIElmIHlvdSByZWFsbHkgd2Fu
dCB0byByZXR1cm4gYSBuZXcgY29weSBvZiB0aGUgYm94ZWQgdHlwZSwgdXNlICNKU0NfVFlQRV9W
QUxVRSBhbmQgcmV0dXJuIGEgI0pTQ1ZhbHVlIGNyZWF0ZWQKKyAqIHdpdGgganNjX3ZhbHVlX25l
d19vYmplY3QoKSB0aGF0IHJlY2VpdmVzIHRoZSBjb3B5IGFzIGluc3RhbmNlIHBhcmFtZXRlci4K
KyAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlLgogICovCiBKU0NW
YWx1ZSoganNjX3ZhbHVlX25ld19mdW5jdGlvbnYoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogbmFtZSwgR0NhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ry
b3lOb3RpZnkgZGVzdHJveU5vdGlmeSwgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1l
dGVyc0NvdW50LCBHVHlwZSAqcGFyYW1ldGVyVHlwZXMpCkBAIC0xMjAwLDYgKzEyMTYsMTEgQEAg
SlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfZnVuY3Rpb252KEpTQ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIG5hbWUsIEdDYWxsYmEKICAqIHJlY2VpdmluZyBhbiAjR1B0ckFycmF5IG9mICNK
U0NWYWx1ZTwhLS0gLS0+cyB3aXRoIHRoZSBhcmd1bWVudHMgYW5kIHRoZW4gQHVzZXJfZGF0YSBh
cyBsYXN0IHBhcmFtZXRlci4KICAqIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNsZWFyZWQgaW4gQGNv
bnRleHQsIEBkZXN0cm95X25vdGlmeSBpcyBjYWxsZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFt
ZXRlci4KICAqCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjYWxsYmFjayBt
dXN0IGJlIGZ1bGx5IHRyYW5zZmVycmVkLiBJbiBjYXNlIG9mIGJveGVkIHR5cGVzLCB5b3UgY291
bGQgdXNlCisgKiAlR19UWVBFX1BPSU5URVIgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGJveGVkICNH
VHlwZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb3duZWQgYnkgI0pTQ0NsYXNzIGlzIHVz
ZWQuCisgKiBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmV0dXJuIGEgbmV3IGNvcHkgb2YgdGhlIGJv
eGVkIHR5cGUsIHVzZSAjSlNDX1RZUEVfVkFMVUUgYW5kIHJldHVybiBhICNKU0NWYWx1ZSBjcmVh
dGVkCisgKiB3aXRoIGpzY192YWx1ZV9uZXdfb2JqZWN0KCkgdGhhdCByZWNlaXZlcyB0aGUgY29w
eSBhcyBpbnN0YW5jZSBwYXJhbWV0ZXIuCisgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBhICNKU0NWYWx1ZS4KICAqLwogSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfZnVuY3Rpb25fdmFy
aWFkaWMoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNrIGNh
bGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlmeSwg
R1R5cGUgcmV0dXJuVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGQxYjhjMTJmN2Nh
Li44N2ZlZDk3NzJlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTktMDMtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHTGliXSBSZXR1cm5pbmcgR19UWVBFX09CSkVDVCBmcm9tIGEgbWV0aG9kIGRv
ZXMgbm90IHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NTU3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBtb3JlIGRvY3VtZW50YXRpb24gdG8gY2xhcmlmeSB0aGUgb3duZXJzaGlwIG9mIHdy
YXBwZWQgb2JqZWN0cyB3aGVuIGNyZWF0ZWQgYW5kIHdoZW4gcmV0dXJuZWQgYnkgZnVuY3Rpb25z
LgorCisgICAgICAgICogQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdCk6IEFsc28gYWxsb3cgdG8gcmV0
dXJuIGJveGVkIHR5cGVzIGZyb20gYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBBUEkvZ2xpYi9K
U0NDbGFzcy5jcHA6CisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorCiAyMDE5LTAz
LTEyICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
T1NSIGVudHJ5IHNob3VsZCByZXNwZWN0IGFic3RyYWN0IHZhbHVlcyBpbiBhZGRpdGlvbiB0byBm
bHVzaCBmb3JtYXRzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggOWQyM2M4NjNiMDcuLjNkMDg2MTMwZGFhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTktMDMtMTMg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
TGliXSBSZXR1cm5pbmcgR19UWVBFX09CSkVDVCBmcm9tIGEgbWV0aG9kIGRvZXMgbm90IHdvcmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTU3NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcg
dGVzdCBjYXNlcyB0byBjaGVjayB0aGUgYmVoYXZpb3Igb2YgY29uc3RydWN0b3JzIGFuZCBmdW5j
dGlvbnMgcmV0dXJuaW5nIEdPYmplY3QgYW5kIGJveGVkIHR5cGVzLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwOgorICAgICAg
ICAoZ2V0R0ZpbGUpOgorICAgICAgICAoZ2V0UGFyZW50KToKKyAgICAgICAgKGNyZWF0ZUdTdHJp
bmcpOgorICAgICAgICAoZ2V0R1N0cmluZyk6CisgICAgICAgIChnZXRHU3RyaW5nQ29weVdpbGxS
YWlzZSk6CisgICAgICAgIChnZXRHU3RyaW5nQ29weSk6CisgICAgICAgIChnZXRHU3RyaW5nU3Ry
KToKKyAgICAgICAgKGdldEdTdHJpbmdMZW4pOgorICAgICAgICAoZnJlZUdTdHJpbmcpOgorICAg
ICAgICAodGVzdEpTQ0NsYXNzKToKKwogMjAxOS0wMy0xMiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mu
a2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGEgc2xldyBvZiBzaW1wbGUg
Y2xhbmctY2wgd2FybmluZ3MuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAKaW5kZXggMjBiYjJmZWQ4OGUuLmY1
ZjY1ZDlkYjUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3Jp
cHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9K
YXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCkBAIC0xNTk3LDYgKzE1OTcsNjAgQEAgc3Rh
dGljIEdGaWxlKiBjcmVhdGVHRmlsZShjb25zdCBjaGFyKiBwYXRoKQogICAgIHJldHVybiBmaWxl
OwogfQogCitzdGF0aWMgR0ZpbGUqIGdldEdGaWxlKEdGaWxlKiBmaWxlKQoreworICAgIHJldHVy
biBHX0ZJTEUoZ19vYmplY3RfcmVmKGZpbGUpKTsKK30KKworc3RhdGljIEpTQ1ZhbHVlKiBnZXRQ
YXJlbnQoR0ZpbGUqIGZpbGUsIEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBhdXRvKiBjaGVj
a2VyID0gc3RhdGljX2Nhc3Q8TGVha0NoZWNrZXIqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVD
VChqc2NfY29udGV4dF9nZXRfY3VycmVudCgpKSwgImxlYWstY2hlY2tlciIpKTsKKyAgICBHRmls
ZSogcGFyZW50ID0gZ19maWxlX2dldF9wYXJlbnQoZmlsZSk7CisgICAgY2hlY2tlci0+d2F0Y2go
cGFyZW50KTsKKyAgICBhdXRvKiB2YWx1ZSA9IGpzY192YWx1ZV9uZXdfb2JqZWN0KGpzY19jb250
ZXh0X2dldF9jdXJyZW50KCksIHBhcmVudCwganNjQ2xhc3MpOworICAgIGNoZWNrZXItPndhdGNo
KHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBHU3RyaW5nKiBjcmVhdGVH
U3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKK3sKKyAgICByZXR1cm4gZ19zdHJpbmdfbmV3KHN0cik7
Cit9CisKK3N0YXRpYyBHU3RyaW5nKiBnZXRHU3RyaW5nKEdTdHJpbmcqIHN0cikKK3sKKyAgICBy
ZXR1cm4gc3RyOworfQorCitzdGF0aWMgR1N0cmluZyogZ2V0R1N0cmluZ0NvcHlXaWxsUmFpc2Uo
R1N0cmluZyogc3RyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyaW5nKj4oZ19ib3hl
ZF9jb3B5KEdfVFlQRV9HU1RSSU5HLCBzdHIpKTsKK30KKworc3RhdGljIEpTQ1ZhbHVlKiBnZXRH
U3RyaW5nQ29weShHU3RyaW5nICpzdHIsIEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBhdXRv
KiBjaGVja2VyID0gc3RhdGljX2Nhc3Q8TGVha0NoZWNrZXIqPihnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVChqc2NfY29udGV4dF9nZXRfY3VycmVudCgpKSwgImxlYWstY2hlY2tlciIpKTsKKyAg
ICBhdXRvKiBjb3B5ID0gZ2V0R1N0cmluZ0NvcHlXaWxsUmFpc2Uoc3RyKTsKKyAgICBhdXRvKiB2
YWx1ZSA9IGpzY192YWx1ZV9uZXdfb2JqZWN0KGpzY19jb250ZXh0X2dldF9jdXJyZW50KCksIGNv
cHksIGpzY0NsYXNzKTsKKyAgICBjaGVja2VyLT53YXRjaCh2YWx1ZSk7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCitzdGF0aWMgY2hhciogZ2V0R1N0cmluZ1N0cihHU3RyaW5nKiBzdHIpCit7Cisg
ICAgcmV0dXJuIGdfc3RyZHVwKHN0ci0+c3RyKTsKK30KKworc3RhdGljIGd1aW50NjQgZ2V0R1N0
cmluZ0xlbihHU3RyaW5nKiBzdHIpCit7CisgICAgcmV0dXJuIHN0ci0+bGVuOworfQorCitzdGF0
aWMgdm9pZCBmcmVlR1N0cmluZyhHU3RyaW5nKiBzdHIpCit7CisgICAgZ19zdHJpbmdfZnJlZShz
dHIsIFRSVUUpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0SlNDQ2xhc3MoKQogewogICAgIHsKQEAg
LTIyOTYsNiArMjM1MCwxMzUgQEAgc3RhdGljIHZvaWQgdGVzdEpTQ0NsYXNzKCkKICAgICAgICAg
Z19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHZhbHVlMi5nZXQoKSkpOwogICAgICAg
ICByZXN1bHRTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZTIuZ2V0KCkpKTsK
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdFN0cmluZy5nZXQoKSwgPT0sIGN1cnJlbnRE
aXJlY3RvcnkuZ2V0KCkpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfbWV0aG9kKGpzY0NsYXNz
LCAiZ2V0R0ZpbGUiLCBHX0NBTExCQUNLKGdldEdGaWxlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19U
WVBFX09CSkVDVCwgMCwgR19UWVBFX05PTkUpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgR0ZpbGUoJy4nKTsg
ZjIgPSBmLmdldEdGaWxlKCk7IGYyLmdldFBhdGgoKSIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
c3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHRTdHJpbmcucmVzZXQoanNjX3Zh
bHVlX3RvX3N0cmluZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHJl
c3VsdFN0cmluZy5nZXQoKSwgPT0sIGN1cnJlbnREaXJlY3RvcnkuZ2V0KCkpOworCisgICAgICAg
IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChmaWxlLmdl
dCgpLCAiZ2V0R0ZpbGUiLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZh
bHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh2YWx1ZS5nZXQoKSA9PSBmaWxlLmdl
dCgpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChqc2NDbGFzcywgImdldFBhcmVu
dCIsIEdfQ0FMTEJBQ0soZ2V0UGFyZW50KSwganNjQ2xhc3MsIG51bGxwdHIsIEpTQ19UWVBFX1ZB
TFVFLCAwLCBHX1RZUEVfTk9ORSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBHRmlsZSgnLicpOyBwID0gZi5n
ZXRQYXJlbnQoKTsgcC5nZXRQYXRoKCkiLCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJl
c3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3N0cmluZyhy
ZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0U3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19z
dHJpbmcocmVzdWx0LmdldCgpKSk7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGFyZW50RGly
ZWN0b3J5KGdfcGF0aF9nZXRfZGlybmFtZShjdXJyZW50RGlyZWN0b3J5LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHRTdHJpbmcuZ2V0KCksID09LCBwYXJlbnREaXJlY3Rv
cnkuZ2V0KCkpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfbWV0aG9kKGpzY0NsYXNzLCAiZXF1
YWwiLCBHX0NBTExCQUNLKGdfZmlsZV9lcXVhbCksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9C
T09MRUFOLCAxLCBHX1RZUEVfT0JKRUNUKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMSA9IG5ldyBHRmlsZSgnLicpOyBm
MiA9IG5ldyBHRmlsZSgnLicpOyBmMS5lcXVhbChmMik7IiwgLTEpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIEdGaWxlKiBmaWxlT2JqZWN0
ID0gZ19maWxlX25ld19mb3JfcGF0aCgiLiIpOworICAgICAgICBjaGVja2VyLndhdGNoKGZpbGVP
YmplY3QpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmaWxlVmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgZmlsZU9iamVjdCwganNjQ2xhc3Mp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmaWxlVmFsdWUuZ2V0KCkpOworCisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZmlsZS5nZXQo
KSwgImVxdWFsIiwgR19UWVBFX09CSkVDVCwgZmlsZU9iamVjdCwgR19UWVBFX05PTkUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZmlsZS5nZXQoKSwg
ImVxdWFsIiwgSlNDX1RZUEVfVkFMVUUsIGZpbGVWYWx1ZS5nZXQoKSwgR19UWVBFX05PTkUpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19P
QkpFQ1QoY29udGV4dC5nZXQoKSksICJsZWFrLWNoZWNrZXIiLCAmY2hlY2tlcik7CisgICAgICAg
IEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAg
ICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250
ZXh0LmdldCgpLCAiR1N0cmluZyIsIG51bGxwdHIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGZyZWVHU3RyaW5nKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNj
Q2xhc3MpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRH
UmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJB
Q0soY3JlYXRlR1N0cmluZyksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9HU1RSSU5HLCAxLCBH
X1RZUEVfU1RSSU5HKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1
Y3Rvci5nZXQoKSkpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfcHJvcGVydHkoanNjQ2xhc3Ms
ICJzdHIiLCBHX1RZUEVfU1RSSU5HLCBHX0NBTExCQUNLKGdldEdTdHJpbmdTdHIpLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2ND
bGFzcywgImxlbiIsIEdfVFlQRV9VSU5UNjQsIEdfQ0FMTEJBQ0soZ2V0R1N0cmluZ0xlbiksIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1
ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xhc3MpLCBjb25zdHJ1Y3Rv
ci5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gc3RyID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJzID0gbmV3IEdTdHJpbmcoJ0Zvbycp
OyIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goc3RyLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KHN0ci5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2Yoc3RyLmdldCgpLCBqc2Nf
Y2xhc3NfZ2V0X25hbWUoanNjQ2xhc3MpKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicyBp
bnN0YW5jZW9mIEdTdHJpbmc7IiwgLTEpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworCisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX29iamVjdF9o
YXNfcHJvcGVydHkoc3RyLmdldCgpLCAic3RyIikpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eShzdHIuZ2V0
KCksICJzdHIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICAg
ICAgR1VuaXF1ZVB0cjxjaGFyPiByZXN1bHRTdHJpbmcoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1
ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0U3RyaW5nLmdldCgpLCA9
PSwgIkZvbyIpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlMiA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicy5zdHIiLCAtMSkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHZhbHVlMi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZTIuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0U3RyaW5n
LnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUyLmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cihyZXN1bHRTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gdmFsdWUzID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJzLmxlbiIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUz
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVl
My5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZh
bHVlMy5nZXQoKSksID09LCAzKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChqc2ND
bGFzcywgImdldEdTdHJpbmciLCBHX0NBTExCQUNLKGdldEdTdHJpbmcpLCBudWxscHRyLCBudWxs
cHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworICAgICAgICByZXN1bHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInMgPSBuZXcgR1N0
cmluZygnU2VsZicpOyBzMiA9IHMuZ2V0R1N0cmluZygpOyBzMi5zdHI7IiwgLTEpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpz
Y192YWx1ZV9pc19zdHJpbmcocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdFN0cmluZy5y
ZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIocmVzdWx0U3RyaW5nLmdldCgpLCA9PSwgIlNlbGYiKTsKKworICAgICAgICBqc2Nf
Y2xhc3NfYWRkX21ldGhvZChqc2NDbGFzcywgImdldEdTdHJpbmdDb3B5IiwgR19DQUxMQkFDSyhn
ZXRHU3RyaW5nQ29weSksIGpzY0NsYXNzLCBudWxscHRyLCBKU0NfVFlQRV9WQUxVRSwgMCwgR19U
WVBFX05PTkUpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgInMgPSBuZXcgR1N0cmluZygnQ29weScpOyBzMiA9IHMuZ2V0R1N0
cmluZ0NvcHkoKTsgczIuc3RyOyIsIC0xKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICByZXN1bHRTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmlu
ZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdFN0cmluZy5n
ZXQoKSwgPT0sICJDb3B5Iik7CisKKyAgICAgICAganNjX2NsYXNzX2FkZF9tZXRob2QoanNjQ2xh
c3MsICJnZXRHU3RyaW5nQ29weVdpbGxSYWlzZSIsIEdfQ0FMTEJBQ0soZ2V0R1N0cmluZ0NvcHlX
aWxsUmFpc2UpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfR1NUUklORywgMCwgR19UWVBFX05P
TkUpOworICAgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICAgIGdfYXNzZXJ0X3Ro
cm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJzID0gbmV3IEdT
dHJpbmcoJ0NvcHknKTsgczIgPSBzLmdldEdTdHJpbmdDb3B5V2lsbFJhaXNlKCk7IHMyLnN0cjsi
LCAtMSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnRfZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKworICAg
ICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChqc2NDbGFzcywgImVxdWFsIiwgR19DQUxMQkFDSyhn
X3N0cmluZ19lcXVhbCksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9CT09MRUFOLCAxLCBHX1RZ
UEVfR1NUUklORyk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiczEgPSBuZXcgR1N0cmluZygnQmFyJyk7IHMyID0gbmV3IEdT
dHJpbmcoJ0JhcicpOyBzMS5lcXVhbChzMik7IiwgLTEpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29s
ZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19i
b29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIEdTdHJpbmcqIHN0ckJveGVkID0gZ19z
dHJpbmdfbmV3KCJGb28iKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gc3RyVmFsdWUgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgc3RyQm94ZWQsIGpz
Y0NsYXNzKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goc3RyVmFsdWUuZ2V0KCkpOworCisgICAg
ICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2Qoc3Ry
LmdldCgpLCAiZXF1YWwiLCBHX1RZUEVfR1NUUklORywgc3RyQm94ZWQsIEdfVFlQRV9OT05FKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKHN0ci5nZXQo
KSwgImVxdWFsIiwgSlNDX1RZUEVfVkFMVUUsIHN0clZhbHVlLmdldCgpLCBHX1RZUEVfTk9ORSkp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CiAgICAgfQogfQog
Cg==
</data>
<flag name="review"
          id="381169"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>