<?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>184041</bug_id>
          
          <creation_ts>2018-03-27 08:05:24 -0700</creation_ts>
          <short_desc>[GLIB] Add JSCWeakValue to JavaScriptCore GLib API</short_desc>
          <delta_ts>2018-03-27 23:23:14 -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>WebKit 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>Gtk, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1409543</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-27 08:05:24 -0700</bug_when>
    <thetext>To be able to keep references to JavaScript values without protecting them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409544</commentid>
    <comment_count>1</comment_count>
      <attachid>336585</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-27 08:09:16 -0700</bug_when>
    <thetext>Created attachment 336585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409583</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-27 10:50:13 -0700</bug_when>
    <thetext>Why not porting and calling it as JSManagedValue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409590</commentid>
    <comment_count>3</comment_count>
      <attachid>336585</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-27 11:11:29 -0700</bug_when>
    <thetext>Comment on attachment 336585
Patch

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

&gt; Source/JavaScriptCore/API/glib/JSCWeakValue.cpp:193
&gt; +        g_signal_emit(weakValue, signals[CLEARED], 0, nullptr);

I&apos;m hesitant about this signal. Wouldn&apos;t it be better for the user to pass in a GWeakNotify to be called instead of using a signal? The signal makes it hard to use in performance-sensitive code.

I even thought about suggesting that JSCWeakValue be a GBoxed or even an opaque struct instead of a GObject, but I suppose since JSCValue is a GObject it&apos;s better to parallel that.

&gt; Source/JavaScriptCore/API/glib/JSCWeakValue.cpp:260
&gt; +            static_cast&lt;GParamFlags&gt;(WEBKIT_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)));

Might want to add a warning comment as to why it must never be made readable.

&gt; Source/JavaScriptCore/API/glib/JSCWeakValue.cpp:299
&gt; + * Returns: (transfer full): a new #JSCValue or %NULL if @weak_value was cleared.

I was worried about the JSCValue being destroyed on the GC thread, but I suppose that cannot ever happen because you take a lock here and return a strong ref. That&apos;s the main thing I was looking to see in this review. Good.

&gt; Source/JavaScriptCore/API/glib/JSCWeakValue.h:54
&gt; +    void (*_jsc_reserved0) (void);

It has a signal, why not expose it here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409591</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-27 11:12:15 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #2)
&gt; Why not porting and calling it as JSManagedValue?

I don&apos;t understand Yusuke&apos;s question, but please satisfy him before committing, of course. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409593</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-27 11:22:07 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #4)
&gt; (In reply to Yusuke Suzuki from comment #2)
&gt; &gt; Why not porting and calling it as JSManagedValue?
&gt; 
&gt; I don&apos;t understand Yusuke&apos;s question, but please satisfy him before
&gt; committing, of course. :)

https://developer.apple.com/documentation/javascriptcore/jsmanagedvalue
Objective-C API has JSManagedValue, which is a bit extended version of this JSCWeakValue.
It is basically weak JSValue holder, in addition, it has a special mechanism to tell Objective-C graph to JSC&apos;s Garbage Collector by using JSVirtualMachine&apos;s API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409787</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-27 23:06:04 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #2)
&gt; Why not porting and calling it as JSManagedValue?

This is basically the same as JSManagedValue, but without the owners part. I prefer to use Weak rather tahn Managed, because I think it&apos;s more familiar for GLib APIs. I plan to add the owners part on top of this, it&apos;s a matter of adding new_with_owner() and add all the virtual machine part, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409788</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-27 23:12:39 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; Comment on attachment 336585 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336585&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCWeakValue.cpp:193
&gt; &gt; +        g_signal_emit(weakValue, signals[CLEARED], 0, nullptr);
&gt; 
&gt; I&apos;m hesitant about this signal. Wouldn&apos;t it be better for the user to pass
&gt; in a GWeakNotify to be called instead of using a signal? The signal makes it
&gt; hard to use in performance-sensitive code.

This is not a weak reference to itself like GWeakNotify. GWeakNotify receives a GObject, what do we pass there? we don&apos;t really keep the JSCValue, so we don&apos;t have anything to pass there. The JSCWeakValue is still alive, so it doesn&apos;t make sense to pass the weak value either.

&gt; I even thought about suggesting that JSCWeakValue be a GBoxed or even an
&gt; opaque struct instead of a GObject, but I suppose since JSCValue is a
&gt; GObject it&apos;s better to parallel that.

What&apos;s the point? The main advantage of being a GObject is that we can receive the JSCValue as a write-only construct-only parameter.

&gt; &gt; Source/JavaScriptCore/API/glib/JSCWeakValue.cpp:260
&gt; &gt; +            static_cast&lt;GParamFlags&gt;(WEBKIT_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)));
&gt; 
&gt; Might want to add a warning comment as to why it must never be made readable.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCWeakValue.cpp:299
&gt; &gt; + * Returns: (transfer full): a new #JSCValue or %NULL if @weak_value was cleared.
&gt; 
&gt; I was worried about the JSCValue being destroyed on the GC thread, but I
&gt; suppose that cannot ever happen because you take a lock here and return a
&gt; strong ref. That&apos;s the main thing I was looking to see in this review. Good.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCWeakValue.h:54
&gt; &gt; +    void (*_jsc_reserved0) (void);
&gt; 
&gt; It has a signal, why not expose it here?

