<?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>154817</bug_id>
          
          <creation_ts>2016-02-29 08:43:02 -0800</creation_ts>
          <short_desc>[JSC] Private symbols should not be trapped by proxy handler</short_desc>
          <delta_ts>2016-02-29 19:48:33 -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>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169147</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-29 08:43:02 -0800</bug_when>
    <thetext>Since the runtime has some assumptions on the properties bound with private symbols, ES6 Proxy should not trap these property operations.
For example, in ArrayIteratorPrototype.js

var itemKind = this.@arrayIterationKind;
if (itemKind === @undefined)
    throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| be an Array Iterator instance&quot;);

Here, we assume that only the array iterator has @arrayIterationKind property that value is non-undefined.
But If we implement Proxy with the get handler, that returns non-undefined value for every operations, we accidentally assumes that the given value is an array iterator.

To avoid these situation, we perform the default operations onto property ops with private symbols.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169164</commentid>
    <comment_count>1</comment_count>
      <attachid>272494</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-29 09:28:58 -0800</bug_when>
    <thetext>Created attachment 272494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169166</commentid>
    <comment_count>2</comment_count>
      <attachid>272495</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-29 09:30:53 -0800</bug_when>
    <thetext>Created attachment 272495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169178</commentid>
    <comment_count>3</comment_count>
      <attachid>272495</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-29 09:50:45 -0800</bug_when>
    <thetext>Comment on attachment 272495
Patch

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

r=me

&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:25
&gt; +            // this will throw because we conver private symbols to strings.

typo: conver ==&gt; convert

&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:51
&gt; +            // this will throw because we conver private symbols to strings.

Ditto.  Typo: conver ==&gt; convert.

