<?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>148917</bug_id>
          
          <creation_ts>2015-09-06 13:55:12 -0700</creation_ts>
          <short_desc>Consider long module path name case in Windows</short_desc>
          <delta_ts>2015-09-19 18:09:31 -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></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>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1124047</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-06 13:55:12 -0700</bug_when>
    <thetext>Windows _getcwd returns the path truncated by _MAX_PATH.
But _MAX_PATH is small (260). So when retrieving an absolute path to the cwd for ES6 local FS Module Loader, the retrieved path is easily truncated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124068</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-06 20:37:48 -0700</bug_when>
    <thetext>We should open the file with the long UNC file path in Windows.

I think using the inode name as the unique module key is not good. By using the inode, we cannot resolve the relative path based on the path of the currently loaded module. That means,

(1) load the A/A.js module,
(2) load the &quot;./B.js&quot; from A/A.js module,
(3) at that time, we would like to load A/B.js

So, I think using the absolute path as the module key is better.

When landing the Module loading system in WebCore, we will use the URL as the module key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124494</commentid>
    <comment_count>2</comment_count>
      <attachid>260820</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-08 18:08:29 -0700</bug_when>
    <thetext>Created attachment 260820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124513</commentid>
    <comment_count>3</comment_count>
      <attachid>260825</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-08 19:20:10 -0700</bug_when>
    <thetext>Created attachment 260825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124521</commentid>
    <comment_count>4</comment_count>
      <attachid>260827</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-08 20:43:46 -0700</bug_when>
    <thetext>Created attachment 260827
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124636</commentid>
    <comment_count>5</comment_count>
      <attachid>260827</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-09-09 09:54:36 -0700</bug_when>
    <thetext>Comment on attachment 260827
Patch

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

Hooray!  It works on Windows!  Looks good except a few comments.

&gt; Source/JavaScriptCore/jsc.cpp:788
&gt; +    for (unsigned i = 0; i &lt; lengthNotIncludingNull; ++i)
&gt; +        unicodeBuffer[i] = static_cast&lt;UChar&gt;(buffer[i]);

This loop doesn&apos;t do anything.  Just use the first String constructor on the non-null-terminated buffer.

&gt; Source/JavaScriptCore/jsc.cpp:874
&gt; +    size_t bufferCapacity = 1024;

I don&apos;t think this is a good way to do this.  It&apos;s complicated and uses lots of allocation and extra memory.  I prefer something like this:
fseek(file, 0, SEEK_END);
size_t bufferCapacity = ftell(f);
fseek(file, 0, SEEK_SET);

Then we can do one buffer resize and one fread.

&gt; Source/JavaScriptCore/jsc.cpp:886
&gt; +    buffer[bufferSize] = &apos;\0&apos;;

I don&apos;t think it&apos;s good to null-terminate the contents of a file.  What if the file has a &apos;\0&apos; in it?

&gt; Source/JavaScriptCore/jsc.cpp:914
&gt; +    auto utf16Vector = longUNCPathName.charactersWithNullTermination();

charactersWithNullTermination isn&apos;t used anywhere else in all of WebKit.  Let&apos;s remove it.  Use characters16 instead and null terminate it yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124684</commentid>
    <comment_count>6</comment_count>
      <attachid>260872</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-09 13:58:43 -0700</bug_when>
    <thetext>Created attachment 260872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124685</commentid>
    <comment_count>7</comment_count>
      <attachid>260827</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-09 13:59:03 -0700</bug_when>
    <thetext>Comment on attachment 260827
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/jsc.cpp:788
&gt;&gt; +        unicodeBuffer[i] = static_cast&lt;UChar&gt;(buffer[i]);
&gt; 
&gt; This loop doesn&apos;t do anything.  Just use the first String constructor on the non-null-terminated buffer.

OK, I&apos;ll just use String constructor.

&gt;&gt; Source/JavaScriptCore/jsc.cpp:874
&gt;&gt; +    size_t bufferCapacity = 1024;
&gt; 
&gt; I don&apos;t think this is a good way to do this.  It&apos;s complicated and uses lots of allocation and extra memory.  I prefer something like this:
&gt; fseek(file, 0, SEEK_END);
&gt; size_t bufferCapacity = ftell(f);
&gt; fseek(file, 0, SEEK_SET);
&gt; 
&gt; Then we can do one buffer resize and one fread.

Simplifying the fillBufferWithContentsOfFile is reasonable. I&apos;ve changed the implementation.

&gt;&gt; Source/JavaScriptCore/jsc.cpp:886
&gt;&gt; +    buffer[bufferSize] = &apos;\0&apos;;
&gt; 
&gt; I don&apos;t think it&apos;s good to null-terminate the contents of a file.  What if the file has a &apos;\0&apos; in it?

Make sense. I&apos;ve changed this not to fill with null-termination.
And instead, use Vector&lt;char&gt; directly in the caller sides.

&gt;&gt; Source/JavaScriptCore/jsc.cpp:914
&gt;&gt; +    auto utf16Vector = longUNCPathName.charactersWithNullTermination();
&gt; 
&gt; charactersWithNullTermination isn&apos;t used anywhere else in all of WebKit.  Let&apos;s remove it.  Use characters16 instead and null terminate it yourself.

OK, dropped this function from WTFString and use it here as `extractUTF16Characters`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124792</commentid>
    <comment_count>8</comment_count>
      <attachid>260901</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-09 18:36:26 -0700</bug_when>
    <thetext>Created attachment 260901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124795</commentid>
    <comment_count>9</comment_count>
      <attachid>260901</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-09 18:40:58 -0700</bug_when>
    <thetext>Comment on attachment 260901
Patch

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

Thanks to Alex, we fixed the issue related to substring and ensured that the tests pass in Windows.

&gt; Source/JavaScriptCore/jsc.cpp:765
&gt; +        directoryName.queryName = absolutePathToFile.substring(queryStartPosition, queryLength);

Thanks to Alex, we&apos;ve found one of the issue in the original patch.
I misunderstood that String#substring takes the range (substring(start, end)), but it takes the start offset and the length (substring(start, length)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124811</commentid>
    <comment_count>10</comment_count>
      <attachid>260901</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-09 19:17:07 -0700</bug_when>
    <thetext>Comment on attachment 260901
Patch

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

&gt; Source/WTF/wtf/text/WTFString.cpp:-431
&gt; -Vector&lt;UChar&gt; String::charactersWithNullTermination() const

Oops, it seems that charactersWithNullTermination is used in WebCore and WebKit code. So, i&apos;ll revert this drop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124813</commentid>
    <comment_count>11</comment_count>
      <attachid>260905</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-09 19:25:50 -0700</bug_when>
    <thetext>Created attachment 260905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124952</commentid>
    <comment_count>12</comment_count>
      <attachid>260905</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-10 11:09:40 -0700</bug_when>
    <thetext>Comment on attachment 260905
Patch

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

&gt; Source/JavaScriptCore/jsc.cpp:910
&gt; +    auto utf16Vector = longUNCPathName.charactersWithNullTermination();

`charactersWithNullTermination` is used in the WebCore / WebKit side. So in the meantime, we keep this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124957</commentid>
    <comment_count>13</comment_count>
      <attachid>260905</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-09-10 11:23:31 -0700</bug_when>
    <thetext>Comment on attachment 260905
Patch

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

&gt; Source/WTF/ChangeLog:9
&gt; +        (WTF::String::charactersWithNullTermination): Deleted.

get rid of this WTF/ChangeLog change.

