<?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>33603</bug_id>
          
          <creation_ts>2010-01-13 08:56:31 -0800</creation_ts>
          <short_desc>Some window properties are not returned by Object.keys and Object.getOwnPropertyNames</short_desc>
          <delta_ts>2010-01-21 01:19:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Hansen">kent.hansen</reporter>
          <assigned_to name="Kent Hansen">kent.hansen</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180248</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-13 08:56:31 -0800</bug_when>
    <thetext>For example, the window object has a property called &quot;addEventListener&quot;;
window.hasOwnProperty(&quot;addEventListener&quot;) returns true, but
Object.keys(window).indexOf(&quot;addEventListener&quot;) returns -1.
The property _is_ returned by a for-in enumeration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182256</commentid>
    <comment_count>1</comment_count>
      <attachid>46914</attachid>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-19 08:38:16 -0800</bug_when>
    <thetext>Created attachment 46914
Proposed patch

Make getOwnPropertyNames() more consistent with getOwnPropertyDescriptor().

I&apos;m not sure if it would rather make sense to change the JSDOMWindow::getOwnPropertyDescriptor() implementation to not look in the prototype, and then change JSObject::hasOwnProperty() to call getOwnPropertyDescriptor(). It&apos;s fine that getOwnPropertySlot() does the proxying when actually accessing the property (since that shouldn&apos;t be observable from the outside), but should getOwnPropertyDescriptor() really do it as well? It does feel a bit odd that e.g. window.hasOwnProperty(&quot;__defineGetter__&quot;) returns true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182262</commentid>
    <comment_count>2</comment_count>
      <attachid>46914</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-19 08:46:30 -0800</bug_when>
    <thetext>Comment on attachment 46914
Proposed patch

Your questions about what behavior we want are good ones. I’m not sure we should land this since it seems it may be going in the wrong direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182278</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-19 09:20:46 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 46914 [details])
&gt; Your questions about what behavior we want are good ones. I’m not sure we
&gt; should land this since it seems it may be going in the wrong direction.

Yep. I have other patches that are impacted by this behavior, so it would be nice to know what behavior should be the sanctioned one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182279</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-19 09:22:59 -0800</bug_when>
    <thetext>The people I’d ask about this are Geoff Garen, Sam Weinig, and Maciej Stachowiak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182280</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-19 09:23:07 -0800</bug_when>
    <thetext>And Oliver Hunt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182396</commentid>
    <comment_count>6</comment_count>
      <attachid>46914</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-19 12:59:41 -0800</bug_when>
    <thetext>Comment on attachment 46914
Proposed patch

I don&apos;t think we want to make getOwnPropertyNames include prototype properties -- that&apos;s moving in the wrong direction, since &quot;own&quot; specifically means &quot;not prototype&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182397</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-19 13:02:15 -0800</bug_when>
    <thetext>&gt; I&apos;m not sure if it would rather make sense to change the
&gt; JSDOMWindow::getOwnPropertyDescriptor() implementation to not look in the
&gt; prototype, and then change JSObject::hasOwnProperty() to call
&gt; getOwnPropertyDescriptor().

Yes, I think that&apos;s the right solution, since it honors the meaning of &quot;own&quot; as &quot;not prototype&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182674</commentid>
    <comment_count>8</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-20 02:08:29 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I&apos;m not sure if it would rather make sense to change the
&gt; &gt; JSDOMWindow::getOwnPropertyDescriptor() implementation to not look in the
&gt; &gt; prototype, and then change JSObject::hasOwnProperty() to call
&gt; &gt; getOwnPropertyDescriptor().
&gt; 
&gt; Yes, I think that&apos;s the right solution, since it honors the meaning of &quot;own&quot; as
&gt; &quot;not prototype&quot;.

Thanks, closing this task and pursuing the suggested solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182744</commentid>
    <comment_count>9</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-20 04:43:42 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; &gt; I&apos;m not sure if it would rather make sense to change the
&gt; &gt; &gt; JSDOMWindow::getOwnPropertyDescriptor() implementation to not look in the
&gt; &gt; &gt; prototype, and then change JSObject::hasOwnProperty() to call
&gt; &gt; &gt; getOwnPropertyDescriptor().
&gt; &gt; 
&gt; &gt; Yes, I think that&apos;s the right solution, since it honors the meaning of &quot;own&quot; as
&gt; &gt; &quot;not prototype&quot;.
&gt; 
&gt; Thanks, closing this task and pursuing the suggested solution.

The problem with changing JSObject::hasOwnProperty() to call getOwnPropertyDescriptor() is that JSCallbackObject doesn&apos;t reimplement getOwnPropertyDescriptor() (only getOwnPropertySlot()), so hasOwnProperty() would stop working if you&apos;re using the C API and have a hasProperty callback installed. No go.