&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:65
&gt; +        set: function(theTarget, propName, value, reciever) {

typo: reciever =&gt; receiver.

&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:78
&gt; +            // this will throw because we conver private symbols to strings.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169182</commentid>
    <comment_count>4</comment_count>
      <attachid>272495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-29 09:57:27 -0800</bug_when>
    <thetext>Comment on attachment 272495
Patch

We should probably remove the identifierToPublicSafeJSValur</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169185</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-29 10:04:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 272495 [details]
&gt; Patch
&gt; 
&gt; We should probably remove the identifierToPublicSafeJSValur

OK, I&apos;ll remove this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169186</commentid>
    <comment_count>6</comment_count>
      <attachid>272495</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-29 10:05:33 -0800</bug_when>
    <thetext>Comment on attachment 272495
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:25
&gt;&gt; +            // this will throw because we conver private symbols to strings.
&gt; 
&gt; typo: conver ==&gt; convert

Fixed.

&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:51
&gt;&gt; +            // this will throw because we conver private symbols to strings.
&gt; 
&gt; Ditto.  Typo: conver ==&gt; convert.

Fixed.

&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:65
&gt;&gt; +        set: function(theTarget, propName, value, reciever) {
&gt; 
&gt; typo: reciever =&gt; receiver.

Fixed, thanks!

&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:78
&gt;&gt; +            // this will throw because we conver private symbols to strings.
&gt; 
&gt; Ditto.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169189</commentid>
    <comment_count>7</comment_count>
      <attachid>272495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-29 10:09:37 -0800</bug_when>
    <thetext>Comment on attachment 272495
Patch

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

&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:25
&gt;&gt; +            // this will throw because we conver private symbols to strings.
&gt; 
&gt; typo: conver ==&gt; convert

It&apos;s probably worth asserting on the error message here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169352</commentid>
    <comment_count>8</comment_count>
      <attachid>272495</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-29 19:44:50 -0800</bug_when>
    <thetext>Comment on attachment 272495
Patch

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

Thanks!

&gt;&gt;&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-with-private-symbols.js:25
&gt;&gt;&gt;&gt; +            // this will throw because we conver private symbols to strings.
&gt;&gt;&gt; 
&gt;&gt;&gt; typo: conver ==&gt; convert
&gt;&gt; 
&gt;&gt; Fixed.
&gt; 
&gt; It&apos;s probably worth asserting on the error message here

Nice! Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169353</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-29 19:48:33 -0800</bug_when>
    <thetext>Committed r197383: &lt;http://trac.webkit.org/changeset/197383&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272494</attachid>
            <date>2016-02-29 09:28:58 -0800</date>
            <delta_ts>2016-02-29 09:30:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154817-20160301022841.patch</filename>
            <type>text/plain</type>
            <size>12953</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
Y2VjZTJmZTdjYjU3NTE5MTgwOGRhMjNkMTQ2ZDU2MTFlYWYwNGVjLi40MTRlMjUxZGI2ZjQzYjMz
MTI2MWRmNTcyNTJmNDJhZDE4Zjg2YjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxNi0wMi0yOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBQcml2YXRlIHN5bWJvbHMgc2hvdWxkIG5vdCBiZSB0cmFw
cGVkIGJ5IHByb3h5IGhhbmRsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NDgxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNpbmNlIHRoZSBydW50aW1lIGhhcyBzb21lIGFzc3VtcHRpb25zIG9uIHRo
ZSBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJpdmF0ZSBzeW1ib2xzLCBFUzYgUHJv
eHkgc2hvdWxkIG5vdCB0cmFwIHRoZXNlIHByb3BlcnR5IG9wZXJhdGlvbnMuCisgICAgICAgIEZv
ciBleGFtcGxlLCBpbiBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmpzCisKKyAgICAgICAgICAgIHZh
ciBpdGVtS2luZCA9IHRoaXMuQGFycmF5SXRlcmF0aW9uS2luZDsKKyAgICAgICAgICAgIGlmIChp
dGVtS2luZCA9PT0gQHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVF
cnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wg
YmUgYW4gQXJyYXkgSXRlcmF0b3IgaW5zdGFuY2UiKTsKKworICAgICAgICBIZXJlLCB3ZSBhc3N1
bWUgdGhhdCBvbmx5IHRoZSBhcnJheSBpdGVyYXRvciBoYXMgdGhlIEBhcnJheUl0ZXJhdGlvbktp
bmQgcHJvcGVydHkgdGhhdCB2YWx1ZSBpcyBub24tdW5kZWZpbmVkLgorICAgICAgICBCdXQgSWYg
d2UgaW1wbGVtZW50IFByb3h5IHdpdGggdGhlIGdldCBoYW5kbGVyLCB0aGF0IHJldHVybnMgYSBu
b24tdW5kZWZpbmVkIHZhbHVlIGZvciBldmVyeSBvcGVyYXRpb25zLCB3ZSBhY2NpZGVudGFsbHkg
YXNzdW1lcyB0aGF0IHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBhcnJheSBpdGVyYXRvci4KKworICAg
ICAgICBUbyBhdm9pZCB0aGVzZSBzaXR1YXRpb24sIHdlIHBlcmZvcm0gdGhlIGRlZmF1bHQgb3Bl
cmF0aW9ucyBvbnRvIHByb3BlcnR5IG9wZXJhdGlvbnMgd2l0aCBwcml2YXRlIHN5bWJvbHMuCisK
KyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cGVyZm9y
bVByb3h5R2V0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1l
dGhvZEdldE93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1I
YXNQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KToKKyAg
ICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUpOgorICAgICAgICAoSlNDOjpQ
cm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJveHktd2l0
aC1wcml2YXRlLXN5bWJvbHMuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAg
KGxldC5oYW5kbGVyLmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisKIDIwMTYtMDItMjggIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgSlNGdW5jdGlv
bi5uYW1lIGFsbG9jYXRpb24gZnVsbHkgbGF6eS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5T2JqZWN0LmNwcAppbmRleCAzZWQxNTM5MmQ2YjhhM2U4ODA5NjQwZDllYzUz
YjcwNTk3ZGE0MDQxLi4yZjhlNTc3YTQ2MmU5YjI1MWM5ZmUwYzc4YjkyYmFkMjA3Y2ZiNTMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCkBAIC05
NSw2ICs5NSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcGVyZm9ybVByb3h5R2V0KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIH0KIAogICAgIFByb3h5
T2JqZWN0KiBwcm94eU9iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KHByb3h5T2JqZWN0QXNP
YmplY3QpOworICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eU9iamVjdC0+dGFyZ2V0KCk7CisK
KyAgICBhdXRvIHBlcmZvcm1EZWZhdWx0R2V0ID0gWyZdIHsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0YXJnZXQtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICB9OworCisg
ICAgaWYgKHZtLnByb3BlcnR5TmFtZXMtPmlzUHJpdmF0ZU5hbWUoSWRlbnRpZmllcjo6ZnJvbVVp
ZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKQorICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1
bHRHZXQoKTsKKwogICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gcHJveHlPYmplY3QtPmhhbmRs
ZXIoKTsKICAgICBpZiAoaGFuZGxlclZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdoYW5kbGVyJyBpcyBudWxs
LiBJdCBzaG91bGQgYmUgYW4gT2JqZWN0LiIpKTsKQEAgLTEwNiw5ICsxMTUsOCBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgcGVyZm9ybVByb3h5R2V0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIEpTT2JqZWN0KiB0
YXJnZXQgPSBwcm94eU9iamVjdC0+dGFyZ2V0KCk7CiAgICAgaWYgKGdldEhhbmRsZXIuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0YXJnZXQtPmdldChleGVj
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1EZWZhdWx0R2V0KCk7CiAK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZCh0YXJnZXQpOwpAQCAtMTM4LDYgKzE0NiwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcGVy
Zm9ybVByb3h5R2V0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAog
Ym9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCogdGFyZ2V0ID0g
dGhpcy0+dGFyZ2V0KCk7CisKKyAgICBhdXRvIHBlcmZvcm1EZWZhdWx0R2V0T3duUHJvcGVydHkg
PSBbJl0geworICAgICAgICByZXR1cm4gdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5U2xvdCh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfTsKKwor
ICAgIGlmICh2bS5wcm9wZXJ0eU5hbWVzLT5pc1ByaXZhdGVOYW1lKElkZW50aWZpZXI6OmZyb21V
aWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSkKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1EZWZh
dWx0R2V0T3duUHJvcGVydHkoKTsKKwogICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+
aGFuZGxlcigpOwogICAgIGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdoYW5kbGVyJyBpcyBudWxs
LiBJdCBzaG91bGQgYmUgYW4gT2JqZWN0LiIpKTsKQEAgLTE1MCw5ICsxNjcsOCBAQCBib29sIFBy
b3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TgogICAgIEpTVmFsdWUgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0
aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlk
ZW50aWZpZXIodm0sICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKSwgQVNDSUlMaXRlcmFsKCIn
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUuIikpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQo
KTsKICAgICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0aG9kLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlT
bG90KHRhcmdldCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHBl
cmZvcm1EZWZhdWx0R2V0T3duUHJvcGVydHkoKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CkBAIC0yMjYsOCArMjQy
LDE2IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOCiBib29sIFByb3h5T2JqZWN0OjpwZXJmb3Jt
SGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09i
amVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBO
b25lLCBqc1VuZGVmaW5lZCgpKTsgLy8gTm9ib2R5IHNob3VsZCByZWx5IG9uIG91ciB2YWx1ZSwg
YnV0IGJlIHNhZmUgYW5kIHByb3RlY3QgYWdhaW5zdCBhbnkgYmFkIGFjdG9ycyByZWFkaW5nIG91
ciB2YWx1ZS4KLSAgICAKKworICAgIGF1dG8gcGVyZm9ybURlZmF1bHRIYXNQcm9wZXJ0eSA9IFsm
XSB7CisgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVy
dHlTbG90KHRhcmdldCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9OworCisgICAg
aWYgKHZtLnByb3BlcnR5TmFtZXMtPmlzUHJpdmF0ZU5hbWUoSWRlbnRpZmllcjo6ZnJvbVVpZCgm
dm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKQorICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRI
YXNQcm9wZXJ0eSgpOworCiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSB0aGlzLT5oYW5kbGVy
KCk7CiAgICAgaWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkgewogICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgJ2hhbmRsZXInIGlzIG51bGwuIEl0IHNo
b3VsZCBiZSBhbiBPYmplY3QuIikpOwpAQCAtMjQwLDkgKzI2NCw4IEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsCiAgICAgSlNWYWx1ZSBoYXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIEFTQ0lJTGl0ZXJh
bCgiJ2hhcycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxl
LiIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKGhhc01l
dGhvZC5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gdGFyZ2V0LT5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5U2xvdCh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CisgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdEhhc1Byb3BlcnR5KCk7CiAKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwpAQCAtMzEwLDkgKzMzMywxMyBAQCBib29sIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdQogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgUGVyZm9ybURlZmF1bHRQdXRGdW5jdGlvbj4KLXZvaWQgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHB1dFZhbHVlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUGVyZm9ybURlZmF1bHRQdXRG
dW5jdGlvbiBwZXJmb3JtRGVmYXVsdFB1dEZ1bmN0aW9uKQordm9pZCBQcm94eU9iamVjdDo6cGVy
Zm9ybVB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcHV0VmFsdWUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQZXJmb3JtRGVmYXVsdFB1dEZ1bmN0aW9u
IHBlcmZvcm1EZWZhdWx0UHV0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICBp
ZiAodm0ucHJvcGVydHlOYW1lcy0+aXNQcml2YXRlTmFtZShJZGVudGlmaWVyOjpmcm9tVWlkKCZ2
bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpCisgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdFB1
dCgpOworCiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSB0aGlzLT5oYW5kbGVyKCk7CiAgICAg
aWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgJ2hhbmRsZXInIGlzIG51bGwuIEl0IHNob3VsZCBiZSBh
biBPYmplY3QuIikpOwpAQCAtMzI3LDcgKzM1NCw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZv
cm1QdXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHB1dFZhbHVlLCBKU1ZhbHVlIHRoaXNWYWx1
CiAgICAgICAgIHJldHVybjsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7
CiAgICAgaWYgKHNldE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBlcmZvcm1EZWZh
dWx0UHV0RnVuY3Rpb24oKTsKKyAgICAgICAgcGVyZm9ybURlZmF1bHRQdXQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNDg3LDkgKzUxNCwxMyBAQCBDb25zdHJ1Y3RUeXBlIFByb3h5
T2JqZWN0OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29u
c3RydQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRGVmYXVsdERlbGV0ZUZ1bmN0aW9uPgotYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIERlZmF1bHREZWxldGVGdW5jdGlvbiBkZWZhdWx0RGVsZXRlRnVuY3Rp
b24pCitib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVmYXVsdERlbGV0ZUZ1bmN0aW9uIHBlcmZvcm1EZWZh
dWx0RGVsZXRlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICBpZiAodm0ucHJv
cGVydHlOYW1lcy0+aXNQcml2YXRlTmFtZShJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVy
dHlOYW1lLnVpZCgpKSkpCisgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdERlbGV0ZSgpOwor
CiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSB0aGlzLT5oYW5kbGVyKCk7CiAgICAgaWYgKGhh
bmRsZXJWYWx1ZS5pc051bGwoKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiUHJveHkgJ2hhbmRsZXInIGlzIG51bGwuIEl0IHNob3VsZCBiZSBhbiBPYmpl
Y3QuIikpOwpAQCAtNTA0LDcgKzUzNSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxl
dGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWZhCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7
CiAgICAgaWYgKGRlbGV0ZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJl
dHVybiBkZWZhdWx0RGVsZXRlRnVuY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1EZWZh
dWx0RGVsZXRlKCk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAg
YXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwpAQCAtNTM3LDExICs1NjgsMTEgQEAgYm9vbCBQcm94
eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIERlZmEKIGJvb2wgUHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAg
IFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7Ci0g
ICAgYXV0byBkZWZhdWx0RGVsZXRlID0gWyZdICgpIC0+IGJvb2wgeworICAgIGF1dG8gcGVyZm9y
bURlZmF1bHREZWxldGUgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgIEpTT2JqZWN0KiB0YXJn
ZXQgPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzT2JqZWN0LT50YXJnZXQoKSk7CiAgICAgICAgIHJl
dHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eSh0YXJn
ZXQsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgfTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
cGVyZm9ybURlbGV0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlZmF1bHREZWxldGUpOworICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5wZXJmb3JtRGVsZXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwgcGVyZm9y
bURlZmF1bHREZWxldGUpOwogfQogCiBib29sIFByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSkKQEAgLTU1MCwxMSArNTgxLDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBh
dXRvIGRlZmF1bHREZWxldGUgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgYXV0byBwZXJmb3JtRGVm
YXVsdERlbGV0ZSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9
IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNPYmplY3QtPnRhcmdldCgpKTsKICAgICAgICAgcmV0dXJu
IHRhcmdldC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgfTsKLSAgICByZXR1cm4gdGhpc09iamVj
dC0+cGVyZm9ybURlbGV0ZShleGVjLCBpZGVudC5pbXBsKCksIGRlZmF1bHREZWxldGUpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LT5wZXJmb3JtRGVsZXRlKGV4ZWMsIGlkZW50LmltcGwoKSwgcGVy
Zm9ybURlZmF1bHREZWxldGUpOwogfQogCiB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LXdpdGgtcHJpdmF0ZS1zeW1ib2xzLmpz
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS13aXRoLXByaXZhdGUt
c3ltYm9scy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjliZTI0NTg0YzNhMDhhNWM3MWE0NDM2NWU0YmQ5Y2Q2
ZDlhNDQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm94eS13aXRoLXByaXZhdGUtc3ltYm9scy5qcwpAQCAtMCwwICsxLDg1IEBACitmdW5j
dGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJi
YWQgYXNzZXJ0aW9uLiIpOworfQorCisvLyBDdXJyZW50bHksIG9ubHkgImdldCIsICJnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IiLCBhbmQgInNldCIgYXJlIHRlc3RhYmxlLgorCit7CisgICAgbGV0
IHRoZVRhcmdldCA9IFtdOworICAgIGxldCBzYXdQcml2YXRlU3ltYm9sQXNTdHJpbmcgPSBmYWxz
ZTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbih0YXJnZXQsIHBy
b3BOYW1lLCBwcm94eUFyZykgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wTmFtZSA9PT0g
InN0cmluZyIpCisgICAgICAgICAgICAgICAgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0gcHJv
cE5hbWUgPT09ICJQcml2YXRlU3ltYm9sLmFycmF5SXRlcmF0aW9uS2luZCI7CisgICAgICAgICAg
ICByZXR1cm4gdGFyZ2V0W3Byb3BOYW1lXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQg
cHJveHkgPSBuZXcgUHJveHkodGhlVGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0
cnkgeworICAgICAgICAgICAgcHJveHlbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQuY2FsbChwcm94
eSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRocm93
IGJlY2F1c2Ugd2UgY29udmVyIHByaXZhdGUgc3ltYm9scyB0byBzdHJpbmdzLgorICAgICAgICAg
ICAgdGhyZXcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAg
ICAgIGFzc2VydCghc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nKTsKKyAgICAgICAgc2F3UHJpdmF0
ZVN5bWJvbEFzU3RyaW5nID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IHRoZVRhcmdl
dCA9IFtdOworICAgIGxldCBzYXdQcml2YXRlU3ltYm9sQXNTdHJpbmcgPSBmYWxzZTsKKyAgICBs
ZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlv
bih0aGVUYXJnZXQsIHByb3BOYW1lKSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BOYW1l
ID09PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICBzYXdQcml2YXRlU3ltYm9sQXNTdHJpbmcg
PSBwcm9wTmFtZSA9PT0gIlByaXZhdGVTeW1ib2wuYXJyYXlJdGVyYXRpb25LaW5kIjsKKyAgICAg
ICAgICAgIHJldHVybiB0YXJnZXRbcHJvcE5hbWVdOworICAgICAgICB9CisgICAgfTsKKworICAg
IGxldCBwcm94eSA9IG5ldyBQcm94eSh0aGVUYXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICBwcm94eVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dC5jYWxs
KHByb3h5KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAvLyB0aGlzIHdpbGwg
dGhyb3cgYmVjYXVzZSB3ZSBjb252ZXIgcHJpdmF0ZSBzeW1ib2xzIHRvIHN0cmluZ3MuCisgICAg
ICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHRocmV3KTsK
KyAgICAgICAgYXNzZXJ0KCFzYXdQcml2YXRlU3ltYm9sQXNTdHJpbmcpOworICAgICAgICBzYXdQ
cml2YXRlU3ltYm9sQXNTdHJpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGhl
VGFyZ2V0ID0gWzEsMiwzLDQsNV07CisgICAgbGV0IGl0ZXJhdG9yID0gdGhlVGFyZ2V0W1N5bWJv
bC5pdGVyYXRvcl0oKTsKKyAgICBsZXQgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0gZmFsc2U7
CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIHNldDogZnVuY3Rpb24odGhlVGFyZ2V0LCBw
cm9wTmFtZSwgdmFsdWUsIHJlY2lldmVyKSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BO
YW1lID09PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICBzYXdQcml2YXRlU3ltYm9sQXNTdHJp
bmcgPSBwcm9wTmFtZSA9PT0gIlByaXZhdGVTeW1ib2wuYXJyYXlJdGVyYXRpb25LaW5kIjsKKyAg
ICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcE5hbWVdOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGxldCBwcm94eSA9IG5ldyBQcm94eShpdGVyYXRvciwgaGFuZGxlcik7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHByb3h5Lm5leHQoKTsKKyAgICAgICAgfSBjYXRjaChl
KSB7CisgICAgICAgICAgICAvLyB0aGlzIHdpbGwgdGhyb3cgYmVjYXVzZSB3ZSBjb252ZXIgcHJp
dmF0ZSBzeW1ib2xzIHRvIHN0cmluZ3MuCisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgYXNzZXJ0KCF0aHJldyk7CisgICAgICAgIGFzc2VydCghc2F3UHJpdmF0
ZVN5bWJvbEFzU3RyaW5nKTsKKyAgICAgICAgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0gZmFs
c2U7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272495</attachid>
            <date>2016-02-29 09:30:53 -0800</date>
            <delta_ts>2016-02-29 09:50:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154817-20160301023036.patch</filename>
            <type>text/plain</type>
            <size>14241</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
Y2VjZTJmZTdjYjU3NTE5MTgwOGRhMjNkMTQ2ZDU2MTFlYWYwNGVjLi5lMDllZTZmMDA4MzZkNWNk
MTg0MTA2YjgzYTU4MTFhN2Y3MjU4MWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNi0wMi0yOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBQcml2YXRlIHN5bWJvbHMgc2hvdWxkIG5vdCBiZSB0cmFw
cGVkIGJ5IHByb3h5IGhhbmRsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NDgxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNpbmNlIHRoZSBydW50aW1lIGhhcyBzb21lIGFzc3VtcHRpb25zIG9uIHRo
ZSBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJpdmF0ZSBzeW1ib2xzLCBFUzYgUHJv
eHkgc2hvdWxkIG5vdCB0cmFwIHRoZXNlIHByb3BlcnR5IG9wZXJhdGlvbnMuCisgICAgICAgIEZv
ciBleGFtcGxlLCBpbiBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmpzCisKKyAgICAgICAgICAgIHZh
ciBpdGVtS2luZCA9IHRoaXMuQGFycmF5SXRlcmF0aW9uS2luZDsKKyAgICAgICAgICAgIGlmIChp
dGVtS2luZCA9PT0gQHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVF
cnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wg
YmUgYW4gQXJyYXkgSXRlcmF0b3IgaW5zdGFuY2UiKTsKKworICAgICAgICBIZXJlLCB3ZSBhc3N1
bWUgdGhhdCBvbmx5IHRoZSBhcnJheSBpdGVyYXRvciBoYXMgdGhlIEBhcnJheUl0ZXJhdGlvbktp
bmQgcHJvcGVydHkgdGhhdCB2YWx1ZSBpcyBub24tdW5kZWZpbmVkLgorICAgICAgICBCdXQgSWYg
d2UgaW1wbGVtZW50IFByb3h5IHdpdGggdGhlIGdldCBoYW5kbGVyLCB0aGF0IHJldHVybnMgYSBu
b24tdW5kZWZpbmVkIHZhbHVlIGZvciBldmVyeSBvcGVyYXRpb25zLCB3ZSBhY2NpZGVudGFsbHkg
YXNzdW1lcyB0aGF0IHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBhcnJheSBpdGVyYXRvci4KKworICAg
ICAgICBUbyBhdm9pZCB0aGVzZSBzaXR1YXRpb24sIHdlIHBlcmZvcm0gdGhlIGRlZmF1bHQgb3Bl
cmF0aW9ucyBvbnRvIHByb3BlcnR5IG9wZXJhdGlvbnMgd2l0aCBwcml2YXRlIHN5bWJvbHMuCisK
KyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cGVyZm9y
bVByb3h5R2V0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1l
dGhvZEdldE93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1I
YXNQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KToKKyAg
ICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUpOgorICAgICAgICAoSlNDOjpQ
cm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJveHktYmFz
aWMuanM6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Byb3h5LXdpdGgtcHJpdmF0ZS1zeW1ib2xz
LmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChsZXQuaGFuZGxlci5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorCiAyMDE2LTAyLTI4ICBBbmRyZWFzIEtsaW5nICA8YWts
aW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEpTRnVuY3Rpb24ubmFtZSBhbGxvY2F0aW9u
IGZ1bGx5IGxhenkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVj
dC5jcHAKaW5kZXggM2VkMTUzOTJkNmI4YTNlODgwOTY0MGQ5ZWM1M2I3MDU5N2RhNDA0MS4uMmY4
ZTU3N2E0NjJlOWIyNTFjOWZlMGM3OGI5MmJhZDIwN2NmYjUzMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcApAQCAtOTUsNiArOTUsMTUgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICB9CiAKICAgICBQcm94eU9iamVjdCogcHJveHlPYmpl
Y3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihwcm94eU9iamVjdEFzT2JqZWN0KTsKKyAgICBKU09i
amVjdCogdGFyZ2V0ID0gcHJveHlPYmplY3QtPnRhcmdldCgpOworCisgICAgYXV0byBwZXJmb3Jt
RGVmYXVsdEdldCA9IFsmXSB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGFyZ2V0
LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgfTsKKworICAgIGlmICh2bS5wcm9wZXJ0
eU5hbWVzLT5pc1ByaXZhdGVOYW1lKElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKSkKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1EZWZhdWx0R2V0KCk7CisKICAgICBK
U1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHByb3h5T2JqZWN0LT5oYW5kbGVyKCk7CiAgICAgaWYgKGhh
bmRsZXJWYWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxkIGJlIGFu
IE9iamVjdC4iKSk7CkBAIC0xMDYsOSArMTE1LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBl
cmZvcm1Qcm94eUdldChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHlPYmpl
Y3QtPnRhcmdldCgpOwogICAgIGlmIChnZXRIYW5kbGVyLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGFyZ2V0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7
CisgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdEdldCgpOwogCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKQEAgLTEz
OCw2ICsxNDYsMTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKIGJvb2wgUHJveHlPYmplY3Q6
OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwor
CisgICAgYXV0byBwZXJmb3JtRGVmYXVsdEdldE93blByb3BlcnR5ID0gWyZdIHsKKyAgICAgICAg
cmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGFyZ2V0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH07CisKKyAgICBpZiAodm0ucHJvcGVy
dHlOYW1lcy0+aXNQcml2YXRlTmFtZShJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlO
YW1lLnVpZCgpKSkpCisgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdEdldE93blByb3BlcnR5
KCk7CisKICAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHRoaXMtPmhhbmRsZXIoKTsKICAgICBp
ZiAoaGFuZGxlclZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxkIGJlIGFu
IE9iamVjdC4iKSk7CkBAIC0xNTAsOSArMTY3LDggQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU4K
ICAgICBKU1ZhbHVlIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCA9IGhhbmRsZXItPmdl
dE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldE93blByb3BlcnR5RGVz
Y3JpcHRvcicgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxl
LiIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKGdldE93
blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZC5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4g
dGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdCh0YXJnZXQsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdEdldE93
blByb3BlcnR5KCk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAg
YXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwpAQCAtMjI2LDggKzI0MiwxNiBAQCBib29sIFByb3h5
T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TgogYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNPYmplY3QqIHRhcmdldCA9IHRo
aXMtPnRhcmdldCgpOwogICAgIHNsb3Quc2V0VmFsdWUodGhpcywgTm9uZSwganNVbmRlZmluZWQo
KSk7IC8vIE5vYm9keSBzaG91bGQgcmVseSBvbiBvdXIgdmFsdWUsIGJ1dCBiZSBzYWZlIGFuZCBw
cm90ZWN0IGFnYWluc3QgYW55IGJhZCBhY3RvcnMgcmVhZGluZyBvdXIgdmFsdWUuCi0gICAgCisK
KyAgICBhdXRvIHBlcmZvcm1EZWZhdWx0SGFzUHJvcGVydHkgPSBbJl0geworICAgICAgICByZXR1
cm4gdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdCh0YXJnZXQsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfTsKKworICAgIGlmICh2bS5wcm9wZXJ0eU5h
bWVzLT5pc1ByaXZhdGVOYW1lKElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpKSkKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1EZWZhdWx0SGFzUHJvcGVydHkoKTsKKwog
ICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwogICAgIGlmIChoYW5k
bGVyVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIlByb3h5ICdoYW5kbGVyJyBpcyBudWxsLiBJdCBzaG91bGQgYmUgYW4gT2JqZWN0
LiIpKTsKQEAgLTI0MCw5ICsyNjQsOCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJv
cGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAogICAgIEpT
VmFsdWUgaGFzTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxs
VHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aGFzLCBBU0NJSUxpdGVyYWwoIidoYXMnIHByb3BlcnR5
IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZS4iKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNPYmplY3Qq
IHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChoYXNNZXRob2QuaXNVbmRlZmluZWQo
KSkKLSAgICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eVNsb3QodGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICByZXR1cm4g
cGVyZm9ybURlZmF1bHRIYXNQcm9wZXJ0eSgpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKQEAgLTMxMCw5ICszMzMs
MTMgQEAgYm9vbCBQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFBl
cmZvcm1EZWZhdWx0UHV0RnVuY3Rpb24+Ci12b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBwdXRWYWx1ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBlcmZvcm1EZWZhdWx0UHV0RnVuY3Rpb24gcGVyZm9ybURl
ZmF1bHRQdXRGdW5jdGlvbikKK3ZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHB1dFZhbHVlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUGVyZm9ybURlZmF1bHRQdXRGdW5jdGlvbiBwZXJmb3JtRGVmYXVsdFB1
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCisgICAgaWYgKHZtLnByb3BlcnR5TmFt
ZXMtPmlzUHJpdmF0ZU5hbWUoSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpKQorICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRQdXQoKTsKKwogICAgIEpTVmFs
dWUgaGFuZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwogICAgIGlmIChoYW5kbGVyVmFsdWUu
aXNOdWxsKCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IlByb3h5ICdoYW5kbGVyJyBpcyBudWxsLiBJdCBzaG91bGQgYmUgYW4gT2JqZWN0LiIpKTsKQEAg
LTMyNyw3ICszNTQsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBwdXRWYWx1ZSwgSlNWYWx1ZSB0aGlzVmFsdQogICAgICAgICByZXR1cm47
CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChzZXRNZXRo
b2QuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBwZXJmb3JtRGVmYXVsdFB1dEZ1bmN0aW9uKCk7
CisgICAgICAgIHBlcmZvcm1EZWZhdWx0UHV0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTQ4Nyw5ICs1MTQsMTMgQEAgQ29uc3RydWN0VHlwZSBQcm94eU9iamVjdDo6Z2V0Q29uc3Ry
dWN0RGF0YShKU0NlbGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNvbnN0cnUKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIERlZmF1bHREZWxldGVGdW5jdGlvbj4KLWJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1EZWxldGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBE
ZWZhdWx0RGVsZXRlRnVuY3Rpb24gZGVmYXVsdERlbGV0ZUZ1bmN0aW9uKQorYm9vbCBQcm94eU9i
amVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIERlZmF1bHREZWxldGVGdW5jdGlvbiBwZXJmb3JtRGVmYXVsdERlbGV0ZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworCisgICAgaWYgKHZtLnByb3BlcnR5TmFtZXMtPmlzUHJp
dmF0ZU5hbWUoSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKQor
ICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHREZWxldGUoKTsKKwogICAgIEpTVmFsdWUgaGFu
ZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwogICAgIGlmIChoYW5kbGVyVmFsdWUuaXNOdWxs
KCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5
ICdoYW5kbGVyJyBpcyBudWxsLiBJdCBzaG91bGQgYmUgYW4gT2JqZWN0LiIpKTsKQEAgLTUwNCw3
ICs1MzUsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVmYQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChkZWxldGVQ
cm9wZXJ0eU1ldGhvZC5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZGVmYXVsdERlbGV0
ZUZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdERlbGV0ZSgpOwogCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKQEAgLTUzNywxMSArNTY4LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1E
ZWxldGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWZhCiBi
b29sIFByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBQcm94eU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwotICAgIGF1dG8gZGVmYXVsdERl
bGV0ZSA9IFsmXSAoKSAtPiBib29sIHsKKyAgICBhdXRvIHBlcmZvcm1EZWZhdWx0RGVsZXRlID0g
WyZdICgpIC0+IGJvb2wgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4odGhpc09iamVjdC0+dGFyZ2V0KCkpOwogICAgICAgICByZXR1cm4gdGFyZ2V0LT5tZXRo
b2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwogICAgIH07Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxldGUoZXhl
YywgcHJvcGVydHlOYW1lLCBkZWZhdWx0RGVsZXRlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+
cGVyZm9ybURlbGV0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHBlcmZvcm1EZWZhdWx0RGVsZXRlKTsK
IH0KIAogYm9vbCBQcm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCkBAIC01NTAsMTEgKzU4
MSwxMSBAQCBib29sIFByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKTsgCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBkZWZhdWx0RGVsZXRl
ID0gWyZdICgpIC0+IGJvb2wgeworICAgIGF1dG8gcGVyZm9ybURlZmF1bHREZWxldGUgPSBbJl0g
KCkgLT4gYm9vbCB7CiAgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNPYmplY3Qq
Pih0aGlzT2JqZWN0LT50YXJnZXQoKSk7CiAgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRh
YmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGFyZ2V0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIH07Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxldGUo
ZXhlYywgaWRlbnQuaW1wbCgpLCBkZWZhdWx0RGVsZXRlKTsKKyAgICByZXR1cm4gdGhpc09iamVj
dC0+cGVyZm9ybURlbGV0ZShleGVjLCBpZGVudC5pbXBsKCksIHBlcmZvcm1EZWZhdWx0RGVsZXRl
KTsKIH0KIAogdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9wcm94eS1iYXNpYy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcHJveHktYmFzaWMuanMKaW5kZXggNTIxNDcwYmRkMjA3YzNjN2U1OTE1OTQxYWRlOTJj
ZDViNzQ2OGFjYS4uMDQxNjJkMDA1YjI5OTJkOWY3ZGFhNTQyZTI5NjQ5ZmNhZTkzMWYyZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1iYXNpYy5q
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWJhc2ljLmpz
CkBAIC0yODEsMzIgKzI4MSw2IEBAIGdldCB4KCkgewogfQogCiB7Ci0gICAgbGV0IHRoZVRhcmdl
dCA9IFtdOwotICAgIGxldCBzYXdQcml2YXRlU3ltYm9sQXNTdHJpbmcgPSBmYWxzZTsKLSAgICBs
ZXQgaGFuZGxlciA9IHsKLSAgICAgICAgZ2V0OiBmdW5jdGlvbih0YXJnZXQsIHByb3BOYW1lLCBw
cm94eUFyZykgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wTmFtZSA9PT0gInN0cmluZyIp
Ci0gICAgICAgICAgICAgICAgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0gcHJvcE5hbWUgPT09
ICJQcml2YXRlU3ltYm9sLmFycmF5SXRlcmF0aW9uS2luZCI7Ci0gICAgICAgICAgICByZXR1cm4g
dGFyZ2V0W3Byb3BOYW1lXTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBsZXQgcHJveHkgPSBu
ZXcgUHJveHkodGhlVGFyZ2V0LCBoYW5kbGVyKTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEw
MDsgaSsrKSB7Ci0gICAgICAgIGxldCB0aHJldyA9IGZhbHNlOwotICAgICAgICB0cnkgewotICAg
ICAgICAgICAgcHJveHlbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQuY2FsbChwcm94eSk7Ci0gICAg
ICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRocm93IGJlY2F1c2Ug
d2UgY29udmVyIHByaXZhdGUgc3ltYm9scyB0byBzdHJpbmdzLgotICAgICAgICAgICAgdGhyZXcg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydCh0aHJldyk7Ci0gICAgICAgIGFzc2Vy
dChzYXdQcml2YXRlU3ltYm9sQXNTdHJpbmcpOwotICAgICAgICBzYXdQcml2YXRlU3ltYm9sQXNT
dHJpbmcgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXsKICAgICBsZXQgcHJvcCA9IFN5bWJvbCgpOwog
ICAgIGxldCB0aGVUYXJnZXQgPSB7IH07CiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoZVRh
cmdldCwgcHJvcCwgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm94eS13aXRoLXByaXZhdGUtc3ltYm9scy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvcHJveHktd2l0aC1wcml2YXRlLXN5bWJvbHMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGI5YmUyNDU4NGMzYTA4YTVjNzFhNDQzNjVlNGJkOWNkNmQ5YTQ0MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktd2l0aC1wcml2YXRl
LXN5bWJvbHMuanMKQEAgLTAsMCArMSw4NSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGFzc2VydGlvbi4iKTsKK30KKwor
Ly8gQ3VycmVudGx5LCBvbmx5ICJnZXQiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgYW5k
ICJzZXQiIGFyZSB0ZXN0YWJsZS4KKworeworICAgIGxldCB0aGVUYXJnZXQgPSBbXTsKKyAgICBs
ZXQgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0gZmFsc2U7CisgICAgbGV0IGhhbmRsZXIgPSB7
CisgICAgICAgIGdldDogZnVuY3Rpb24odGFyZ2V0LCBwcm9wTmFtZSwgcHJveHlBcmcpIHsKKyAg
ICAgICAgICAgIGlmICh0eXBlb2YgcHJvcE5hbWUgPT09ICJzdHJpbmciKQorICAgICAgICAgICAg
ICAgIHNhd1ByaXZhdGVTeW1ib2xBc1N0cmluZyA9IHByb3BOYW1lID09PSAiUHJpdmF0ZVN5bWJv
bC5hcnJheUl0ZXJhdGlvbktpbmQiOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wTmFt
ZV07CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRoZVRh
cmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAg
ICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHByb3h5
W1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0LmNhbGwocHJveHkpOworICAgICAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgICAgIC8vIHRoaXMgd2lsbCB0aHJvdyBiZWNhdXNlIHdlIGNvbnZlciBwcml2
YXRlIHN5bWJvbHMgdG8gc3RyaW5ncy4KKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBhc3NlcnQodGhyZXcpOworICAgICAgICBhc3NlcnQoIXNhd1ByaXZhdGVT
eW1ib2xBc1N0cmluZyk7CisgICAgICAgIHNhd1ByaXZhdGVTeW1ib2xBc1N0cmluZyA9IGZhbHNl
OworICAgIH0KK30KKworeworICAgIGxldCB0aGVUYXJnZXQgPSBbXTsKKyAgICBsZXQgc2F3UHJp
dmF0ZVN5bWJvbEFzU3RyaW5nID0gZmFsc2U7CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAg
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSkg
eworICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wTmFtZSA9PT0gInN0cmluZyIpCisgICAgICAg
ICAgICAgICAgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0gcHJvcE5hbWUgPT09ICJQcml2YXRl
U3ltYm9sLmFycmF5SXRlcmF0aW9uS2luZCI7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3By
b3BOYW1lXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHko
dGhlVGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7
CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAg
cHJveHlbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQuY2FsbChwcm94eSk7CisgICAgICAgIH0gY2F0
Y2goZSkgeworICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRocm93IGJlY2F1c2Ugd2UgY29udmVy
IHByaXZhdGUgc3ltYm9scyB0byBzdHJpbmdzLgorICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgICAgIGFzc2VydCghc2F3UHJp
dmF0ZVN5bWJvbEFzU3RyaW5nKTsKKyAgICAgICAgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0g
ZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IHRoZVRhcmdldCA9IFsxLDIsMyw0LDVdOwor
ICAgIGxldCBpdGVyYXRvciA9IHRoZVRhcmdldFtTeW1ib2wuaXRlcmF0b3JdKCk7CisgICAgbGV0
IHNhd1ByaXZhdGVTeW1ib2xBc1N0cmluZyA9IGZhbHNlOworICAgIGxldCBoYW5kbGVyID0gewor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uKHRoZVRhcmdldCwgcHJvcE5hbWUsIHZhbHVlLCByZWNpZXZl
cikgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wTmFtZSA9PT0gInN0cmluZyIpCisgICAg
ICAgICAgICAgICAgc2F3UHJpdmF0ZVN5bWJvbEFzU3RyaW5nID0gcHJvcE5hbWUgPT09ICJQcml2
YXRlU3ltYm9sLmFycmF5SXRlcmF0aW9uS2luZCI7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
W3Byb3BOYW1lXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJv
eHkoaXRlcmF0b3IsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKysp
IHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICBwcm94eS5uZXh0KCk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgLy8gdGhp
cyB3aWxsIHRocm93IGJlY2F1c2Ugd2UgY29udmVyIHByaXZhdGUgc3ltYm9scyB0byBzdHJpbmdz
LgorICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydCgh
dGhyZXcpOworICAgICAgICBhc3NlcnQoIXNhd1ByaXZhdGVTeW1ib2xBc1N0cmluZyk7CisgICAg
ICAgIHNhd1ByaXZhdGVTeW1ib2xBc1N0cmluZyA9IGZhbHNlOworICAgIH0KK30K
</data>
<flag name="review"
          id="297276"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>