The signal is just a notification, we don&apos;t have a default impl, and I don&apos;t expect subclasses need to override it at all. Actually I don&apos;t expect subclasses at all, but I don&apos;t want to limit it for no reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409789</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-27 23:14:01 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #5)
&gt; (In reply to Michael Catanzaro from comment #4)
&gt; &gt; (In reply to Yusuke Suzuki from comment #2)
&gt; &gt; &gt; Why not porting and calling it as JSManagedValue?
&gt; &gt; 
&gt; &gt; I don&apos;t understand Yusuke&apos;s question, but please satisfy him before
&gt; &gt; committing, of course. :)
&gt; 
&gt; https://developer.apple.com/documentation/javascriptcore/jsmanagedvalue
&gt; Objective-C API has JSManagedValue, which is a bit extended version of this
&gt; JSCWeakValue.
&gt; It is basically weak JSValue holder, in addition, it has a special mechanism
&gt; to tell Objective-C graph to JSC&apos;s Garbage Collector by using
&gt; JSVirtualMachine&apos;s API.

Yes, I&apos;m just doing the same in two steps. I still need to understand how the owners thing work in a real use case to decide how to expose it in the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409790</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-27 23:22:09 -0700</bug_when>
    <thetext>Committed r230024: &lt;https://trac.webkit.org/changeset/230024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409791</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-27 23:23:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/38944365&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336585</attachid>
            <date>2018-03-27 08:09:16 -0700</date>
            <delta_ts>2018-03-27 11:11:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>jsc-glib-weak-value.diff</filename>
            <type>text/plain</type>
            <size>26230</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXZWFrVmFsdWUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dlYWtWYWx1ZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI5Y2QzNDA0M2U3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dlYWtWYWx1ZS5j
cHAKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ1dlYWtWYWx1ZS5oIgorCisjaW5j
bHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYWsuaCIKKyNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9nbGliL1dURkdUeXBlLmg+CisKKy8qKgorICogU0VDVElPTjogSlNDV2Vha1ZhbHVlCisg
KiBAc2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHQgd2VhayB2YWx1ZQorICogQHRpdGxlOiBK
U0NXZWFrVmFsdWUKKyAqIEBzZWVfYWxzbzogSlNDVmFsdWUKKyAqCisgKiBKU0NXZWFrVmFsdWUg
cmVwcmVzZW50cyBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgdmFsdWUgaW4gYSAjSlNDQ29udGV4dC4g
SXQgY2FuIGJlIHVzZWQKKyAqIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gYSBKYXZhU2NyaXB0IHZh
bHVlIHdpdGhvdXQgcHJvdGVjdGluZyBpdCBmcm9tIGJlaW5nIGdhcmJhZ2UKKyAqIGNvbGxlY3Rl
ZCBhbmQgd2l0aG91dCByZWZlcmVuY2luZyB0aGUgI0pTQ0NvbnRleHQgZWl0aGVyLgorICovCisK
K2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfVkFMVUUsCit9OworCitlbnVtIHsKKyAg
ICBDTEVBUkVELAorCisgICAgTEFTVF9TSUdOQUwKK307CisKKy8vIEZJWE1FOiBtb3ZlIHRoaXMg
dG8gaXRzIG93biBmaWxlIHRvIGJlIHNoYXJlZCBieSBHTGliIGFuZCBPYmpjIEFQSXMuCitjbGFz
cyBXZWFrVmFsdWVSZWYgeworcHVibGljOgorICAgIH5XZWFrVmFsdWVSZWYoKQorICAgIHsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAobV90YWcpIHsKKyAgICAgICAgY2FzZSBXZWFrVHlwZVRhZzo6Tm90U2V0OgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFdlYWtUeXBlVGFnOjpQcmltaXRpdmU6Cisg
ICAgICAgICAgICB1Lm1fcHJpbWl0aXZlID0gSlNDOjpKU1ZhbHVlKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgV2Vha1R5cGVUYWc6Ok9iamVjdDoKKyAgICAgICAgICAgIHUu
bV9vYmplY3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBXZWFr
VHlwZVRhZzo6U3RyaW5nOgorICAgICAgICAgICAgdS5tX3N0cmluZy5jbGVhcigpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN3aXRjaCAobV90YWcpIHsKKyAgICAgICAgY2FzZSBXZWFrVHlwZVRhZzo6Tm90U2V0OgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgV2Vha1R5cGVUYWc6OlByaW1pdGl2
ZToKKyAgICAgICAgICAgIHJldHVybiAhdS5tX3ByaW1pdGl2ZTsKKyAgICAgICAgY2FzZSBXZWFr
VHlwZVRhZzo6T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuICF1Lm1fb2JqZWN0OworICAgICAg
ICBjYXNlIFdlYWtUeXBlVGFnOjpTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gIXUubV9zdHJp
bmc7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90YWcgIT0gV2Vha1R5cGVU
YWc6Ok5vdFNldDsgfQorICAgIGJvb2wgaXNQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiBtX3Rh
ZyA9PSBXZWFrVHlwZVRhZzo6UHJpbWl0aXZlOyB9CisgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGFnID09IFdlYWtUeXBlVGFnOjpPYmplY3Q7IH0KKyAgICBib29sIGlzU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gbV90YWcgPT0gV2Vha1R5cGVUYWc6OlN0cmluZzsgfQorCisg
ICAgdm9pZCBzZXRQcmltaXRpdmUoSlNDOjpKU1ZhbHVlIHByaW1pdGl2ZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVCghdS5tX3ByaW1pdGl2ZSk7Cisg
ICAgICAgIEFTU0VSVChwcmltaXRpdmUuaXNQcmltaXRpdmUoKSk7CisgICAgICAgIG1fdGFnID0g
V2Vha1R5cGVUYWc6OlByaW1pdGl2ZTsKKyAgICAgICAgdS5tX3ByaW1pdGl2ZSA9IHByaW1pdGl2
ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldE9iamVjdChKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpT
Qzo6V2Vha0hhbmRsZU93bmVyJiBvd25lciwgdm9pZCogY29udGV4dCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVCghdS5tX29iamVjdCk7CisgICAgICAg
IG1fdGFnID0gV2Vha1R5cGVUYWc6Ok9iamVjdDsKKyAgICAgICAgSlNDOjpXZWFrPEpTQzo6SlNP
YmplY3Q+IHdlYWsob2JqZWN0LCAmb3duZXIsIGNvbnRleHQpOworICAgICAgICB1Lm1fb2JqZWN0
LnN3YXAod2Vhayk7CisgICAgfQorCisgICAgdm9pZCBzZXRTdHJpbmcoSlNDOjpKU1N0cmluZyog
c3RyaW5nLCBKU0M6OldlYWtIYW5kbGVPd25lciYgb3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAg
eworICAgICAgICBBU1NFUlQoIWlzU2V0KCkpOworICAgICAgICBBU1NFUlQoIXUubV9vYmplY3Qp
OworICAgICAgICBtX3RhZyA9IFdlYWtUeXBlVGFnOjpTdHJpbmc7CisgICAgICAgIEpTQzo6V2Vh
azxKU0M6OkpTU3RyaW5nPiB3ZWFrKHN0cmluZywgJm93bmVyLCBjb250ZXh0KTsKKyAgICAgICAg
dS5tX3N0cmluZy5zd2FwKHdlYWspOworICAgIH0KKworICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNPYmplY3QoKSk7CisgICAgICAgIHJl
dHVybiB1Lm1fb2JqZWN0LmdldCgpOworICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBwcmltaXRp
dmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUHJpbWl0aXZlKCkpOworICAgICAg
ICByZXR1cm4gdS5tX3ByaW1pdGl2ZTsKKyAgICB9CisKKyAgICBKU0M6OkpTU3RyaW5nKiBzdHJp
bmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU3RyaW5nKCkpOworICAgICAgICBy
ZXR1cm4gdS5tX3N0cmluZy5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFz
cyBXZWFrVHlwZVRhZyB7IE5vdFNldCwgUHJpbWl0aXZlLCBPYmplY3QsIFN0cmluZyB9OworCisg
ICAgV2Vha1R5cGVUYWcgbV90YWcgeyBXZWFrVHlwZVRhZzo6Tm90U2V0IH07CisKKyAgICB1bmlv
biBXZWFrVmFsdWVVbmlvbiB7CisgICAgcHVibGljOgorICAgICAgICBXZWFrVmFsdWVVbmlvbigp
CisgICAgICAgICAgICA6IG1fcHJpbWl0aXZlKEpTQzo6SlNWYWx1ZSgpKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICB+V2Vha1ZhbHVlVW5pb24oKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fcHJpbWl0aXZlKTsKKyAgICAgICAgfQorCisgICAgICAgIEpTQzo6SlNW
YWx1ZSBtX3ByaW1pdGl2ZTsKKyAgICAgICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fb2Jq
ZWN0OworICAgICAgICBKU0M6OldlYWs8SlNDOjpKU1N0cmluZz4gbV9zdHJpbmc7CisgICAgfSB1
OworfTsKKworc3RydWN0IF9KU0NXZWFrVmFsdWVQcml2YXRlIHsKKyAgICBKU0M6OldlYWs8SlND
OjpKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0OworICAgIFJlZlB0cjxKU0M6OkpTTG9jaz4g
bG9jazsKKyAgICBXZWFrVmFsdWVSZWYgd2Vha1ZhbHVlUmVmOworfTsKKworc3RhdGljIGd1aW50
IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitXRUJLSVRfREVGSU5FX1RZUEUoSlND
V2Vha1ZhbHVlLCBqc2Nfd2Vha192YWx1ZSwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQg
anNjV2Vha1ZhbHVlQ2xlYXIoSlNDV2Vha1ZhbHVlKiB3ZWFrVmFsdWUpCit7CisgICAgSlNDV2Vh
a1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHdlYWtWYWx1ZS0+cHJpdjsKKyAgICBwcml2LT5nbG9iYWxP
YmplY3QuY2xlYXIoKTsKKyAgICBwcml2LT53ZWFrVmFsdWVSZWYuY2xlYXIoKTsKK30KKworY2xh
c3MgSlNDV2Vha1ZhbHVlSGFuZGxlT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
eworcHVibGljOgorICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIHdlYWtWYWx1ZSA9
IEpTQ19XRUFLX1ZBTFVFKGNvbnRleHQpOworICAgICAgICBqc2NXZWFrVmFsdWVDbGVhcih3ZWFr
VmFsdWUpOworICAgICAgICBnX3NpZ25hbF9lbWl0KHdlYWtWYWx1ZSwgc2lnbmFsc1tDTEVBUkVE
XSwgMCwgbnVsbHB0cik7CisgICAgfQorfTsKKworc3RhdGljIEpTQ1dlYWtWYWx1ZUhhbmRsZU93
bmVyJiB3ZWFrVmFsdWVIYW5kbGVPd25lcigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEpTQ1dlYWtWYWx1ZUhhbmRsZU93bmVyPiBqc2NXZWFrVmFsdWVIYW5kbGVPd25lcjsKKyAgICBy
ZXR1cm4ganNjV2Vha1ZhbHVlSGFuZGxlT3duZXI7Cit9CisKK3N0YXRpYyB2b2lkIGpzY1dlYWtW
YWx1ZUluaXRpYWxpemUoSlNDV2Vha1ZhbHVlKiB3ZWFrVmFsdWUsIEpTQ1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBKU0NXZWFrVmFsdWVQcml2YXRlKiBwcml2ID0gd2Vha1ZhbHVlLT5wcml2OworICAg
IGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoanNjX3ZhbHVlX2dldF9j
b250ZXh0KHZhbHVlKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGpzQ29udGV4
dCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIG93bmVyID0gd2Vha1ZhbHVlSGFuZGxlT3duZXIo
KTsKKyAgICBKU0M6OldlYWs8SlNDOjpKU0dsb2JhbE9iamVjdD4gd2VhayhnbG9iYWxPYmplY3Qs
ICZvd25lciwgd2Vha1ZhbHVlKTsKKyAgICBwcml2LT5nbG9iYWxPYmplY3Quc3dhcCh3ZWFrKTsK
KyAgICBwcml2LT5sb2NrID0gJmV4ZWMtPnZtKCkuYXBpTG9jaygpOworCisgICAgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIGpzY1ZhbHVlR2V0SlNWYWx1ZSh2YWx1ZSkpOworICAg
IGlmIChqc1ZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHByaXYtPndlYWtWYWx1ZVJlZi5zZXRP
YmplY3QoSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGpzVmFsdWUuYXNDZWxsKCkpLCBvd25l
ciwgd2Vha1ZhbHVlKTsKKyAgICBlbHNlIGlmIChqc1ZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAg
IHByaXYtPndlYWtWYWx1ZVJlZi5zZXRTdHJpbmcoSlNDOjpqc0Nhc3Q8SlNDOjpKU1N0cmluZyo+
KGpzVmFsdWUuYXNDZWxsKCkpLCBvd25lciwgd2Vha1ZhbHVlKTsKKyAgICBlbHNlCisgICAgICAg
IHByaXYtPndlYWtWYWx1ZVJlZi5zZXRQcmltaXRpdmUoanNWYWx1ZSk7Cit9CisKK3N0YXRpYyB2
b2lkIGpzY1dlYWtWYWx1ZVNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElE
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgc3dp
dGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIGpzY1dlYWtWYWx1
ZUluaXRpYWxpemUoSlNDX1dFQUtfVkFMVUUob2JqZWN0KSwgSlNDX1ZBTFVFKGdfdmFsdWVfZ2V0
X29iamVjdCh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNw
ZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjV2Vha1ZhbHVlRGlzcG9zZShHT2JqZWN0
KiBvYmplY3QpCit7CisgICAgSlNDV2Vha1ZhbHVlKiB3ZWFrVmFsdWUgPSBKU0NfV0VBS19WQUxV
RShvYmplY3QpOworICAgIGpzY1dlYWtWYWx1ZUNsZWFyKHdlYWtWYWx1ZSk7CisKKyAgICBHX09C
SkVDVF9DTEFTUyhqc2Nfd2Vha192YWx1ZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIGpzY193ZWFrX3ZhbHVlX2NsYXNzX2luaXQoSlNDV2Vha1ZhbHVl
Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhrbGFzcyk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0eSA9IGpzY1dlYWtWYWx1ZVNl
dFByb3BlcnR5OworICAgIG9iakNsYXNzLT5kaXNwb3NlID0ganNjV2Vha1ZhbHVlRGlzcG9zZTsK
KworICAgIC8qKgorICAgICAqIEpTQ1dlYWtWYWx1ZTp2YWx1ZToKKyAgICAgKgorICAgICAqIFRo
ZSAjSlNDVmFsdWUgcmVmZXJlbmNpbmcgdGhlIEphdmFTY3JpcHQgdmFsdWUuCisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJP
UF9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ2YWx1
ZSIsCisgICAgICAgICAgICAiSlNDVmFsdWUiLAorICAgICAgICAgICAgIkpTQyBWYWx1ZSIsCisg
ICAgICAgICAgICBKU0NfVFlQRV9WQUxVRSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJh
bUZsYWdzPihXRUJLSVRfUEFSQU1fV1JJVEFCTEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkp
OworCisgICAgLyoqCisgICAgICogSlNDV2Vha1ZhbHVlOjpjbGVhcmVkOgorICAgICAqIEB3ZWFr
X3ZhbHVlOiB0aGUgI0pTQ1dlYWtWYWx1ZQorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMg
ZW1pdHRlZCB3aGVuIHRoZSBKYXZhU2NyaXB0IHZhbHVlIGlzIGRlc3Ryb3llZC4KKyAgICAgKi8K
KyAgICBzaWduYWxzW0NMRUFSRURdID0gZ19zaWduYWxfbmV3KAorICAgICAgICAiY2xlYXJlZCIs
CisgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgR19TSUdOQUxfUlVO
X0xBU1QsCisgICAgICAgIDAsIG51bGxwdHIsIG51bGxwdHIsCisgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9nZW5lcmljLAorICAgICAgICBHX1RZUEVfTk9ORSwgMCwKKyAgICAgICAgR19UWVBF
X05PTkUpOworfQorCisvKioKKyAqIGpzY193ZWFrX3ZhbHVlX25ldzoKKyAqIEB2YWx1ZTogYSAj
SlNDVmFsdWUKKyAqCisgKiBDcmVhdGUgYSBuZXcgI0pTQ1dlYWtWYWx1ZSBmb3IgdGhlIEphdmFT
Y3JpcHQgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUuCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBhIG5ldyAjSlNDV2Vha1ZhbHVlCisgKi8KK0pTQ1dlYWtWYWx1ZSoganNjX3dl
YWtfdmFsdWVfbmV3KEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIHJldHVybiBKU0NfV0VBS19W
QUxVRShnX29iamVjdF9uZXcoSlNDX1RZUEVfV0VBS19WQUxVRSwgInZhbHVlIiwgdmFsdWUsIG51
bGxwdHIpKTsKK30KKworLyoqCisgKiBqc2Nfd2Vha192YWx1ZV9nZXRfdmFsdWU6CisgKiBAd2Vh
a192YWx1ZTogYSAjSlNDV2Vha1ZhbHVlCisgKgorICogR2V0IGEgI0pTQ1ZhbHVlIHJlZmVyZW5j
aW5nIHRoZSBKYXZhU2NyaXB0IHZhbHVlIG9mIEB3ZWFrX3ZhbHVlLgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0pTQ1ZhbHVlIG9yICVOVUxMIGlmIEB3ZWFrX3ZhbHVl
IHdhcyBjbGVhcmVkLgorICovCitKU0NWYWx1ZSoganNjX3dlYWtfdmFsdWVfZ2V0X3ZhbHVlKEpT
Q1dlYWtWYWx1ZSogd2Vha1ZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19J
U19XRUFLX1ZBTFVFKHdlYWtWYWx1ZSksIG51bGxwdHIpOworCisgICAgSlNDV2Vha1ZhbHVlUHJp
dmF0ZSogcHJpdiA9IHdlYWtWYWx1ZS0+cHJpdjsKKyAgICBXVEY6OkxvY2tlcjxKU0M6OkpTTG9j
az4gbG9ja2VyKHByaXYtPmxvY2suZ2V0KCkpOworICAgIEpTQzo6Vk0qIHZtID0gcHJpdi0+bG9j
ay0+dm0oKTsKKyAgICBpZiAoIXZtKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7CisgICAgaWYgKCFwcml2LT5nbG9iYWxPYmpl
Y3QgfHwgcHJpdi0+d2Vha1ZhbHVlUmVmLmlzQ2xlYXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBKU0M6OkpTVmFsdWUgdmFsdWU7CisgICAgaWYgKHByaXYtPndlYWtWYWx1ZVJl
Zi5pc1ByaW1pdGl2ZSgpKQorICAgICAgICB2YWx1ZSA9IHByaXYtPndlYWtWYWx1ZVJlZi5wcmlt
aXRpdmUoKTsKKyAgICBlbHNlIGlmIChwcml2LT53ZWFrVmFsdWVSZWYuaXNTdHJpbmcoKSkKKyAg
ICAgICAgdmFsdWUgPSBwcml2LT53ZWFrVmFsdWVSZWYuc3RyaW5nKCk7CisgICAgZWxzZQorICAg
ICAgICB2YWx1ZSA9IHByaXYtPndlYWtWYWx1ZVJlZi5vYmplY3QoKTsKKworICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gcHJpdi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgR1Jl
ZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlKHRvR2xvYmFs
UmVmKGV4ZWMpKTsKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4
dC5nZXQoKSwgdG9SZWYoZXhlYywgdmFsdWUpKS5sZWFrUmVmKCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV2Vha1ZhbHVlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV2Vha1ZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmVlYzA1ODkwNGIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dlYWtWYWx1ZS5oCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlND
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikgJiYgIWRlZmluZWQoV0VC
S0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVk
ZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlNDV2Vha1ZhbHVlX2gKKyNkZWZpbmUg
SlNDV2Vha1ZhbHVlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8anNj
L0pTQ0RlZmluZXMuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIEpTQ19UWVBFX1dFQUtfVkFMVUUgICAgICAgICAgICAoanNjX3dlYWtfdmFs
dWVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX1dFQUtfVkFMVUUob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfV0VBS19WQUxVRSwgSlND
V2Vha1ZhbHVlKSkKKyNkZWZpbmUgSlNDX0lTX1dFQUtfVkFMVUUob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfV0VBS19WQUxVRSkpCisjZGVm
aW5lIEpTQ19XRUFLX1ZBTFVFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIEpTQ19UWVBFX1dFQUtfVkFMVUUsIEpTQ1dlYWtWYWx1ZUNsYXNzKSkKKyNk
ZWZpbmUgSlNDX0lTX1dFQUtfVkFMVUVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfV0VBS19WQUxVRSkpCisjZGVmaW5lIEpTQ19XRUFLX1ZB
TFVFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpT
Q19UWVBFX1dFQUtfVkFMVUUsIEpTQ1dlYWtWYWx1ZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ1dlYWtWYWx1ZSBKU0NXZWFrVmFsdWU7Cit0eXBlZGVmIHN0cnVjdCBfSlNDV2Vha1ZhbHVl
Q2xhc3MgSlNDV2Vha1ZhbHVlQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDV2Vha1ZhbHVlUHJp
dmF0ZSBKU0NXZWFrVmFsdWVQcml2YXRlOworCitzdHJ1Y3QgX0pTQ1dlYWtWYWx1ZSB7CisgICAg
R09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBKU0NXZWFrVmFsdWVQ
cml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NXZWFrVmFsdWVDbGFzcyB7CisgICAgR09i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMCkgKHZv
aWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfanNj
X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMykgKHZvaWQpOwor
fTsKKworSlNDX0FQSSBHVHlwZQoranNjX3dlYWtfdmFsdWVfZ2V0X3R5cGUgICh2b2lkKTsKKwor
SlNDX0FQSSBKU0NXZWFrVmFsdWUgKgoranNjX3dlYWtfdmFsdWVfbmV3ICAgICAgIChKU0NWYWx1
ZSAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2Nfd2Vha192YWx1ZV9nZXRf
dmFsdWUgKEpTQ1dlYWtWYWx1ZSAqd2Vha192YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBKU0NXZWFrVmFsdWVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL2RvY3MvanNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggMWY3
MzUzYTQ4NWUuLmMyZTNlM2U3OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQKQEAgLTEw
OCw2ICsxMDgsMjcgQEAgSlNDVmFsdWVQcml2YXRlCiBqc2NfdmFsdWVfZ2V0X3R5cGUKIDwvU0VD
VElPTj4KIAorPFNFQ1RJT04+Cis8RklMRT5KU0NXZWFrVmFsdWU8L0ZJTEU+Cis8VElUTEU+SlND
V2Vha1ZhbHVlPC9USVRMRT4KK0pTQ1dlYWtWYWx1ZQoranNjX3dlYWtfdmFsdWVfbmV3Citqc2Nf
d2Vha192YWx1ZV9nZXRfdmFsdWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitKU0NXZWFrVmFs
dWVDbGFzcworSlNDX1RZUEVfV0VBS19WQUxVRQorSlNDX1dFQUtfVkFMVUUKK0pTQ19JU19XRUFL
X1ZBTFVFCitKU0NfV0VBS19WQUxVRV9DTEFTUworSlNDX0lTX1dFQUtfVkFMVUVfQ0xBU1MKK0pT
Q19XRUFLX1ZBTFVFX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorSlNDV2Vha1Zh
bHVlUHJpdmF0ZQoranNjX3dlYWtfdmFsdWVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwogPFNFQ1RJ
T04+CiA8RklMRT5KU0NFeGNlcHRpb248L0ZJTEU+CiA8VElUTEU+SlNDRXhjZXB0aW9uPC9USVRM
RT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1n
bGliLWRvY3Muc2dtbCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1n
bGliLWRvY3Muc2dtbAppbmRleCBhYzUzMmIwYzExMi4uNDg1M2ExMDRjNmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLWRvY3Muc2dtbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi1kb2NzLnNn
bWwKQEAgLTE0LDYgKzE0LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvSlNDVmlydHVh
bE1hY2hpbmUueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL0pTQ0NvbnRleHQueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL0pTQ1ZhbHVlLnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9KU0NXZWFrVmFsdWUueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL0pTQ0V4Y2VwdGlvbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvSlND
Q2xhc3MueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL0pTQ1ZlcnNpb24ueG1sIi8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgKaW5kZXggYjdjZWFlZjBiM2YuLjhhMjg0
NTI0MGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CiAjaW5jbHVkZSA8anNjL0pTQ1ZlcnNpb24u
aD4KICNpbmNsdWRlIDxqc2MvSlNDVmlydHVhbE1hY2hpbmUuaD4KKyNpbmNsdWRlIDxqc2MvSlND
V2Vha1ZhbHVlLmg+CiAKICNpbmNsdWRlIDxqc2MvSlNDQXV0b2NsZWFudXBzLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCmluZGV4IDIyY2VlODYxZTVhLi5jYzMyZDA2MDQyYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTgtMDMtMjcgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHTElCXSBBZGQgSlND
V2Vha1ZhbHVlIHRvIEphdmFTY3JpcHRDb3JlIEdMaWIgQVBJCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQwNDEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFsbG93cyB0byBrZWVwIGEgcmVmZXJl
bmNlIHRvIGEgSmF2YVNDcmlwdCB2YWx1ZSB3aXRob3V0IHByb3RlY3RpbmcgaXQsIGFuZCB3aXRo
b3V0IGhhdmluZyBhIHN0cm9uZworICAgICAgICByZWZlcmVuY2Ugb2YgdGhlIGNvbnRleHQuIFdo
ZW4gdGhlIHZhbHVlIGlzIGNsZWFyZWQgdGhlIEpTQ1dlYWtWYWx1ZTo6Y2xlYXJlZCBzaWduYWwg
aXMgZW1pdHRlZCBhbmQKKyAgICAgICAganNjX3dlYWtfdmFsdWVfZ2V0X3ZhbHVlKCkgd2lsbCBh
bHdheXMgcmV0dXJuIG51bGxwdHIuCisKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NXZWFrVmFsdWUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYWtWYWx1ZVJlZjo6fldlYWtWYWx1ZVJlZik6CisgICAg
ICAgIChXZWFrVmFsdWVSZWY6OmNsZWFyKToKKyAgICAgICAgKFdlYWtWYWx1ZVJlZjo6aXNDbGVh
ciBjb25zdCk6CisgICAgICAgIChXZWFrVmFsdWVSZWY6OmlzU2V0IGNvbnN0KToKKyAgICAgICAg
KFdlYWtWYWx1ZVJlZjo6aXNQcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoV2Vha1ZhbHVlUmVm
Ojppc09iamVjdCBjb25zdCk6CisgICAgICAgIChXZWFrVmFsdWVSZWY6OmlzU3RyaW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYWtWYWx1ZVJlZjo6c2V0UHJpbWl0aXZlKToKKyAgICAgICAgKFdlYWtW
YWx1ZVJlZjo6c2V0T2JqZWN0KToKKyAgICAgICAgKFdlYWtWYWx1ZVJlZjo6c2V0U3RyaW5nKToK
KyAgICAgICAgKFdlYWtWYWx1ZVJlZjo6b2JqZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYWtWYWx1
ZVJlZjo6cHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYWtWYWx1ZVJlZjo6c3RyaW5nIGNv
bnN0KToKKyAgICAgICAgKHdlYWtWYWx1ZUhhbmRsZU93bmVyKToKKyAgICAgICAgKGpzY1dlYWtW
YWx1ZUluaXRpYWxpemUpOgorICAgICAgICAoanNjV2Vha1ZhbHVlU2V0UHJvcGVydHkpOgorICAg
ICAgICAoanNjV2Vha1ZhbHVlRGlzcG9zZSk6CisgICAgICAgIChqc2Nfd2Vha192YWx1ZV9jbGFz
c19pbml0KToKKyAgICAgICAgKGpzY193ZWFrX3ZhbHVlX25ldyk6CisgICAgICAgIChqc2Nfd2Vh
a192YWx1ZV9nZXRfdmFsdWUpOgorICAgICAgICAqIEFQSS9nbGliL0pTQ1dlYWtWYWx1ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC1zZWN0aW9ucy50eHQ6
CisgICAgICAgICogQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi1kb2NzLnNnbWw6CisgICAgICAgICog
QVBJL2dsaWIvanNjLmg6CisgICAgICAgICogR0xpYi5jbWFrZToKKwogMjAxOC0wMy0yNSAgU2Fh
bSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdHlwbyBpbiBKU0Mg
b3B0aW9uIG5hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTGliLmNtYWtl
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dMaWIuY21ha2UKaW5kZXggOGYxNDBkNWNjMjMuLjI0
M2VmM2RhMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR0xpYi5jbWFrZQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR0xpYi5jbWFrZQpAQCAtMTAsNiArMTAsNyBAQCBs
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgQVBJL2dsaWIvSlNDVmFsdWUu
Y3BwCiAgICAgQVBJL2dsaWIvSlNDVmVyc2lvbi5jcHAKICAgICBBUEkvZ2xpYi9KU0NWaXJ0dWFs
TWFjaGluZS5jcHAKKyAgICBBUEkvZ2xpYi9KU0NXZWFrVmFsdWUuY3BwCiAgICAgQVBJL2dsaWIv
SlNDV3JhcHBlck1hcC5jcHAKICkKIApAQCAtMjgsNiArMjksNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfSU5TVEFMTEVEX0hFQURFUlMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2dsaWIv
SlNDRXhjZXB0aW9uLmgKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2dsaWIvSlNDVmFs
dWUuaAogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGlu
ZS5oCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS9nbGliL0pTQ1dlYWtWYWx1ZS5oCiAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS9nbGliL2pzYy5oCiApCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3YmNjYjc0NTQyZC4uNWUx
ZjE1OWY1MjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wMy0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dMSUJdIEFkZCBKU0NXZWFrVmFsdWUgdG8g
SmF2YVNjcmlwdENvcmUgR0xpYiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NDA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGNhc2UgZm9yIEpTQ1dlYWtWYWx1ZS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcDoK
KyAgICAgICAgKHdlYWtWYWx1ZUNsZWFyZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0SlNDV2Vh
a1ZhbHVlKToKKyAgICAgICAgKG1haW4pOgorCiAyMDE4LTAzLTI1ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCBBUEkg
dG8gY29udmVydCBiZXR3ZWVuIERPTSBhbmQgSlNDVmFsdWUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcAppbmRl
eCAwZDY2N2ZhYTFkOC4uNzI5ZmQ2Y2YyMjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAKQEAgLTE3NDgs
NiArMTc0OCwxODMgQEAgc3RhdGljIHZvaWQgdGVzdEpTQ0dhcmJhZ2VDb2xsZWN0b3IoKQogICAg
IH0KIH0KIAorc3RhdGljIHZvaWQgd2Vha1ZhbHVlQ2xlYXJlZENhbGxiYWNrKEpTQ1dlYWtWYWx1
ZSogd2Vha1ZhbHVlLCBib29sKiB3ZWFrVmFsdWVDbGVhcmVkKQoreworICAgICp3ZWFrVmFsdWVD
bGVhcmVkID0gdHJ1ZTsKKyAgICBnX2Fzc2VydF9udWxsKGpzY193ZWFrX3ZhbHVlX2dldF92YWx1
ZSh3ZWFrVmFsdWUpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ1dlYWtWYWx1ZSgpCit7Cisg
ICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0Nv
bnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4
Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gb2JqZWN0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkp
OworCisgICAgICAgIEdSZWZQdHI8SlNDV2Vha1ZhbHVlPiB3ZWFrID0gYWRvcHRHUmVmKGpzY193
ZWFrX3ZhbHVlX25ldyhvYmplY3QuZ2V0KCkpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh3ZWFr
LmdldCgpKTsKKyAgICAgICAgYm9vbCB3ZWFrVmFsdWVDbGVhcmVkID0gZmFsc2U7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3Qod2Vhay5nZXQoKSwgImNsZWFyZWQiLCBHX0NBTExCQUNLKHdlYWtW
YWx1ZUNsZWFyZWRDYWxsYmFjayksICZ3ZWFrVmFsdWVDbGVhcmVkKTsKKworICAgICAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImZvbyIsIG9iamVjdC5nZXQoKSk7Cisg
ICAgICAgIGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnRfZmFsc2Uod2Vha1ZhbHVlQ2xlYXJlZCk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgp
LCAiZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUob2JqZWN0LmdldCgpID09IGZvby5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gd2Vha0ZvbyA9IGFkb3B0R1JlZihqc2Nfd2Vha192YWx1ZV9nZXRfdmFsdWUo
d2Vhay5nZXQoKSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHdlYWtGb28uZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGZvby5nZXQoKSA9PSB3ZWFrRm9vLmdldCgpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiB1bmRlZmluZWRWYWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X3VuZGVmaW5lZChjb250ZXh0LmdldCgpKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godW5k
ZWZpbmVkVmFsdWUuZ2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4
dC5nZXQoKSwgImZvbyIsIHVuZGVmaW5lZFZhbHVlLmdldCgpKTsKKyAgICAgICAgd2Vha0ZvbyA9
IG51bGxwdHI7CisgICAgICAgIGZvbyA9IG51bGxwdHI7CisgICAgICAgIG9iamVjdCA9IG51bGxw
dHI7CisKKyAgICAgICAgLy8gVGhlIHZhbHVlIGlzIHN0aWxsIHJlYWNoYWJsZSwgYnV0IHVucHJv
dGVjdGVkLgorICAgICAgICBnX2Fzc2VydF9mYWxzZSh3ZWFrVmFsdWVDbGVhcmVkKTsKKyAgICAg
ICAgd2Vha0ZvbyA9IGFkb3B0R1JlZihqc2Nfd2Vha192YWx1ZV9nZXRfdmFsdWUod2Vhay5nZXQo
KSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHdlYWtGb28uZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3Qod2Vha0Zvby5nZXQoKSkpOworICAgICAgICB3
ZWFrRm9vID0gbnVsbHB0cjsKKworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29u
dGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUod2Vha1ZhbHVlQ2xlYXJlZCk7Cisg
ICAgICAgIGdfYXNzZXJ0X251bGwoanNjX3dlYWtfdmFsdWVfZ2V0X3ZhbHVlKHdlYWsuZ2V0KCkp
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAg
IEdSZWZQdHI8SlNDV2Vha1ZhbHVlPiB3ZWFrT2JqZWN0OworICAgICAgICBib29sIHdlYWtWYWx1
ZUNsZWFyZWQgPSBmYWxzZTsKKyAgICAgICAgeworICAgICAgICAgICAgR1JlZlB0cjxKU0NDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgICAg
IGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICBFeGNlcHRpb25IYW5k
bGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAib2JqID0ge307IikpOworICAgICAgICAgICAgY2hlY2tlci53YXRjaChvYmpl
Y3QuZ2V0KCkpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUob2JqZWN0
LmdldCgpKSk7CisgICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3Qo
b2JqZWN0LmdldCgpKSk7CisKKyAgICAgICAgICAgIHdlYWtPYmplY3QgPSBhZG9wdEdSZWYoanNj
X3dlYWtfdmFsdWVfbmV3KG9iamVjdC5nZXQoKSkpOworICAgICAgICAgICAgY2hlY2tlci53YXRj
aCh3ZWFrT2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vha09i
amVjdC5nZXQoKSwgImNsZWFyZWQiLCBHX0NBTExCQUNLKHdlYWtWYWx1ZUNsZWFyZWRDYWxsYmFj
ayksICZ3ZWFrVmFsdWVDbGVhcmVkKTsKKworICAgICAgICAgICAgb2JqZWN0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJvYmogPSBudWxsIikpOworICAg
ICAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgZ19hc3Nl
cnRfZmFsc2Uod2Vha1ZhbHVlQ2xlYXJlZCk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2Vy
dF90cnVlKHdlYWtWYWx1ZUNsZWFyZWQpOworICAgICAgICBnX2Fzc2VydF9udWxsKGpzY193ZWFr
X3ZhbHVlX2dldF92YWx1ZSh3ZWFrT2JqZWN0LmdldCgpKSk7CisgICAgfQorCisgICAgeworICAg
ICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ1dlYWtWYWx1ZT4g
d2Vha09iajsKKyAgICAgICAgYm9vbCB3ZWFrT2JqVmFsdWVDbGVhcmVkID0gZmFsc2U7CisgICAg
ICAgIEdSZWZQdHI8SlNDV2Vha1ZhbHVlPiB3ZWFrU3RyOworICAgICAgICBib29sIHdlYWtTdHJW
YWx1ZUNsZWFyZWQgPSBmYWxzZTsKKyAgICAgICAgR1JlZlB0cjxKU0NXZWFrVmFsdWU+IHdlYWtQ
cmltaXRpdmU7CisgICAgICAgIGJvb2wgd2Vha1ByaW1pdGl2ZVZhbHVlQ2xlYXJlZCA9IGZhbHNl
OworICAgICAgICB7CisgICAgICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICAgICAgY2hlY2tlci53YXRjaChj
b250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFu
ZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJvYmog
PSB7ICdmb28nIDogJ2JhcicgfTsgc3RyID0gJ0hlbGxvIFdvcmxkJzsgcHJpbWl0aXZlID0gMjU7
IikpOworICAgICAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgIm9iaiIpKTsKKyAgICAgICAgICAgIGNoZWNrZXIud2F0Y2go
dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgd2Vha09iaiA9IGFkb3B0R1JlZihqc2Nfd2Vha192
YWx1ZV9uZXcodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGNoZWNrZXIud2F0Y2god2Vha09i
ai5nZXQoKSk7CisgICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYWtPYmouZ2V0KCksICJj
bGVhcmVkIiwgR19DQUxMQkFDSyh3ZWFrVmFsdWVDbGVhcmVkQ2FsbGJhY2spLCAmd2Vha09ialZh
bHVlQ2xlYXJlZCk7CisKKyAgICAgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAic3RyIikpOworICAgICAgICAgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICB3ZWFrU3RyID0gYWRvcHRHUmVmKGpzY193
ZWFrX3ZhbHVlX25ldyh2YWx1ZS5nZXQoKSkpOworICAgICAgICAgICAgY2hlY2tlci53YXRjaCh3
ZWFrU3RyLmdldCgpKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vha1N0ci5nZXQo
KSwgImNsZWFyZWQiLCBHX0NBTExCQUNLKHdlYWtWYWx1ZUNsZWFyZWRDYWxsYmFjayksICZ3ZWFr
U3RyVmFsdWVDbGVhcmVkKTsKKworICAgICAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJwcmltaXRpdmUiKSk7CisgICAgICAgICAg
ICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIHdlYWtQcmltaXRpdmUg
PSBhZG9wdEdSZWYoanNjX3dlYWtfdmFsdWVfbmV3KHZhbHVlLmdldCgpKSk7CisgICAgICAgICAg
ICBjaGVja2VyLndhdGNoKHdlYWtQcmltaXRpdmUuZ2V0KCkpOworICAgICAgICAgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWFrUHJpbWl0aXZlLmdldCgpLCAiY2xlYXJlZCIsIEdfQ0FMTEJBQ0sod2Vh
a1ZhbHVlQ2xlYXJlZENhbGxiYWNrKSwgJndlYWtQcmltaXRpdmVWYWx1ZUNsZWFyZWQpOworCisg
ICAgICAgICAgICB2YWx1ZSA9IG51bGxwdHI7CisgICAgICAgICAgICBqc2NDb250ZXh0R2FyYmFn
ZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9mYWxzZSh3ZWFr
T2JqVmFsdWVDbGVhcmVkKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYWtTdHJWYWx1
ZUNsZWFyZWQpOworICAgICAgICAgICAgZ19hc3NlcnRfZmFsc2Uod2Vha1ByaW1pdGl2ZVZhbHVl
Q2xlYXJlZCk7CisKKyAgICAgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY193ZWFrX3ZhbHVl
X2dldF92YWx1ZSh3ZWFrT2JqLmdldCgpKSk7CisgICAgICAgICAgICBjaGVja2VyLndhdGNoKHZh
bHVlLmdldCgpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVj
dCh2YWx1ZS5nZXQoKSkpOworCisgICAgICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2Nfd2Vh
a192YWx1ZV9nZXRfdmFsdWUod2Vha1N0ci5nZXQoKSkpOworICAgICAgICAgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKworICAgICAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3dlYWtfdmFsdWVfZ2V0X3ZhbHVlKHdlYWtQcmltaXRpdmUuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1
ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgICAgICB2YWx1ZSA9
IG51bGxwdHI7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAic3RyID0gdW5kZWZpbmVkIikpOworICAgICAgICAgICAg
Y2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICAgICAganNjQ29udGV4dEdhcmJh
Z2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgICAgICBnX2Fzc2VydF90cnVlKHdl
YWtTdHJWYWx1ZUNsZWFyZWQpOworICAgICAgICAgICAgZ19hc3NlcnRfZmFsc2Uod2Vha09ialZh
bHVlQ2xlYXJlZCk7CisgICAgICAgICAgICBnX2Fzc2VydF9mYWxzZSh3ZWFrUHJpbWl0aXZlVmFs
dWVDbGVhcmVkKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X251bGwoanNjX3dlYWtfdmFsdWVfZ2V0
X3ZhbHVlKHdlYWtTdHIuZ2V0KCkpKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gdW5kZWZpbmVkIikpOwor
ICAgICAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICAgICAganNj
Q29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgICAgICAvLyBO
b24tc3RyaW5nIHByaW1pdHZlIHZhbHVlcyBhcmUgbm90IGdhcmJhZ2UgY29sbGVjdGVkLCB0aGUg
d2VhayB2YWx1ZQorICAgICAgICAgICAgLy8gd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIGdsb2Jh
bCBvYmplY3QgaXMgZGVzdHJveWVkLgorICAgICAgICAgICAgZ19hc3NlcnRfZmFsc2Uod2Vha1By
aW1pdGl2ZVZhbHVlQ2xlYXJlZCk7CisgICAgICAgICAgICBnX2Fzc2VydF9mYWxzZSh3ZWFrT2Jq
VmFsdWVDbGVhcmVkKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X3RydWUod2Vha1N0clZhbHVlQ2xl
YXJlZCk7CisKKyAgICAgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY193ZWFrX3ZhbHVlX2dl
dF92YWx1ZSh3ZWFrUHJpbWl0aXZlLmdldCgpKSk7CisgICAgICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251
bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICAgICAgdmFsdWUgPSBudWxscHRyOworCisgICAg
ICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgIm9iaiA9IHVuZGVmaW5lZCIpKTsKKyAgICAgICAgICAgIGNoZWNrZXIud2F0Y2gocmVz
dWx0LmdldCgpKTsKKyAgICAgICAgICAgIGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0
LmdldCgpKTsKKworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWFrT2JqVmFsdWVDbGVhcmVk
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X3RydWUod2Vha1N0clZhbHVlQ2xlYXJlZCk7CisgICAg
ICAgICAgICBnX2Fzc2VydF9mYWxzZSh3ZWFrUHJpbWl0aXZlVmFsdWVDbGVhcmVkKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X251bGwoanNjX3dlYWtfdmFsdWVfZ2V0X3ZhbHVlKHdlYWtPYmouZ2V0
KCkpKTsKKyAgICAgICAgICAgIHdlYWtPYmpWYWx1ZUNsZWFyZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHdlYWtTdHJWYWx1ZUNsZWFyZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IENvbnRleHQgaXMgbm93IGRlc3Ryb3llZCwgb25seSB0aGUgcHJpbWl0aXZlIHZhbHVlIHNob3Vs
ZCBiZSBub3RpZmllZC4KKyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWFrUHJpbWl0aXZlVmFsdWVD
bGVhcmVkKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2Uod2Vha09ialZhbHVlQ2xlYXJlZCk7Cisg
ICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYWtTdHJWYWx1ZUNsZWFyZWQpOworICAgICAgICBnX2Fz
c2VydF9udWxsKGpzY193ZWFrX3ZhbHVlX2dldF92YWx1ZSh3ZWFrUHJpbWl0aXZlLmdldCgpKSk7
CisgICAgfQorfQorCiBzdGF0aWMgdm9pZCB0ZXN0c0pTQ1ZpcnR1YWxNYWNoaW5lKCkKIHsKICAg
ICB7CkBAIC0xODYwLDYgKzIwMzcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2V4Y2VwdGlvbnMiLCB0ZXN0SlNDRXhjZXB0aW9u
cyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3Byb21pc2VzIiwgdGVzdEpTQ1Byb21pc2Vz
KTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZ2FyYmFnZS1jb2xsZWN0b3IiLCB0ZXN0SlND
R2FyYmFnZUNvbGxlY3Rvcik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3dlYWstdmFsdWUi
LCB0ZXN0SlNDV2Vha1ZhbHVlKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2Mvdm0iLCB0ZXN0
c0pTQ1ZpcnR1YWxNYWNoaW5lKTsKICNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QwogICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9hdXRvY2xlYW51cHMiLCB0ZXN0c0pTQ0F1dG9j
bGVhbnVwcyk7Cg==
</data>
<flag name="review"
          id="355112"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>