I think JSCallbackObject should reimplement getOwnPropertyDescriptor(), but what should it do?
 - It can call the hasProperty callback to figure out whether there is such a property; OK.
 - It&apos;s an accessor property, so for the [[Get]] and [[Set]] fields it should create function objects that wrap the getProperty and setProperty callbacks? Should those be cached, then? Or should getOwnPropertyDescriptor() just call the getter and pretend that it&apos;s a value property?
 - If it&apos;s a static value property, the attributes are available. Otherwise, the property is assumed to be enumerable and configurable? (Calling the getPropertyNames callback to deduce whether the property is enumerable seems overkill.)

I&apos;d like to implement this if you think it makes sense (since it&apos;s a stopper for the JSObject::hasOwnProperty change, which is a stopper for the JSDOMWindow::getOwnPropertyDescriptor change :) ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182829</commentid>
    <comment_count>10</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-20 09:20:05 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I think JSCallbackObject should reimplement getOwnPropertyDescriptor(), but
&gt; what should it do?

I went ahead and did a prototype implementation.
- Add two helper classes, JSGetPropertyCallbackFunction and JSSetPropertyCallbackFunction, that store a property name and callback function, and whose call() implementation delegates to the callback (very similar to JSCallbackFunction).
- Implement JSCallbackObject::getOwnPropertyDescriptor() to look for the property in the JSClass and create callback wrappers that are returned in the descriptor.
- I didn&apos;t implement the caching yet, but I think it can be done similarly to JSCallbackObject::staticFunctionGetter() (use lookupGetter()/defineGetter()?).

With that, I&apos;m able to introspect JSClass-based objects from JS using Object.getOwnPropertyDescriptor.

I can spin off a task and post the patch there if the above approach seems reasonable.
Having to wrap the callbacks sure complicates things vs calling the getter in-place and returning a value descriptor, but the latter would be lying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182879</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-20 11:53:41 -0800</bug_when>
    <thetext>&gt; I think JSCallbackObject should reimplement getOwnPropertyDescriptor()

Me too.

But let&apos;s separate out two concerns.

Concern 1: Switching hasOwnProperty to use getOwnPropertyDescriptor would break hasOwnProperty for API objects.

Concern 2: getOwnPropertyDescriptor has never worked very well for API objects.

Concern 1 is easy to solve: Have JSCallbackObject::getOwnPropertyDescriptor call JSCallbackObject:: getOwnPropertySlot and return a value descriptor, and add a hasOwnProperty and getOwnPropertyDescriptor test to testapi.c. That maintains current behavior for hasOwnProperty. It also solves a bit of Concern 2, because getOwnPropertyDescriptor will stop returning &apos;undefined&apos; for API properties.

I think your more ambitious proposal for solving Concern 2 sounds reasonable, but Concern 2 is a sidetrack from your main goal: JSDOMWindow::getOwnPropertyDescriptor. I&apos;d recommend leaving it for later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183122</commentid>
    <comment_count>12</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-21 01:19:16 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; I think JSCallbackObject should reimplement getOwnPropertyDescriptor()
&gt; 
&gt; Me too.
&gt; 
&gt; But let&apos;s separate out two concerns.
&gt; 
&gt; Concern 1: Switching hasOwnProperty to use getOwnPropertyDescriptor would break
&gt; hasOwnProperty for API objects.
&gt; 
&gt; Concern 2: getOwnPropertyDescriptor has never worked very well for API objects.
&gt; 
&gt; Concern 1 is easy to solve: Have JSCallbackObject::getOwnPropertyDescriptor
&gt; call JSCallbackObject:: getOwnPropertySlot and return a value descriptor, and
&gt; add a hasOwnProperty and getOwnPropertyDescriptor test to testapi.c. That
&gt; maintains current behavior for hasOwnProperty. It also solves a bit of Concern
&gt; 2, because getOwnPropertyDescriptor will stop returning &apos;undefined&apos; for API
&gt; properties.
&gt; 
&gt; I think your more ambitious proposal for solving Concern 2 sounds reasonable,
&gt; but Concern 2 is a sidetrack from your main goal:
&gt; JSDOMWindow::getOwnPropertyDescriptor. I&apos;d recommend leaving it for later.

Sounds like a plan to me, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46914</attachid>
            <date>2010-01-19 08:38:16 -0800</date>
            <delta_ts>2010-01-20 02:07:04 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>WindowPropertyProxying.diff</filename>
            <type>text/plain</type>
            <size>19065</size>
            <attacher name="Kent Hansen">kent.hansen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNjRjNWIwLi5kYWY1NTAzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDEt
MTkgIEtlbnQgSGFuc2VuICA8a2VudC5oYW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNvbWUgd2luZG93IHByb3BlcnRpZXMg
YXJlIG5vdCByZXR1cm5lZCBieSBPYmplY3Qua2V5cyBhbmQgT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMz
NjAzCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGNoZWNraW5nIHRoYXQgcHJvcGVydGllcyBvbiB0
aGUgV2luZG93IHByb3RvdHlwZSBhcmUgcHJveGllZCBieSB0aGUgV2luZG93IG9iamVjdC4KKwor
ICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy9zY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LXBy
b3h5aW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnR5LXByb3h5aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0eS1wcm94eWluZy5odG1sOiBBZGRlZC4KKwogMjAxMC0wMS0xOSAg
WGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgc3ZnL2N1c3RvbS91c2Ut
aW5zdGFuY2VSb290LWV2ZW50LWJ1YmJsaW5nLnhodG1sIGlzIGZsYWtleQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHkt
cHJveHlpbmcuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvc2NyaXB0LXRlc3RzL3dp
bmRvdy1wcm9wZXJ0eS1wcm94eWluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40NGEzY2NlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L3NjcmlwdC10ZXN0cy93aW5kb3ctcHJvcGVydHktcHJveHlpbmcuanMKQEAgLTAsMCArMSwy
NCBAQAorZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHByb3BlcnRpZXMgb24g
dGhlIFdpbmRvdyBwcm90b3R5cGUgYXJlIHByb3hpZWQgYnkgdGhlIFdpbmRvdyBvYmplY3QuIgor
KTsKKwordmFyIHdpbmRvd0tleXMgPSBPYmplY3Qua2V5cyh3aW5kb3cpOwordmFyIHdpbmRvd093
blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOworCit2
YXIgcHJvdG9Qcm9wZXJ0eU5hbWVzU2V0ID0ge307Citmb3IgKHZhciBvID0gd2luZG93Ll9fcHJv
dG9fXzsgbzsgbyA9IG8uX19wcm90b19fKSB7CisgICAgdmFyIG5hbWVzID0gT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMobyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgcHJvdG9Qcm9wZXJ0eU5hbWVzU2V0W25hbWVzW2ldXSA9IHRydWU7Cit9
CisKK2ZvciAodmFyIG5hbWUgaW4gcHJvdG9Qcm9wZXJ0eU5hbWVzU2V0KSB7CisgICAgc2hvdWxk
QmVUcnVlKCJ3aW5kb3cuaGFzT3duUHJvcGVydHkoJyIgKyBuYW1lICsgIicpIik7CisgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih3aW5kb3csICciICsgbmFtZSArICInKSIsICJvYmplY3QiKTsKKyAgICBzaG91bGRCZVRydWUo
IndpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignIiArIG5hbWUgKyAiJykgIT0gLTEiKTsK
KyAgICBpZiAod2luZG93LnByb3BlcnR5SXNFbnVtZXJhYmxlKG5hbWUpKQorICAgICAgICBzaG91
bGRCZVRydWUoIndpbmRvd0tleXMuaW5kZXhPZignIiArIG5hbWUgKyAiJykgIT0gLTEiKTsKKyAg
ICBzaG91bGRCZSgid2luZG93WyciICsgbmFtZSArICInXSIsICJ3aW5kb3cuX19wcm90b19fWyci
ICsgbmFtZSArICInXSIpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydHktcHJv
eHlpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0eS1wcm94eWluZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMGRmZjlhYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1dpbmRvdy93aW5kb3ctcHJvcGVydHktcHJveHlpbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MjM0IEBACitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgcHJvcGVydGllcyBvbiB0aGUgV2luZG93IHBy
b3RvdHlwZSBhcmUgcHJveGllZCBieSB0aGUgV2luZG93IG9iamVjdC4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdtb3ZlQnknKSBp
cyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRv
dywgJ21vdmVCeScpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5k
ZXhPZignbW92ZUJ5JykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ21v
dmVCeScpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93Wydtb3ZlQnknXSBpcyB3aW5kb3cuX19w
cm90b19fWydtb3ZlQnknXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2ZpbmQnKSBpcyB0
cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywg
J2ZpbmQnKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2Yo
J2ZpbmQnKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZignZmluZCcpICE9
IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydmaW5kJ10gaXMgd2luZG93Ll9fcHJvdG9fX1snZmlu
ZCddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgncmVzaXplVG8nKSBpcyB0cnVlCitQQVNT
IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ3Jlc2l6ZVRv
JykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5pbmRleE9mKCdyZXNp
emVUbycpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9mKCdyZXNpemVUbycp
ICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydyZXNpemVUbyddIGlzIHdpbmRvdy5fX3Byb3Rv
X19bJ3Jlc2l6ZVRvJ10KK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdjbGVhclRpbWVvdXQn
KSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdp
bmRvdywgJ2NsZWFyVGltZW91dCcpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5
TmFtZXMuaW5kZXhPZignY2xlYXJUaW1lb3V0JykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dL
ZXlzLmluZGV4T2YoJ2NsZWFyVGltZW91dCcpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93Wydj
bGVhclRpbWVvdXQnXSBpcyB3aW5kb3cuX19wcm90b19fWydjbGVhclRpbWVvdXQnXQorUEFTUyB3
aW5kb3cuaGFzT3duUHJvcGVydHkoJ2J0b2EnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2J0b2EnKSBpcyAib2JqZWN0IgorUEFT
UyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2YoJ2J0b2EnKSAhPSAtMSBpcyB0cnVlCitQ
QVNTIHdpbmRvd0tleXMuaW5kZXhPZignYnRvYScpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93
WydidG9hJ10gaXMgd2luZG93Ll9fcHJvdG9fX1snYnRvYSddCitQQVNTIHdpbmRvdy5oYXNPd25Q
cm9wZXJ0eSgnZ2V0Q29tcHV0ZWRTdHlsZScpIGlzIHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZ2V0Q29tcHV0ZWRTdHlsZScpIGlzICJv
YmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignZ2V0Q29tcHV0ZWRT
dHlsZScpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9mKCdnZXRDb21wdXRl
ZFN0eWxlJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ2dldENvbXB1dGVkU3R5bGUnXSBp
cyB3aW5kb3cuX19wcm90b19fWydnZXRDb21wdXRlZFN0eWxlJ10KK1BBU1Mgd2luZG93Lmhhc093
blByb3BlcnR5KCdzZXRUaW1lb3V0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdzZXRUaW1lb3V0JykgaXMgIm9iamVjdCIKK1BB
U1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5pbmRleE9mKCdzZXRUaW1lb3V0JykgIT0gLTEgaXMg
dHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ3NldFRpbWVvdXQnKSAhPSAtMSBpcyB0cnVl
CitQQVNTIHdpbmRvd1snc2V0VGltZW91dCddIGlzIHdpbmRvdy5fX3Byb3RvX19bJ3NldFRpbWVv
dXQnXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3Njcm9sbEJ5JykgaXMgdHJ1ZQorUEFT
UyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdzY3JvbGxC
eScpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignc2Ny
b2xsQnknKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZignc2Nyb2xsQnkn
KSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd1snc2Nyb2xsQnknXSBpcyB3aW5kb3cuX19wcm90
b19fWydzY3JvbGxCeSddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgncHJpbnQnKSBpcyB0
cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywg
J3ByaW50JykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5pbmRleE9m
KCdwcmludCcpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9mKCdwcmludCcp
ICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydwcmludCddIGlzIHdpbmRvdy5fX3Byb3RvX19b
J3ByaW50J10KK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdyZXNpemVCeScpIGlzIHRydWUK
K1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAncmVz
aXplQnknKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2Yo
J3Jlc2l6ZUJ5JykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ3Jlc2l6
ZUJ5JykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ3Jlc2l6ZUJ5J10gaXMgd2luZG93Ll9f
cHJvdG9fX1sncmVzaXplQnknXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2F0b2InKSBp
cyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRv
dywgJ2F0b2InKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4
T2YoJ2F0b2InKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZignYXRvYicp
ICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydhdG9iJ10gaXMgd2luZG93Ll9fcHJvdG9fX1sn
YXRvYiddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnb3BlbkRhdGFiYXNlJykgaXMgdHJ1
ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdv
cGVuRGF0YWJhc2UnKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmlu
ZGV4T2YoJ29wZW5EYXRhYmFzZScpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRl
eE9mKCdvcGVuRGF0YWJhc2UnKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd1snb3BlbkRhdGFi
YXNlJ10gaXMgd2luZG93Ll9fcHJvdG9fX1snb3BlbkRhdGFiYXNlJ10KK1BBU1Mgd2luZG93Lmhh
c093blByb3BlcnR5KCdtb3ZlVG8nKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ21vdmVUbycpIGlzICJvYmplY3QiCitQQVNTIHdp
bmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignbW92ZVRvJykgIT0gLTEgaXMgdHJ1ZQorUEFT
UyB3aW5kb3dLZXlzLmluZGV4T2YoJ21vdmVUbycpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93
Wydtb3ZlVG8nXSBpcyB3aW5kb3cuX19wcm90b19fWydtb3ZlVG8nXQorUEFTUyB3aW5kb3cuaGFz
T3duUHJvcGVydHkoJ3Njcm9sbCcpIGlzIHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnc2Nyb2xsJykgaXMgIm9iamVjdCIKK1BBU1Mgd2lu
ZG93T3duUHJvcGVydHlOYW1lcy5pbmRleE9mKCdzY3JvbGwnKSAhPSAtMSBpcyB0cnVlCitQQVNT
IHdpbmRvd0tleXMuaW5kZXhPZignc2Nyb2xsJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3db
J3Njcm9sbCddIGlzIHdpbmRvdy5fX3Byb3RvX19bJ3Njcm9sbCddCitQQVNTIHdpbmRvdy5oYXNP
d25Qcm9wZXJ0eSgnY29uZmlybScpIGlzIHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnY29uZmlybScpIGlzICJvYmplY3QiCitQQVNTIHdp
bmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignY29uZmlybScpICE9IC0xIGlzIHRydWUKK1BB
U1Mgd2luZG93S2V5cy5pbmRleE9mKCdjb25maXJtJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5k
b3dbJ2NvbmZpcm0nXSBpcyB3aW5kb3cuX19wcm90b19fWydjb25maXJtJ10KK1BBU1Mgd2luZG93
Lmhhc093blByb3BlcnR5KCdnZXRNYXRjaGVkQ1NTUnVsZXMnKSBpcyB0cnVlCitQQVNTIHR5cGVv
ZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2dldE1hdGNoZWRDU1NS
dWxlcycpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZign
Z2V0TWF0Y2hlZENTU1J1bGVzJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4
T2YoJ2dldE1hdGNoZWRDU1NSdWxlcycpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydnZXRN
YXRjaGVkQ1NTUnVsZXMnXSBpcyB3aW5kb3cuX19wcm90b19fWydnZXRNYXRjaGVkQ1NTUnVsZXMn
XQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3Nob3dNb2RhbERpYWxvZycpIGlzIHRydWUK
K1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnc2hv
d01vZGFsRGlhbG9nJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5p
bmRleE9mKCdzaG93TW9kYWxEaWFsb2cnKSAhPSAtMSBpcyB0cnVlCitGQUlMIHdpbmRvd1snc2hv
d01vZGFsRGlhbG9nJ10gc2hvdWxkIGJlIGZ1bmN0aW9uIHNob3dNb2RhbERpYWxvZygpIHsKKyAg
ICBbbmF0aXZlIGNvZGVdCit9IChvZiB0eXBlIGZ1bmN0aW9uKS4gV2FzIHVuZGVmaW5lZCAob2Yg
dHlwZSB1bmRlZmluZWQpLgorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2Nsb3NlJykgaXMg
dHJ1ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cs
ICdjbG9zZScpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhP
ZignY2xvc2UnKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZignY2xvc2Un
KSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd1snY2xvc2UnXSBpcyB3aW5kb3cuX19wcm90b19f
WydjbG9zZSddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnY2xlYXJJbnRlcnZhbCcpIGlz
IHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93
LCAnY2xlYXJJbnRlcnZhbCcpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFt
ZXMuaW5kZXhPZignY2xlYXJJbnRlcnZhbCcpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5
cy5pbmRleE9mKCdjbGVhckludGVydmFsJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ2Ns
ZWFySW50ZXJ2YWwnXSBpcyB3aW5kb3cuX19wcm90b19fWydjbGVhckludGVydmFsJ10KK1BBU1Mg
d2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRDb252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZScp
IGlzIHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2lu
ZG93LCAnd2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2UnKSBpcyAib2JqZWN0IgorUEFT
UyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2YoJ3dlYmtpdENvbnZlcnRQb2ludEZyb21O
b2RlVG9QYWdlJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ3dlYmtp
dENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3db
J3dlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlJ10gaXMgd2luZG93Ll9fcHJvdG9fX1sn
d2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2UnXQorUEFTUyB3aW5kb3cuaGFzT3duUHJv
cGVydHkoJ29wZW4nKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHdpbmRvdywgJ29wZW4nKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9w
ZXJ0eU5hbWVzLmluZGV4T2YoJ29wZW4nKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMu
aW5kZXhPZignb3BlbicpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydvcGVuJ10gaXMgd2lu
ZG93Ll9fcHJvdG9fX1snb3BlbiddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgncHJvbXB0
JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3
aW5kb3csICdwcm9tcHQnKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVz
LmluZGV4T2YoJ3Byb21wdCcpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9m
KCdwcm9tcHQnKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd1sncHJvbXB0J10gaXMgd2luZG93
Ll9fcHJvdG9fX1sncHJvbXB0J10KK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdmb2N1cycp
IGlzIHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2lu
ZG93LCAnZm9jdXMnKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmlu
ZGV4T2YoJ2ZvY3VzJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ2Zv
Y3VzJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ2ZvY3VzJ10gaXMgd2luZG93Ll9fcHJv
dG9fX1snZm9jdXMnXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2JsdXInKSBpcyB0cnVl
CitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2Js
dXInKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2YoJ2Js
dXInKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZignYmx1cicpICE9IC0x
IGlzIHRydWUKK1BBU1Mgd2luZG93WydibHVyJ10gaXMgd2luZG93Ll9fcHJvdG9fX1snYmx1cidd
CitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnc2Nyb2xsVG8nKSBpcyB0cnVlCitQQVNTIHR5
cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ3Njcm9sbFRvJykg
aXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5pbmRleE9mKCdzY3JvbGxU
bycpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9mKCdzY3JvbGxUbycpICE9
IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydzY3JvbGxUbyddIGlzIHdpbmRvdy5fX3Byb3RvX19b
J3Njcm9sbFRvJ10KK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdyZW1vdmVFdmVudExpc3Rl
bmVyJykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih3aW5kb3csICdyZW1vdmVFdmVudExpc3RlbmVyJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93
T3duUHJvcGVydHlOYW1lcy5pbmRleE9mKCdyZW1vdmVFdmVudExpc3RlbmVyJykgIT0gLTEgaXMg
dHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ3JlbW92ZUV2ZW50TGlzdGVuZXInKSAhPSAt
MSBpcyB0cnVlCitQQVNTIHdpbmRvd1sncmVtb3ZlRXZlbnRMaXN0ZW5lciddIGlzIHdpbmRvdy5f
X3Byb3RvX19bJ3JlbW92ZUV2ZW50TGlzdGVuZXInXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVy
dHkoJ3Bvc3RNZXNzYWdlJykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih3aW5kb3csICdwb3N0TWVzc2FnZScpIGlzICJvYmplY3QiCitQQVNTIHdp
bmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZigncG9zdE1lc3NhZ2UnKSAhPSAtMSBpcyB0cnVl
CitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZigncG9zdE1lc3NhZ2UnKSAhPSAtMSBpcyB0cnVlCitQ
QVNTIHdpbmRvd1sncG9zdE1lc3NhZ2UnXSBpcyB3aW5kb3cuX19wcm90b19fWydwb3N0TWVzc2Fn
ZSddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnc2V0SW50ZXJ2YWwnKSBpcyB0cnVlCitQ
QVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ3NldElu
dGVydmFsJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5pbmRleE9m
KCdzZXRJbnRlcnZhbCcpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9mKCdz
ZXRJbnRlcnZhbCcpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydzZXRJbnRlcnZhbCddIGlz
IHdpbmRvdy5fX3Byb3RvX19bJ3NldEludGVydmFsJ10KK1BBU1Mgd2luZG93Lmhhc093blByb3Bl
cnR5KCdnZXRTZWxlY3Rpb24nKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2dldFNlbGVjdGlvbicpIGlzICJvYmplY3QiCitQQVNT
IHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignZ2V0U2VsZWN0aW9uJykgIT0gLTEgaXMg
dHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ2dldFNlbGVjdGlvbicpICE9IC0xIGlzIHRy
dWUKK1BBU1Mgd2luZG93WydnZXRTZWxlY3Rpb24nXSBpcyB3aW5kb3cuX19wcm90b19fWydnZXRT
ZWxlY3Rpb24nXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2FsZXJ0JykgaXMgdHJ1ZQor
UEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdhbGVy
dCcpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignYWxl
cnQnKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZignYWxlcnQnKSAhPSAt
MSBpcyB0cnVlCitQQVNTIHdpbmRvd1snYWxlcnQnXSBpcyB3aW5kb3cuX19wcm90b19fWydhbGVy
dCddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnc3RvcCcpIGlzIHRydWUKK1BBU1MgdHlw
ZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnc3RvcCcpIGlzICJv
YmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignc3RvcCcpICE9IC0x
IGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9mKCdzdG9wJykgIT0gLTEgaXMgdHJ1ZQor
UEFTUyB3aW5kb3dbJ3N0b3AnXSBpcyB3aW5kb3cuX19wcm90b19fWydzdG9wJ10KK1BBU1Mgd2lu
ZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRDb252ZXJ0UG9pbnRGcm9tUGFnZVRvTm9kZScpIGlz
IHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93
LCAnd2Via2l0Q29udmVydFBvaW50RnJvbVBhZ2VUb05vZGUnKSBpcyAib2JqZWN0IgorUEFTUyB3
aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2YoJ3dlYmtpdENvbnZlcnRQb2ludEZyb21QYWdl
VG9Ob2RlJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dLZXlzLmluZGV4T2YoJ3dlYmtpdENv
bnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ3dl
YmtpdENvbnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlJ10gaXMgd2luZG93Ll9fcHJvdG9fX1snd2Vi
a2l0Q29udmVydFBvaW50RnJvbVBhZ2VUb05vZGUnXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVy
dHkoJ2FkZEV2ZW50TGlzdGVuZXInKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2FkZEV2ZW50TGlzdGVuZXInKSBpcyAib2JqZWN0
IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2YoJ2FkZEV2ZW50TGlzdGVuZXIn
KSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhPZignYWRkRXZlbnRMaXN0ZW5l
cicpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydhZGRFdmVudExpc3RlbmVyJ10gaXMgd2lu
ZG93Ll9fcHJvdG9fX1snYWRkRXZlbnRMaXN0ZW5lciddCitQQVNTIHdpbmRvdy5oYXNPd25Qcm9w
ZXJ0eSgnZGlzcGF0Y2hFdmVudCcpIGlzIHRydWUKK1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZGlzcGF0Y2hFdmVudCcpIGlzICJvYmplY3QiCitQ
QVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMuaW5kZXhPZignZGlzcGF0Y2hFdmVudCcpICE9IC0x
IGlzIHRydWUKK1BBU1Mgd2luZG93S2V5cy5pbmRleE9mKCdkaXNwYXRjaEV2ZW50JykgIT0gLTEg
aXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ2Rpc3BhdGNoRXZlbnQnXSBpcyB3aW5kb3cuX19wcm90b19f
WydkaXNwYXRjaEV2ZW50J10KK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdjYXB0dXJlRXZl
bnRzJykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih3aW5kb3csICdjYXB0dXJlRXZlbnRzJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJv
cGVydHlOYW1lcy5pbmRleE9mKCdjYXB0dXJlRXZlbnRzJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3
aW5kb3dLZXlzLmluZGV4T2YoJ2NhcHR1cmVFdmVudHMnKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdp
bmRvd1snY2FwdHVyZUV2ZW50cyddIGlzIHdpbmRvdy5fX3Byb3RvX19bJ2NhcHR1cmVFdmVudHMn
XQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3JlbGVhc2VFdmVudHMnKSBpcyB0cnVlCitQ
QVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ3JlbGVh
c2VFdmVudHMnKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4
T2YoJ3JlbGVhc2VFdmVudHMnKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd0tleXMuaW5kZXhP
ZigncmVsZWFzZUV2ZW50cycpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2luZG93WydyZWxlYXNlRXZl
bnRzJ10gaXMgd2luZG93Ll9fcHJvdG9fX1sncmVsZWFzZUV2ZW50cyddCitQQVNTIHdpbmRvdy5o
YXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ3RvU3RyaW5nJykgaXMgIm9iamVjdCIKK1BB
U1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5pbmRleE9mKCd0b1N0cmluZycpICE9IC0xIGlzIHRy
dWUKK1BBU1Mgd2luZG93Wyd0b1N0cmluZyddIGlzIHdpbmRvdy5fX3Byb3RvX19bJ3RvU3RyaW5n
J10KK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCd0b0xvY2FsZVN0cmluZycpIGlzIHRydWUK
K1BBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAndG9M
b2NhbGVTdHJpbmcnKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmlu
ZGV4T2YoJ3RvTG9jYWxlU3RyaW5nJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ3RvTG9j
YWxlU3RyaW5nJ10gaXMgd2luZG93Ll9fcHJvdG9fX1sndG9Mb2NhbGVTdHJpbmcnXQorUEFTUyB3
aW5kb3cuaGFzT3duUHJvcGVydHkoJ3ZhbHVlT2YnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ3ZhbHVlT2YnKSBpcyAib2JqZWN0
IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2YoJ3ZhbHVlT2YnKSAhPSAtMSBp
cyB0cnVlCitQQVNTIHdpbmRvd1sndmFsdWVPZiddIGlzIHdpbmRvdy5fX3Byb3RvX19bJ3ZhbHVl
T2YnXQorUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2hhc093blByb3BlcnR5JykgaXMgdHJ1
ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdo
YXNPd25Qcm9wZXJ0eScpIGlzICJvYmplY3QiCitQQVNTIHdpbmRvd093blByb3BlcnR5TmFtZXMu
aW5kZXhPZignaGFzT3duUHJvcGVydHknKSAhPSAtMSBpcyB0cnVlCitQQVNTIHdpbmRvd1snaGFz
T3duUHJvcGVydHknXSBpcyB3aW5kb3cuX19wcm90b19fWydoYXNPd25Qcm9wZXJ0eSddCitQQVNT
IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgncHJvcGVydHlJc0VudW1lcmFibGUnKSBpcyB0cnVlCitQ
QVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ3Byb3Bl
cnR5SXNFbnVtZXJhYmxlJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1l
cy5pbmRleE9mKCdwcm9wZXJ0eUlzRW51bWVyYWJsZScpICE9IC0xIGlzIHRydWUKK1BBU1Mgd2lu
ZG93Wydwcm9wZXJ0eUlzRW51bWVyYWJsZSddIGlzIHdpbmRvdy5fX3Byb3RvX19bJ3Byb3BlcnR5
SXNFbnVtZXJhYmxlJ10KK1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9m
JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3
aW5kb3csICdpc1Byb3RvdHlwZU9mJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVy
dHlOYW1lcy5pbmRleE9mKCdpc1Byb3RvdHlwZU9mJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5k
b3dbJ2lzUHJvdG90eXBlT2YnXSBpcyB3aW5kb3cuX19wcm90b19fWydpc1Byb3RvdHlwZU9mJ10K
K1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdfX2RlZmluZUdldHRlcl9fJykgaXMgdHJ1ZQor
UEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdfX2Rl
ZmluZUdldHRlcl9fJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5p
bmRleE9mKCdfX2RlZmluZUdldHRlcl9fJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ19f
ZGVmaW5lR2V0dGVyX18nXSBpcyB3aW5kb3cuX19wcm90b19fWydfX2RlZmluZUdldHRlcl9fJ10K
K1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdfX2RlZmluZVNldHRlcl9fJykgaXMgdHJ1ZQor
UEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdfX2Rl
ZmluZVNldHRlcl9fJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5p
bmRleE9mKCdfX2RlZmluZVNldHRlcl9fJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ19f
ZGVmaW5lU2V0dGVyX18nXSBpcyB3aW5kb3cuX19wcm90b19fWydfX2RlZmluZVNldHRlcl9fJ10K
K1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdfX2xvb2t1cEdldHRlcl9fJykgaXMgdHJ1ZQor
UEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdfX2xv
b2t1cEdldHRlcl9fJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5p
bmRleE9mKCdfX2xvb2t1cEdldHRlcl9fJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ19f
bG9va3VwR2V0dGVyX18nXSBpcyB3aW5kb3cuX19wcm90b19fWydfX2xvb2t1cEdldHRlcl9fJ10K
K1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdfX2xvb2t1cFNldHRlcl9fJykgaXMgdHJ1ZQor
UEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdfX2xv
b2t1cFNldHRlcl9fJykgaXMgIm9iamVjdCIKK1BBU1Mgd2luZG93T3duUHJvcGVydHlOYW1lcy5p
bmRleE9mKCdfX2xvb2t1cFNldHRlcl9fJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ19f
bG9va3VwU2V0dGVyX18nXSBpcyB3aW5kb3cuX19wcm90b19fWydfX2xvb2t1cFNldHRlcl9fJ10K
K1BBU1Mgd2luZG93Lmhhc093blByb3BlcnR5KCdjb25zdHJ1Y3RvcicpIGlzIHRydWUKK1BBU1Mg
dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnY29uc3RydWN0
b3InKSBpcyAib2JqZWN0IgorUEFTUyB3aW5kb3dPd25Qcm9wZXJ0eU5hbWVzLmluZGV4T2YoJ2Nv
bnN0cnVjdG9yJykgIT0gLTEgaXMgdHJ1ZQorUEFTUyB3aW5kb3dbJ2NvbnN0cnVjdG9yJ10gaXMg
d2luZG93Ll9fcHJvdG9fX1snY29uc3RydWN0b3InXQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydHktcHJveHlpbmcuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydHktcHJveHlpbmcuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzY1OTVjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0eS1wcm94eWluZy5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvd2luZG93LXByb3BlcnR5LXByb3h5aW5nLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggNDhjNTk0My4uZDZjMDMwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0w
MS0xOSAgS2VudCBIYW5zZW4gIDxrZW50LmhhbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSB3aW5kb3cgcHJvcGVydGll
cyBhcmUgbm90IHJldHVybmVkIGJ5IE9iamVjdC5rZXlzIGFuZCBPYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzM2MDMKKworICAgICAgICBTaW5jZSBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKCkgbG9va3MgaW4gdGhlIHByb3RvdHlwZSBvYmplY3QsCisgICAgICAgIEpTRE9NV2luZG93
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgc2hvdWxkIGluY2x1ZGUgdGhlIHByb3RvdHlwZSdzIHBy
b3BlcnRpZXMuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0
eS1wcm94eWluZy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1l
cyk6CisKIDIwMTAtMDEtMTkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAKaW5kZXggYTM0OWEwYi4uNWYwMjg5MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTQzMiw2ICs0MzIsMTIgQEAgdm9pZCBK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXIKICAgICAvLyBPbmx5IGFsbG93IHRoZSB3aW5kb3cgdG8gZW51bWVy
YXRlZCBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgogICAgIGlmICghYWxsb3dzQWNjZXNz
RnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuOworCisgICAgLy8gQWRkIHByb3RvdHlwZSBwcm9w
ZXJ0aWVzIHRvIG1hdGNoIHRoZSBsb2dpYyBvZiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKS4K
KyAgICBKU1ZhbHVlIHByb3RvID0gcHJvdG90eXBlKCk7CisgICAgaWYgKHByb3RvLmlzT2JqZWN0
KCkpCisgICAgICAgIGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKKwogICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMoZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
</data>
<flag name="review"
          id="29255"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="29256"
          type_id="3"
          status="-"
          setter="kent.hansen"
    />
          </attachment>
      

    </bug>

</bugzilla>