&gt; Source/JavaScriptCore/jsc.cpp:884
&gt; +        if (buffer[0] == &apos;#&apos; &amp;&amp; buffer[1] == &apos;!&apos;)
&gt; +            buffer[0] = buffer[1] = &apos;/&apos;;

What is this?

&gt;&gt; Source/JavaScriptCore/jsc.cpp:910
&gt;&gt; +    auto utf16Vector = longUNCPathName.charactersWithNullTermination();
&gt; 
&gt; `charactersWithNullTermination` is used in the WebCore / WebKit side. So in the meantime, we keep this.

Sure enough.  It&apos;s just not used on mac, but this is windows anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124968</commentid>
    <comment_count>14</comment_count>
      <attachid>260905</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-10 11:51:44 -0700</bug_when>
    <thetext>Comment on attachment 260905
Patch

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

Thank you for your review. I&apos;ll tweak the shebang related thing and land it.

&gt;&gt; Source/WTF/ChangeLog:9
&gt;&gt; +        (WTF::String::charactersWithNullTermination): Deleted.
&gt; 
&gt; get rid of this WTF/ChangeLog change.

Oops, fixed.

&gt;&gt; Source/JavaScriptCore/jsc.cpp:884
&gt;&gt; +            buffer[0] = buffer[1] = &apos;/&apos;;
&gt; 
&gt; What is this?

This was originally introduced to handle the shebang &quot;#!&quot; in JSC shell. (L1866 is the original code)
&quot;#!/...&quot; is not valid JS syntax. So it converts shebang to the JS comment.

#!/bin/jsc =&gt; ///bin/jsc

Separating this functionality from the fillBufferWithContentsOfFile is cleaner.
I&apos;ll split this from fillBufferWithContentsOfFile.

&gt; Source/JavaScriptCore/jsc.cpp:-1866
&gt; -        buffer[0] = buffer[1] = &apos;/&apos;;

Here is the original shebang handling code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124975</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-10 12:19:24 -0700</bug_when>
    <thetext>Committed r189583: &lt;http://trac.webkit.org/changeset/189583&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125001</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-10 13:25:36 -0700</bug_when>
    <thetext>JSC tests fails.

** The following JSC stress test failures have been introduced:
	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.layout
	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.layout-no-cjit
	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.layout-no-llint
	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout
	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout-no-cjit
	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout-no-llint

I guess this is caused due to &quot;rb&quot; open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125002</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-10 13:33:07 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; JSC tests fails.
&gt; 
&gt; ** The following JSC stress test failures have been introduced:
&gt; 	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.
&gt; layout
&gt; 	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.
&gt; layout-dfg-eager-no-cjit
&gt; 	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.
&gt; layout-no-cjit
&gt; 	jsc-layout-tests.yaml/js/script-tests/parse-backslash-before-newline.js.
&gt; layout-no-llint
&gt; 	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout
&gt; 	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout-
&gt; dfg-eager-no-cjit
&gt; 	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout-
&gt; no-cjit
&gt; 	jsc-layout-tests.yaml/js/script-tests/parser-high-byte-character.js.layout-
&gt; no-llint
&gt; 
&gt; I guess this is caused due to &quot;rb&quot; open.

Ah, no. still Windows still uses fopen(..., &quot;r&quot;) for the non module files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125022</commentid>
    <comment_count>18</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-10 14:11:19 -0700</bug_when>
    <thetext>I have a small fix. So after ensuring the JSC tests pass in OS X with the change, I&apos;ll land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125026</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-10 14:25:05 -0700</bug_when>
    <thetext>Committed r189591: &lt;http://trac.webkit.org/changeset/189591&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127454</commentid>
    <comment_count>20</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-19 18:09:31 -0700</bug_when>
    <thetext>Committed r190022: &lt;http://trac.webkit.org/changeset/190022&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260820</attachid>
            <date>2015-09-08 18:08:29 -0700</date>
            <delta_ts>2015-09-08 19:20:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148917-20150908180824.patch</filename>
            <type>text/plain</type>
            <size>10452</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YjgxODViZWRkNGM0NjE5YTViM2E2YWE2MjUxOThkZmNlNzM3ZWMzLi4yZDFkMGY3M2JkYTk1MzBm
M2Y1YmJiYzY1M2QyYzY3NGE3YWRmN2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxNS0wOS0wOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDb25zaWRlciBsb25nIG1vZHVsZSBwYXRoIG5hbWUgY2FzZSBpbiBX
aW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDg5MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgbG9jYWwgZmlsZSBzeXN0ZW0gbW9kdWxlIGxvYWRlciBpbiB0aGUgSlNDIHNoZWxsIG1hbmFn
ZXMgdGhlIG1vZHVsZSBmaWxlcyBieSB0aGUgYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgSG93ZXZl
ciwgaW4gV2luZG93cywgX01BWF9QQVRIIGlzIGRlZmluZWQgYXMgMjYwLiBTbyBpZiB0aGUgcGF0
aCBsaWtlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yIHRoZSBwYXRoIHRvIHRoZSBt
b2R1bGUgaXMgbG9uZywKKyAgICAgICAgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgdGhlIEFQSSBh
bmQgaXQgZmFpbCB0byBvcGVuIHRoZSBmaWxlLgorICAgICAgICBJbiBKU0MgdGVzdHMgaW4gQXBw
bGUgV2luZG93cyBidWlsZGJvdCwgc2luY2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
aXMgbG9uZyBlbm91Z2gsIHRoZSB0ZXN0cyBmYWlsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgMyB0d2Vha3MuCisKKyAgICAgICAgMS4gV2hlbiByZXRy
aWV2aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgcGF0aCwgd2UgdXNlIEdldEN1cnJlbnREaXJlY3Rv
cnlXIGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAgICAgICAgR2V0Q3VycmVudERpcmVjdG9yeVcg
YWxsb3dzIHRoZSBsb25nIHBhdGggd2hpbGUgX2dldGN3ZCBhdXRvbWF0aWNhbGx5IHRydW5jYXRl
IHRoZSByZXN1bHQgYnkgdGhlIF9NQVhfUEFUSC4KKworICAgICAgICAyLiBCZWZvcmUgb3Blbmlu
ZyB0aGUgbW9kdWxlIGZpbGUsIHdlIHByZXBlbmQgIlxcP1wiIHRvIHRoZSBwYXRoLiBJdCBjb252
ZXJ0cyB0aGUgbG9jYWwgZmlsZSBwYXRoIHRvIHRoZSBsb25nIFVOQyBwYXRoCisgICAgICAgICAg
IHdoaWNoIGFsbG93cyBsb25nZXIgcGF0aCBuYW1lcy4KKworICAgICAgICAzLiBTaW5jZSBXaW5k
b3dzIEFTQ0lJIEFQSSBhY2NlcHRzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IGNvZGUg
cGFnZSwgd2UgdXNlIHRoZSBVbmljb2RlIEFQSXMgbGlrZSBfd2ZvcGVuIGluc3RlYWQuCisKKyAg
ICAgICAgQW5kIGVuYWJsZSB0aGUgb25jZSBkaXNhYmxlZCBtb2R1bGUgdGVzdHMgaW4gV2luZG93
cy4KKworICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChjdXJyZW50V29ya2luZ0RpcmVjdG9y
eSk6CisgICAgICAgIChmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKToKKyAgICAgICAgKGZl
dGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5c3RlbSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Om1v
ZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKiB0ZXN0cy9tb2R1bGVzLnlhbWw6CisKIDIwMTUt
MDktMDggIFBlciBBcm5lIFZvbGxhbiAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAgIFtX
aW5dIENvbXBpbGUgZXJyb3JzIGluIGluc3BlY3RvciBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApp
bmRleCA4ZmE0NGIxNzdiNzNmM2FjZjc5YTQxYTBjYzk0ZjI0OWNjNmJmNjgzLi5lMzlkNTE2NWFh
M2IyNWZlYzY5NWQ2NjdmOGNiNGI4MmI3NDg5M2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAt
NzAxLDI0ICs3MDEsNyBAQCBjbGFzcyBHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmpl
Y3QgewogICAgIH0KIAogICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVy
UmVzb2x2ZShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwot
Ci0gICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQotICAg
IHsKLSAgICAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVy
bmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
U3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRp
b24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGVyZSwgbm93IHdlIGNvbnNpZGVyIG1vZHVs
ZUtleSBhcyB0aGUgZmlsZU5hbWUuCi0gICAgICAgIFZlY3RvcjxjaGFyPiB1dGY4OwotICAgICAg
ICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUobW9kdWxlS2V5LCB1dGY4KSkKLSAg
ICAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMs
IG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVuIGZpbGUgJyIsIG1vZHVsZUtleSwgIicuIikpKTsK
LQotICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlc29sdmUoZXhlYywganNTdHJpbmcoZXhlYywg
c3RyaW5nRnJvbVVURih1dGY4LmRhdGEoKSkpKTsKLSAgICB9CisgICAgc3RhdGljIEpTSW50ZXJu
YWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOwogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEdsb2JhbE9iamVjdDo6c19pbmZvID0g
eyAiZ2xvYmFsIiwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoR2xvYmFsT2JqZWN0KSB9OwpAQCAtNzgyLDEyICs3NjUsMzAgQEAgc3RhdGljIGJv
b2wgZXh0cmFjdERpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBhYnNvbHV0ZVBhdGhUb0ZpbGUs
IERpcmVjdG9yeU5hbWUKIHN0YXRpYyBib29sIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KERpcmVj
dG9yeU5hbWUmIGRpcmVjdG9yeU5hbWUpCiB7CiAjaWYgT1MoV0lORE9XUykKLSAgICAvLyBodHRw
czovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3NmOThiZDR5LmFzcHgKLSAgICBj
aGFyKiBidWZmZXIgPSBudWxscHRyOwotICAgIGlmICghKGJ1ZmZlciA9IF9nZXRjd2QobnVsbHB0
ciwgMCkpKQorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
d2luZG93cy9kZXNrdG9wL2FhMzY0OTM0LmFzcHgKKyAgICAvLyBodHRwczovL21zZG4ubWljcm9z
b2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTI0Ny5hc3B4I21heHBh
dGgKKyAgICAvLyBUaGUgX01BWF9QQVRIIGluIFdpbmRvd3MgaXMgMjYwLiBJZiB0aGUgcGF0aCBv
ZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiB0aGF0LCBfZ2V0
Y3dkIHRydW5jYXRlcyB0aGUgcmVzdWx0LgorICAgIC8vIEFuZCBvdGhlciBJL08gZnVuY3Rpb25z
IHRha2luZyBhIHBhdGggbmFtZSBhbHNvIHRydW5jYXRlIGl0LiBUbyBhdm9pZCB0aGlzIHNpdHVh
dGlvbiwKKyAgICAvLworICAgIC8vICgxKS4gV2hlbiBvcGVuaW5nIHRoZSBmaWxlIGluIFdpbmRv
d3MgZm9yIG1vZHVsZXMsIHdlIGFsd2F5cyB1c2UgdGhlIGFib3NvbHV0ZSBwYXRoIGFuZCBhZGQg
IlxcP1wiIHByZWZpeCB0byB0aGUgcGF0aCBuYW1lLgorICAgIC8vICgyKS4gV2hlbiByZXRyaWV2
aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCB1c2UgR2V0Q3VycmVudERpcmVjdG9y
eSBpbnN0ZWFkIG9mIF9nZXRjd2QuCisgICAgLy8KKyAgICAvLyBJbiB0aGUgcGF0aCB1dGlsaXR5
IGZ1bmN0aW9ucyBpbnNpZGUgdGhlIEpTQyBzaGVsbCwgd2UgZG9lcyBub3QgaGFuZGxlIHRoZSBV
TkMgYW5kIFVOQ1cgaW5jbHVkaW5nIHRoZSBuZXR3b3JrIGhvc3QgbmFtZS4KKyAgICBEV09SRCBi
dWZmZXJMZW5ndGggPSA6OkdldEN1cnJlbnREaXJlY3RvcnlXKDAsIG51bGxwdHIpOworICAgIGlm
ICghYnVmZmVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gSW4gV2luZG93
cywgd2NoYXJfdCBpcyB0aGUgVVRGLTE2TEUuCisgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS9kZDM3NDA4MS5hc3B4CisgICAgLy8gaHR0cHM6Ly9tc2RuLm1p
Y3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvZmYzODE0MDcuYXNweAor
ICAgIGF1dG8gYnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTx3Y2hhcl90W10+KGJ1ZmZlckxlbmd0
aCk7CisgICAgRFdPUkQgbGVuZ3RoTm90SW5jbHVkaW5nTnVsbCA9IDo6R2V0Q3VycmVudERpcmVj
dG9yeVcoYnVmZmVyTGVuZ3RoLCBidWZmZXIuZ2V0KCkpOworICAgIFVDaGFyKiB1bmljb2RlQnVm
ZmVyID0gbnVsbHB0cjsKKyAgICBTdHJpbmcgZGlyZWN0b3J5U3RyaW5nID0gU3RyaW5nSW1wbDo6
Y3JlYXRlVW5pbml0aWFsaXplZChidWYsIGxlbmd0aE5vdEluY2x1ZGluZ051bGwpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdOdWxsOyArK2kpCisgICAg
ICAgIHVuaWNvZGVCdWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxVQ2hhcj4oYnVmZmVyW2ldKTsKKyAg
ICAvLyBXZSBkb24ndCBzdXBwb3J0IG5ldHdvcmsgcGF0aCBsaWtlIFxcaG9zdFxzaGFyZVw8cGF0
aCBuYW1lPi4KKyAgICBpZiAoZGlyZWN0b3J5U3RyaW5nLnN0YXJ0c1dpdGgoIlxcXFwiKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBkaXJlY3RvcnlTdHJpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KGJ1ZmZlcik7Ci0gICAgZnJlZShidWZmZXIpOwogI2Vsc2UKICAgICBhdXRvIGJ1
ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPihQQVRIX01BWCk7CiAgICAgaWYgKCFnZXRj
d2QoYnVmZmVyLmdldCgpLCBQQVRIX01BWCkpCkBAIC04NjcsNiArODY4LDg0IEBAIEpTSW50ZXJu
YWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjCiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpzU3Ry
aW5nKGV4ZWMsIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5hbWUsIE1vZHVsZU5hbWUoa2V5LmltcGwo
KSkpKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoRklM
RSogZmlsZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSAwOworICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisKKyAgICBidWZmZXIucmVz
aXplKGJ1ZmZlckNhcGFjaXR5KTsKKworICAgIHdoaWxlICghZmVvZihmaWxlKSAmJiAhZmVycm9y
KGZpbGUpKSB7CisgICAgICAgIGJ1ZmZlclNpemUgKz0gZnJlYWQoYnVmZmVyLmRhdGEoKSArIGJ1
ZmZlclNpemUsIDEsIGJ1ZmZlckNhcGFjaXR5IC0gYnVmZmVyU2l6ZSwgZmlsZSk7CisgICAgICAg
IC8vIGd1YXJhbnRlZXMgc3BhY2UgZm9yIHRyYWlsaW5nICdcMCcKKyAgICAgICAgaWYgKGJ1ZmZl
clNpemUgPT0gYnVmZmVyQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9
IDI7CisgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBidWZmZXJbYnVmZmVyU2l6ZV0gPSAnXDAnOworCisgICAgaWYgKGJ1ZmZl
clswXSA9PSAnIycgJiYgYnVmZmVyWzFdID09ICchJykKKyAgICAgICAgYnVmZmVyWzBdID0gYnVm
ZmVyWzFdID0gJy8nOworfQorCitzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAg
IEZJTEUqIGYgPSBmb3BlbihmaWxlTmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOworICAgIGlmICgh
ZikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4i
LCBmaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZiwgYnVmZmVyKTsKKyAgICBmY2xv
c2UoZik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZmV0Y2hNb2R1bGVG
cm9tTG9jYWxGaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQoreworICAgIC8vIFdlIGFzc3VtZSB0aGF0IGZpbGVOYW1lIGlzIGFsd2F5cyBhYnNv
bHV0ZSBwYXRoCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTI0Ny5hc3B4I21heHBhdGgK
KyAgICAvLyBVc2UgbG9uZyBVTkMgdG8gcGFzcyB0aGUgbG9uZyBwYXRoIG5hbWUgdG8gdGhlIFdp
bmRvd3MgQVBJcy4KKyAgICBTdHJpbmcgbG9uZ1VOQ1BhdGhOYW1lID0gV1RGOjptYWtlU3RyaW5n
KCJcXFxcP1xcIiwgZmlsZU5hbWUpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHdjaGFyX3Qp
ID09IHNpemVvZihVQ2hhciksICJJbiBXaW5kb3dzLCBib3RoIGFyZSBVVEYtMTZMRSIpOworICAg
IGF1dG8gdXRmMTZWZWN0b3IgPSBsb25nVU5DUGF0aE5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKTsKKyAgICBGSUxFKiBmID0gX3dmb3BlbihyZWludGVycHJldF9jYXN0PHdjaGFy
X3QqPih1dGYxNlZlY3Rvci5kYXRhKCkpLCAicmIiKTsKKyNlbHNlCisgICAgRklMRSogZiA9IGZv
cGVuKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisjZW5kaWYKKyAgICBpZiAoIWYpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmls
ZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGYsIGJ1ZmZlcik7CisgICAgZmNsb3NlKGYp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCit7CisgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xv
YmFsT2JqZWN0KTsKKyAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0
aW9uKTsKKyAgICB9CisKKyAgICAvLyBIZXJlLCBub3cgd2UgY29uc2lkZXIgbW9kdWxlS2V5IGFz
IHRoZSBmaWxlTmFtZS4KKyAgICBWZWN0b3I8Y2hhcj4gdXRmODsKKyAgICBpZiAoIWZldGNoTW9k
dWxlRnJvbUxvY2FsRmlsZVN5c3RlbShtb2R1bGVLZXksIHV0ZjgpKQorICAgICAgICByZXR1cm4g
ZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3Vs
ZCBub3Qgb3BlbiBmaWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7CisKKyAgICByZXR1cm4gZGVm
ZXJyZWQtPnJlc29sdmUoZXhlYywganNTdHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURih1dGY4LmRh
dGEoKSkpKTsKK30KKworCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJp
bnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVj
LT5hcmd1bWVudENvdW50KCk7ICsraSkgewpAQCAtMTgzOSwzNSArMTkxOCw2IEBAIGludCBqc2Nt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQotewotICAgIEZJTEUqIGYgPSBmb3BlbihmaWxlTmFt
ZS51dGY4KCkuZGF0YSgpLCAiciIpOwotICAgIGlmICghZikgewotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNpemVfdCBidWZmZXJTaXpl
ID0gMDsKLSAgICBzaXplX3QgYnVmZmVyQ2FwYWNpdHkgPSAxMDI0OwotCi0gICAgYnVmZmVyLnJl
c2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0KLSAgICB3aGlsZSAoIWZlb2YoZikgJiYgIWZlcnJvcihm
KSkgewotICAgICAgICBidWZmZXJTaXplICs9IGZyZWFkKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJT
aXplLCAxLCBidWZmZXJDYXBhY2l0eSAtIGJ1ZmZlclNpemUsIGYpOwotICAgICAgICBpZiAoYnVm
ZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgeyAvLyBndWFyYW50ZWVzIHNwYWNlIGZvciB0cmFp
bGluZyAnXDAnCi0gICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAyOwotICAgICAgICAgICAg
YnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZmNs
b3NlKGYpOwotICAgIGJ1ZmZlcltidWZmZXJTaXplXSA9ICdcMCc7Ci0KLSAgICBpZiAoYnVmZmVy
WzBdID09ICcjJyAmJiBidWZmZXJbMV0gPT0gJyEnKQotICAgICAgICBidWZmZXJbMF0gPSBidWZm
ZXJbMV0gPSAnLyc7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogI2lmIE9TKFdJTkRPV1MpCiBl
eHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBpbnQgV0lOQVBJIGRsbExhdW5jaGVyRW50
cnlQb2ludChpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vZHVsZXMueWFtbCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9tb2R1bGVzLnlhbWwKaW5kZXggNjY4MWUwNmZlM2IyYmU1OTAwNzZkMTIzYTc1
M2RmY2M1ZThhYmQ5ZS4uYWI0NzhmMWY2NDQ5YTEyZmVlOGQ0YzYxZjUyOTAwYjVkMDg5YzVhZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vZHVsZXMueWFtbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW9kdWxlcy55YW1sCkBAIC0yMiwxMyArMjIs
NCBAQAogIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiAtIHBhdGg6IG1vZHVsZXMKLSAgY21kOiB8Ci0gICAgICAjIEZJ
WE1FOiBFUzYgTW9kdWxlcyBpbiB0aGUgSlNDIHNoZWxsIG5vdyB1c2VzIGFuIGFic29sdXRlIHBh
dGggYXMgYW4gdW5pcXVlIGtleSB0byBlYWNoIG1vZHVsZS4KLSAgICAgICMgSG93ZXZlciwgdGhl
IGxlbmd0aCBvZiB0aGUgcGF0aCBuYW1lIGluIFdpbmRvd3MgaXMgbGltaXRlZCBhbmQgc2hvcnQ7
IChfTUFYX1BBVEggPSAyNjApLgotICAgICAgIyBBcyBhIHJlc3VsdCwgSlNDIHRlc3RzIGZvciBt
b2R1bGVzIGluIFdpbmRvd3MgZmFpbCBiZWNhdXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0
b3J5IHBhdGggaXMgdHJ1bmNhdGVkLgotICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ4OTE3Ci0gICAgICBpZiAoJGhvc3RPUyA9PSAid2luZG93cyIpCi0g
ICAgICAgICAgc2tpcAotICAgICAgZWxzZQotICAgICAgICAgIHJ1bk1vZHVsZXMKLSAgICAgIGVu
ZAorICBjbWQ6IHJ1bk1vZHVsZXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260825</attachid>
            <date>2015-09-08 19:20:10 -0700</date>
            <delta_ts>2015-09-08 20:43:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148917-20150908192005.patch</filename>
            <type>text/plain</type>
            <size>10550</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YTgzMzAzOTRlOGFkZGEwODFiNzYzZjNjOWIzMTcwMWVmNjgzMzMwLi45ZjY1NTkyYTMwNTk0ZmI3
NmM3NTM0OTRlZmE5ZjdlZGZiYmI2NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzNiBAQAogMjAxNS0wOS0wOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBDb25zaWRlciBsb25nIG1vZHVsZSBwYXRoIG5hbWUgY2FzZSBpbiBX
aW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDg5MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgbG9jYWwgZmlsZSBzeXN0ZW0gbW9kdWxlIGxvYWRlciBpbiB0aGUgSlNDIHNoZWxsIG1hbmFn
ZXMgdGhlIG1vZHVsZSBmaWxlcyBieSB0aGUgYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgSG93ZXZl
ciwgaW4gV2luZG93cywgX01BWF9QQVRIIGlzIGRlZmluZWQgYXMgMjYwLiBTbyBpZiB0aGUgcGF0
aCBsaWtlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yIHRoZSBwYXRoIHRvIHRoZSBt
b2R1bGUgaXMgbG9uZywKKyAgICAgICAgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgdGhlIEFQSSBh
bmQgaXQgZmFpbCB0byBvcGVuIHRoZSBmaWxlLgorICAgICAgICBJbiBKU0MgdGVzdHMgaW4gQXBw
bGUgV2luZG93cyBidWlsZGJvdCwgc2luY2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
aXMgbG9uZyBlbm91Z2gsIHRoZSB0ZXN0cyBmYWlsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgMyB0d2Vha3MuCisKKyAgICAgICAgMS4gV2hlbiByZXRy
aWV2aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgcGF0aCwgd2UgdXNlIEdldEN1cnJlbnREaXJlY3Rv
cnlXIGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAgICAgICAgR2V0Q3VycmVudERpcmVjdG9yeVcg
YWxsb3dzIHRoZSBsb25nIHBhdGggd2hpbGUgX2dldGN3ZCBhdXRvbWF0aWNhbGx5IHRydW5jYXRl
IHRoZSByZXN1bHQgYnkgdGhlIF9NQVhfUEFUSC4KKworICAgICAgICAyLiBCZWZvcmUgb3Blbmlu
ZyB0aGUgbW9kdWxlIGZpbGUsIHdlIHByZXBlbmQgIlxcP1wiIHRvIHRoZSBwYXRoLiBJdCBjb252
ZXJ0cyB0aGUgbG9jYWwgZmlsZSBwYXRoIHRvIHRoZSBsb25nIFVOQyBwYXRoCisgICAgICAgICAg
IHdoaWNoIGFsbG93cyBsb25nZXIgcGF0aCBuYW1lcy4KKworICAgICAgICAzLiBTaW5jZSBXaW5k
b3dzIEFTQ0lJIEFQSSBhY2NlcHRzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IGNvZGUg
cGFnZSwgd2UgdXNlIHRoZSBVbmljb2RlIEFQSXMgbGlrZSBfd2ZvcGVuIGluc3RlYWQuCisKKyAg
ICAgICAgQW5kIGVuYWJsZSB0aGUgb25jZSBkaXNhYmxlZCBtb2R1bGUgdGVzdHMgaW4gV2luZG93
cy4KKworICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChjdXJyZW50V29ya2luZ0RpcmVjdG9y
eSk6CisgICAgICAgIChmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKToKKyAgICAgICAgKGZl
dGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5c3RlbSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Om1v
ZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKiB0ZXN0cy9tb2R1bGVzLnlhbWw6CisKKzIwMTUt
MDktMDggIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKICAgICAgICAg
VW5pZnkgc3ltYm9sVGFibGVHZXQgYW5kIFB1dCBpbiBKU0xleGljYWxFbnZpcm9ubWVudCBhbmQg
SlNTeW1ib2xUYWJsZU9iamVjdAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ4NzgzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggOGZhNDRiMTc3Yjcz
ZjNhY2Y3OWE0MWEwY2M5NGYyNDljYzZiZjY4My4uZTUzZjA5ZTU3ZTNiNWM0ZjZmZDczZDBkMDFl
NDAzNmMwZTE3MGY1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTcwMSwyNCArNzAxLDcgQEAg
Y2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxP
YmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLQotICAgIHN0YXRpYyBKU0lu
dGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLSAgICB7Ci0gICAgICAgIEpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFN0cmluZyBtb2R1bGVLZXkg
PSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAg
ICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIEhlcmUsIG5vdyB3ZSBjb25zaWRlciBtb2R1bGVLZXkgYXMgdGhlIGZpbGVO
YW1lLgotICAgICAgICBWZWN0b3I8Y2hhcj4gdXRmODsKLSAgICAgICAgaWYgKCFmaWxsQnVmZmVy
V2l0aENvbnRlbnRzT2ZGaWxlKG1vZHVsZUtleSwgdXRmOCkpCi0gICAgICAgICAgICByZXR1cm4g
ZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3Vs
ZCBub3Qgb3BlbiBmaWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7Ci0KLSAgICAgICAgcmV0dXJu
IGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIHN0cmluZ0Zyb21VVEYodXRm
OC5kYXRhKCkpKSk7Ci0gICAgfQorICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxl
TG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIH07CiAK
IGNvbnN0IENsYXNzSW5mbyBHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgImdsb2JhbCIsICZKU0ds
b2JhbE9iamVjdDo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdsb2JhbE9i
amVjdCkgfTsKQEAgLTc4MiwxMiArNzY1LDMwIEBAIHN0YXRpYyBib29sIGV4dHJhY3REaXJlY3Rv
cnlOYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVQYXRoVG9GaWxlLCBEaXJlY3RvcnlOYW1lCiBz
dGF0aWMgYm9vbCBjdXJyZW50V29ya2luZ0RpcmVjdG9yeShEaXJlY3RvcnlOYW1lJiBkaXJlY3Rv
cnlOYW1lKQogewogI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS9zZjk4YmQ0eS5hc3B4Ci0gICAgY2hhciogYnVmZmVyID0gbnVs
bHB0cjsKLSAgICBpZiAoIShidWZmZXIgPSBfZ2V0Y3dkKG51bGxwdHIsIDApKSkKKyAgICAvLyBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9h
YTM2NDkzNC5hc3B4CisgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGli
cmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcuYXNweCNtYXhwYXRoCisgICAgLy8gVGhlIF9N
QVhfUEFUSCBpbiBXaW5kb3dzIGlzIDI2MC4gSWYgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgd29y
a2luZyBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gdGhhdCwgX2dldGN3ZCB0cnVuY2F0ZXMgdGhl
IHJlc3VsdC4KKyAgICAvLyBBbmQgb3RoZXIgSS9PIGZ1bmN0aW9ucyB0YWtpbmcgYSBwYXRoIG5h
bWUgYWxzbyB0cnVuY2F0ZSBpdC4gVG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sCisgICAgLy8KKyAg
ICAvLyAoMSkuIFdoZW4gb3BlbmluZyB0aGUgZmlsZSBpbiBXaW5kb3dzIGZvciBtb2R1bGVzLCB3
ZSBhbHdheXMgdXNlIHRoZSBhYm9zb2x1dGUgcGF0aCBhbmQgYWRkICJcXD9cIiBwcmVmaXggdG8g
dGhlIHBhdGggbmFtZS4KKyAgICAvLyAoMikuIFdoZW4gcmV0cmlldmluZyB0aGUgY3VycmVudCB3
b3JraW5nIGRpcmVjdG9yeSwgdXNlIEdldEN1cnJlbnREaXJlY3RvcnkgaW5zdGVhZCBvZiBfZ2V0
Y3dkLgorICAgIC8vCisgICAgLy8gSW4gdGhlIHBhdGggdXRpbGl0eSBmdW5jdGlvbnMgaW5zaWRl
IHRoZSBKU0Mgc2hlbGwsIHdlIGRvZXMgbm90IGhhbmRsZSB0aGUgVU5DIGFuZCBVTkNXIGluY2x1
ZGluZyB0aGUgbmV0d29yayBob3N0IG5hbWUuCisgICAgRFdPUkQgYnVmZmVyTGVuZ3RoID0gOjpH
ZXRDdXJyZW50RGlyZWN0b3J5VygwLCBudWxscHRyKTsKKyAgICBpZiAoIWJ1ZmZlckxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEluIFdpbmRvd3MsIHdjaGFyX3QgaXMgdGhl
IFVURi0xNkxFLgorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJh
cnkvZGQzNzQwODEuYXNweAorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2ZmMzgxNDA3LmFzcHgKKyAgICBhdXRvIGJ1ZmZlciA9
IHN0ZDo6bWFrZV91bmlxdWU8d2NoYXJfdFtdPihidWZmZXJMZW5ndGgpOworICAgIERXT1JEIGxl
bmd0aE5vdEluY2x1ZGluZ051bGwgPSA6OkdldEN1cnJlbnREaXJlY3RvcnlXKGJ1ZmZlckxlbmd0
aCwgYnVmZmVyLmdldCgpKTsKKyAgICBVQ2hhciogdW5pY29kZUJ1ZmZlciA9IG51bGxwdHI7Cisg
ICAgU3RyaW5nIGRpcmVjdG9yeVN0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQoYnVmLCBsZW5ndGhOb3RJbmNsdWRpbmdOdWxsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nTnVsbDsgKytpKQorICAgICAgICB1bmljb2RlQnVmZmVy
W2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGJ1ZmZlcltpXSk7CisgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBuZXR3b3JrIHBhdGggbGlrZSBcXGhvc3Rcc2hhcmVcPHBhdGggbmFtZT4uCisgICAgaWYg
KGRpcmVjdG9yeVN0cmluZy5zdGFydHNXaXRoKCJcXFxcIikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBTdHJpbmcgZGlyZWN0b3J5U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIp
OwotICAgIGZyZWUoYnVmZmVyKTsKICNlbHNlCiAgICAgYXV0byBidWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPGNoYXJbXT4oUEFUSF9NQVgpOwogICAgIGlmICghZ2V0Y3dkKGJ1ZmZlci5nZXQoKSwg
UEFUSF9NQVgpKQpAQCAtODY3LDYgKzg2OCw4NCBAQCBKU0ludGVybmFsUHJvbWlzZSogR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwog
ICAgIHJldHVybiBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBqc1N0cmluZyhleGVjLCByZXNvbHZl
UGF0aChkaXJlY3RvcnlOYW1lLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSkpOwogfQogCitzdGF0
aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZJTEUqIGZpbGUsIFZlY3Rvcjxj
aGFyPiYgYnVmZmVyKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gMDsKKyAgICBzaXplX3Qg
YnVmZmVyQ2FwYWNpdHkgPSAxMDI0OworCisgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0
eSk7CisKKyAgICB3aGlsZSAoIWZlb2YoZmlsZSkgJiYgIWZlcnJvcihmaWxlKSkgeworICAgICAg
ICBidWZmZXJTaXplICs9IGZyZWFkKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJTaXplLCAxLCBidWZm
ZXJDYXBhY2l0eSAtIGJ1ZmZlclNpemUsIGZpbGUpOworICAgICAgICAvLyBndWFyYW50ZWVzIHNw
YWNlIGZvciB0cmFpbGluZyAnXDAnCisgICAgICAgIGlmIChidWZmZXJTaXplID09IGJ1ZmZlckNh
cGFjaXR5KSB7CisgICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAyOworICAgICAgICAgICAg
YnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnVm
ZmVyW2J1ZmZlclNpemVdID0gJ1wwJzsKKworICAgIGlmIChidWZmZXJbMF0gPT0gJyMnICYmIGJ1
ZmZlclsxXSA9PSAnIScpCisgICAgICAgIGJ1ZmZlclswXSA9IGJ1ZmZlclsxXSA9ICcvJzsKK30K
Kworc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBGSUxFKiBmID0gZm9wZW4o
ZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKyAgICBpZiAoIWYpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmlsZU5hbWUudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmaWxsQnVmZmVy
V2l0aENvbnRlbnRzT2ZGaWxlKGYsIGJ1ZmZlcik7CisgICAgZmNsb3NlKGYpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5c3Rl
bShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICAv
LyBXZSBhc3N1bWUgdGhhdCBmaWxlTmFtZSBpcyBhbHdheXMgYWJzb2x1dGUgcGF0aAorI2lmIE9T
KFdJTkRPV1MpCisgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcuYXNweCNtYXhwYXRoCisgICAgLy8gVXNlIGxvbmcg
VU5DIHRvIHBhc3MgdGhlIGxvbmcgcGF0aCBuYW1lIHRvIHRoZSBXaW5kb3dzIEFQSXMuCisgICAg
U3RyaW5nIGxvbmdVTkNQYXRoTmFtZSA9IFdURjo6bWFrZVN0cmluZygiXFxcXD9cXCIsIGZpbGVO
YW1lKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih3Y2hhcl90KSA9PSBzaXplb2YoVUNoYXIp
LCAiSW4gV2luZG93cywgYm90aCBhcmUgVVRGLTE2TEUiKTsKKyAgICBhdXRvIHV0ZjE2VmVjdG9y
ID0gbG9uZ1VOQ1BhdGhOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CisgICAg
RklMRSogZiA9IF93Zm9wZW4ocmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4odXRmMTZWZWN0b3Iu
ZGF0YSgpKSwgTCJyYiIpOworI2Vsc2UKKyAgICBGSUxFKiBmID0gZm9wZW4oZmlsZU5hbWUudXRm
OCgpLmRhdGEoKSwgInIiKTsKKyNlbmRpZgorICAgIGlmICghZikgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZpbGxCdWZmZXJXaXRo
Q29udGVudHNPZkZpbGUoZiwgYnVmZmVyKTsKKyAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
RmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKK3sKKyAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAg
IFN0cmluZyBtb2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
ICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAgIH0KKwor
ICAgIC8vIEhlcmUsIG5vdyB3ZSBjb25zaWRlciBtb2R1bGVLZXkgYXMgdGhlIGZpbGVOYW1lLgor
ICAgIFZlY3RvcjxjaGFyPiB1dGY4OworICAgIGlmICghZmV0Y2hNb2R1bGVGcm9tTG9jYWxGaWxl
U3lzdGVtKG1vZHVsZUtleSwgdXRmOCkpCisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0
KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVuIGZpbGUg
JyIsIG1vZHVsZUtleSwgIicuIikpKTsKKworICAgIHJldHVybiBkZWZlcnJlZC0+cmVzb2x2ZShl
eGVjLCBqc1N0cmluZyhleGVjLCBzdHJpbmdGcm9tVVRGKHV0ZjguZGF0YSgpKSkpOworfQorCisK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CkBAIC0xODM5LDM1ICsxOTE4LDYgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGZpbGxCdWZm
ZXJXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+
JiBidWZmZXIpCi17Ci0gICAgRklMRSogZiA9IGZvcGVuKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCks
ICJyIik7Ci0gICAgaWYgKCFmKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90
IG9wZW4gZmlsZTogJXNcbiIsIGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOwotICAgIHNpemVf
dCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7Ci0KLSAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFj
aXR5KTsKLQotICAgIHdoaWxlICghZmVvZihmKSAmJiAhZmVycm9yKGYpKSB7Ci0gICAgICAgIGJ1
ZmZlclNpemUgKz0gZnJlYWQoYnVmZmVyLmRhdGEoKSArIGJ1ZmZlclNpemUsIDEsIGJ1ZmZlckNh
cGFjaXR5IC0gYnVmZmVyU2l6ZSwgZik7Ci0gICAgICAgIGlmIChidWZmZXJTaXplID09IGJ1ZmZl
ckNhcGFjaXR5KSB7IC8vIGd1YXJhbnRlZXMgc3BhY2UgZm9yIHRyYWlsaW5nICdcMCcKLSAgICAg
ICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7Ci0gICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1
ZmZlckNhcGFjaXR5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmY2xvc2UoZik7Ci0gICAgYnVm
ZmVyW2J1ZmZlclNpemVdID0gJ1wwJzsKLQotICAgIGlmIChidWZmZXJbMF0gPT0gJyMnICYmIGJ1
ZmZlclsxXSA9PSAnIScpCi0gICAgICAgIGJ1ZmZlclswXSA9IGJ1ZmZlclsxXSA9ICcvJzsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCiAjaWYgT1MoV0lORE9XUykKIGV4dGVybiAiQyIgX19kZWNs
c3BlYyhkbGxleHBvcnQpIGludCBXSU5BUEkgZGxsTGF1bmNoZXJFbnRyeVBvaW50KGludCBhcmdj
LCBjb25zdCBjaGFyKiBhcmd2W10pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvbW9kdWxlcy55YW1sIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vZHVs
ZXMueWFtbAppbmRleCA2NjgxZTA2ZmUzYjJiZTU5MDA3NmQxMjNhNzUzZGZjYzVlOGFiZDllLi5h
YjQ3OGYxZjY0NDlhMTJmZWU4ZDRjNjFmNTI5MDBiNWQwODljNWFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW9kdWxlcy55YW1sCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9tb2R1bGVzLnlhbWwKQEAgLTIyLDEzICsyMiw0IEBACiAjIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAKIC0gcGF0aDogbW9kdWxlcwotICBjbWQ6IHwKLSAgICAgICMgRklYTUU6IEVTNiBNb2R1bGVz
IGluIHRoZSBKU0Mgc2hlbGwgbm93IHVzZXMgYW4gYWJzb2x1dGUgcGF0aCBhcyBhbiB1bmlxdWUg
a2V5IHRvIGVhY2ggbW9kdWxlLgotICAgICAgIyBIb3dldmVyLCB0aGUgbGVuZ3RoIG9mIHRoZSBw
YXRoIG5hbWUgaW4gV2luZG93cyBpcyBsaW1pdGVkIGFuZCBzaG9ydDsgKF9NQVhfUEFUSCA9IDI2
MCkuCi0gICAgICAjIEFzIGEgcmVzdWx0LCBKU0MgdGVzdHMgZm9yIG1vZHVsZXMgaW4gV2luZG93
cyBmYWlsIGJlY2F1c2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgcGF0aCBpcyB0cnVu
Y2F0ZWQuCi0gICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDg5MTcKLSAgICAgIGlmICgkaG9zdE9TID09ICJ3aW5kb3dzIikKLSAgICAgICAgICBza2lwCi0g
ICAgICBlbHNlCi0gICAgICAgICAgcnVuTW9kdWxlcwotICAgICAgZW5kCisgIGNtZDogcnVuTW9k
dWxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260827</attachid>
            <date>2015-09-08 20:43:46 -0700</date>
            <delta_ts>2015-09-09 13:59:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148917-20150908204342.patch</filename>
            <type>text/plain</type>
            <size>10684</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YTgzMzAzOTRlOGFkZGEwODFiNzYzZjNjOWIzMTcwMWVmNjgzMzMwLi5jZGYzYzkyNTY4OTY4ZTUz
OWJmNmQ4NmUzMGUwYzYyOWVlM2ZkZjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzOCBAQAogMjAxNS0wOS0wOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBDb25zaWRlciBsb25nIG1vZHVsZSBwYXRoIG5hbWUgY2FzZSBpbiBX
aW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDg5MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgbG9jYWwgZmlsZSBzeXN0ZW0gbW9kdWxlIGxvYWRlciBpbiB0aGUgSlNDIHNoZWxsIG1hbmFn
ZXMgdGhlIG1vZHVsZSBmaWxlcyBieSB0aGUgYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgSG93ZXZl
ciwgaW4gV2luZG93cywgX01BWF9QQVRIIGlzIGRlZmluZWQgYXMgMjYwLiBTbyBpZiB0aGUgcGF0
aCBsaWtlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yIHRoZSBwYXRoIHRvIHRoZSBt
b2R1bGUgaXMgbG9uZywKKyAgICAgICAgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgdGhlIEFQSSBh
bmQgaXQgZmFpbCB0byBvcGVuIHRoZSBmaWxlLgorICAgICAgICBJbiBKU0MgdGVzdHMgaW4gQXBw
bGUgV2luZG93cyBidWlsZGJvdCwgc2luY2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
aXMgbG9uZyBlbm91Z2gsIHRoZSB0ZXN0cyBmYWlsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgMyB0d2Vha3MuCisKKyAgICAgICAgMS4gV2hlbiByZXRy
aWV2aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgcGF0aCwgd2UgdXNlIEdldEN1cnJlbnREaXJlY3Rv
cnlXIGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAgICAgICAgR2V0Q3VycmVudERpcmVjdG9yeVcg
YWxsb3dzIHRoZSBsb25nIHBhdGggd2hpbGUgX2dldGN3ZCBhdXRvbWF0aWNhbGx5IHRydW5jYXRl
IHRoZSByZXN1bHQgYnkgdGhlIF9NQVhfUEFUSC4KKworICAgICAgICAyLiBCZWZvcmUgb3Blbmlu
ZyB0aGUgbW9kdWxlIGZpbGUsIHdlIHByZXBlbmQgIlxcP1wiIHRvIHRoZSBwYXRoLiBJdCBjb252
ZXJ0cyB0aGUgbG9jYWwgZmlsZSBwYXRoIHRvIHRoZSBsb25nIFVOQyBwYXRoCisgICAgICAgICAg
IHdoaWNoIGFsbG93cyBsb25nZXIgcGF0aCBuYW1lcy4KKworICAgICAgICAzLiBTaW5jZSBXaW5k
b3dzIEFTQ0lJIEFQSSBhY2NlcHRzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IGNvZGUg
cGFnZSwgd2UgdXNlIHRoZSBVbmljb2RlIEFQSXMgbGlrZSBfd2ZvcGVuIGluc3RlYWQuCisKKyAg
ICAgICAgQW5kIGVuYWJsZSB0aGUgb25jZSBkaXNhYmxlZCBtb2R1bGUgdGVzdHMgaW4gV2luZG93
cy4KKworICAgICAgICBTaW5jZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHBhcnQgb2YgdGhl
IEpTQyBzaGVsbCB0byBydW4gdGhlIG1vZHVsZSB0ZXN0cywgaXQgaXMgbm93IGltcGxlbWVudGVk
IGluIGpzYy5jcHAuCisKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoY3VycmVudFdvcmtp
bmdEaXJlY3RvcnkpOgorICAgICAgICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6Cisg
ICAgICAgIChmZXRjaE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0ZW0pOgorICAgICAgICAoR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgICogdGVzdHMvbW9kdWxlcy55YW1s
OgorCisyMDE1LTA5LTA4ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgor
CiAgICAgICAgIFVuaWZ5IHN5bWJvbFRhYmxlR2V0IGFuZCBQdXQgaW4gSlNMZXhpY2FsRW52aXJv
bm1lbnQgYW5kIEpTU3ltYm9sVGFibGVPYmplY3QKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODc4MwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDhm
YTQ0YjE3N2I3M2YzYWNmNzlhNDFhMGNjOTRmMjQ5Y2M2YmY2ODMuLjQ4MjMzNDZlYTcwMTg5NTE2
YWQzM2RiMjA1OWU3MzU2NjQ2NzU4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC03MDEsMjQg
KzcwMSw3IEBAIGNsYXNzIEdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJSZXNvbHZl
KEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0KLSAgICBz
dGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCi0gICAgewotICAg
ICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBTdHJpbmcg
bW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
LSAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBIZXJlLCBub3cgd2UgY29uc2lkZXIgbW9kdWxlS2V5IGFz
IHRoZSBmaWxlTmFtZS4KLSAgICAgICAgVmVjdG9yPGNoYXI+IHV0Zjg7Ci0gICAgICAgIGlmICgh
ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShtb2R1bGVLZXksIHV0ZjgpKQotICAgICAgICAg
ICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbWFrZVN0
cmluZygiQ291bGQgbm90IG9wZW4gZmlsZSAnIiwgbW9kdWxlS2V5LCAiJy4iKSkpOwotCi0gICAg
ICAgIHJldHVybiBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBqc1N0cmluZyhleGVjLCBzdHJpbmdG
cm9tVVRGKHV0ZjguZGF0YSgpKSkpOwotICAgIH0KKyAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21p
c2UqIG1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSk7CiB9OwogCiBjb25zdCBDbGFzc0luZm8gR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJnbG9i
YWwiLCAmSlNHbG9iYWxPYmplY3Q6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShHbG9iYWxPYmplY3QpIH07CkBAIC03ODIsMTIgKzc2NSwzMCBAQCBzdGF0aWMgYm9vbCBleHRy
YWN0RGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIGFic29sdXRlUGF0aFRvRmlsZSwgRGlyZWN0
b3J5TmFtZQogc3RhdGljIGJvb2wgY3VycmVudFdvcmtpbmdEaXJlY3RvcnkoRGlyZWN0b3J5TmFt
ZSYgZGlyZWN0b3J5TmFtZSkKIHsKICNpZiBPUyhXSU5ET1dTKQotICAgIC8vIGh0dHBzOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvc2Y5OGJkNHkuYXNweAotICAgIGNoYXIqIGJ1
ZmZlciA9IG51bGxwdHI7Ci0gICAgaWYgKCEoYnVmZmVyID0gX2dldGN3ZChudWxscHRyLCAwKSkp
CisgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dz
L2Rlc2t0b3AvYWEzNjQ5MzQuYXNweAorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29t
L2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3LmFzcHgjbWF4cGF0aAorICAg
IC8vIFRoZSBfTUFYX1BBVEggaW4gV2luZG93cyBpcyAyNjAuIElmIHRoZSBwYXRoIG9mIHRoZSBj
dXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIHRoYXQsIF9nZXRjd2QgdHJ1
bmNhdGVzIHRoZSByZXN1bHQuCisgICAgLy8gQW5kIG90aGVyIEkvTyBmdW5jdGlvbnMgdGFraW5n
IGEgcGF0aCBuYW1lIGFsc28gdHJ1bmNhdGUgaXQuIFRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLAor
ICAgIC8vCisgICAgLy8gKDEpLiBXaGVuIG9wZW5pbmcgdGhlIGZpbGUgaW4gV2luZG93cyBmb3Ig
bW9kdWxlcywgd2UgYWx3YXlzIHVzZSB0aGUgYWJvc29sdXRlIHBhdGggYW5kIGFkZCAiXFw/XCIg
cHJlZml4IHRvIHRoZSBwYXRoIG5hbWUuCisgICAgLy8gKDIpLiBXaGVuIHJldHJpZXZpbmcgdGhl
IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIHVzZSBHZXRDdXJyZW50RGlyZWN0b3J5IGluc3Rl
YWQgb2YgX2dldGN3ZC4KKyAgICAvLworICAgIC8vIEluIHRoZSBwYXRoIHV0aWxpdHkgZnVuY3Rp
b25zIGluc2lkZSB0aGUgSlNDIHNoZWxsLCB3ZSBkb2VzIG5vdCBoYW5kbGUgdGhlIFVOQyBhbmQg
VU5DVyBpbmNsdWRpbmcgdGhlIG5ldHdvcmsgaG9zdCBuYW1lLgorICAgIERXT1JEIGJ1ZmZlckxl
bmd0aCA9IDo6R2V0Q3VycmVudERpcmVjdG9yeVcoMCwgbnVsbHB0cik7CisgICAgaWYgKCFidWZm
ZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBJbiBXaW5kb3dzLCB3Y2hh
cl90IGlzIHRoZSBVVEYtMTZMRS4KKyAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9l
bi11cy9saWJyYXJ5L2RkMzc0MDgxLmFzcHgKKyAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9mZjM4MTQwNy5hc3B4CisgICAgYXV0
byBidWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPHdjaGFyX3RbXT4oYnVmZmVyTGVuZ3RoKTsKKyAg
ICBEV09SRCBsZW5ndGhOb3RJbmNsdWRpbmdOdWxsID0gOjpHZXRDdXJyZW50RGlyZWN0b3J5Vyhi
dWZmZXJMZW5ndGgsIGJ1ZmZlci5nZXQoKSk7CisgICAgVUNoYXIqIHVuaWNvZGVCdWZmZXIgPSBu
dWxscHRyOworICAgIFN0cmluZyBkaXJlY3RvcnlTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aE5vdEluY2x1ZGluZ051bGwsIHVuaWNvZGVCdWZmZXIpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdOdWxsOyArK2kpCisg
ICAgICAgIHVuaWNvZGVCdWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxVQ2hhcj4oYnVmZmVyW2ldKTsK
KyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IG5ldHdvcmsgcGF0aCBsaWtlIFxcaG9zdFxzaGFyZVw8
cGF0aCBuYW1lPi4KKyAgICBpZiAoZGlyZWN0b3J5U3RyaW5nLnN0YXJ0c1dpdGgoIlxcXFwiKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBkaXJlY3RvcnlTdHJpbmcgPSBTdHJp
bmc6OmZyb21VVEY4KGJ1ZmZlcik7Ci0gICAgZnJlZShidWZmZXIpOwogI2Vsc2UKICAgICBhdXRv
IGJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPihQQVRIX01BWCk7CiAgICAgaWYgKCFn
ZXRjd2QoYnVmZmVyLmdldCgpLCBQQVRIX01BWCkpCkBAIC04NjcsNiArODY4LDg0IEBAIEpTSW50
ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjCiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpz
U3RyaW5nKGV4ZWMsIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5hbWUsIE1vZHVsZU5hbWUoa2V5Lmlt
cGwoKSkpKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUo
RklMRSogZmlsZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNp
emUgPSAwOworICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisKKyAgICBidWZmZXIu
cmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKKworICAgIHdoaWxlICghZmVvZihmaWxlKSAmJiAhZmVy
cm9yKGZpbGUpKSB7CisgICAgICAgIGJ1ZmZlclNpemUgKz0gZnJlYWQoYnVmZmVyLmRhdGEoKSAr
IGJ1ZmZlclNpemUsIDEsIGJ1ZmZlckNhcGFjaXR5IC0gYnVmZmVyU2l6ZSwgZmlsZSk7CisgICAg
ICAgIC8vIGd1YXJhbnRlZXMgc3BhY2UgZm9yIHRyYWlsaW5nICdcMCcKKyAgICAgICAgaWYgKGJ1
ZmZlclNpemUgPT0gYnVmZmVyQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5
ICo9IDI7CisgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBidWZmZXJbYnVmZmVyU2l6ZV0gPSAnXDAnOworCisgICAgaWYgKGJ1
ZmZlclswXSA9PSAnIycgJiYgYnVmZmVyWzFdID09ICchJykKKyAgICAgICAgYnVmZmVyWzBdID0g
YnVmZmVyWzFdID0gJy8nOworfQorCitzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRz
T2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQorewor
ICAgIEZJTEUqIGYgPSBmb3BlbihmaWxlTmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOworICAgIGlm
ICghZikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVz
XG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZiwgYnVmZmVyKTsKKyAgICBm
Y2xvc2UoZik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZmV0Y2hNb2R1
bGVGcm9tTG9jYWxGaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFy
PiYgYnVmZmVyKQoreworICAgIC8vIFdlIGFzc3VtZSB0aGF0IGZpbGVOYW1lIGlzIGFsd2F5cyBh
YnNvbHV0ZSBwYXRoCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBodHRwczovL21zZG4ubWljcm9z
b2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTI0Ny5hc3B4I21heHBh
dGgKKyAgICAvLyBVc2UgbG9uZyBVTkMgdG8gcGFzcyB0aGUgbG9uZyBwYXRoIG5hbWUgdG8gdGhl
IFdpbmRvd3MgQVBJcy4KKyAgICBTdHJpbmcgbG9uZ1VOQ1BhdGhOYW1lID0gV1RGOjptYWtlU3Ry
aW5nKCJcXFxcP1xcIiwgZmlsZU5hbWUpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHdjaGFy
X3QpID09IHNpemVvZihVQ2hhciksICJJbiBXaW5kb3dzLCBib3RoIGFyZSBVVEYtMTZMRSIpOwor
ICAgIGF1dG8gdXRmMTZWZWN0b3IgPSBsb25nVU5DUGF0aE5hbWUuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKTsKKyAgICBGSUxFKiBmID0gX3dmb3BlbihyZWludGVycHJldF9jYXN0PHdj
aGFyX3QqPih1dGYxNlZlY3Rvci5kYXRhKCkpLCBMInJiIik7CisjZWxzZQorICAgIEZJTEUqIGYg
PSBmb3BlbihmaWxlTmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOworI2VuZGlmCisgICAgaWYgKCFm
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gZmlsZTogJXNcbiIs
IGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmLCBidWZmZXIpOworICAgIGZjbG9z
ZShmKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitKU0ludGVybmFsUHJvbWlzZSogR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQoreworICAgIEpTSW50ZXJuYWxQcm9taXNlRGVm
ZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMs
IGdsb2JhbE9iamVjdCk7CisgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAg
IEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4
Y2VwdGlvbik7CisgICAgfQorCisgICAgLy8gSGVyZSwgbm93IHdlIGNvbnNpZGVyIG1vZHVsZUtl
eSBhcyB0aGUgZmlsZU5hbWUuCisgICAgVmVjdG9yPGNoYXI+IHV0Zjg7CisgICAgaWYgKCFmZXRj
aE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0ZW0obW9kdWxlS2V5LCB1dGY4KSkKKyAgICAgICAgcmV0
dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbWFrZVN0cmluZygi
Q291bGQgbm90IG9wZW4gZmlsZSAnIiwgbW9kdWxlS2V5LCAiJy4iKSkpOworCisgICAgcmV0dXJu
IGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIHN0cmluZ0Zyb21VVEYodXRm
OC5kYXRhKCkpKSk7Cit9CisKKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKQEAgLTE4MzksMzUgKzE5MTgsNiBAQCBpbnQg
anNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBGSUxFKiBmID0gZm9wZW4oZmls
ZU5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKLSAgICBpZiAoIWYpIHsKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmlsZU5hbWUudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYnVmZmVy
U2l6ZSA9IDA7Ci0gICAgc2l6ZV90IGJ1ZmZlckNhcGFjaXR5ID0gMTAyNDsKLQotICAgIGJ1ZmZl
ci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOwotCi0gICAgd2hpbGUgKCFmZW9mKGYpICYmICFmZXJy
b3IoZikpIHsKLSAgICAgICAgYnVmZmVyU2l6ZSArPSBmcmVhZChidWZmZXIuZGF0YSgpICsgYnVm
ZmVyU2l6ZSwgMSwgYnVmZmVyQ2FwYWNpdHkgLSBidWZmZXJTaXplLCBmKTsKLSAgICAgICAgaWYg
KGJ1ZmZlclNpemUgPT0gYnVmZmVyQ2FwYWNpdHkpIHsgLy8gZ3VhcmFudGVlcyBzcGFjZSBmb3Ig
dHJhaWxpbmcgJ1wwJwotICAgICAgICAgICAgYnVmZmVyQ2FwYWNpdHkgKj0gMjsKLSAgICAgICAg
ICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGZjbG9zZShmKTsKLSAgICBidWZmZXJbYnVmZmVyU2l6ZV0gPSAnXDAnOwotCi0gICAgaWYgKGJ1
ZmZlclswXSA9PSAnIycgJiYgYnVmZmVyWzFdID09ICchJykKLSAgICAgICAgYnVmZmVyWzBdID0g
YnVmZmVyWzFdID0gJy8nOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KICNpZiBPUyhXSU5ET1dT
KQogZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IFdJTkFQSSBkbGxMYXVuY2hl
ckVudHJ5UG9pbnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb2R1bGVzLnlhbWwgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvbW9kdWxlcy55YW1sCmluZGV4IDY2ODFlMDZmZTNiMmJlNTkwMDc2ZDEy
M2E3NTNkZmNjNWU4YWJkOWUuLmFiNDc4ZjFmNjQ0OWExMmZlZThkNGM2MWY1MjkwMGI1ZDA4OWM1
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb2R1bGVzLnlhbWwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vZHVsZXMueWFtbApAQCAtMjIsMTMg
KzIyLDQgQEAKICMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAogLSBwYXRoOiBtb2R1bGVzCi0gIGNtZDogfAotICAgICAg
IyBGSVhNRTogRVM2IE1vZHVsZXMgaW4gdGhlIEpTQyBzaGVsbCBub3cgdXNlcyBhbiBhYnNvbHV0
ZSBwYXRoIGFzIGFuIHVuaXF1ZSBrZXkgdG8gZWFjaCBtb2R1bGUuCi0gICAgICAjIEhvd2V2ZXIs
IHRoZSBsZW5ndGggb2YgdGhlIHBhdGggbmFtZSBpbiBXaW5kb3dzIGlzIGxpbWl0ZWQgYW5kIHNo
b3J0OyAoX01BWF9QQVRIID0gMjYwKS4KLSAgICAgICMgQXMgYSByZXN1bHQsIEpTQyB0ZXN0cyBm
b3IgbW9kdWxlcyBpbiBXaW5kb3dzIGZhaWwgYmVjYXVzZSB0aGUgY3VycmVudCB3b3JraW5nIGRp
cmVjdG9yeSBwYXRoIGlzIHRydW5jYXRlZC4KLSAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNwotICAgICAgaWYgKCRob3N0T1MgPT0gIndpbmRvd3Mi
KQotICAgICAgICAgIHNraXAKLSAgICAgIGVsc2UKLSAgICAgICAgICBydW5Nb2R1bGVzCi0gICAg
ICBlbmQKKyAgY21kOiBydW5Nb2R1bGVzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260872</attachid>
            <date>2015-09-09 13:58:43 -0700</date>
            <delta_ts>2015-09-09 18:36:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148917-20150909135838.patch</filename>
            <type>text/plain</type>
            <size>18830</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YTgzMzAzOTRlOGFkZGEwODFiNzYzZjNjOWIzMTcwMWVmNjgzMzMwLi4wMjVkMzUzYTBjZjkyYjgw
Mjg1ZmZjNzliNTk1NTY2YmIyMjc0ZTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAxNS0wOS0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDb25zaWRlciBsb25nIG1vZHVsZSBwYXRoIG5hbWUgY2FzZSBpbiBX
aW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDg5MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgbG9jYWwgZmlsZSBzeXN0ZW0gbW9kdWxlIGxvYWRlciBpbiB0aGUgSlNDIHNoZWxsIG1hbmFn
ZXMgdGhlIG1vZHVsZSBmaWxlcyBieSB0aGUgYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgSG93ZXZl
ciwgaW4gV2luZG93cywgX01BWF9QQVRIIGlzIGRlZmluZWQgYXMgMjYwLiBTbyBpZiB0aGUgcGF0
aCBsaWtlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yIHRoZSBwYXRoIHRvIHRoZSBt
b2R1bGUgaXMgbG9uZywKKyAgICAgICAgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgdGhlIEFQSSBh
bmQgaXQgZmFpbCB0byBvcGVuIHRoZSBmaWxlLgorICAgICAgICBJbiBKU0MgdGVzdHMgaW4gQXBw
bGUgV2luZG93cyBidWlsZGJvdCwgc2luY2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
aXMgbG9uZyBlbm91Z2gsIHRoZSB0ZXN0cyBmYWlsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgMyB0d2Vha3MuCisKKyAgICAgICAgMS4gV2hlbiByZXRy
aWV2aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgcGF0aCwgd2UgdXNlIEdldEN1cnJlbnREaXJlY3Rv
cnlXIGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAgICAgICAgR2V0Q3VycmVudERpcmVjdG9yeVcg
YWxsb3dzIHRoZSBsb25nIHBhdGggd2hpbGUgX2dldGN3ZCBhdXRvbWF0aWNhbGx5IHRydW5jYXRl
IHRoZSByZXN1bHQgYnkgdGhlIF9NQVhfUEFUSC4KKworICAgICAgICAyLiBCZWZvcmUgb3Blbmlu
ZyB0aGUgbW9kdWxlIGZpbGUsIHdlIHByZXBlbmQgIlxcP1wiIHRvIHRoZSBwYXRoLiBJdCBjb252
ZXJ0cyB0aGUgbG9jYWwgZmlsZSBwYXRoIHRvIHRoZSBsb25nIFVOQyBwYXRoCisgICAgICAgICAg
IHdoaWNoIGFsbG93cyBsb25nZXIgcGF0aCBuYW1lcy4KKworICAgICAgICAzLiBTaW5jZSBXaW5k
b3dzIEFTQ0lJIEFQSSBhY2NlcHRzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IGNvZGUg
cGFnZSwgd2UgdXNlIHRoZSBVbmljb2RlIEFQSXMgbGlrZSBfd2ZvcGVuIGluc3RlYWQuCisKKyAg
ICAgICAgQW5kIGVuYWJsZSB0aGUgb25jZSBkaXNhYmxlZCBtb2R1bGUgdGVzdHMgaW4gV2luZG93
cy4KKworICAgICAgICBTaW5jZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHBhcnQgb2YgdGhl
IEpTQyBzaGVsbCB0byBydW4gdGhlIG1vZHVsZSB0ZXN0cywgaXQgaXMgbm93IGltcGxlbWVudGVk
IGluIGpzYy5jcHAuCisKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoc3RyaW5nRnJvbVVU
Rik6CisgICAgICAgIChqc2NTb3VyY2UpOgorICAgICAgICAoY3VycmVudFdvcmtpbmdEaXJlY3Rv
cnkpOgorICAgICAgICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChl
eHRyYWN0VVRGMTZDaGFyYWN0ZXJzKToKKyAgICAgICAgKGZldGNoTW9kdWxlRnJvbUxvY2FsRmls
ZVN5c3RlbSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAg
ICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChm
dW5jdGlvblJlYWRGaWxlKToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAg
ICAocnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAq
IHRlc3RzL21vZHVsZXMueWFtbDoKKwogMjAxNS0wOS0wOCAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBVbmlmeSBzeW1ib2xUYWJsZUdldCBhbmQgUHV0
IGluIEpTTGV4aWNhbEVudmlyb25tZW50IGFuZCBKU1N5bWJvbFRhYmxlT2JqZWN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNi
MGRhMDU0MWNiOGRlMTY1ODg2ZWZlMDRjYmU5MTQxMGFkMGE0YzEuLjc1ZmI1N2M0ZDA0MTdiODk3
MjYzMzZlYjYxYzlkOGNmNDY4YzBlNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDktMDkg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgQ29uc2lk
ZXIgbG9uZyBtb2R1bGUgcGF0aCBuYW1lIGNhc2UgaW4gV2luZG93cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4OTE3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3Bw
OgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKwogMjAxNS0wOS0wOCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgR0Mgc3RhY2sgc2NhbiBz
aG91bGQgaW5jbHVkZSBBQkkgcmVkIHpvbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDhmYTQ0
YjE3N2I3M2YzYWNmNzlhNDFhMGNjOTRmMjQ5Y2M2YmY2ODMuLjNkNWRkNzg1MTVkMzA5ZjMzZTky
OTlhMTczYzI5MDIxNGE2MjQ5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC01NjUsMTIgKzU2
NSwxNCBAQCBsb25nIFN0b3BXYXRjaDo6Z2V0RWxhcHNlZE1TKCkKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZz4oKG1fc3RvcFRpbWUgLSBtX3N0YXJ0VGltZSkgKiAxMDAwKTsKIH0KIAotc3Rh
dGljIGlubGluZSBTdHJpbmcgc3RyaW5nRnJvbVVURihjb25zdCBjaGFyKiB1dGY4KQordGVtcGxh
dGU8dHlwZW5hbWUgVmVjdG9yPgorc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nRnJvbVVURihj
b25zdCBWZWN0b3ImIHV0ZjgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0
aW4xRmFsbGJhY2sodXRmOCwgc3RybGVuKHV0ZjgpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayh1dGY4LmRhdGEoKSwgdXRmOC5zaXplKCkpOwogfQogCi1z
dGF0aWMgaW5saW5lIFNvdXJjZUNvZGUganNjU291cmNlKGNvbnN0IGNoYXIqIHV0ZjgsIGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3I+CitzdGF0aWMgaW5s
aW5lIFNvdXJjZUNvZGUganNjU291cmNlKGNvbnN0IFZlY3RvciYgdXRmOCwgY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSkKIHsKICAgICBTdHJpbmcgc3RyID0gc3RyaW5nRnJvbVVURih1dGY4KTsKICAg
ICByZXR1cm4gbWFrZVNvdXJjZShzdHIsIGZpbGVuYW1lKTsKQEAgLTcwMSwyNCArNzAzLDcgQEAg
Y2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxP
YmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLQotICAgIHN0YXRpYyBKU0lu
dGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLSAgICB7Ci0gICAgICAgIEpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFN0cmluZyBtb2R1bGVLZXkg
PSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAg
ICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIEhlcmUsIG5vdyB3ZSBjb25zaWRlciBtb2R1bGVLZXkgYXMgdGhlIGZpbGVO
YW1lLgotICAgICAgICBWZWN0b3I8Y2hhcj4gdXRmODsKLSAgICAgICAgaWYgKCFmaWxsQnVmZmVy
V2l0aENvbnRlbnRzT2ZGaWxlKG1vZHVsZUtleSwgdXRmOCkpCi0gICAgICAgICAgICByZXR1cm4g
ZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3Vs
ZCBub3Qgb3BlbiBmaWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7Ci0KLSAgICAgICAgcmV0dXJu
IGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIHN0cmluZ0Zyb21VVEYodXRm
OC5kYXRhKCkpKSk7Ci0gICAgfQorICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxl
TG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIH07CiAK
IGNvbnN0IENsYXNzSW5mbyBHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgImdsb2JhbCIsICZKU0ds
b2JhbE9iamVjdDo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdsb2JhbE9i
amVjdCkgfTsKQEAgLTc4MiwxMiArNzY3LDI4IEBAIHN0YXRpYyBib29sIGV4dHJhY3REaXJlY3Rv
cnlOYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVQYXRoVG9GaWxlLCBEaXJlY3RvcnlOYW1lCiBz
dGF0aWMgYm9vbCBjdXJyZW50V29ya2luZ0RpcmVjdG9yeShEaXJlY3RvcnlOYW1lJiBkaXJlY3Rv
cnlOYW1lKQogewogI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS9zZjk4YmQ0eS5hc3B4Ci0gICAgY2hhciogYnVmZmVyID0gbnVs
bHB0cjsKLSAgICBpZiAoIShidWZmZXIgPSBfZ2V0Y3dkKG51bGxwdHIsIDApKSkKKyAgICAvLyBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9h
YTM2NDkzNC5hc3B4CisgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGli
cmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcuYXNweCNtYXhwYXRoCisgICAgLy8gVGhlIF9N
QVhfUEFUSCBpbiBXaW5kb3dzIGlzIDI2MC4gSWYgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgd29y
a2luZyBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gdGhhdCwgX2dldGN3ZCB0cnVuY2F0ZXMgdGhl
IHJlc3VsdC4KKyAgICAvLyBBbmQgb3RoZXIgSS9PIGZ1bmN0aW9ucyB0YWtpbmcgYSBwYXRoIG5h
bWUgYWxzbyB0cnVuY2F0ZSBpdC4gVG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sCisgICAgLy8KKyAg
ICAvLyAoMSkuIFdoZW4gb3BlbmluZyB0aGUgZmlsZSBpbiBXaW5kb3dzIGZvciBtb2R1bGVzLCB3
ZSBhbHdheXMgdXNlIHRoZSBhYm9zb2x1dGUgcGF0aCBhbmQgYWRkICJcXD9cIiBwcmVmaXggdG8g
dGhlIHBhdGggbmFtZS4KKyAgICAvLyAoMikuIFdoZW4gcmV0cmlldmluZyB0aGUgY3VycmVudCB3
b3JraW5nIGRpcmVjdG9yeSwgdXNlIEdldEN1cnJlbnREaXJlY3RvcnkgaW5zdGVhZCBvZiBfZ2V0
Y3dkLgorICAgIC8vCisgICAgLy8gSW4gdGhlIHBhdGggdXRpbGl0eSBmdW5jdGlvbnMgaW5zaWRl
IHRoZSBKU0Mgc2hlbGwsIHdlIGRvZXMgbm90IGhhbmRsZSB0aGUgVU5DIGFuZCBVTkNXIGluY2x1
ZGluZyB0aGUgbmV0d29yayBob3N0IG5hbWUuCisgICAgRFdPUkQgYnVmZmVyTGVuZ3RoID0gOjpH
ZXRDdXJyZW50RGlyZWN0b3J5VygwLCBudWxscHRyKTsKKyAgICBpZiAoIWJ1ZmZlckxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEluIFdpbmRvd3MsIHdjaGFyX3QgaXMgdGhl
IFVURi0xNkxFLgorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJh
cnkvZGQzNzQwODEuYXNweAorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2ZmMzgxNDA3LmFzcHgKKyAgICBhdXRvIGJ1ZmZlciA9
IHN0ZDo6bWFrZV91bmlxdWU8d2NoYXJfdFtdPihidWZmZXJMZW5ndGgpOworICAgIERXT1JEIGxl
bmd0aE5vdEluY2x1ZGluZ051bGwgPSA6OkdldEN1cnJlbnREaXJlY3RvcnlXKGJ1ZmZlckxlbmd0
aCwgYnVmZmVyLmdldCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih3Y2hhcl90KSA9PSBz
aXplb2YoVUNoYXIpLCAiSW4gV2luZG93cywgYm90aCBhcmUgVVRGLTE2TEUiKTsKKyAgICBTdHJp
bmcgZGlyZWN0b3J5U3RyaW5nID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZm
ZXIuZ2V0KCkpKTsKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IG5ldHdvcmsgcGF0aCBsaWtlIFxc
aG9zdFxzaGFyZVw8cGF0aCBuYW1lPi4KKyAgICBpZiAoZGlyZWN0b3J5U3RyaW5nLnN0YXJ0c1dp
dGgoIlxcXFwiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBkaXJlY3RvcnlT
dHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlcik7Ci0gICAgZnJlZShidWZmZXIpOwogI2Vs
c2UKICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPihQQVRIX01BWCk7
CiAgICAgaWYgKCFnZXRjd2QoYnVmZmVyLmdldCgpLCBQQVRIX01BWCkpCkBAIC04NjcsNiArODY4
LDk5IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29s
dmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZXNv
bHZlKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5hbWUsIE1vZHVs
ZU5hbWUoa2V5LmltcGwoKSkpKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGxCdWZmZXJXaXRoQ29u
dGVudHNPZkZpbGUoRklMRSogZmlsZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgZnNl
ZWsoZmlsZSwgMCwgU0VFS19FTkQpOworICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IGZ0ZWxs
KGZpbGUpOworICAgIGZzZWVrKGZpbGUsIDAsIFNFRUtfU0VUKTsKKyAgICBidWZmZXIucmVzaXpl
KGJ1ZmZlckNhcGFjaXR5KTsKKyAgICBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCBidWZmZXJDYXBh
Y2l0eSwgZmlsZSk7CisKKyAgICBpZiAoYnVmZmVyLnNpemUoKSA+PSAyKSB7CisgICAgICAgIGlm
IChidWZmZXJbMF0gPT0gJyMnICYmIGJ1ZmZlclsxXSA9PSAnIScpCisgICAgICAgICAgICBidWZm
ZXJbMF0gPSBidWZmZXJbMV0gPSAnLyc7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBmaWxsQnVm
ZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFy
PiYgYnVmZmVyKQoreworICAgIEZJTEUqIGYgPSBmb3BlbihmaWxlTmFtZS51dGY4KCkuZGF0YSgp
LCAiciIpOworICAgIGlmICghZikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5v
dCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZiwg
YnVmZmVyKTsKKyAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIE9T
KFdJTkRPV1MpCitzdGF0aWMgVmVjdG9yPFVDaGFyPiBleHRyYWN0VVRGMTZDaGFyYWN0ZXJzKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworCisgICAg
aWYgKHN0cmluZy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChz
dHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4ID0gc3Ry
aW5nLmNoYXJhY3RlcnM4KCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyczgsIHN0
cmluZy5sZW5ndGgoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMxNiA9IHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChj
aGFyYWN0ZXJzMTYsIHN0cmluZy5sZW5ndGgoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKyNlbmRpZgorCisKK3N0YXRpYyBib29sIGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5
c3RlbShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAg
ICAvLyBXZSBhc3N1bWUgdGhhdCBmaWxlTmFtZSBpcyBhbHdheXMgYW4gYWJzb2x1dGUgcGF0aC4K
KyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3LmFzcHgjbWF4cGF0aAorICAgIC8vIFVz
ZSBsb25nIFVOQyB0byBwYXNzIHRoZSBsb25nIHBhdGggbmFtZSB0byB0aGUgV2luZG93cyBBUElz
LgorICAgIFN0cmluZyBsb25nVU5DUGF0aE5hbWUgPSBXVEY6Om1ha2VTdHJpbmcoIlxcXFw/XFwi
LCBmaWxlTmFtZSk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yod2NoYXJfdCkgPT0gc2l6ZW9m
KFVDaGFyKSwgIkluIFdpbmRvd3MsIGJvdGggYXJlIFVURi0xNkxFIik7CisgICAgYXV0byB1dGYx
NlZlY3RvciA9IGV4dHJhY3RVVEYxNkNoYXJhY3RlcnMobG9uZ1VOQ1BhdGhOYW1lKTsKKyAgICB1
dGYxNlZlY3Rvci5hcHBlbmQoJ1wwJyk7CisgICAgRklMRSogZiA9IF93Zm9wZW4ocmVpbnRlcnBy
ZXRfY2FzdDx3Y2hhcl90Kj4odXRmMTZWZWN0b3IuZGF0YSgpKSwgTCJyYiIpOworI2Vsc2UKKyAg
ICBGSUxFKiBmID0gZm9wZW4oZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKyNlbmRpZgor
ICAgIGlmICghZikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZp
bGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZiwgYnVmZmVyKTsK
KyAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSlNJbnRlcm5hbFByb21p
c2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKK3sKKyAgICBKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIFN0cmluZyBtb2R1bGVLZXkgPSBrZXkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
eworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVj
dChleGVjLCBleGNlcHRpb24pOworICAgIH0KKworICAgIC8vIEhlcmUsIG5vdyB3ZSBjb25zaWRl
ciBtb2R1bGVLZXkgYXMgdGhlIGZpbGVOYW1lLgorICAgIFZlY3RvcjxjaGFyPiB1dGY4OworICAg
IGlmICghZmV0Y2hNb2R1bGVGcm9tTG9jYWxGaWxlU3lzdGVtKG1vZHVsZUtleSwgdXRmOCkpCisg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIG1h
a2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVuIGZpbGUgJyIsIG1vZHVsZUtleSwgIicuIikpKTsKKwor
ICAgIHJldHVybiBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBqc1N0cmluZyhleGVjLCBzdHJpbmdG
cm9tVVRGKHV0ZjgpKSk7Cit9CisKKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKQEAgLTEwOTAsNyArMTE4NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBleGVjKQog
ICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogICAgIFN0b3BXYXRjaCBzdG9wV2F0
Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0KCk7Ci0gICAgZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksIEpTVmFsdWUo
KSwgZXhjZXB0aW9uKTsKKyAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
anNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV4Y2VwdGlvbik7CiAgICAg
c3RvcFdhdGNoLnN0b3AoKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKQEAgLTExMTEsNyArMTIw
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0
ZSogZXhlYykKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOwogICAgIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVl
KCksIGV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwg
SlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2Vw
dGlvbikKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0xMTI0
LDcgKzEyMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhZEZp
bGUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURihzY3JpcHQuZGF0YSgpKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURihzY3JpcHQp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRh
eChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0xMTQwLDcgKzEyMzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQogICAgIHN0
b3BXYXRjaC5zdGFydCgpOwogCiAgICAgSlNWYWx1ZSBzeW50YXhFeGNlcHRpb247Ci0gICAgYm9v
bCB2YWxpZFN5bnRheCA9IGNoZWNrU3ludGF4KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBq
c2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCAmc3ludGF4RXhjZXB0aW9uKTsKKyAg
ICBib29sIHZhbGlkU3ludGF4ID0gY2hlY2tTeW50YXgoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgJnN5bnRheEV4Y2VwdGlvbik7CiAgICAg
c3RvcFdhdGNoLnN0b3AoKTsKIAogICAgIGlmICghdmFsaWRTeW50YXgpCkBAIC0xNTI4LDcgKzE2
MjIsNiBAQCBzdGF0aWMgdm9pZCBkdW1wRXhjZXB0aW9uKEdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YQogCiBzdGF0aWMgYm9vbCBydW5XaXRoU2Ny
aXB0cyhHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNj
cmlwdHMsIGJvb2wgZHVtcCwgYm9vbCBtb2R1bGUpCiB7Ci0gICAgY29uc3QgY2hhciogc2NyaXB0
OwogICAgIFN0cmluZyBmaWxlTmFtZTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0QnVmZmVyOwog
CkBAIC0xNTU3LDEwICsxNjUwLDExIEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyCiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNP
ZkZpbGUoZmlsZU5hbWUsIHNjcmlwdEJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gZmFpbCBlYXJseSBzbyB3ZSBjYW4gY2F0Y2ggbWlzc2luZyBmaWxlcwotICAg
ICAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdEJ1ZmZlci5kYXRhKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzY3JpcHQgPSBzY3JpcHRzW2ldLmFyZ3Vt
ZW50OworICAgICAgICAgICAgc2l6ZV90IGNvbW1hbmRMaW5lTGVuZ3RoID0gc3RybGVuKHNjcmlw
dHNbaV0uYXJndW1lbnQpOworICAgICAgICAgICAgc2NyaXB0QnVmZmVyLnJlc2l6ZShjb21tYW5k
TGluZUxlbmd0aCk7CisgICAgICAgICAgICBzdGQ6OmNvcHkoc2NyaXB0c1tpXS5hcmd1bWVudCwg
c2NyaXB0c1tpXS5hcmd1bWVudCArIGNvbW1hbmRMaW5lTGVuZ3RoLCBzY3JpcHRCdWZmZXIuYmVn
aW4oKSk7CiAgICAgICAgICAgICBmaWxlTmFtZSA9IEFTQ0lJTGl0ZXJhbCgiW0NvbW1hbmQgTGlu
ZV0iKTsKICAgICAgICAgfQogCkBAIC0xNTY4LDEzICsxNjYyLDEzIEBAIHN0YXRpYyBib29sIHJ1
bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2Ny
aXB0PiYgc2NyCiAKICAgICAgICAgaWYgKG1vZHVsZSkgewogICAgICAgICAgICAgaWYgKCFwcm9t
aXNlKQotICAgICAgICAgICAgICAgIHByb21pc2UgPSBldmFsdWF0ZU1vZHVsZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpKTsKKyAgICAgICAg
ICAgICAgICBwcm9taXNlID0gZXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVOYW1lKSk7CiAgICAgICAgICAgICBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKS0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHBy
b21pc2UtPnRoZW4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG51bGxwdHIsIGVycm9ySGFu
ZGxlcik7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCkuZHJhaW5NaWNyb3Rhc2tzKCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1
YXRpb25FeGNlcHRpb247Ci0gICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1l
KSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIEpTVmFsdWUg
cmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdEJ1ZmZlciwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRp
b24pOwogICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgIWV2YWx1YXRpb25FeGNlcHRp
b247CiAgICAgICAgICAgICBpZiAoZHVtcCAmJiAhZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAg
ICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTY0NiwxMCArMTc0MCw5IEBAIHN0YXRpYyB2b2lkIHJ1bklu
dGVyYWN0aXZlKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICB9CiAgICAgICAg
IGlmIChsaW5lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBsaW5lLmFw
cGVuZCgnXDAnKTsKIAogICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNl
cHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUp
LCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlIHJldHVy
blZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShs
aW5lLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwog
I2VuZGlmCiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICAgICAgcHJp
bnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTgzOSwzNSArMTkzMiw2IEBAIGludCBqc2Nt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQotewotICAgIEZJTEUqIGYgPSBmb3BlbihmaWxlTmFt
ZS51dGY4KCkuZGF0YSgpLCAiciIpOwotICAgIGlmICghZikgewotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNpemVfdCBidWZmZXJTaXpl
ID0gMDsKLSAgICBzaXplX3QgYnVmZmVyQ2FwYWNpdHkgPSAxMDI0OwotCi0gICAgYnVmZmVyLnJl
c2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0KLSAgICB3aGlsZSAoIWZlb2YoZikgJiYgIWZlcnJvcihm
KSkgewotICAgICAgICBidWZmZXJTaXplICs9IGZyZWFkKGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJT
aXplLCAxLCBidWZmZXJDYXBhY2l0eSAtIGJ1ZmZlclNpemUsIGYpOwotICAgICAgICBpZiAoYnVm
ZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgeyAvLyBndWFyYW50ZWVzIHNwYWNlIGZvciB0cmFp
bGluZyAnXDAnCi0gICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAyOwotICAgICAgICAgICAg
YnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZmNs
b3NlKGYpOwotICAgIGJ1ZmZlcltidWZmZXJTaXplXSA9ICdcMCc7Ci0KLSAgICBpZiAoYnVmZmVy
WzBdID09ICcjJyAmJiBidWZmZXJbMV0gPT0gJyEnKQotICAgICAgICBidWZmZXJbMF0gPSBidWZm
ZXJbMV0gPSAnLyc7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogI2lmIE9TKFdJTkRPV1MpCiBl
eHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBpbnQgV0lOQVBJIGRsbExhdW5jaGVyRW50
cnlQb2ludChpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vZHVsZXMueWFtbCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9tb2R1bGVzLnlhbWwKaW5kZXggNjY4MWUwNmZlM2IyYmU1OTAwNzZkMTIzYTc1
M2RmY2M1ZThhYmQ5ZS4uYWI0NzhmMWY2NDQ5YTEyZmVlOGQ0YzYxZjUyOTAwYjVkMDg5YzVhZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vZHVsZXMueWFtbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW9kdWxlcy55YW1sCkBAIC0yMiwxMyArMjIs
NCBAQAogIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiAtIHBhdGg6IG1vZHVsZXMKLSAgY21kOiB8Ci0gICAgICAjIEZJ
WE1FOiBFUzYgTW9kdWxlcyBpbiB0aGUgSlNDIHNoZWxsIG5vdyB1c2VzIGFuIGFic29sdXRlIHBh
dGggYXMgYW4gdW5pcXVlIGtleSB0byBlYWNoIG1vZHVsZS4KLSAgICAgICMgSG93ZXZlciwgdGhl
IGxlbmd0aCBvZiB0aGUgcGF0aCBuYW1lIGluIFdpbmRvd3MgaXMgbGltaXRlZCBhbmQgc2hvcnQ7
IChfTUFYX1BBVEggPSAyNjApLgotICAgICAgIyBBcyBhIHJlc3VsdCwgSlNDIHRlc3RzIGZvciBt
b2R1bGVzIGluIFdpbmRvd3MgZmFpbCBiZWNhdXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0
b3J5IHBhdGggaXMgdHJ1bmNhdGVkLgotICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ4OTE3Ci0gICAgICBpZiAoJGhvc3RPUyA9PSAid2luZG93cyIpCi0g
ICAgICAgICAgc2tpcAotICAgICAgZWxzZQotICAgICAgICAgIHJ1bk1vZHVsZXMKLSAgICAgIGVu
ZAorICBjbWQ6IHJ1bk1vZHVsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCBkYzk2
Y2Q4MmQ1ZjQzMjVlNzIyMTU1MTRkNjliMDM4MTgzN2Y5OTMzLi4zNGFiZWQ0ZTFkOGVmYTk4YWEz
YTY4OWNhZGE1OTMwN2UwNTJiMmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC00
MjgsMjggKzQyOCw2IEBAIGJvb2wgU3RyaW5nOjpwZXJjZW50YWdlKGludCYgcmVzdWx0KSBjb25z
dAogICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8VUNoYXI+IFN0cmluZzo6Y2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSBjb25zdAotewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShsZW5ndGgoKSArIDEpOwotCi0gICAgICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICAg
ICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4ID0gbV9pbXBsLT5jaGFyYWN0ZXJzOCgpOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY2hhcmFjdGVyczhbaV0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNiA9IG1faW1wbC0+
Y2hhcmFjdGVyczE2KCk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3RlcnMxNiwg
bV9pbXBsLT5sZW5ndGgoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuYXBwZW5kKDAp
OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIFN0cmluZyBTdHJpbmc6OmZvcm1h
dChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IGFyZ3M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaAppbmRleCAwZmY2NGY2MDE2OTdkZDE5ODEwOWI5ZjkxZDhlMGRkMjVhNWNm
YTY4Li40MGRlZWVmYzFlNjRhN2JkZGExNGM3ZDg0MDczZmU5Y2Q2NmZiNGZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmgKQEAgLTI1OSw4ICsyNTksNiBAQCBjbGFzcyBTdHJpbmcgewogICAgIHNp
emVfdCByZXZlcnNlRmluZChjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQsIGJvb2wg
Y2FzZVNlbnNpdGl2ZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IHJl
dmVyc2VGaW5kKHN0ciwgc3RhcnQpIDogcmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFy
dCk7IH0KIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBWZWN0b3I8VUNoYXI+IGNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkgY29uc3Q7Ci0gICAgCiAgICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCkgY29uc3Q7IC8vIERp
dHRvLgogICAgIAogICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmlu
ZChjKSAhPSBub3RGb3VuZDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260901</attachid>
            <date>2015-09-09 18:36:26 -0700</date>
            <delta_ts>2015-09-09 19:25:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148917-20150909183620.patch</filename>
            <type>text/plain</type>
            <size>19608</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YTgzMzAzOTRlOGFkZGEwODFiNzYzZjNjOWIzMTcwMWVmNjgzMzMwLi4yZGY1ODg4M2IzYjUwYTkz
MWQ1ZWZjMjVhNDE4NjJjY2ZiN2JlY2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxNS0wOS0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDb25zaWRlciBsb25nIG1vZHVsZSBwYXRoIG5hbWUgY2FzZSBpbiBX
aW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDg5MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgbG9jYWwgZmlsZSBzeXN0ZW0gbW9kdWxlIGxvYWRlciBpbiB0aGUgSlNDIHNoZWxsIG1hbmFn
ZXMgdGhlIG1vZHVsZSBmaWxlcyBieSB0aGUgYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgSG93ZXZl
ciwgaW4gV2luZG93cywgX01BWF9QQVRIIGlzIGRlZmluZWQgYXMgMjYwLiBTbyBpZiB0aGUgcGF0
aCBsaWtlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yIHRoZSBwYXRoIHRvIHRoZSBt
b2R1bGUgaXMgbG9uZywKKyAgICAgICAgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgdGhlIEFQSSBh
bmQgaXQgZmFpbCB0byBvcGVuIHRoZSBmaWxlLgorICAgICAgICBJbiBKU0MgdGVzdHMgaW4gQXBw
bGUgV2luZG93cyBidWlsZGJvdCwgc2luY2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
aXMgbG9uZyBlbm91Z2gsIHRoZSB0ZXN0cyBmYWlsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgMyB0d2Vha3MuCisKKyAgICAgICAgMS4gV2hlbiByZXRy
aWV2aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgcGF0aCwgd2UgdXNlIEdldEN1cnJlbnREaXJlY3Rv
cnlXIGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAgICAgICAgR2V0Q3VycmVudERpcmVjdG9yeVcg
YWxsb3dzIHRoZSBsb25nIHBhdGggd2hpbGUgX2dldGN3ZCBhdXRvbWF0aWNhbGx5IHRydW5jYXRl
IHRoZSByZXN1bHQgYnkgdGhlIF9NQVhfUEFUSC4KKworICAgICAgICAyLiBCZWZvcmUgb3Blbmlu
ZyB0aGUgbW9kdWxlIGZpbGUsIHdlIHByZXBlbmQgIlxcP1wiIHRvIHRoZSBwYXRoLiBJdCBjb252
ZXJ0cyB0aGUgbG9jYWwgZmlsZSBwYXRoIHRvIHRoZSBsb25nIFVOQyBwYXRoCisgICAgICAgICAg
IHdoaWNoIGFsbG93cyBsb25nZXIgcGF0aCBuYW1lcy4KKworICAgICAgICAzLiBTaW5jZSBXaW5k
b3dzIEFTQ0lJIEFQSSBhY2NlcHRzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IGNvZGUg
cGFnZSwgd2UgdXNlIHRoZSBVbmljb2RlIEFQSXMgbGlrZSBfd2ZvcGVuIGluc3RlYWQuCisKKyAg
ICAgICAgQW5kIGVuYWJsZSB0aGUgb25jZSBkaXNhYmxlZCBtb2R1bGUgdGVzdHMgaW4gV2luZG93
cy4KKworICAgICAgICBTaW5jZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHBhcnQgb2YgdGhl
IEpTQyBzaGVsbCB0byBydW4gdGhlIG1vZHVsZSB0ZXN0cywgaXQgaXMgbm93IGltcGxlbWVudGVk
IGluIGpzYy5jcHAuCisKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoc3RyaW5nRnJvbVVU
Rik6CisgICAgICAgIChqc2NTb3VyY2UpOgorICAgICAgICAoZXh0cmFjdERpcmVjdG9yeU5hbWUp
OgorICAgICAgICAoY3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOgorICAgICAgICAoZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChleHRyYWN0VVRGMTZDaGFyYWN0ZXJzKToK
KyAgICAgICAgKGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5c3RlbSk6CisgICAgICAgIChHbG9i
YWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAg
ICAgICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvblJlYWRGaWxlKToKKyAgICAg
ICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAgICAocnVuV2l0aFNjcmlwdHMpOgorICAg
ICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIHRlc3RzL21vZHVsZXMueWFtbDoKKwog
MjAxNS0wOS0wOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbmlmeSBzeW1ib2xUYWJsZUdldCBhbmQgUHV0IGluIEpTTGV4aWNhbEVudmlyb25tZW50
IGFuZCBKU1N5bWJvbFRhYmxlT2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNiMGRhMDU0MWNiOGRlMTY1ODg2ZWZlMDRj
YmU5MTQxMGFkMGE0YzEuLjc1ZmI1N2M0ZDA0MTdiODk3MjYzMzZlYjYxYzlkOGNmNDY4YzBlNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDktMDkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgbG9uZyBtb2R1bGUgcGF0aCBuYW1l
IGNhc2UgaW4gV2luZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ4OTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6
OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
dGV4dC9XVEZTdHJpbmcuaDoKKwogMjAxNS0wOS0wOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgR0Mgc3RhY2sgc2NhbiBzaG91bGQgaW5jbHVkZSBBQkkgcmVkIHpv
bmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDhmYTQ0YjE3N2I3M2YzYWNmNzlhNDFhMGNjOTRm
MjQ5Y2M2YmY2ODMuLjA2MGFjYWNkM2Y1ZmYxZjYxMDM4Y2EzMWVmMjIyMjgyYmY0YmNkODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCkBAIC01NjUsMTIgKzU2NSwxNCBAQCBsb25nIFN0b3BXYXRjaDo6
Z2V0RWxhcHNlZE1TKCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oKG1fc3RvcFRpbWUg
LSBtX3N0YXJ0VGltZSkgKiAxMDAwKTsKIH0KIAotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5n
RnJvbVVURihjb25zdCBjaGFyKiB1dGY4KQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yPgorc3Rh
dGljIGlubGluZSBTdHJpbmcgc3RyaW5nRnJvbVVURihjb25zdCBWZWN0b3ImIHV0ZjgpCiB7Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2sodXRmOCwgc3RybGVu
KHV0ZjgpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayh1
dGY4LmRhdGEoKSwgdXRmOC5zaXplKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIFNvdXJjZUNvZGUg
anNjU291cmNlKGNvbnN0IGNoYXIqIHV0ZjgsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWZWN0b3I+CitzdGF0aWMgaW5saW5lIFNvdXJjZUNvZGUganNjU291cmNl
KGNvbnN0IFZlY3RvciYgdXRmOCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKICAgICBTdHJp
bmcgc3RyID0gc3RyaW5nRnJvbVVURih1dGY4KTsKICAgICByZXR1cm4gbWFrZVNvdXJjZShzdHIs
IGZpbGVuYW1lKTsKQEAgLTcwMSwyNCArNzAzLDcgQEAgY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVi
bGljIEpTR2xvYmFsT2JqZWN0IHsKICAgICB9CiAKICAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21p
c2UqIG1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBKU1ZhbHVlKTsKLQotICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9h
ZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGtleSkKLSAgICB7Ci0gICAgICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRl
ZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIFN0cmluZyBtb2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWpl
Y3QoZXhlYywgZXhjZXB0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhlcmUsIG5vdyB3
ZSBjb25zaWRlciBtb2R1bGVLZXkgYXMgdGhlIGZpbGVOYW1lLgotICAgICAgICBWZWN0b3I8Y2hh
cj4gdXRmODsKLSAgICAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKG1vZHVs
ZUtleSwgdXRmOCkpCi0gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBj
cmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBmaWxlICciLCBtb2R1
bGVLZXksICInLiIpKSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMs
IGpzU3RyaW5nKGV4ZWMsIHN0cmluZ0Zyb21VVEYodXRmOC5kYXRhKCkpKSk7Ci0gICAgfQorICAg
IHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBHbG9iYWxP
YmplY3Q6OnNfaW5mbyA9IHsgImdsb2JhbCIsICZKU0dsb2JhbE9iamVjdDo6c19pbmZvLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEdsb2JhbE9iamVjdCkgfTsKQEAgLTc3NCwyMCArNzU5
LDM5IEBAIHN0YXRpYyBib29sIGV4dHJhY3REaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgYWJz
b2x1dGVQYXRoVG9GaWxlLCBEaXJlY3RvcnlOYW1lCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShs
YXN0U2VwYXJhdG9yUG9zaXRpb24gIT0gbm90Rm91bmQsICJJZiB0aGUgc2VwYXJhdG9yIGlzIG5v
dCBmb3VuZCwgdGhpcyBmdW5jdGlvbiBhbHJlYWR5IHJldHVybnMgd2hlbiBwZXJmb3JtaW5nIHRo
ZSBmb3J3YXJkIHNlYXJjaC4iKTsKICAgICBpZiAoZmlyc3RTZXBhcmF0b3JQb3NpdGlvbiA9PSBs
YXN0U2VwYXJhdG9yUG9zaXRpb24pCiAgICAgICAgIGRpcmVjdG9yeU5hbWUucXVlcnlOYW1lID0g
U3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlCi0gICAgICAgIGRpcmVjdG9yeU5hbWUucXVl
cnlOYW1lID0gYWJzb2x1dGVQYXRoVG9GaWxlLnN1YnN0cmluZyhmaXJzdFNlcGFyYXRvclBvc2l0
aW9uICsgMSwgbGFzdFNlcGFyYXRvclBvc2l0aW9uKTsgLy8gTm90IGluY2x1ZGUgdGhlIHNlcGFy
YXRvci4KKyAgICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IHF1ZXJ5U3RhcnRQb3NpdGlvbiA9IGZp
cnN0U2VwYXJhdG9yUG9zaXRpb24gKyAxOworICAgICAgICBzaXplX3QgcXVlcnlMZW5ndGggPSBs
YXN0U2VwYXJhdG9yUG9zaXRpb24gLSBxdWVyeVN0YXJ0UG9zaXRpb247IC8vIE5vdCBpbmNsdWRl
IHRoZSBsYXN0IHNlcGFyYXRvci4KKyAgICAgICAgZGlyZWN0b3J5TmFtZS5xdWVyeU5hbWUgPSBh
YnNvbHV0ZVBhdGhUb0ZpbGUuc3Vic3RyaW5nKHF1ZXJ5U3RhcnRQb3NpdGlvbiwgcXVlcnlMZW5n
dGgpOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgY3VycmVudFdv
cmtpbmdEaXJlY3RvcnkoRGlyZWN0b3J5TmFtZSYgZGlyZWN0b3J5TmFtZSkKIHsKICNpZiBPUyhX
SU5ET1dTKQotICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
c2Y5OGJkNHkuYXNweAotICAgIGNoYXIqIGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgaWYgKCEoYnVm
ZmVyID0gX2dldGN3ZChudWxscHRyLCAwKSkpCisgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjQ5MzQuYXNweAorICAgIC8v
IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9w
L2FhMzY1MjQ3LmFzcHgjbWF4cGF0aAorICAgIC8vIFRoZSBfTUFYX1BBVEggaW4gV2luZG93cyBp
cyAyNjAuIElmIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGxv
bmdlciB0aGFuIHRoYXQsIF9nZXRjd2QgdHJ1bmNhdGVzIHRoZSByZXN1bHQuCisgICAgLy8gQW5k
IG90aGVyIEkvTyBmdW5jdGlvbnMgdGFraW5nIGEgcGF0aCBuYW1lIGFsc28gdHJ1bmNhdGUgaXQu
IFRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLAorICAgIC8vCisgICAgLy8gKDEpLiBXaGVuIG9wZW5p
bmcgdGhlIGZpbGUgaW4gV2luZG93cyBmb3IgbW9kdWxlcywgd2UgYWx3YXlzIHVzZSB0aGUgYWJv
c29sdXRlIHBhdGggYW5kIGFkZCAiXFw/XCIgcHJlZml4IHRvIHRoZSBwYXRoIG5hbWUuCisgICAg
Ly8gKDIpLiBXaGVuIHJldHJpZXZpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIHVz
ZSBHZXRDdXJyZW50RGlyZWN0b3J5IGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAvLworICAgIC8v
IEluIHRoZSBwYXRoIHV0aWxpdHkgZnVuY3Rpb25zIGluc2lkZSB0aGUgSlNDIHNoZWxsLCB3ZSBk
b2VzIG5vdCBoYW5kbGUgdGhlIFVOQyBhbmQgVU5DVyBpbmNsdWRpbmcgdGhlIG5ldHdvcmsgaG9z
dCBuYW1lLgorICAgIERXT1JEIGJ1ZmZlckxlbmd0aCA9IDo6R2V0Q3VycmVudERpcmVjdG9yeVco
MCwgbnVsbHB0cik7CisgICAgaWYgKCFidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAvLyBJbiBXaW5kb3dzLCB3Y2hhcl90IGlzIHRoZSBVVEYtMTZMRS4KKyAgICAvLyBo
dHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMzc0MDgxLmFzcHgKKyAg
ICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVz
a3RvcC9mZjM4MTQwNy5hc3B4CisgICAgYXV0byBidWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPHdj
aGFyX3RbXT4oYnVmZmVyTGVuZ3RoKTsKKyAgICBEV09SRCBsZW5ndGhOb3RJbmNsdWRpbmdOdWxs
ID0gOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhidWZmZXJMZW5ndGgsIGJ1ZmZlci5nZXQoKSk7Cisg
ICAgc3RhdGljX2Fzc2VydChzaXplb2Yod2NoYXJfdCkgPT0gc2l6ZW9mKFVDaGFyKSwgIkluIFdp
bmRvd3MsIGJvdGggYXJlIFVURi0xNkxFIik7CisgICAgU3RyaW5nIGRpcmVjdG9yeVN0cmluZyA9
IFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4oYnVmZmVyLmdldCgpKSk7CisgICAgLy8g
V2UgZG9uJ3Qgc3VwcG9ydCBuZXR3b3JrIHBhdGggbGlrZSBcXGhvc3Rcc2hhcmVcPHBhdGggbmFt
ZT4uCisgICAgaWYgKGRpcmVjdG9yeVN0cmluZy5zdGFydHNXaXRoKCJcXFxcIikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgZGlyZWN0b3J5U3RyaW5nID0gU3RyaW5nOjpmcm9t
VVRGOChidWZmZXIpOwotICAgIGZyZWUoYnVmZmVyKTsKICNlbHNlCiAgICAgYXV0byBidWZmZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPGNoYXJbXT4oUEFUSF9NQVgpOwogICAgIGlmICghZ2V0Y3dkKGJ1
ZmZlci5nZXQoKSwgUEFUSF9NQVgpKQpAQCAtODY3LDYgKzg3MSw5OSBAQCBKU0ludGVybmFsUHJv
bWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplYwogICAgIHJldHVybiBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBqc1N0cmluZyhl
eGVjLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSkp
OwogfQogCitzdGF0aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZJTEUqIGZp
bGUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5E
KTsKKyAgICBzaXplX3QgYnVmZmVyQ2FwYWNpdHkgPSBmdGVsbChmaWxlKTsKKyAgICBmc2Vlayhm
aWxlLCAwLCBTRUVLX1NFVCk7CisgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Cisg
ICAgZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgYnVmZmVyQ2FwYWNpdHksIGZpbGUpOworCisgICAg
aWYgKGJ1ZmZlci5zaXplKCkgPj0gMikgeworICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcjJyAm
JiBidWZmZXJbMV0gPT0gJyEnKQorICAgICAgICAgICAgYnVmZmVyWzBdID0gYnVmZmVyWzFdID0g
Jy8nOworICAgIH0KK30KKworc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBG
SUxFKiBmID0gZm9wZW4oZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKyAgICBpZiAoIWYp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwg
ZmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGYsIGJ1ZmZlcik7CisgICAgZmNsb3Nl
KGYpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBPUyhXSU5ET1dTKQorc3RhdGljIFZl
Y3RvcjxVQ2hhcj4gZXh0cmFjdFVURjE2Q2hhcmFjdGVycyhjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKworICAgIGlmIChzdHJpbmcuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Cisg
ICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3RlcnM4LCBzdHJpbmcubGVuZ3RoKCkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYgPSBzdHJpbmcuY2hh
cmFjdGVyczE2KCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyczE2LCBzdHJpbmcu
bGVuZ3RoKCkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworCitz
dGF0aWMgYm9vbCBmZXRjaE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgLy8gV2UgYXNzdW1lIHRoYXQg
ZmlsZU5hbWUgaXMgYWx3YXlzIGFuIGFic29sdXRlIHBhdGguCisjaWYgT1MoV0lORE9XUykKKyAg
ICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVz
a3RvcC9hYTM2NTI0Ny5hc3B4I21heHBhdGgKKyAgICAvLyBVc2UgbG9uZyBVTkMgdG8gcGFzcyB0
aGUgbG9uZyBwYXRoIG5hbWUgdG8gdGhlIFdpbmRvd3MgQVBJcy4KKyAgICBTdHJpbmcgbG9uZ1VO
Q1BhdGhOYW1lID0gV1RGOjptYWtlU3RyaW5nKCJcXFxcP1xcIiwgZmlsZU5hbWUpOworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKHdjaGFyX3QpID09IHNpemVvZihVQ2hhciksICJJbiBXaW5kb3dz
LCBib3RoIGFyZSBVVEYtMTZMRSIpOworICAgIGF1dG8gdXRmMTZWZWN0b3IgPSBleHRyYWN0VVRG
MTZDaGFyYWN0ZXJzKGxvbmdVTkNQYXRoTmFtZSk7CisgICAgdXRmMTZWZWN0b3IuYXBwZW5kKCdc
MCcpOworICAgIEZJTEUqIGYgPSBfd2ZvcGVuKHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KHV0
ZjE2VmVjdG9yLmRhdGEoKSksIEwicmIiKTsKKyNlbHNlCisgICAgRklMRSogZiA9IGZvcGVuKGZp
bGVOYW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisjZW5kaWYKKyAgICBpZiAoIWYpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmlsZU5hbWUu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmaWxs
QnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGYsIGJ1ZmZlcik7CisgICAgZmNsb3NlKGYpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1v
ZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCit7CisgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVm
ZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsK
KyAgICB9CisKKyAgICAvLyBIZXJlLCBub3cgd2UgY29uc2lkZXIgbW9kdWxlS2V5IGFzIHRoZSBm
aWxlTmFtZS4KKyAgICBWZWN0b3I8Y2hhcj4gdXRmODsKKyAgICBpZiAoIWZldGNoTW9kdWxlRnJv
bUxvY2FsRmlsZVN5c3RlbShtb2R1bGVLZXksIHV0ZjgpKQorICAgICAgICByZXR1cm4gZGVmZXJy
ZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qg
b3BlbiBmaWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7CisKKyAgICByZXR1cm4gZGVmZXJyZWQt
PnJlc29sdmUoZXhlYywganNTdHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURih1dGY4KSkpOworfQor
CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsgKytpKSB7CkBAIC0xMDkwLDcgKzExODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYykKICAgICBOYWtlZFB0cjxFeGNlcHRp
b24+IGV4Y2VwdGlvbjsKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0b3BXYXRjaC5z
dGFydCgpOwotICAgIGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3Vy
Y2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV4Y2VwdGlvbik7CisgICAg
ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZp
bGVOYW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAK
ICAgICBpZiAoZXhjZXB0aW9uKSB7CkBAIC0xMTExLDcgKzEyMDgsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAg
ICAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0
aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMTEyNCw3ICsxMjIxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRGaWxlKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZp
bGUuIikpKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0
cmluZ0Zyb21VVEYoc2NyaXB0LmRhdGEoKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIHN0cmluZ0Zyb21VVEYoc2NyaXB0KSkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQpA
QCAtMTE0MCw3ICsxMjM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKIAog
ICAgIEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOwotICAgIGJvb2wgdmFsaWRTeW50YXggPSBjaGVj
a1N5bnRheChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRh
KCksIGZpbGVOYW1lKSwgJnN5bnRheEV4Y2VwdGlvbik7CisgICAgYm9vbCB2YWxpZFN5bnRheCA9
IGNoZWNrU3ludGF4KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0
LCBmaWxlTmFtZSksICZzeW50YXhFeGNlcHRpb24pOwogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAK
ICAgICBpZiAoIXZhbGlkU3ludGF4KQpAQCAtMTUyOCw3ICsxNjI1LDYgQEAgc3RhdGljIHZvaWQg
ZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTmFrZWRQdHI8RXhjZXB0
aW9uPiBldmFsdWEKIAogc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxTY3JpcHQ+JiBzY3JpcHRzLCBib29sIGR1bXAsIGJv
b2wgbW9kdWxlKQogewotICAgIGNvbnN0IGNoYXIqIHNjcmlwdDsKICAgICBTdHJpbmcgZmlsZU5h
bWU7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdEJ1ZmZlcjsKIApAQCAtMTU1NywxMCArMTY1Mywx
MSBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcgogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3Jp
cHRCdWZmZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZhaWwgZWFy
bHkgc28gd2UgY2FuIGNhdGNoIG1pc3NpbmcgZmlsZXMKLSAgICAgICAgICAgICAgICBzY3JpcHQg
PSBzY3JpcHRCdWZmZXIuZGF0YSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgc2NyaXB0ID0gc2NyaXB0c1tpXS5hcmd1bWVudDsKKyAgICAgICAgICAgIHNp
emVfdCBjb21tYW5kTGluZUxlbmd0aCA9IHN0cmxlbihzY3JpcHRzW2ldLmFyZ3VtZW50KTsKKyAg
ICAgICAgICAgIHNjcmlwdEJ1ZmZlci5yZXNpemUoY29tbWFuZExpbmVMZW5ndGgpOworICAgICAg
ICAgICAgc3RkOjpjb3B5KHNjcmlwdHNbaV0uYXJndW1lbnQsIHNjcmlwdHNbaV0uYXJndW1lbnQg
KyBjb21tYW5kTGluZUxlbmd0aCwgc2NyaXB0QnVmZmVyLmJlZ2luKCkpOwogICAgICAgICAgICAg
ZmlsZU5hbWUgPSBBU0NJSUxpdGVyYWwoIltDb21tYW5kIExpbmVdIik7CiAgICAgICAgIH0KIApA
QCAtMTU2OCwxMyArMTY2NSwxMyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcgogCiAgICAgICAg
IGlmIChtb2R1bGUpIHsKICAgICAgICAgICAgIGlmICghcHJvbWlzZSkKLSAgICAgICAgICAgICAg
ICBwcm9taXNlID0gZXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpz
Y1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSk7CisgICAgICAgICAgICAgICAgcHJvbWlzZSA9IGV2
YWx1YXRlTW9kdWxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0
QnVmZmVyLCBmaWxlTmFtZSkpOwogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBwcm9taXNlLT50aGVuKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBudWxscHRyLCBlcnJvckhhbmRsZXIpOwogICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LT52bSgpLmRyYWluTWljcm90YXNrcygpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAg
ICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVh
dGlvbkV4Y2VwdGlvbik7CisgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZp
bGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgICAgIHN1
Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAgICAgICAgaWYg
KGR1bXAgJiYgIWV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgcHJpbnRmKCJF
bmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKQEAg
LTE2NDYsMTAgKzE3NDMsOSBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgfQogICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGluZS5hcHBlbmQoJ1wwJyk7CiAKICAgICAg
ICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1Zh
bHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpz
Y1NvdXJjZShsaW5lLmRhdGEoKSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0
aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1l
KSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAo
ZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xu
IiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0
YSgpKTsKQEAgLTE4MzksMzUgKzE5MzUsNiBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldp
dGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKLXsKLSAgICBGSUxFKiBmID0gZm9wZW4oZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInIi
KTsKLSAgICBpZiAoIWYpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3Bl
biBmaWxlOiAlc1xuIiwgZmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgc2l6ZV90IGJ1
ZmZlckNhcGFjaXR5ID0gMTAyNDsKLQotICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkp
OwotCi0gICAgd2hpbGUgKCFmZW9mKGYpICYmICFmZXJyb3IoZikpIHsKLSAgICAgICAgYnVmZmVy
U2l6ZSArPSBmcmVhZChidWZmZXIuZGF0YSgpICsgYnVmZmVyU2l6ZSwgMSwgYnVmZmVyQ2FwYWNp
dHkgLSBidWZmZXJTaXplLCBmKTsKLSAgICAgICAgaWYgKGJ1ZmZlclNpemUgPT0gYnVmZmVyQ2Fw
YWNpdHkpIHsgLy8gZ3VhcmFudGVlcyBzcGFjZSBmb3IgdHJhaWxpbmcgJ1wwJwotICAgICAgICAg
ICAgYnVmZmVyQ2FwYWNpdHkgKj0gMjsKLSAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVy
Q2FwYWNpdHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGZjbG9zZShmKTsKLSAgICBidWZmZXJb
YnVmZmVyU2l6ZV0gPSAnXDAnOwotCi0gICAgaWYgKGJ1ZmZlclswXSA9PSAnIycgJiYgYnVmZmVy
WzFdID09ICchJykKLSAgICAgICAgYnVmZmVyWzBdID0gYnVmZmVyWzFdID0gJy8nOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KICNpZiBPUyhXSU5ET1dTKQogZXh0ZXJuICJDIiBfX2RlY2xzcGVj
KGRsbGV4cG9ydCkgaW50IFdJTkFQSSBkbGxMYXVuY2hlckVudHJ5UG9pbnQoaW50IGFyZ2MsIGNv
bnN0IGNoYXIqIGFyZ3ZbXSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9tb2R1bGVzLnlhbWwgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW9kdWxlcy55
YW1sCmluZGV4IDY2ODFlMDZmZTNiMmJlNTkwMDc2ZDEyM2E3NTNkZmNjNWU4YWJkOWUuLmFiNDc4
ZjFmNjQ0OWExMmZlZThkNGM2MWY1MjkwMGI1ZDA4OWM1YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9tb2R1bGVzLnlhbWwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL21vZHVsZXMueWFtbApAQCAtMjIsMTMgKzIyLDQgQEAKICMgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAog
LSBwYXRoOiBtb2R1bGVzCi0gIGNtZDogfAotICAgICAgIyBGSVhNRTogRVM2IE1vZHVsZXMgaW4g
dGhlIEpTQyBzaGVsbCBub3cgdXNlcyBhbiBhYnNvbHV0ZSBwYXRoIGFzIGFuIHVuaXF1ZSBrZXkg
dG8gZWFjaCBtb2R1bGUuCi0gICAgICAjIEhvd2V2ZXIsIHRoZSBsZW5ndGggb2YgdGhlIHBhdGgg
bmFtZSBpbiBXaW5kb3dzIGlzIGxpbWl0ZWQgYW5kIHNob3J0OyAoX01BWF9QQVRIID0gMjYwKS4K
LSAgICAgICMgQXMgYSByZXN1bHQsIEpTQyB0ZXN0cyBmb3IgbW9kdWxlcyBpbiBXaW5kb3dzIGZh
aWwgYmVjYXVzZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBwYXRoIGlzIHRydW5jYXRl
ZC4KLSAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkx
NwotICAgICAgaWYgKCRob3N0T1MgPT0gIndpbmRvd3MiKQotICAgICAgICAgIHNraXAKLSAgICAg
IGVsc2UKLSAgICAgICAgICBydW5Nb2R1bGVzCi0gICAgICBlbmQKKyAgY21kOiBydW5Nb2R1bGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKaW5kZXggZGM5NmNkODJkNWY0MzI1ZTcyMjE1NTE0
ZDY5YjAzODE4MzdmOTkzMy4uMzRhYmVkNGUxZDhlZmE5OGFhM2E2ODljYWRhNTkzMDdlMDUyYjJj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApAQCAtNDI4LDI4ICs0MjgsNiBAQCBib29s
IFN0cmluZzo6cGVyY2VudGFnZShpbnQmIHJlc3VsdCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotVmVjdG9yPFVDaGFyPiBTdHJpbmc6OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkgY29uc3QKLXsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKCkgKyAxKTsK
LQotICAgICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzOCA9IG1faW1wbC0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNoYXJhY3RlcnM4W2ldKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYgPSBtX2ltcGwtPmNoYXJhY3RlcnMxNigpOwotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChjaGFyYWN0ZXJzMTYsIG1faW1wbC0+bGVuZ3RoKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgwKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCiBTdHJpbmcgU3RyaW5nOjpmb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0
LCAuLi4pCiB7CiAgICAgdmFfbGlzdCBhcmdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXgg
MGZmNjRmNjAxNjk3ZGQxOTgxMDliOWY5MWQ4ZTBkZDI1YTVjZmE2OC4uNDBkZWVlZmMxZTY0YTdi
ZGRhMTRjN2Q4NDA3M2ZlOWNkNjZmYjRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0y
NTksOCArMjU5LDYgQEAgY2xhc3MgU3RyaW5nIHsKICAgICBzaXplX3QgcmV2ZXJzZUZpbmQoY29u
c3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0
CiAgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyByZXZlcnNlRmluZChzdHIsIHN0YXJ0
KSA6IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9CiAKLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgVmVjdG9yPFVDaGFyPiBjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpIGNvbnN0OwotICAgIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBVQ2hhcjMyIGNoYXJh
Y3RlclN0YXJ0aW5nQXQodW5zaWduZWQpIGNvbnN0OyAvLyBEaXR0by4KICAgICAKICAgICBib29s
IGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0IHsgcmV0dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260905</attachid>
            <date>2015-09-09 19:25:50 -0700</date>
            <delta_ts>2015-09-10 11:23:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148917-20150909192544.patch</filename>
            <type>text/plain</type>
            <size>17326</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ZDc3MDI3NWI4M2M3ZTI0OWZjMTYzYzkwMmVkODg2NDQwM2Y0M2U3Li42Y2QwZDY2M2Y1ZDlhZjg3
MjJhMjg2NDUwNzU3MWRlNGE1MzZmNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAxNS0wOS0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDb25zaWRlciBsb25nIG1vZHVsZSBwYXRoIG5hbWUgY2FzZSBpbiBX
aW5kb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDg5MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGUgbG9jYWwgZmlsZSBzeXN0ZW0gbW9kdWxlIGxvYWRlciBpbiB0aGUgSlNDIHNoZWxsIG1hbmFn
ZXMgdGhlIG1vZHVsZSBmaWxlcyBieSB0aGUgYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgSG93ZXZl
ciwgaW4gV2luZG93cywgX01BWF9QQVRIIGlzIGRlZmluZWQgYXMgMjYwLiBTbyBpZiB0aGUgcGF0
aCBsaWtlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9yIHRoZSBwYXRoIHRvIHRoZSBt
b2R1bGUgaXMgbG9uZywKKyAgICAgICAgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgdGhlIEFQSSBh
bmQgaXQgZmFpbCB0byBvcGVuIHRoZSBmaWxlLgorICAgICAgICBJbiBKU0MgdGVzdHMgaW4gQXBw
bGUgV2luZG93cyBidWlsZGJvdCwgc2luY2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
aXMgbG9uZyBlbm91Z2gsIHRoZSB0ZXN0cyBmYWlsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgMyB0d2Vha3MuCisKKyAgICAgICAgMS4gV2hlbiByZXRy
aWV2aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgcGF0aCwgd2UgdXNlIEdldEN1cnJlbnREaXJlY3Rv
cnlXIGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAgICAgICAgR2V0Q3VycmVudERpcmVjdG9yeVcg
YWxsb3dzIHRoZSBsb25nIHBhdGggd2hpbGUgX2dldGN3ZCBhdXRvbWF0aWNhbGx5IHRydW5jYXRl
IHRoZSByZXN1bHQgYnkgdGhlIF9NQVhfUEFUSC4KKworICAgICAgICAyLiBCZWZvcmUgb3Blbmlu
ZyB0aGUgbW9kdWxlIGZpbGUsIHdlIHByZXBlbmQgIlxcP1wiIHRvIHRoZSBwYXRoLiBJdCBjb252
ZXJ0cyB0aGUgbG9jYWwgZmlsZSBwYXRoIHRvIHRoZSBsb25nIFVOQyBwYXRoCisgICAgICAgICAg
IHdoaWNoIGFsbG93cyBsb25nZXIgcGF0aCBuYW1lcy4KKworICAgICAgICAzLiBTaW5jZSBXaW5k
b3dzIEFTQ0lJIEFQSSBhY2NlcHRzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IGNvZGUg
cGFnZSwgd2UgdXNlIHRoZSBVbmljb2RlIEFQSXMgbGlrZSBfd2ZvcGVuIGluc3RlYWQuCisKKyAg
ICAgICAgQW5kIGVuYWJsZSB0aGUgb25jZSBkaXNhYmxlZCBtb2R1bGUgdGVzdHMgaW4gV2luZG93
cy4KKworICAgICAgICBTaW5jZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHBhcnQgb2YgdGhl
IEpTQyBzaGVsbCB0byBydW4gdGhlIG1vZHVsZSB0ZXN0cywgaXQgaXMgbm93IGltcGxlbWVudGVk
IGluIGpzYy5jcHAuCisKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoc3RyaW5nRnJvbVVU
Rik6CisgICAgICAgIChqc2NTb3VyY2UpOgorICAgICAgICAoZXh0cmFjdERpcmVjdG9yeU5hbWUp
OgorICAgICAgICAoY3VycmVudFdvcmtpbmdEaXJlY3RvcnkpOgorICAgICAgICAoZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChmZXRjaE1vZHVsZUZyb21Mb2NhbEZpbGVT
eXN0ZW0pOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAg
ICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAgICAoZnVu
Y3Rpb25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAg
KHJ1bldpdGhTY3JpcHRzKToKKyAgICAgICAgKHJ1bkludGVyYWN0aXZlKToKKyAgICAgICAgKiB0
ZXN0cy9tb2R1bGVzLnlhbWw6CisKIDIwMTUtMDktMDkgIFN1a29sc2FrIFNha3NodXdvbmcgIDxz
dWtvbHNha0BnbWFpbC5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGludGVybmFsIGNhbGxzIGlu
IFdlYkFzc2VtYmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDNiMGRhMDU0MWNiOGRlMTY1ODg2ZWZlMDRjYmU5MTQxMGFkMGE0
YzEuLjc1ZmI1N2M0ZDA0MTdiODk3MjYzMzZlYjYxYzlkOGNmNDY4YzBlNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTUtMDktMDkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+CisKKyAgICAgICAgQ29uc2lkZXIgbG9uZyBtb2R1bGUgcGF0aCBuYW1lIGNhc2UgaW4gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4
OTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJp
bmcuaDoKKwogMjAxNS0wOS0wOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgR0Mgc3RhY2sgc2NhbiBzaG91bGQgaW5jbHVkZSBBQkkgcmVkIHpvbmUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCmluZGV4IDhmYTQ0YjE3N2I3M2YzYWNmNzlhNDFhMGNjOTRmMjQ5Y2M2YmY2ODMu
LmQ2OWYzODlkMjEyMGMyOWNjOWQxMzg3MmE0MTJlYThlNmZjNjIzZmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCkBAIC01NjUsMTIgKzU2NSwxNCBAQCBsb25nIFN0b3BXYXRjaDo6Z2V0RWxhcHNlZE1T
KCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oKG1fc3RvcFRpbWUgLSBtX3N0YXJ0VGlt
ZSkgKiAxMDAwKTsKIH0KIAotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nRnJvbVVURihjb25z
dCBjaGFyKiB1dGY4KQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yPgorc3RhdGljIGlubGluZSBT
dHJpbmcgc3RyaW5nRnJvbVVURihjb25zdCBWZWN0b3ImIHV0ZjgpCiB7Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2sodXRmOCwgc3RybGVuKHV0ZjgpKTsKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayh1dGY4LmRhdGEoKSwg
dXRmOC5zaXplKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIFNvdXJjZUNvZGUganNjU291cmNlKGNv
bnN0IGNoYXIqIHV0ZjgsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWZWN0b3I+CitzdGF0aWMgaW5saW5lIFNvdXJjZUNvZGUganNjU291cmNlKGNvbnN0IFZlY3Rv
ciYgdXRmOCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKICAgICBTdHJpbmcgc3RyID0gc3Ry
aW5nRnJvbVVURih1dGY4KTsKICAgICByZXR1cm4gbWFrZVNvdXJjZShzdHIsIGZpbGVuYW1lKTsK
QEAgLTcwMSwyNCArNzAzLDcgQEAgY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFs
T2JqZWN0IHsKICAgICB9CiAKICAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxv
YWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVl
KTsKLQotICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
LSAgICB7Ci0gICAgICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIFN0cmluZyBtb2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUg
ZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhj
ZXB0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhlcmUsIG5vdyB3ZSBjb25zaWRlciBt
b2R1bGVLZXkgYXMgdGhlIGZpbGVOYW1lLgotICAgICAgICBWZWN0b3I8Y2hhcj4gdXRmODsKLSAg
ICAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKG1vZHVsZUtleSwgdXRmOCkp
Ci0gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihl
eGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBmaWxlICciLCBtb2R1bGVLZXksICInLiIp
KSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpzU3RyaW5nKGV4
ZWMsIHN0cmluZ0Zyb21VVEYodXRmOC5kYXRhKCkpKSk7Ci0gICAgfQorICAgIHN0YXRpYyBKU0lu
dGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqLCBFeGVjU3Rh
dGUqLCBKU1ZhbHVlKTsKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBHbG9iYWxPYmplY3Q6OnNfaW5m
byA9IHsgImdsb2JhbCIsICZKU0dsb2JhbE9iamVjdDo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEdsb2JhbE9iamVjdCkgfTsKQEAgLTc3NCwyMCArNzU5LDM5IEBAIHN0YXRp
YyBib29sIGV4dHJhY3REaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVQYXRoVG9G
aWxlLCBEaXJlY3RvcnlOYW1lCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShsYXN0U2VwYXJhdG9y
UG9zaXRpb24gIT0gbm90Rm91bmQsICJJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBmb3VuZCwgdGhp
cyBmdW5jdGlvbiBhbHJlYWR5IHJldHVybnMgd2hlbiBwZXJmb3JtaW5nIHRoZSBmb3J3YXJkIHNl
YXJjaC4iKTsKICAgICBpZiAoZmlyc3RTZXBhcmF0b3JQb3NpdGlvbiA9PSBsYXN0U2VwYXJhdG9y
UG9zaXRpb24pCiAgICAgICAgIGRpcmVjdG9yeU5hbWUucXVlcnlOYW1lID0gU3RyaW5nSW1wbDo6
ZW1wdHkoKTsKLSAgICBlbHNlCi0gICAgICAgIGRpcmVjdG9yeU5hbWUucXVlcnlOYW1lID0gYWJz
b2x1dGVQYXRoVG9GaWxlLnN1YnN0cmluZyhmaXJzdFNlcGFyYXRvclBvc2l0aW9uICsgMSwgbGFz
dFNlcGFyYXRvclBvc2l0aW9uKTsgLy8gTm90IGluY2x1ZGUgdGhlIHNlcGFyYXRvci4KKyAgICBl
bHNlIHsKKyAgICAgICAgc2l6ZV90IHF1ZXJ5U3RhcnRQb3NpdGlvbiA9IGZpcnN0U2VwYXJhdG9y
UG9zaXRpb24gKyAxOworICAgICAgICBzaXplX3QgcXVlcnlMZW5ndGggPSBsYXN0U2VwYXJhdG9y
UG9zaXRpb24gLSBxdWVyeVN0YXJ0UG9zaXRpb247IC8vIE5vdCBpbmNsdWRlIHRoZSBsYXN0IHNl
cGFyYXRvci4KKyAgICAgICAgZGlyZWN0b3J5TmFtZS5xdWVyeU5hbWUgPSBhYnNvbHV0ZVBhdGhU
b0ZpbGUuc3Vic3RyaW5nKHF1ZXJ5U3RhcnRQb3NpdGlvbiwgcXVlcnlMZW5ndGgpOworICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgY3VycmVudFdvcmtpbmdEaXJlY3Rv
cnkoRGlyZWN0b3J5TmFtZSYgZGlyZWN0b3J5TmFtZSkKIHsKICNpZiBPUyhXSU5ET1dTKQotICAg
IC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvc2Y5OGJkNHkuYXNw
eAotICAgIGNoYXIqIGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgaWYgKCEoYnVmZmVyID0gX2dldGN3
ZChudWxscHRyLCAwKSkpCisgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMv
bGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjQ5MzQuYXNweAorICAgIC8vIGh0dHBzOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3LmFz
cHgjbWF4cGF0aAorICAgIC8vIFRoZSBfTUFYX1BBVEggaW4gV2luZG93cyBpcyAyNjAuIElmIHRo
ZSBwYXRoIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIHRo
YXQsIF9nZXRjd2QgdHJ1bmNhdGVzIHRoZSByZXN1bHQuCisgICAgLy8gQW5kIG90aGVyIEkvTyBm
dW5jdGlvbnMgdGFraW5nIGEgcGF0aCBuYW1lIGFsc28gdHJ1bmNhdGUgaXQuIFRvIGF2b2lkIHRo
aXMgc2l0dWF0aW9uLAorICAgIC8vCisgICAgLy8gKDEpLiBXaGVuIG9wZW5pbmcgdGhlIGZpbGUg
aW4gV2luZG93cyBmb3IgbW9kdWxlcywgd2UgYWx3YXlzIHVzZSB0aGUgYWJvc29sdXRlIHBhdGgg
YW5kIGFkZCAiXFw/XCIgcHJlZml4IHRvIHRoZSBwYXRoIG5hbWUuCisgICAgLy8gKDIpLiBXaGVu
IHJldHJpZXZpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIHVzZSBHZXRDdXJyZW50
RGlyZWN0b3J5IGluc3RlYWQgb2YgX2dldGN3ZC4KKyAgICAvLworICAgIC8vIEluIHRoZSBwYXRo
IHV0aWxpdHkgZnVuY3Rpb25zIGluc2lkZSB0aGUgSlNDIHNoZWxsLCB3ZSBkb2VzIG5vdCBoYW5k
bGUgdGhlIFVOQyBhbmQgVU5DVyBpbmNsdWRpbmcgdGhlIG5ldHdvcmsgaG9zdCBuYW1lLgorICAg
IERXT1JEIGJ1ZmZlckxlbmd0aCA9IDo6R2V0Q3VycmVudERpcmVjdG9yeVcoMCwgbnVsbHB0cik7
CisgICAgaWYgKCFidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBJ
biBXaW5kb3dzLCB3Y2hhcl90IGlzIHRoZSBVVEYtMTZMRS4KKyAgICAvLyBodHRwczovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMzc0MDgxLmFzcHgKKyAgICAvLyBodHRwczov
L21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9mZjM4MTQw
Ny5hc3B4CisgICAgYXV0byBidWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPHdjaGFyX3RbXT4oYnVm
ZmVyTGVuZ3RoKTsKKyAgICBEV09SRCBsZW5ndGhOb3RJbmNsdWRpbmdOdWxsID0gOjpHZXRDdXJy
ZW50RGlyZWN0b3J5VyhidWZmZXJMZW5ndGgsIGJ1ZmZlci5nZXQoKSk7CisgICAgc3RhdGljX2Fz
c2VydChzaXplb2Yod2NoYXJfdCkgPT0gc2l6ZW9mKFVDaGFyKSwgIkluIFdpbmRvd3MsIGJvdGgg
YXJlIFVURi0xNkxFIik7CisgICAgU3RyaW5nIGRpcmVjdG9yeVN0cmluZyA9IFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PFVDaGFyKj4oYnVmZmVyLmdldCgpKSk7CisgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBuZXR3b3JrIHBhdGggbGlrZSBcXGhvc3Rcc2hhcmVcPHBhdGggbmFtZT4uCisgICAgaWYg
KGRpcmVjdG9yeVN0cmluZy5zdGFydHNXaXRoKCJcXFxcIikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBTdHJpbmcgZGlyZWN0b3J5U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIp
OwotICAgIGZyZWUoYnVmZmVyKTsKICNlbHNlCiAgICAgYXV0byBidWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPGNoYXJbXT4oUEFUSF9NQVgpOwogICAgIGlmICghZ2V0Y3dkKGJ1ZmZlci5nZXQoKSwg
UEFUSF9NQVgpKQpAQCAtODY3LDYgKzg3MSw3NyBAQCBKU0ludGVybmFsUHJvbWlzZSogR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwog
ICAgIHJldHVybiBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBqc1N0cmluZyhleGVjLCByZXNvbHZl
UGF0aChkaXJlY3RvcnlOYW1lLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSkpOwogfQogCitzdGF0
aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZJTEUqIGZpbGUsIFZlY3Rvcjxj
aGFyPiYgYnVmZmVyKQoreworICAgIGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKTsKKyAgICBzaXpl
X3QgYnVmZmVyQ2FwYWNpdHkgPSBmdGVsbChmaWxlKTsKKyAgICBmc2VlayhmaWxlLCAwLCBTRUVL
X1NFVCk7CisgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgZnJlYWQoYnVm
ZmVyLmRhdGEoKSwgMSwgYnVmZmVyQ2FwYWNpdHksIGZpbGUpOworCisgICAgaWYgKGJ1ZmZlci5z
aXplKCkgPj0gMikgeworICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcjJyAmJiBidWZmZXJbMV0g
PT0gJyEnKQorICAgICAgICAgICAgYnVmZmVyWzBdID0gYnVmZmVyWzFdID0gJy8nOworICAgIH0K
K30KKworc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBGSUxFKiBmID0gZm9w
ZW4oZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKyAgICBpZiAoIWYpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmlsZU5hbWUudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmaWxsQnVm
ZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGYsIGJ1ZmZlcik7CisgICAgZmNsb3NlKGYpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5
c3RlbShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAg
ICAvLyBXZSBhc3N1bWUgdGhhdCBmaWxlTmFtZSBpcyBhbHdheXMgYW4gYWJzb2x1dGUgcGF0aC4K
KyNpZiBPUyhXSU5ET1dTKQorICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3LmFzcHgjbWF4cGF0aAorICAgIC8vIFVz
ZSBsb25nIFVOQyB0byBwYXNzIHRoZSBsb25nIHBhdGggbmFtZSB0byB0aGUgV2luZG93cyBBUElz
LgorICAgIFN0cmluZyBsb25nVU5DUGF0aE5hbWUgPSBXVEY6Om1ha2VTdHJpbmcoIlxcXFw/XFwi
LCBmaWxlTmFtZSk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yod2NoYXJfdCkgPT0gc2l6ZW9m
KFVDaGFyKSwgIkluIFdpbmRvd3MsIGJvdGggYXJlIFVURi0xNkxFIik7CisgICAgYXV0byB1dGYx
NlZlY3RvciA9IGxvbmdVTkNQYXRoTmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
OworICAgIEZJTEUqIGYgPSBfd2ZvcGVuKHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KHV0ZjE2
VmVjdG9yLmRhdGEoKSksIEwicmIiKTsKKyNlbHNlCisgICAgRklMRSogZiA9IGZvcGVuKGZpbGVO
YW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisjZW5kaWYKKyAgICBpZiAoIWYpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmlsZU5hbWUudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmaWxsQnVm
ZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGYsIGJ1ZmZlcik7CisgICAgZmNsb3NlKGYpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVs
ZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXkpCit7CisgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJy
ZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0
KTsKKyAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKKyAg
ICB9CisKKyAgICAvLyBIZXJlLCBub3cgd2UgY29uc2lkZXIgbW9kdWxlS2V5IGFzIHRoZSBmaWxl
TmFtZS4KKyAgICBWZWN0b3I8Y2hhcj4gdXRmODsKKyAgICBpZiAoIWZldGNoTW9kdWxlRnJvbUxv
Y2FsRmlsZVN5c3RlbShtb2R1bGVLZXksIHV0ZjgpKQorICAgICAgICByZXR1cm4gZGVmZXJyZWQt
PnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3Bl
biBmaWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7CisKKyAgICByZXR1cm4gZGVmZXJyZWQtPnJl
c29sdmUoZXhlYywganNTdHJpbmcoZXhlYywgc3RyaW5nRnJvbVVURih1dGY4KSkpOworfQorCisK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CkBAIC0xMDkwLDcgKzExNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYykKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+
IGV4Y2VwdGlvbjsKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0b3BXYXRjaC5zdGFy
dCgpOwotICAgIGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uo
c2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV4Y2VwdGlvbik7CisgICAgZXZh
bHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVO
YW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAKICAg
ICBpZiAoZXhjZXB0aW9uKSB7CkBAIC0xMTExLDcgKzExODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICAK
ICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNl
KHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4
Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMTEyNCw3ICsxMTk5LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRGaWxlKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUu
IikpKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0cmlu
Z0Zyb21VVEYoc2NyaXB0LmRhdGEoKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKGV4ZWMsIHN0cmluZ0Zyb21VVEYoc2NyaXB0KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQpAQCAt
MTE0MCw3ICsxMjE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNo
ZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKIAogICAg
IEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOwotICAgIGJvb2wgdmFsaWRTeW50YXggPSBjaGVja1N5
bnRheChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCks
IGZpbGVOYW1lKSwgJnN5bnRheEV4Y2VwdGlvbik7CisgICAgYm9vbCB2YWxpZFN5bnRheCA9IGNo
ZWNrU3ludGF4KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBm
aWxlTmFtZSksICZzeW50YXhFeGNlcHRpb24pOwogICAgIHN0b3BXYXRjaC5zdG9wKCk7CiAKICAg
ICBpZiAoIXZhbGlkU3ludGF4KQpAQCAtMTUyOCw3ICsxNjAzLDYgQEAgc3RhdGljIHZvaWQgZHVt
cEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTmFrZWRQdHI8RXhjZXB0aW9u
PiBldmFsdWEKIAogc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxTY3JpcHQ+JiBzY3JpcHRzLCBib29sIGR1bXAsIGJvb2wg
bW9kdWxlKQogewotICAgIGNvbnN0IGNoYXIqIHNjcmlwdDsKICAgICBTdHJpbmcgZmlsZU5hbWU7
CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdEJ1ZmZlcjsKIApAQCAtMTU1NywxMCArMTYzMSwxMSBA
QCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcgogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHRC
dWZmZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZhaWwgZWFybHkg
c28gd2UgY2FuIGNhdGNoIG1pc3NpbmcgZmlsZXMKLSAgICAgICAgICAgICAgICBzY3JpcHQgPSBz
Y3JpcHRCdWZmZXIuZGF0YSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc2NyaXB0ID0gc2NyaXB0c1tpXS5hcmd1bWVudDsKKyAgICAgICAgICAgIHNpemVf
dCBjb21tYW5kTGluZUxlbmd0aCA9IHN0cmxlbihzY3JpcHRzW2ldLmFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIHNjcmlwdEJ1ZmZlci5yZXNpemUoY29tbWFuZExpbmVMZW5ndGgpOworICAgICAgICAg
ICAgc3RkOjpjb3B5KHNjcmlwdHNbaV0uYXJndW1lbnQsIHNjcmlwdHNbaV0uYXJndW1lbnQgKyBj
b21tYW5kTGluZUxlbmd0aCwgc2NyaXB0QnVmZmVyLmJlZ2luKCkpOwogICAgICAgICAgICAgZmls
ZU5hbWUgPSBBU0NJSUxpdGVyYWwoIltDb21tYW5kIExpbmVdIik7CiAgICAgICAgIH0KIApAQCAt
MTU2OCwxMyArMTY0MywxMyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFNjcmlwdD4mIHNjcgogCiAgICAgICAgIGlm
IChtb2R1bGUpIHsKICAgICAgICAgICAgIGlmICghcHJvbWlzZSkKLSAgICAgICAgICAgICAgICBw
cm9taXNlID0gZXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1Nv
dXJjZShzY3JpcHQsIGZpbGVOYW1lKSk7CisgICAgICAgICAgICAgICAgcHJvbWlzZSA9IGV2YWx1
YXRlTW9kdWxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0QnVm
ZmVyLCBmaWxlTmFtZSkpOwogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkt
PmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBwcm9taXNlLT50aGVuKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpLCBudWxscHRyLCBlcnJvckhhbmRsZXIpOwogICAgICAgICAgICAgZ2xv
YmFsT2JqZWN0LT52bSgpLmRyYWluTWljcm90YXNrcygpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAg
ICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CisgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVO
YW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgICAgIHN1Y2Nl
c3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAgICAgICAgaWYgKGR1
bXAgJiYgIWV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6
ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkt
PnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKQEAgLTE2
NDYsMTAgKzE3MjEsOSBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKICAgICAgICAgfQogICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGluZS5hcHBlbmQoJ1wwJyk7CiAKICAgICAgICAg
TmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVl
IHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1Nv
dXJjZShsaW5lLmRhdGEoKSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9u
RXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSwg
SlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwg
ZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgp
KTsKQEAgLTE4MzksMzUgKzE5MTMsNiBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhD
b250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZl
cikKLXsKLSAgICBGSUxFKiBmID0gZm9wZW4oZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsK
LSAgICBpZiAoIWYpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBm
aWxlOiAlc1xuIiwgZmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgc2l6ZV90IGJ1ZmZl
ckNhcGFjaXR5ID0gMTAyNDsKLQotICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOwot
Ci0gICAgd2hpbGUgKCFmZW9mKGYpICYmICFmZXJyb3IoZikpIHsKLSAgICAgICAgYnVmZmVyU2l6
ZSArPSBmcmVhZChidWZmZXIuZGF0YSgpICsgYnVmZmVyU2l6ZSwgMSwgYnVmZmVyQ2FwYWNpdHkg
LSBidWZmZXJTaXplLCBmKTsKLSAgICAgICAgaWYgKGJ1ZmZlclNpemUgPT0gYnVmZmVyQ2FwYWNp
dHkpIHsgLy8gZ3VhcmFudGVlcyBzcGFjZSBmb3IgdHJhaWxpbmcgJ1wwJwotICAgICAgICAgICAg
YnVmZmVyQ2FwYWNpdHkgKj0gMjsKLSAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2Fw
YWNpdHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGZjbG9zZShmKTsKLSAgICBidWZmZXJbYnVm
ZmVyU2l6ZV0gPSAnXDAnOwotCi0gICAgaWYgKGJ1ZmZlclswXSA9PSAnIycgJiYgYnVmZmVyWzFd
ID09ICchJykKLSAgICAgICAgYnVmZmVyWzBdID0gYnVmZmVyWzFdID0gJy8nOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KICNpZiBPUyhXSU5ET1dTKQogZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRs
bGV4cG9ydCkgaW50IFdJTkFQSSBkbGxMYXVuY2hlckVudHJ5UG9pbnQoaW50IGFyZ2MsIGNvbnN0
IGNoYXIqIGFyZ3ZbXSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9tb2R1bGVzLnlhbWwgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW9kdWxlcy55YW1s
CmluZGV4IDY2ODFlMDZmZTNiMmJlNTkwMDc2ZDEyM2E3NTNkZmNjNWU4YWJkOWUuLmFiNDc4ZjFm
NjQ0OWExMmZlZThkNGM2MWY1MjkwMGI1ZDA4OWM1YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9tb2R1bGVzLnlhbWwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL21vZHVsZXMueWFtbApAQCAtMjIsMTMgKzIyLDQgQEAKICMgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogLSBw
YXRoOiBtb2R1bGVzCi0gIGNtZDogfAotICAgICAgIyBGSVhNRTogRVM2IE1vZHVsZXMgaW4gdGhl
IEpTQyBzaGVsbCBub3cgdXNlcyBhbiBhYnNvbHV0ZSBwYXRoIGFzIGFuIHVuaXF1ZSBrZXkgdG8g
ZWFjaCBtb2R1bGUuCi0gICAgICAjIEhvd2V2ZXIsIHRoZSBsZW5ndGggb2YgdGhlIHBhdGggbmFt
ZSBpbiBXaW5kb3dzIGlzIGxpbWl0ZWQgYW5kIHNob3J0OyAoX01BWF9QQVRIID0gMjYwKS4KLSAg
ICAgICMgQXMgYSByZXN1bHQsIEpTQyB0ZXN0cyBmb3IgbW9kdWxlcyBpbiBXaW5kb3dzIGZhaWwg
YmVjYXVzZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBwYXRoIGlzIHRydW5jYXRlZC4K
LSAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNwot
ICAgICAgaWYgKCRob3N0T1MgPT0gIndpbmRvd3MiKQotICAgICAgICAgIHNraXAKLSAgICAgIGVs
c2UKLSAgICAgICAgICBydW5Nb2R1bGVzCi0gICAgICBlbmQKKyAgY21kOiBydW5Nb2R1bGVzCg==
</data>
<flag name="review"
          id="286099"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="286141"
          type_id="3"
          status="-"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>