<?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>141809</bug_id>
          
          <creation_ts>2015-02-19 13:36:33 -0800</creation_ts>
          <short_desc>[JSObjCClassInfo reallocateConstructorAndOrPrototype] should also reallocate super class prototype chain</short_desc>
          <delta_ts>2015-02-20 13:53:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1070502</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-19 13:36:33 -0800</bug_when>
    <thetext>A ObjC class that implement the JSExport protocol will have a JS prototype chain and constructor automatically synthesized for its JS wrapper object.  However, if there are no more instances of that ObjC class reachable by a GC root scan, then its synthesized prototype chain and constructors may be released by the GC.  If a new instance of that ObjC class is instantiated, then [JSObjCClassInfo reallocateConstructorAndOrPrototype] should re-construct the prototype chain and constructor (if they were released).  However, the current implementation only re-constructs the immediate prototype, but not every other prototype object upstream in the prototype chain.

The fix is to have [JSObjCClassInfo reallocateConstructorAndOrPrototype] recurse and call itself for the super class if the super class&apos; prototype is not initialized (implying that the super class also needs to re-construct its prototype and constructor).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070503</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-19 13:37:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/19679557&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070516</commentid>
    <comment_count>2</comment_count>
      <attachid>246917</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-19 13:53:42 -0800</bug_when>
    <thetext>Created attachment 246917
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070519</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-19 13:56:17 -0800</bug_when>
    <thetext>Attachment 246917 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1436:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1440:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1454:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1468:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070520</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-19 13:57:51 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Attachment 246917 [details] did not pass style-queue:
&gt; ...
&gt; Total errors found: 4 in 3 files

I think the style bot is just not smart enough to understand these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070549</commentid>
    <comment_count>5</comment_count>
      <attachid>246917</attachid>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2015-02-19 16:35:35 -0800</bug_when>
    <thetext>Comment on attachment 246917
the patch.

r=me. I know it&apos;s kind of a PITA, but separating these API tests out into their own files reduces build times and makes it easier to figure out which ones are regressing without the risk of having any dirty state between tests. There&apos;s already a couple larger tests/groups of tests that are separate (e.g. JSExportTests.mm). It might make sense to move this out of the monolithic test function and into one of those smaller groups or maybe its own thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070563</commentid>
    <comment_count>6</comment_count>
      <attachid>246917</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-19 16:54:43 -0800</bug_when>
    <thetext>Comment on attachment 246917
the patch.

I think this patch is fine, but I think it would be even better to make this code less brittle, since we&apos;ve had two very similar serious GC bugs in this code.

Is there a way for -classInfoForClass: to always return a full prototype chain, with callers not needing to check for a null one, and also to remove the need for comments and workarounds regarding GC in this file?

For example: Perhaps we can make -classInfoForClass: always return a fully constructed prototype chain in a stack-allocated smart pointer that defers garbage collection. Or, more simply, perhaps callers of -classInfoForClass: should defer garbage collection, and pass the DeferGC pointer to the method in order to prove they have done so. Or -classInfoForClass: could return a pair of &lt;JSObjCClassInfo*, JSC::Strong&lt;JSObject*&gt;&gt;, where the second value was the prototype that needed protection from GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070566</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-19 17:05:11 -0800</bug_when>
    <thetext>Concrete proposal:

(1) -[JSObjCClassInfo initWithContext:...] drops the superClassInfo parameter, and stops calling -allocateConstructorAndPrototypeWithSuperClassInfo:.

(2) Methods of JSObjcClassInfo -- -wrapperForObject:, and -constructor -- do not use the m_ weak data members, and instead call helpers to access those members.

(3) Helpers allocate object graphs if needed and return a JSObject* for the resulting constructor or prototype chain.

(4) Remove all comments about GC. The GC problem is solved by a GC root, which is how GC problems should be solved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070739</commentid>
    <comment_count>8</comment_count>
      <attachid>246978</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-20 11:27:03 -0800</bug_when>
    <thetext>Created attachment 246978
take 2: with Geoff&apos;s and Mark&apos;s suggestions applied.

In this patch, -prototype: returns a JSC::JSObject* while -constructor: still returns a JSValue* (which is inconsistent).

Technically, -constructor: plus many other methods and static functions can just work with and return JSC::JSObject* instead of JSValue* as well.  They should defer the allocation of the ObjC JSValue* until the latest possible moment.  However, to keep this patch to its bare minimum, I will defer that change to a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070740</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-20 11:28:15 -0800</bug_when>
    <thetext>Attachment 246978 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:85:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:99:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:113:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
Total errors found: 4 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070752</commentid>
    <comment_count>10</comment_count>
      <attachid>246978</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-20 11:40:53 -0800</bug_when>
    <thetext>Comment on attachment 246978
take 2: with Geoff&apos;s and Mark&apos;s suggestions applied.

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

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:529
&gt; +        [self allocateConstructorAndPrototype];
&gt; +        constructor = m_constructor.get();

I think it&apos;s still dangerous to separate the allocate from the load. We want &quot;allocate and load&quot; to be an atomic operation that returns a GC root so that it&apos;s impossible for anyone to write a line of code that allocates, GCs, and then loads, causing a error.

The best way to do this is probably to have allocateConstructorAndPrototype return an std::pair&lt;JSObject*, JSObject*&gt; holding the constructor and prototype.

So you would do:

JSC::JSObject* constructor = m_constructor.get();
if (!constructor)
    constructor = [self allocateConstructorAndPrototype].first;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070786</commentid>
    <comment_count>11</comment_count>
      <attachid>246988</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-20 12:51:11 -0800</bug_when>
    <thetext>Created attachment 246988
take 3: with -allocateConstructorAndPrototype returning a prototype constructor pair</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070789</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-20 12:53:09 -0800</bug_when>
    <thetext>Attachment 246988 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:85:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:99:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:113:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
Total errors found: 4 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070790</commentid>
    <comment_count>13</comment_count>
      <attachid>246988</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-20 12:53:24 -0800</bug_when>
    <thetext>Comment on attachment 246988
take 3: with -allocateConstructorAndPrototype returning a prototype constructor pair

I&apos;m going to swap the order of the constructor and prototype in the pair to be more intuitive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070793</commentid>
    <comment_count>14</comment_count>
      <attachid>246991</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-20 12:59:45 -0800</bug_when>
    <thetext>Created attachment 246991
take 4: with consistent constructor and prototype ordering in pair.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070794</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-20 13:01:29 -0800</bug_when>
    <thetext>Attachment 246991 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:81:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:85:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:99:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/Regress141809.mm:113:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
Total errors found: 4 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070795</commentid>
    <comment_count>16</comment_count>
      <attachid>246991</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-20 13:06:13 -0800</bug_when>
    <thetext>Comment on attachment 246991
take 4: with consistent constructor and prototype ordering in pair.

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

&gt; Source/JavaScriptCore/API/tests/Regress141809.mm:2
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

Eeek.  Should 2015.  Will fix before commit.

Will also update header for testapi.mm to say 2013-2015, because there were also changes in 2014 though the header only said 2013.
Ditto for JSWrapperMap.mm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070804</commentid>
    <comment_count>17</comment_count>
      <attachid>246991</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-20 13:43:25 -0800</bug_when>
    <thetext>Comment on attachment 246991
take 4: with consistent constructor and prototype ordering in pair.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070813</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-02-20 13:53:25 -0800</bug_when>
    <thetext>Thanks for the reviews.  Landed in r180452: &lt;http://trac.webkit.org/r180452&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246917</attachid>
            <date>2015-02-19 13:53:42 -0800</date>
            <delta_ts>2015-02-20 11:27:03 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-141809.patch</filename>
            <type>text/plain</type>
            <size>6569</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwMzY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDE1LTAyLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNPYmpDQ2xhc3NJbmZvIHJlYWxsb2NhdGVDb25zdHJ1Y3RvckFuZE9yUHJvdG90eXBlXSBzaG91
bGQgYWxzbyByZWFsbG9jYXRlIHN1cGVyIGNsYXNzIHByb3RvdHlwZSBjaGFpbi4KKyAgICAgICAg
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MTgwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBIE9iakMgY2xhc3MgdGhhdCBpbXBsZW1lbnQgdGhlIEpT
RXhwb3J0IHByb3RvY29sIHdpbGwgaGF2ZSBhIEpTIHByb3RvdHlwZQorICAgICAgICBjaGFpbiBh
bmQgY29uc3RydWN0b3IgYXV0b21hdGljYWxseSBzeW50aGVzaXplZCBmb3IgaXRzIEpTIHdyYXBw
ZXIgb2JqZWN0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbnN0YW5j
ZXMgb2YgdGhhdCBPYmpDIGNsYXNzIHJlYWNoYWJsZSBieSBhCisgICAgICAgIEpTIEdDIHJvb3Qg
c2NhbiwgdGhlbiBpdHMgc3ludGhlc2l6ZWQgcHJvdG90eXBlIGNoYWluIGFuZCBjb25zdHJ1Y3Rv
cnMgbWF5CisgICAgICAgIGJlIHJlbGVhc2VkIGJ5IHRoZSBHQy4gIElmIGEgbmV3IGluc3RhbmNl
IG9mIHRoYXQgT2JqQyBjbGFzcyBpcyBzdWJzZXF1ZW50bHkKKyAgICAgICAgaW5zdGFudGlhdGVk
LCB0aGVuIFtKU09iakNDbGFzc0luZm8gcmVhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5
cGVdCisgICAgICAgIHNob3VsZCByZS1jb25zdHJ1Y3QgdGhlIHByb3RvdHlwZSBjaGFpbiBhbmQg
Y29uc3RydWN0b3IgKGlmIHRoZXkgd2VyZQorICAgICAgICBwcmV2aW91c2x5IHJlbGVhc2VkKS4g
IEhvd2V2ZXIsIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkKKyAgICAgICAgcmUtY29u
c3RydWN0cyB0aGUgaW1tZWRpYXRlIHByb3RvdHlwZSwgYnV0IG5vdCBldmVyeSBvdGhlciBwcm90
b3R5cGUKKyAgICAgICAgb2JqZWN0IHVwc3RyZWFtIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisK
KyAgICAgICAgVGhlIGZpeCBpcyB0byBoYXZlIFtKU09iakNDbGFzc0luZm8gcmVhbGxvY2F0ZUNv
bnN0cnVjdG9yQW5kT3JQcm90b3R5cGVdCisgICAgICAgIHJlY3Vyc2UgYW5kIGNhbGwgaXRzZWxm
IGZvciB0aGUgc3VwZXIgY2xhc3MgaWYgdGhlIHN1cGVyIGNsYXNzJyBwcm90b3R5cGUKKyAgICAg
ICAgaXMgbm90IGluaXRpYWxpemVkIChpbXBseWluZyB0aGF0IHRoZSBzdXBlciBjbGFzcyBhbHNv
IG5lZWRzIHRvCisgICAgICAgIHJlLWNvbnN0cnVjdCBpdHMgcHJvdG90eXBlIGFuZCBjb25zdHJ1
Y3RvcikuCisKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOgorICAgICAgICAoLVtKU09i
akNDbGFzc0luZm8gcmVhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5cGVdKToKKyAgICAg
ICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKC1bVGVzdENsYXNzQSBuYW1lXSk6
CisgICAgICAgICgtW1Rlc3RDbGFzc0IgbmFtZV0pOgorCiAyMDE1LTAyLTE5ICBCZW5qYW1pbiBQ
b3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmluZSB0aGUgRlRMIHBh
cnQgb2YgQXJpdGhQb3cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVy
TWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVy
TWFwLm1tCShyZXZpc2lvbiAxODAzNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
V3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA1LDcgKzUwNSwxMSBAQCAgICAgICAg
IGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvCiAKIC0gKHZvaWQpcmVhbGxvY2F0ZUNv
bnN0cnVjdG9yQW5kT3JQcm90b3R5cGUKIHsKLSAgICBbc2VsZiBhbGxvY2F0ZUNvbnN0cnVjdG9y
QW5kUHJvdG90eXBlV2l0aFN1cGVyQ2xhc3NJbmZvOlttX2NvbnRleHQud3JhcHBlck1hcCBjbGFz
c0luZm9Gb3JDbGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKG1fY2xhc3MpXV07CisgICAgSlNPYmpD
Q2xhc3NJbmZvKiBzdXBlckNsYXNzSW5mbyA9IFttX2NvbnRleHQud3JhcHBlck1hcCBjbGFzc0lu
Zm9Gb3JDbGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKG1fY2xhc3MpXTsKKyAgICBpZiAoIXN1cGVy
Q2xhc3NJbmZvLT5tX3Byb3RvdHlwZS5nZXQoKSkKKyAgICAgICAgW3N1cGVyQ2xhc3NJbmZvIHJl
YWxsb2NhdGVDb25zdHJ1Y3RvckFuZE9yUHJvdG90eXBlXTsKKworICAgIFtzZWxmIGFsbG9jYXRl
Q29uc3RydWN0b3JBbmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86c3VwZXJDbGFzc0luZm9d
OwogICAgIC8vIFdlIHNob3VsZCBub3QgYWRkIGFueSBjb2RlIGhlcmUgdGhhdCBjYW4gdHJpZ2dl
ciBhIEdDIG9yIHRoZSBwcm90b3R5cGUgYW5kCiAgICAgLy8gY29uc3RydWN0b3IgdGhhdCB3ZSBq
dXN0IGNyZWF0ZWQgbWF5IGJlIGNvbGxlY3RlZCBiZWZvcmUgdGhleSBjYW4gYmUgdXNlZC4KIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlz
aW9uIDE4MDM2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMzggQEAgKyAoTlNTdHJpbmcgKilwYXJlbnRU
ZXN0CiB9CiBAZW5kCiAKKy8vIFRlc3RDbGFzc0EgYW5kIFRlc3RDbGFzc0IgaXMgc2V0IHVwIGp1
c3QgdG8gdGVzdCB0aGUgT2JqQyBBUEkncyBhYmlsaXR5CisvLyB0byByZS1jb25zdHJ1Y3Qgc3lu
dGhlc2l6ZWQgcHJvdG90eXBlcyBhbmQgY29uc3RydWN0b3JzIGFmdGVyIHRoZXkgaGF2ZSBiZWVu
CisvLyByZWxlYXNlZC4KKworQHByb3RvY29sIFRlc3RDbGFzc0FFeHBvcnRzIDxKU0V4cG9ydD4K
Ky0gKE5TU3RyaW5nICopbmFtZTsKK0BlbmQKKworQGludGVyZmFjZSBUZXN0Q2xhc3NBIDogUGFy
ZW50T2JqZWN0IDxUZXN0Q2xhc3NBRXhwb3J0cz4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRl
c3RDbGFzc0EKKy0gKE5TU3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBAIkEiOworfQorQGVu
ZAorCitAcHJvdG9jb2wgVGVzdENsYXNzQkV4cG9ydHMgPEpTRXhwb3J0PgorLSAoTlNTdHJpbmcg
KiluYW1lOworQGVuZAorCitAaW50ZXJmYWNlIFRlc3RDbGFzc0IgOiBUZXN0Q2xhc3NBIDxUZXN0
Q2xhc3NCRXhwb3J0cz4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RDbGFzc0IKKy0gKE5T
U3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBAIkIiOworfQorQGVuZAorCiBAcHJvdG9jb2wg
VGVzdE9iamVjdCA8SlNFeHBvcnQ+CiAtIChpZClpbml0OwogQHByb3BlcnR5IGludCB2YXJpYWJs
ZTsKQEAgLTEzOTcsNiArMTQyOSw2MiBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICAg
ICAgY2hlY2tSZXN1bHQoQCJFZGVuQ29sbGVjdGlvbiBkb2Vzbid0IHJlY2xhaW0gbmV3IG1hbmFn
ZWQgdmFsdWVzIiwgW21hbmFnZWRKU09iamVjdCB2YWx1ZV0gIT0gbmlsKTsKICAgICB9CiAKKyAg
ICAvLyBUZXN0IHRoYXQgdGhlIE9iakMgQVBJIGNhbiBjb3JyZWN0bHkgcmUtY29uc3RydWN0IHRo
ZSBzeW50aGVzaXplZAorICAgIC8vIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3Igb2YgSlMgZXhw
b3J0ZWQgT2JqQyBjbGFzc2VzLgorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIGNvbnRl
eHRbQCJwcmludCJdID0gXihOU1N0cmluZyogc3RyKSB7CisgICAgICAgICAgICBOU0xvZyhAIiVA
Iiwgc3RyKTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiZnVuY3Rpb24gZHVtcFByb3RvdHlwZXMob2JqKSB7IFwKKyAgICAgICAgICAgIHZh
ciBvYmpEZXB0aCA9IDA7IFwKKyAgICAgICAgICAgIHZhciBjdXJyT2JqID0gb2JqOyBcCisgICAg
ICAgICAgICB2YXIgb2JqQ2hhaW4gPSAnJzsgXAorICAgICAgICAgICAgZG8geyBcCisgICAgICAg
ICAgICAgICAgdmFyIHByb3BJbmRleCA9IDA7IFwKKyAgICAgICAgICAgICAgICB2YXIgcHJvcHMg
PSAnJzsgXAorICAgICAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJP
YmopLmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgsIGFycmF5KSB7IFwKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcHMgKz0gKChwcm9wSW5kZXggPiAwID8gJywgJyA6ICcnKSArIHZhbCk7IFwKKyAg
ICAgICAgICAgICAgICAgICAgcHJvcEluZGV4Kys7IFwKKyAgICAgICAgICAgICAgICB9KTsgXAor
ICAgICAgICAgICAgICAgIHZhciBzdHIgPSAnJzsgXAorICAgICAgICAgICAgICAgIGlmICghb2Jq
RGVwdGgpIFwKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdvYmogJzsgXAorICAgICAgICAg
ICAgICAgIGVsc2UgeyBcCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYmpE
ZXB0aDsgaSsrKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnOyBcCisgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSAnLS0+IHByb3RvICc7IFwKKyAgICAgICAgICAgICAgICB9
IFwKKyAgICAgICAgICAgICAgICBzdHIgKz0gY3Vyck9iajsgXAorICAgICAgICAgICAgICAgIGlm
IChwcm9wcykgXAorICAgICAgICAgICAgICAgICAgICBzdHIgKz0gKCcgd2l0aCAnICsgcHJvcElu
ZGV4ICsgJyBwcm9wczogJyArIHByb3BzKTsgXAorICAgICAgICAgICAgICAgIHByaW50KHN0cik7
IFwKKyAgICAgICAgICAgICAgICBvYmpDaGFpbiArPSAoc3RyICsgJ1xcbicpOyBcCisgICAgICAg
ICAgICAgICAgb2JqRGVwdGgrKzsgXAorICAgICAgICAgICAgICAgIGN1cnJPYmogPSBPYmplY3Qu
Z2V0UHJvdG90eXBlT2YoY3Vyck9iaik7IFwKKyAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJPYmop
OyBcCisgICAgICAgICAgICByZXR1cm4geyBvYmpEZXB0aDogb2JqRGVwdGgsIG9iakNoYWluOiBv
YmpDaGFpbiB9OyBcCisgICAgICAgIH0iXTsKKyAgICAgICAgSlNWYWx1ZSogZHVtcFByb3RvdHlw
ZXMgPSBjb250ZXh0W0AiZHVtcFByb3RvdHlwZXMiXTsKKyAgICAgICAgCisgICAgICAgIEpTVmFs
dWUqIHJlc3VsdEJlZm9yZUdDID0gbmlsOworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAg
ICAgICAgICAgIFRlc3RDbGFzc0IqIG9iaiA9IFtbVGVzdENsYXNzQiBhbGxvY10gaW5pdF07Cisg
ICAgICAgICAgICByZXN1bHRCZWZvcmVHQyA9IFtkdW1wUHJvdG90eXBlcyBjYWxsV2l0aEFyZ3Vt
ZW50czpAW29ial1dOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1N5bmNocm9ub3Vz
R2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7
CisgICAgICAgIAorICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIFRlc3RD
bGFzc0IqIG9iaiA9IFtbVGVzdENsYXNzQiBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBKU1Zh
bHVlKiByZXN1bHRBZnRlckdDID0gW2R1bXBQcm90b3R5cGVzIGNhbGxXaXRoQXJndW1lbnRzOkBb
b2JqXV07CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIm9iamVjdCBhbmQgcHJvdG90eXBlIGNo
YWluIGRlcHRoIGlzIDUgZGVlcCIsIFtyZXN1bHRBZnRlckdDW0Aib2JqRGVwdGgiXSB0b0ludDMy
XSA9PSA1KTsKKyAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAib2JqZWN0IGFuZCBwcm90b3R5cGUg
Y2hhaW4gZGVwdGggYmVmb3JlIGFuZCBhZnRlciBHQyBtYXRjaGVzIiwgW3Jlc3VsdEFmdGVyR0Nb
QCJvYmpEZXB0aCJdIHRvSW50MzJdID09IFtyZXN1bHRCZWZvcmVHQ1tAIm9iakRlcHRoIl0gdG9J
bnQzMl0pOworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJvYmplY3QgYW5kIHByb3RvdHlwZSBj
aGFpbiBiZWZvcmUgYW5kIGFmdGVyIEdDIG1hdGNoZXMiLCBbW3Jlc3VsdEFmdGVyR0NbQCJvYmpD
aGFpbiJdIHRvU3RyaW5nXSBpc0VxdWFsVG9TdHJpbmc6W3Jlc3VsdEJlZm9yZUdDW0Aib2JqQ2hh
aW4iXSB0b1N0cmluZ11dKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEBhdXRvcmVsZWFzZXBv
b2wgewogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF07CiAgICAgICAgIAo=
</data>
<flag name="review"
          id="271866"
          type_id="1"
          status="+"
          setter="mhahnenb"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246978</attachid>
            <date>2015-02-20 11:27:03 -0800</date>
            <delta_ts>2015-02-20 12:51:11 -0800</delta_ts>
            <desc>take 2: with Geoff&apos;s and Mark&apos;s suggestions applied.</desc>
            <filename>bug-141809.patch</filename>
            <type>text/plain</type>
            <size>20274</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNDI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE1LTAyLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNPYmpDQ2xhc3NJbmZvIHJlYWxsb2NhdGVDb25zdHJ1Y3RvckFuZE9yUHJvdG90eXBlXSBzaG91
bGQgYWxzbyByZWFsbG9jYXRlIHN1cGVyIGNsYXNzIHByb3RvdHlwZSBjaGFpbi4KKyAgICAgICAg
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MTgwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBIE9iakMgY2xhc3MgdGhhdCBpbXBsZW1lbnQgdGhlIEpT
RXhwb3J0IHByb3RvY29sIHdpbGwgaGF2ZSBhIEpTIHByb3RvdHlwZQorICAgICAgICBjaGFpbiBh
bmQgY29uc3RydWN0b3IgYXV0b21hdGljYWxseSBzeW50aGVzaXplZCBmb3IgaXRzIEpTIHdyYXBw
ZXIgb2JqZWN0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbnN0YW5j
ZXMgb2YgdGhhdCBPYmpDIGNsYXNzIHJlYWNoYWJsZSBieSBhCisgICAgICAgIEpTIEdDIHJvb3Qg
c2NhbiwgdGhlbiBpdHMgc3ludGhlc2l6ZWQgcHJvdG90eXBlIGNoYWluIGFuZCBjb25zdHJ1Y3Rv
cnMgbWF5CisgICAgICAgIGJlIHJlbGVhc2VkIGJ5IHRoZSBHQy4gIElmIGEgbmV3IGluc3RhbmNl
IG9mIHRoYXQgT2JqQyBjbGFzcyBpcyBzdWJzZXF1ZW50bHkKKyAgICAgICAgaW5zdGFudGlhdGVk
LCB0aGVuIFtKU09iakNDbGFzc0luZm8gcmVhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5
cGVdCisgICAgICAgIHNob3VsZCByZS1jb25zdHJ1Y3QgdGhlIHByb3RvdHlwZSBjaGFpbiBhbmQg
Y29uc3RydWN0b3IgKGlmIHRoZXkgd2VyZQorICAgICAgICBwcmV2aW91c2x5IHJlbGVhc2VkKS4g
IEhvd2V2ZXIsIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkKKyAgICAgICAgcmUtY29u
c3RydWN0cyB0aGUgaW1tZWRpYXRlIHByb3RvdHlwZSwgYnV0IG5vdCBldmVyeSBvdGhlciBwcm90
b3R5cGUKKyAgICAgICAgb2JqZWN0IHVwc3RyZWFtIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisK
KyAgICAgICAgVG8gZml4IHRoaXMsIHdlIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDEuIFdl
IG5vIGxvbmdlciBhbGxvY2F0ZSB0aGUgSlNPYmpDQ2xhc3NJbmZvJ3MgcHJvdG90eXBlIGFuZCBj
b25zdHJ1Y3RvcgorICAgICAgICAgICBlYWdlcmx5LiAgSGVuY2UsIC1pbml0V2l0aENvbnRleHQ6
Zm9yQ2xhc3M6IHdpbGwgbm8gbG9uZ2VyIGNhbGwKKyAgICAgICAgICAgLWFsbG9jYXRlQ29uc3Ry
dWN0b3JBbmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86LgorICAgICAgICAyLiBJbnN0ZWFk
LCB3ZSdsbCBhbHdheXMgYWNjZXNzIHRoZSBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIHRocnUK
KyAgICAgICAgICAgYWNjZXNzb3IgbWV0aG9kcy4gIFRoZSBhY2Nlc3NvciBtZXRob2RzIHdpbGwg
Y2FsbAorICAgICAgICAgICAtYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZTogaWYgbmVl
ZGVkLgorICAgICAgICAzLiAtYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZTogd2lsbCBm
ZXRjaCB0aGUgbmVlZGVkIHN1cGVyQ2xhc3NJbmZvCisgICAgICAgICAgIGZyb20gdGhlIEpTV3Jh
cHBlck1hcCBpdHNlbGYuICBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgd2Ugbm8gbG9uZ2VyCisgICAg
ICAgICAgIG5lZWQgdG8gcGFzcyB0aGUgc3VwZXJDbGFzc0luZm8gYWxsIG92ZXIuCisgICAgICAg
IDQuIC1hbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlOiB3aWxsIGdldCB0aGUgc3VwZXIg
Y2xhc3MgcHJvdG90eXBlCisgICAgICAgICAgIGJ5IGludm9raW5nIC1wcm90b3R5cGU6IG9uIHRo
ZSBzdXBlckNsYXNzSW5mbywgdGhlcmVieSBhbGxvd2luZyB0aGUKKyAgICAgICAgICAgc3VwZXIg
Y2xhc3MgdG8gYWxsb2NhdGUgaXRzIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaWYgbmVlZGVk
IGFuZAorICAgICAgICAgICBmaXhpbmcgdGhlIGlzc3VlIGluIHRoaXMgYnVnLgorCisgICAgICAg
IDUuIEFsc28gcmVtb3ZlZCB0aGUgR0Mgd2FybmluZyBjb21tZW50cywgYW5kIGVuc3VyZWQgdGhh
dCBuZWVkZWQgSlMKKyAgICAgICAgICAgb2JqZWN0cyBhcmUga2VwdCBhbGl2ZSBieSBoYXZpbmcg
YSBsb2NhbCB2YXIgcG9pbnRpbmcgdG8gaXQgZnJvbSB0aGUKKyAgICAgICAgICAgc3RhY2sgKHdo
aWNoIG1ha2VzIGEgR0Mgcm9vdCkuCisKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOgor
ICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0OmZvckNsYXNzOl0pOgor
ICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlw
ZV0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gd3JhcHBlckZvck9iamVjdDpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGNvbnN0cnVjdG9yXSk6CisgICAgICAgICgtW0pTT2Jq
Q0NsYXNzSW5mbyBwcm90b3R5cGVdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGNsYXNzSW5m
b0ZvckNsYXNzOl0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0
OmZvckNsYXNzOnN1cGVyQ2xhc3NJbmZvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU09iakND
bGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVdpdGhTdXBlckNsYXNzSW5m
bzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIHJlYWxsb2NhdGVDb25z
dHJ1Y3RvckFuZE9yUHJvdG90eXBlXSk6IERlbGV0ZWQuCisgICAgICAgICogQVBJL3Rlc3RzL1Jl
Z3Jlc3MxNDE4MDkuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDku
bW06IEFkZGVkLgorICAgICAgICAoLVtUZXN0Q2xhc3NCIG5hbWVdKToKKyAgICAgICAgKC1bVGVz
dENsYXNzQyBuYW1lXSk6CisgICAgICAgIChydW5SZWdyZXNzMTQxODA5KToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCiAyMDE1LTAyLTIwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgbmVlZHMgdG8gY2hlY2sgZm9yIHN0YWNrIG92
ZXJmbG93IGF0IHRoZSBzdGFydCBvZiBQcm9ncmFtIGFuZCBFdmFsIGV4ZWN1dGlvbgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDE4MDM2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsMTUgKzM2NCwxNiBAQCBAaW50ZXJmYWNlIEpTT2JqQ0NsYXNzSW5mbyA6
IE5TT2JqZWN0IHsKICAgICBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4gbV9jb25zdHJ1Y3RvcjsK
IH0KIAotLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNz
OihDbGFzcyljbHMgc3VwZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0lu
Zm87CistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZm9yQ2xhc3M6
KENsYXNzKWNsczsKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CiAt
IChKU1ZhbHVlICopY29uc3RydWN0b3I7CistIChKU0M6OkpTT2JqZWN0ICopcHJvdG90eXBlOwog
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBKU09iakNDbGFzc0luZm8KIAotLSAoaWQpaW5pdFdp
dGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNzOihDbGFzcyljbHMgc3VwZXJD
bGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KKy0gKGlkKWluaXRXaXRo
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzCiB7CiAgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCkBAIC0zODcsOCArMzg4LDYgQEAg
LSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZQogICAgIGRlZmluaXRpb24u
Y2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZk
ZWZpbml0aW9uKTsKIAotICAgIFtzZWxmIGFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVX
aXRoU3VwZXJDbGFzc0luZm86c3VwZXJDbGFzc0luZm9dOwotCiAgICAgcmV0dXJuIHNlbGY7CiB9
CiAKQEAgLTQ1MCw4ICs0NDksMTAgQEAgICAgICAgICAgICAgICAgIGluaXRUYWJsZS5zZXQobmFt
ZSwgcHJvdAogICAgIHJldHVybiBjb25zdHJ1Y3RvcldpdGhDdXN0b21CcmFuZChjb250ZXh0LCBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzQ29uc3RydWN0b3IiLCBjbGFzc05hbWVdLCBj
bHMpOwogfQogCi0tICh2b2lkKWFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVXaXRoU3Vw
ZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KKy0gKHZvaWQpYWxs
b2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZQogeworICAgIEpTT2JqQ0NsYXNzSW5mbyogc3Vw
ZXJDbGFzc0luZm8gPSBbbV9jb250ZXh0LndyYXBwZXJNYXAgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xh
c3NfZ2V0U3VwZXJjbGFzcyhtX2NsYXNzKV07CisKICAgICBBU1NFUlQoIW1fY29uc3RydWN0b3Ig
fHwgIW1fcHJvdG90eXBlKTsKICAgICBBU1NFUlQoKG1fY2xhc3MgPT0gW05TT2JqZWN0IGNsYXNz
XSkgPT0gIXN1cGVyQ2xhc3NJbmZvKTsKICAgICBpZiAoIXN1cGVyQ2xhc3NJbmZvKSB7CkBAIC00
NjUsMTEgKzQ2Niw2IEBAIC0gKHZvaWQpYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVcK
ICAgICAgICAgICAgIG1fcHJvdG90eXBlID0gdG9KUyhKU1ZhbHVlVG9PYmplY3QoY0NvbnRleHQs
IHZhbHVlSW50ZXJuYWxWYWx1ZShwcm90b3R5cGUpLCAwKSk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVy
Y2xhc3MgcHJvdG90eXBlIGhlcmUgb24gdGhlIHN0YWNrCi0gICAgICAgIC8vIHRvIHRoYXQgaXQg
d29uJ3QgZ2V0IEdDJ2VkIHdoaWxlIHdlIGRvIGFsbG9jYXRpb25zIGJldHdlZW4gbm93IGFuZCB3
aGVuIHdlCi0gICAgICAgIC8vIHNldCBpdCBpbiB0aGlzIGNsYXNzJyBwcm90b3R5cGUgYmVsb3cu
Ci0gICAgICAgIEpTQzo6SlNPYmplY3QqIHN1cGVyQ2xhc3NQcm90b3R5cGUgPSBzdXBlckNsYXNz
SW5mby0+bV9wcm90b3R5cGUuZ2V0KCk7Ci0KICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1l
ID0gY2xhc3NfZ2V0TmFtZShtX2NsYXNzKTsKIAogICAgICAgICAvLyBDcmVhdGUgb3IgZ3JhYiB0
aGUgcHJvdG90eXBlL2NvbnN0cnVjdG9yIHBhaXIuCkBAIC00OTksMTcgKzQ5NSwxMSBAQCAgICAg
ICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvCiAgICAgICAgIH0pOwogCiAgICAg
ICAgIC8vIFNldCBbUHJvdG90eXBlXS4KKyAgICAgICAgSlNDOjpKU09iamVjdCogc3VwZXJDbGFz
c1Byb3RvdHlwZSA9IFtzdXBlckNsYXNzSW5mbyBwcm90b3R5cGVdOwogICAgICAgICBKU09iamVj
dFNldFByb3RvdHlwZShbbV9jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHRvUmVmKG1fcHJv
dG90eXBlLmdldCgpKSwgdG9SZWYoc3VwZXJDbGFzc1Byb3RvdHlwZSkpOwogICAgIH0KIH0KIAot
LSAodm9pZClyZWFsbG9jYXRlQ29uc3RydWN0b3JBbmRPclByb3RvdHlwZQotewotICAgIFtzZWxm
IGFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86W21fY29u
dGV4dC53cmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xhc3MobV9j
bGFzcyldXTsKLSAgICAvLyBXZSBzaG91bGQgbm90IGFkZCBhbnkgY29kZSBoZXJlIHRoYXQgY2Fu
IHRyaWdnZXIgYSBHQyBvciB0aGUgcHJvdG90eXBlIGFuZAotICAgIC8vIGNvbnN0cnVjdG9yIHRo
YXQgd2UganVzdCBjcmVhdGVkIG1heSBiZSBjb2xsZWN0ZWQgYmVmb3JlIHRoZXkgY2FuIGJlIHVz
ZWQuCi19Ci0KIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3QKIHsKICAg
ICBBU1NFUlQoW29iamVjdCBpc0tpbmRPZkNsYXNzOm1fY2xhc3NdKTsKQEAgLTUyNCwxMiArNTE0
LDcgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKCFtX3Byb3RvdHlwZSkKLSAgICAgICAgW3NlbGYgcmVhbGxvY2F0
ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5cGVdOwotICAgIEFTU0VSVCghIW1fcHJvdG90eXBlKTsK
LSAgICAvLyBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHByb3RvdHlwZSBoZXJl
IG9uIHRoZSBzdGFjayB0byB0aGF0IGl0IHdvbid0Ci0gICAgLy8gZ2V0IEdDJ2VkIHdoaWxlIHdl
IGNyZWF0ZSB0aGUgd3JhcHBlciBiZWxvdy4KLSAgICBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUg
PSBtX3Byb3RvdHlwZS5nZXQoKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUgPSBbc2Vs
ZiBwcm90b3R5cGVdOwogCiAgICAgSlNPYmplY3RSZWYgd3JhcHBlciA9IG1ha2VXcmFwcGVyKFtt
X2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV9jbGFzc1JlZiwgb2JqZWN0KTsKICAgICBK
U09iamVjdFNldFByb3RvdHlwZShbbV9jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHdyYXBw
ZXIsIHRvUmVmKHByb3RvdHlwZSkpOwpAQCAtNTM4LDEzICs1MjMsMjQgQEAgLSAoSlNWYWx1ZSAq
KXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAogCiAtIChKU1ZhbHVlICopY29uc3RydWN0b3IK
IHsKLSAgICBpZiAoIW1fY29uc3RydWN0b3IpCi0gICAgICAgIFtzZWxmIHJlYWxsb2NhdGVDb25z
dHJ1Y3RvckFuZE9yUHJvdG90eXBlXTsKLSAgICBBU1NFUlQoISFtX2NvbnN0cnVjdG9yKTsKLSAg
ICAvLyBJZiB3ZSBuZWVkIHRvIGFkZCBhbnkgY29kZSBoZXJlIGluIHRoZSBmdXR1cmUgdGhhdCBj
YW4gdHJpZ2dlciBhIEdDLCB3ZSBzaG91bGQKLSAgICAvLyBjYWNoZSB0aGUgY29uc3RydWN0b3Ig
cG9pbnRlciBpbiBhIHN0YWNrIGxvY2FsIHZhciBmaXJzdCBzbyB0aGF0IGl0IGlzIHByb3RlY3Rl
ZAotICAgIC8vIGZyb20gdGhlIEdDIHVudGlsIGl0IGdldHMgdXNlZCBiZWxvdy4KLSAgICByZXR1
cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihtX2NvbnN0cnVjdG9yLmdldCgp
KSBpbkNvbnRleHQ6bV9jb250ZXh0XTsKKyAgICBKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9
IG1fY29uc3RydWN0b3IuZ2V0KCk7CisgICAgaWYgKCFjb25zdHJ1Y3RvcikgeworICAgICAgICBb
c2VsZiBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlXTsKKyAgICAgICAgY29uc3RydWN0
b3IgPSBtX2NvbnN0cnVjdG9yLmdldCgpOworICAgICAgICBBU1NFUlQoISFjb25zdHJ1Y3Rvcik7
CisgICAgfQorICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGNv
bnN0cnVjdG9yKSBpbkNvbnRleHQ6bV9jb250ZXh0XTsKK30KKworLSAoSlNDOjpKU09iamVjdCop
cHJvdG90eXBlCit7CisgICAgSlNDOjpKU09iamVjdCogcHJvdG90eXBlID0gbV9wcm90b3R5cGUu
Z2V0KCk7CisgICAgaWYgKCFwcm90b3R5cGUpIHsKKyAgICAgICAgW3NlbGYgYWxsb2NhdGVDb25z
dHJ1Y3RvckFuZFByb3RvdHlwZV07CisgICAgICAgIHByb3RvdHlwZSA9IG1fcHJvdG90eXBlLmdl
dCgpOworICAgICAgICBBU1NFUlQoISFwcm90b3R5cGUpOworICAgIH0KKyAgICByZXR1cm4gcHJv
dG90eXBlOwogfQogCiBAZW5kCkBAIC01OTEsNyArNTg3LDcgQEAgLSAoSlNPYmpDQ2xhc3NJbmZv
KiljbGFzc0luZm9Gb3JDbGFzczooQwogICAgIGlmICgnXycgPT0gKmNsYXNzX2dldE5hbWUoY2xz
KSkKICAgICAgICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9IFtzZWxmIGNsYXNzSW5mb0ZvckNs
YXNzOmNsYXNzX2dldFN1cGVyY2xhc3MoY2xzKV07CiAKLSAgICByZXR1cm4gbV9jbGFzc01hcFtj
bHNdID0gW1tbSlNPYmpDQ2xhc3NJbmZvIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6bV9jb250ZXh0
IGZvckNsYXNzOmNscyBzdXBlckNsYXNzSW5mbzpbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczpjbGFz
c19nZXRTdXBlcmNsYXNzKGNscyldXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIG1fY2xhc3NN
YXBbY2xzXSA9IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5pdFdpdGhDb250ZXh0Om1fY29u
dGV4dCBmb3JDbGFzczpjbHNdIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoSlNWYWx1ZSAqKWpzV3Jh
cHBlckZvck9iamVjdDooaWQpb2JqZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL1JlZ3Jlc3MxNDE4MDkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvUmVncmVzczE0MTgwOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKKyNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAorCit2b2lkIHJ1blJlZ3Jlc3MxNDE4MDkoKTsKKworI2VuZGlmIC8v
IEpTQ19PQkpDX0FQSV9FTkFCTEVECisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvUmVncmVzczE0MTgwOS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDkubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlJlZ3Jlc3MxNDE4MDkuaCIKKworI2ltcG9ydCA8b2JqYy9vYmpjLmg+CisjaW1wb3J0IDxvYmpj
L3J1bnRpbWUuaD4KKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKK2V4dGVybiAiQyIgdm9p
ZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2VkKTsKK2V4dGVy
biAiQyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250
ZXh0UmVmKTsKKworQHByb3RvY29sIFRlc3RDbGFzc0FFeHBvcnRzIDxKU0V4cG9ydD4KK0BlbmQK
KworQGludGVyZmFjZSBUZXN0Q2xhc3NBIDogTlNPYmplY3Q8VGVzdENsYXNzQUV4cG9ydHM+CitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0Q2xhc3NBCitAZW5kCisKK0Bwcm90b2NvbCBUZXN0
Q2xhc3NCRXhwb3J0cyA8SlNFeHBvcnQ+CistIChOU1N0cmluZyAqKW5hbWU7CitAZW5kCisKK0Bp
bnRlcmZhY2UgVGVzdENsYXNzQiA6IFRlc3RDbGFzc0EgPFRlc3RDbGFzc0JFeHBvcnRzPgorQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gVGVzdENsYXNzQgorLSAoTlNTdHJpbmcgKiluYW1lCit7Cisg
ICAgcmV0dXJuIEAiQiI7Cit9CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0Q2xhc3NDRXhwb3J0cyA8
SlNFeHBvcnQ+CistIChOU1N0cmluZyAqKW5hbWU7CitAZW5kCisKK0BpbnRlcmZhY2UgVGVzdENs
YXNzQyA6IFRlc3RDbGFzc0IgPFRlc3RDbGFzc0NFeHBvcnRzPgorQGVuZAorCitAaW1wbGVtZW50
YXRpb24gVGVzdENsYXNzQworLSAoTlNTdHJpbmcgKiluYW1lCit7CisgICAgcmV0dXJuIEAiQyI7
Cit9CitAZW5kCisKK3ZvaWQgcnVuUmVncmVzczE0MTgwOSgpCit7CisgICAgLy8gVGVzdCB0aGF0
IHRoZSBPYmpDIEFQSSBjYW4gY29ycmVjdGx5IHJlLWNvbnN0cnVjdCB0aGUgc3ludGhlc2l6ZWQK
KyAgICAvLyBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIG9mIEpTIGV4cG9ydGVkIE9iakMgY2xh
c3Nlcy4KKyAgICAvLyBTZWUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MTgwOT4KKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOworICAgICAgICBjb250ZXh0W0AicHJpbnQiXSA9IF4oTlNTdHJpbmcqIHN0
cikgeworICAgICAgICAgICAgTlNMb2coQCIlQCIsIHN0cik7CisgICAgICAgIH07CisgICAgICAg
IAorICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImZ1bmN0aW9uIGR1bXBQcm90b3R5
cGVzKG9iaikgeyBcCisgICAgICAgICAgICB2YXIgb2JqRGVwdGggPSAwOyBcCisgICAgICAgICAg
ICB2YXIgY3Vyck9iaiA9IG9iajsgXAorICAgICAgICAgICAgdmFyIG9iakNoYWluID0gJyc7IFwK
KyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIHZhciBwcm9wSW5kZXggPSAwOyBc
CisgICAgICAgICAgICAgICAgdmFyIHByb3BzID0gJyc7IFwKKyAgICAgICAgICAgICAgICBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyT2JqKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4
LCBhcnJheSkgeyBcCisgICAgICAgICAgICAgICAgICAgIHByb3BzICs9ICgocHJvcEluZGV4ID4g
MCA/ICcsICcgOiAnJykgKyB2YWwpOyBcCisgICAgICAgICAgICAgICAgICAgIHByb3BJbmRleCsr
OyBcCisgICAgICAgICAgICAgICAgfSk7IFwKKyAgICAgICAgICAgICAgICB2YXIgc3RyID0gJyc7
IFwKKyAgICAgICAgICAgICAgICBpZiAoIW9iakRlcHRoKSBcCisgICAgICAgICAgICAgICAgICAg
IHN0ciArPSAnb2JqICc7IFwKKyAgICAgICAgICAgICAgICBlbHNlIHsgXAorICAgICAgICAgICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqRGVwdGg7IGkrKykgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9ICcgJzsgXAorICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJy0tPiBw
cm90byAnOyBcCisgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgc3RyICs9IGN1
cnJPYmo7IFwKKyAgICAgICAgICAgICAgICBpZiAocHJvcHMpIFwKKyAgICAgICAgICAgICAgICAg
ICAgc3RyICs9ICgnIHdpdGggJyArIHByb3BJbmRleCArICcgcHJvcHM6ICcgKyBwcm9wcyk7IFwK
KyAgICAgICAgICAgICAgICBwcmludChzdHIpOyBcCisgICAgICAgICAgICAgICAgb2JqQ2hhaW4g
Kz0gKHN0ciArICdcXG4nKTsgXAorICAgICAgICAgICAgICAgIG9iakRlcHRoKys7IFwKKyAgICAg
ICAgICAgICAgICBjdXJyT2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJPYmopOyBcCisg
ICAgICAgICAgICB9IHdoaWxlIChjdXJyT2JqKTsgXAorICAgICAgICAgICAgcmV0dXJuIHsgb2Jq
RGVwdGg6IG9iakRlcHRoLCBvYmpDaGFpbjogb2JqQ2hhaW4gfTsgXAorICAgICAgICB9Il07Cisg
ICAgICAgIEpTVmFsdWUqIGR1bXBQcm90b3R5cGVzID0gY29udGV4dFtAImR1bXBQcm90b3R5cGVz
Il07CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlKiByZXN1bHRCZWZvcmVHQyA9IG5pbDsKKyAg
ICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBUZXN0Q2xhc3NDKiBvYmogPSBb
W1Rlc3RDbGFzc0MgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgcmVzdWx0QmVmb3JlR0MgPSBb
ZHVtcFByb3RvdHlwZXMgY2FsbFdpdGhBcmd1bWVudHM6QFtvYmpdXTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtj
b250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworICAgICAgICAKKyAgICAgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgICAgICBUZXN0Q2xhc3NDKiBvYmogPSBbW1Rlc3RDbGFzc0MgYWxs
b2NdIGluaXRdOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0QWZ0ZXJHQyA9IFtkdW1wUHJv
dG90eXBlcyBjYWxsV2l0aEFyZ3VtZW50czpAW29ial1dOworICAgICAgICAgICAgY2hlY2tSZXN1
bHQoQCJvYmplY3QgYW5kIHByb3RvdHlwZSBjaGFpbiBkZXB0aCBpcyA1IGRlZXAiLCBbcmVzdWx0
QWZ0ZXJHQ1tAIm9iakRlcHRoIl0gdG9JbnQzMl0gPT0gNSk7CisgICAgICAgICAgICBjaGVja1Jl
c3VsdChAIm9iamVjdCBhbmQgcHJvdG90eXBlIGNoYWluIGRlcHRoIGJlZm9yZSBhbmQgYWZ0ZXIg
R0MgbWF0Y2hlcyIsIFtyZXN1bHRBZnRlckdDW0Aib2JqRGVwdGgiXSB0b0ludDMyXSA9PSBbcmVz
dWx0QmVmb3JlR0NbQCJvYmpEZXB0aCJdIHRvSW50MzJdKTsKKyAgICAgICAgICAgIGNoZWNrUmVz
dWx0KEAib2JqZWN0IGFuZCBwcm90b3R5cGUgY2hhaW4gYmVmb3JlIGFuZCBhZnRlciBHQyBtYXRj
aGVzIiwgW1tyZXN1bHRBZnRlckdDW0Aib2JqQ2hhaW4iXSB0b1N0cmluZ10gaXNFcXVhbFRvU3Ry
aW5nOltyZXN1bHRCZWZvcmVHQ1tAIm9iakNoYWluIl0gdG9TdHJpbmddXSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKKyNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMTgwMzY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0ICJDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0
dGVyVGVzdC5oIgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCiAjaW1wb3J0ICJKU0V4cG9ydFRlc3Rz
LmgiCisjaW1wb3J0ICJSZWdyZXNzMTQxODA5LmgiCiAKICNpbXBvcnQgPHB0aHJlYWQuaD4KIApA
QCAtMTQzMSw2ICsxNDMyLDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgY3VycmVu
dFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QoKTsKICAgICBydW5EYXRlVGVzdHMoKTsKICAgICBy
dW5KU0V4cG9ydFRlc3RzKCk7CisgICAgcnVuUmVncmVzczE0MTgwOSgpOwogfQogCiAjZWxzZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MDM2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEyLDYgKzE2MTIsNyBAQAogCQlGRTdCQTYxMDFBMUE3
Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlm
aWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAv
KiBCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUYx
ODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIx
QyAvKiBSZWdyZXNzMTQxODA5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVCNTFGNkIxQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDkubW0g
Ki87IH07CiAJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNThD
MTIxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgKi87IH07CiAJCUZF
QjU4QzE1MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4QzEzMTg3QjhCMTYwMDk4
RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRP
cGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
RDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzQ1LDYgKzMzNDYsOCBAQAogCQlG
RTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha3BvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJQcmltaXRpdmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQjUxRjZBMUE5N0I2ODgwMDFGOTIx
QyAvKiBSZWdyZXNzMTQxODA5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJl
Z3Jlc3MxNDE4MDkuaDsgcGF0aCA9IEFQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNz
MTQxODA5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVncmVz
czE0MTgwOS5tbTsgcGF0aCA9IEFQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5k
bGluZ1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9y
SGFuZGxpbmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjU4QzEz
MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRXJyb3JIYW5kbGluZ1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludE9wY29kZS5oOyBwYXRoID0gbGxp
bnQvTExJbnRPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3MTUsNiAr
MzcxOCw4IEBACiAJCQkJQzI4OEIyREQxOEE1NEQzRTAwN0JFNDBCIC8qIERhdGVUZXN0cy5tbSAq
LywKIAkJCQlDMjE4MUZDMDE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5oICovLAog
CQkJCUMyMTgxRkMxMThBOTQ4RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tICovLAorCQkJ
CUZFQjUxRjZBMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5LmggKi8sCisJCQkJRkVC
NTFGNkIxQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDkubW0gKi8sCiAJCQkJMTQ0MDA1
MTcwQTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAw
QkFGNTlDIC8qIHRlc3RhcGkuYyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyog
dGVzdGFwaS5qcyAqLywKQEAgLTY3MzUsNiArNjc0MCw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJQzI5RUNCMDMxODA0RDBFRDAwRDJDQkI0
IC8qIEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkVCNTFGNkMxQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDkubW0gaW4gU291cmNl
cyAqLywKIAkJCQlDMjAzMjgyMDE5ODE5NzlEMDA4OEI0OTkgLyogQ3VzdG9tR2xvYmFsT2JqZWN0
Q2xhc3NUZXN0LmMgaW4gU291cmNlcyAqLywKIAkJCQlDMjg4QjJERTE4QTU0RDNFMDA3QkU0MEIg
LyogRGF0ZVRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIxODFGQzIxOEE5NDhGQjAwMjVB
MjM1IC8qIEpTRXhwb3J0VGVzdHMubW0gaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246988</attachid>
            <date>2015-02-20 12:51:11 -0800</date>
            <delta_ts>2015-02-20 12:59:45 -0800</delta_ts>
            <desc>take 3: with -allocateConstructorAndPrototype returning a prototype constructor pair</desc>
            <filename>bug-141809.patch</filename>
            <type>text/plain</type>
            <size>20332</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNDI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE1LTAyLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNPYmpDQ2xhc3NJbmZvIHJlYWxsb2NhdGVDb25zdHJ1Y3RvckFuZE9yUHJvdG90eXBlXSBzaG91
bGQgYWxzbyByZWFsbG9jYXRlIHN1cGVyIGNsYXNzIHByb3RvdHlwZSBjaGFpbi4KKyAgICAgICAg
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MTgwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBIE9iakMgY2xhc3MgdGhhdCBpbXBsZW1lbnQgdGhlIEpT
RXhwb3J0IHByb3RvY29sIHdpbGwgaGF2ZSBhIEpTIHByb3RvdHlwZQorICAgICAgICBjaGFpbiBh
bmQgY29uc3RydWN0b3IgYXV0b21hdGljYWxseSBzeW50aGVzaXplZCBmb3IgaXRzIEpTIHdyYXBw
ZXIgb2JqZWN0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbnN0YW5j
ZXMgb2YgdGhhdCBPYmpDIGNsYXNzIHJlYWNoYWJsZSBieSBhCisgICAgICAgIEpTIEdDIHJvb3Qg
c2NhbiwgdGhlbiBpdHMgc3ludGhlc2l6ZWQgcHJvdG90eXBlIGNoYWluIGFuZCBjb25zdHJ1Y3Rv
cnMgbWF5CisgICAgICAgIGJlIHJlbGVhc2VkIGJ5IHRoZSBHQy4gIElmIGEgbmV3IGluc3RhbmNl
IG9mIHRoYXQgT2JqQyBjbGFzcyBpcyBzdWJzZXF1ZW50bHkKKyAgICAgICAgaW5zdGFudGlhdGVk
LCB0aGVuIFtKU09iakNDbGFzc0luZm8gcmVhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5
cGVdCisgICAgICAgIHNob3VsZCByZS1jb25zdHJ1Y3QgdGhlIHByb3RvdHlwZSBjaGFpbiBhbmQg
Y29uc3RydWN0b3IgKGlmIHRoZXkgd2VyZQorICAgICAgICBwcmV2aW91c2x5IHJlbGVhc2VkKS4g
IEhvd2V2ZXIsIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkKKyAgICAgICAgcmUtY29u
c3RydWN0cyB0aGUgaW1tZWRpYXRlIHByb3RvdHlwZSwgYnV0IG5vdCBldmVyeSBvdGhlciBwcm90
b3R5cGUKKyAgICAgICAgb2JqZWN0IHVwc3RyZWFtIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisK
KyAgICAgICAgVG8gZml4IHRoaXMsIHdlIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDEuIFdl
IG5vIGxvbmdlciBhbGxvY2F0ZSB0aGUgSlNPYmpDQ2xhc3NJbmZvJ3MgcHJvdG90eXBlIGFuZCBj
b25zdHJ1Y3RvcgorICAgICAgICAgICBlYWdlcmx5LiAgSGVuY2UsIC1pbml0V2l0aENvbnRleHQ6
Zm9yQ2xhc3M6IHdpbGwgbm8gbG9uZ2VyIGNhbGwKKyAgICAgICAgICAgLWFsbG9jYXRlQ29uc3Ry
dWN0b3JBbmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86LgorICAgICAgICAyLiBJbnN0ZWFk
LCB3ZSdsbCBhbHdheXMgYWNjZXNzIHRoZSBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIHRocnUK
KyAgICAgICAgICAgYWNjZXNzb3IgbWV0aG9kcy4gIFRoZSBhY2Nlc3NvciBtZXRob2RzIHdpbGwg
Y2FsbAorICAgICAgICAgICAtYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZTogaWYgbmVl
ZGVkLgorICAgICAgICAzLiAtYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZTogd2lsbCBm
ZXRjaCB0aGUgbmVlZGVkIHN1cGVyQ2xhc3NJbmZvCisgICAgICAgICAgIGZyb20gdGhlIEpTV3Jh
cHBlck1hcCBpdHNlbGYuICBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgd2Ugbm8gbG9uZ2VyCisgICAg
ICAgICAgIG5lZWQgdG8gcGFzcyB0aGUgc3VwZXJDbGFzc0luZm8gYWxsIG92ZXIuCisgICAgICAg
IDQuIC1hbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlOiB3aWxsIGdldCB0aGUgc3VwZXIg
Y2xhc3MgcHJvdG90eXBlCisgICAgICAgICAgIGJ5IGludm9raW5nIC1wcm90b3R5cGU6IG9uIHRo
ZSBzdXBlckNsYXNzSW5mbywgdGhlcmVieSBhbGxvd2luZyB0aGUKKyAgICAgICAgICAgc3VwZXIg
Y2xhc3MgdG8gYWxsb2NhdGUgaXRzIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaWYgbmVlZGVk
IGFuZAorICAgICAgICAgICBmaXhpbmcgdGhlIGlzc3VlIGluIHRoaXMgYnVnLgorCisgICAgICAg
IDUuIEFsc28gcmVtb3ZlZCB0aGUgR0Mgd2FybmluZyBjb21tZW50cywgYW5kIGVuc3VyZWQgdGhh
dCBuZWVkZWQgSlMKKyAgICAgICAgICAgb2JqZWN0cyBhcmUga2VwdCBhbGl2ZSBieSBoYXZpbmcg
YSBsb2NhbCB2YXIgcG9pbnRpbmcgdG8gaXQgZnJvbSB0aGUKKyAgICAgICAgICAgc3RhY2sgKHdo
aWNoIG1ha2VzIGEgR0Mgcm9vdCkuCisKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOgor
ICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0OmZvckNsYXNzOl0pOgor
ICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlw
ZV0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gd3JhcHBlckZvck9iamVjdDpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGNvbnN0cnVjdG9yXSk6CisgICAgICAgICgtW0pTT2Jq
Q0NsYXNzSW5mbyBwcm90b3R5cGVdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGNsYXNzSW5m
b0ZvckNsYXNzOl0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0
OmZvckNsYXNzOnN1cGVyQ2xhc3NJbmZvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU09iakND
bGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVdpdGhTdXBlckNsYXNzSW5m
bzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIHJlYWxsb2NhdGVDb25z
dHJ1Y3RvckFuZE9yUHJvdG90eXBlXSk6IERlbGV0ZWQuCisgICAgICAgICogQVBJL3Rlc3RzL1Jl
Z3Jlc3MxNDE4MDkuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDku
bW06IEFkZGVkLgorICAgICAgICAoLVtUZXN0Q2xhc3NCIG5hbWVdKToKKyAgICAgICAgKC1bVGVz
dENsYXNzQyBuYW1lXSk6CisgICAgICAgIChydW5SZWdyZXNzMTQxODA5KToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCiAyMDE1LTAyLTIwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgbmVlZHMgdG8gY2hlY2sgZm9yIHN0YWNrIG92
ZXJmbG93IGF0IHRoZSBzdGFydCBvZiBQcm9ncmFtIGFuZCBFdmFsIGV4ZWN1dGlvbgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDE4MDM2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsMTUgKzM2NCwxNiBAQCBAaW50ZXJmYWNlIEpTT2JqQ0NsYXNzSW5mbyA6
IE5TT2JqZWN0IHsKICAgICBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4gbV9jb25zdHJ1Y3RvcjsK
IH0KIAotLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNz
OihDbGFzcyljbHMgc3VwZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0lu
Zm87CistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZm9yQ2xhc3M6
KENsYXNzKWNsczsKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CiAt
IChKU1ZhbHVlICopY29uc3RydWN0b3I7CistIChKU0M6OkpTT2JqZWN0ICopcHJvdG90eXBlOwog
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBKU09iakNDbGFzc0luZm8KIAotLSAoaWQpaW5pdFdp
dGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNzOihDbGFzcyljbHMgc3VwZXJD
bGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KKy0gKGlkKWluaXRXaXRo
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzCiB7CiAgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCkBAIC0zODcsOCArMzg4LDYgQEAg
LSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZQogICAgIGRlZmluaXRpb24u
Y2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZk
ZWZpbml0aW9uKTsKIAotICAgIFtzZWxmIGFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVX
aXRoU3VwZXJDbGFzc0luZm86c3VwZXJDbGFzc0luZm9dOwotCiAgICAgcmV0dXJuIHNlbGY7CiB9
CiAKQEAgLTQ1MCw4ICs0NDksMTIgQEAgICAgICAgICAgICAgICAgIGluaXRUYWJsZS5zZXQobmFt
ZSwgcHJvdAogICAgIHJldHVybiBjb25zdHJ1Y3RvcldpdGhDdXN0b21CcmFuZChjb250ZXh0LCBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzQ29uc3RydWN0b3IiLCBjbGFzc05hbWVdLCBj
bHMpOwogfQogCi0tICh2b2lkKWFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVXaXRoU3Vw
ZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KK3R5cGVkZWYgc3Rk
OjpwYWlyPEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTT2JqZWN0Kj4gUHJvdG90eXBlQ29uc3RydWN0
b3JQYWlyOworCistIChQcm90b3R5cGVDb25zdHJ1Y3RvclBhaXIpYWxsb2NhdGVDb25zdHJ1Y3Rv
ckFuZFByb3RvdHlwZQogeworICAgIEpTT2JqQ0NsYXNzSW5mbyogc3VwZXJDbGFzc0luZm8gPSBb
bV9jb250ZXh0LndyYXBwZXJNYXAgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xhc3NfZ2V0U3VwZXJjbGFz
cyhtX2NsYXNzKV07CisKICAgICBBU1NFUlQoIW1fY29uc3RydWN0b3IgfHwgIW1fcHJvdG90eXBl
KTsKICAgICBBU1NFUlQoKG1fY2xhc3MgPT0gW05TT2JqZWN0IGNsYXNzXSkgPT0gIXN1cGVyQ2xh
c3NJbmZvKTsKICAgICBpZiAoIXN1cGVyQ2xhc3NJbmZvKSB7CkBAIC00NjUsMTEgKzQ2OCw2IEBA
IC0gKHZvaWQpYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVcKICAgICAgICAgICAgIG1f
cHJvdG90eXBlID0gdG9KUyhKU1ZhbHVlVG9PYmplY3QoY0NvbnRleHQsIHZhbHVlSW50ZXJuYWxW
YWx1ZShwcm90b3R5cGUpLCAwKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICAv
LyBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyY2xhc3MgcHJvdG90eXBl
IGhlcmUgb24gdGhlIHN0YWNrCi0gICAgICAgIC8vIHRvIHRoYXQgaXQgd29uJ3QgZ2V0IEdDJ2Vk
IHdoaWxlIHdlIGRvIGFsbG9jYXRpb25zIGJldHdlZW4gbm93IGFuZCB3aGVuIHdlCi0gICAgICAg
IC8vIHNldCBpdCBpbiB0aGlzIGNsYXNzJyBwcm90b3R5cGUgYmVsb3cuCi0gICAgICAgIEpTQzo6
SlNPYmplY3QqIHN1cGVyQ2xhc3NQcm90b3R5cGUgPSBzdXBlckNsYXNzSW5mby0+bV9wcm90b3R5
cGUuZ2V0KCk7Ci0KICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xhc3NfZ2V0TmFt
ZShtX2NsYXNzKTsKIAogICAgICAgICAvLyBDcmVhdGUgb3IgZ3JhYiB0aGUgcHJvdG90eXBlL2Nv
bnN0cnVjdG9yIHBhaXIuCkBAIC00OTksMTUgKzQ5NywxMCBAQCAgICAgICAgIGZvckVhY2hQcm90
b2NvbEltcGxlbWVudGluZ1Byb3RvCiAgICAgICAgIH0pOwogCiAgICAgICAgIC8vIFNldCBbUHJv
dG90eXBlXS4KKyAgICAgICAgSlNDOjpKU09iamVjdCogc3VwZXJDbGFzc1Byb3RvdHlwZSA9IFtz
dXBlckNsYXNzSW5mbyBwcm90b3R5cGVdOwogICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShb
bV9jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHRvUmVmKG1fcHJvdG90eXBlLmdldCgpKSwg
dG9SZWYoc3VwZXJDbGFzc1Byb3RvdHlwZSkpOwogICAgIH0KLX0KLQotLSAodm9pZClyZWFsbG9j
YXRlQ29uc3RydWN0b3JBbmRPclByb3RvdHlwZQotewotICAgIFtzZWxmIGFsbG9jYXRlQ29uc3Ry
dWN0b3JBbmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86W21fY29udGV4dC53cmFwcGVyTWFw
IGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xhc3MobV9jbGFzcyldXTsKLSAgICAv
LyBXZSBzaG91bGQgbm90IGFkZCBhbnkgY29kZSBoZXJlIHRoYXQgY2FuIHRyaWdnZXIgYSBHQyBv
ciB0aGUgcHJvdG90eXBlIGFuZAotICAgIC8vIGNvbnN0cnVjdG9yIHRoYXQgd2UganVzdCBjcmVh
dGVkIG1heSBiZSBjb2xsZWN0ZWQgYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuCisgICAgcmV0dXJu
IFByb3RvdHlwZUNvbnN0cnVjdG9yUGFpcihtX3Byb3RvdHlwZS5nZXQoKSwgbV9jb25zdHJ1Y3Rv
ci5nZXQoKSk7CiB9CiAKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3QK
QEAgLTUyNCwxMiArNTE3LDcgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9i
amVjdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFtX3Byb3RvdHlwZSkKLSAgICAgICAg
W3NlbGYgcmVhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5cGVdOwotICAgIEFTU0VSVCgh
IW1fcHJvdG90eXBlKTsKLSAgICAvLyBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhl
IHByb3RvdHlwZSBoZXJlIG9uIHRoZSBzdGFjayB0byB0aGF0IGl0IHdvbid0Ci0gICAgLy8gZ2V0
IEdDJ2VkIHdoaWxlIHdlIGNyZWF0ZSB0aGUgd3JhcHBlciBiZWxvdy4KLSAgICBKU0M6OkpTT2Jq
ZWN0KiBwcm90b3R5cGUgPSBtX3Byb3RvdHlwZS5nZXQoKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBw
cm90b3R5cGUgPSBbc2VsZiBwcm90b3R5cGVdOwogCiAgICAgSlNPYmplY3RSZWYgd3JhcHBlciA9
IG1ha2VXcmFwcGVyKFttX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV9jbGFzc1JlZiwg
b2JqZWN0KTsKICAgICBKU09iamVjdFNldFByb3RvdHlwZShbbV9jb250ZXh0IEpTR2xvYmFsQ29u
dGV4dFJlZl0sIHdyYXBwZXIsIHRvUmVmKHByb3RvdHlwZSkpOwpAQCAtNTM4LDEzICs1MjYsMjAg
QEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAogCiAtIChKU1ZhbHVl
ICopY29uc3RydWN0b3IKIHsKLSAgICBpZiAoIW1fY29uc3RydWN0b3IpCi0gICAgICAgIFtzZWxm
IHJlYWxsb2NhdGVDb25zdHJ1Y3RvckFuZE9yUHJvdG90eXBlXTsKLSAgICBBU1NFUlQoISFtX2Nv
bnN0cnVjdG9yKTsKLSAgICAvLyBJZiB3ZSBuZWVkIHRvIGFkZCBhbnkgY29kZSBoZXJlIGluIHRo
ZSBmdXR1cmUgdGhhdCBjYW4gdHJpZ2dlciBhIEdDLCB3ZSBzaG91bGQKLSAgICAvLyBjYWNoZSB0
aGUgY29uc3RydWN0b3IgcG9pbnRlciBpbiBhIHN0YWNrIGxvY2FsIHZhciBmaXJzdCBzbyB0aGF0
IGl0IGlzIHByb3RlY3RlZAotICAgIC8vIGZyb20gdGhlIEdDIHVudGlsIGl0IGdldHMgdXNlZCBi
ZWxvdy4KLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihtX2Nv
bnN0cnVjdG9yLmdldCgpKSBpbkNvbnRleHQ6bV9jb250ZXh0XTsKKyAgICBKU0M6OkpTT2JqZWN0
KiBjb25zdHJ1Y3RvciA9IG1fY29uc3RydWN0b3IuZ2V0KCk7CisgICAgaWYgKCFjb25zdHJ1Y3Rv
cikKKyAgICAgICAgY29uc3RydWN0b3IgPSBbc2VsZiBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJv
dG90eXBlXS5zZWNvbmQ7CisgICAgQVNTRVJUKCEhY29uc3RydWN0b3IpOworICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGNvbnN0cnVjdG9yKSBpbkNvbnRleHQ6
bV9jb250ZXh0XTsKK30KKworLSAoSlNDOjpKU09iamVjdCopcHJvdG90eXBlCit7CisgICAgSlND
OjpKU09iamVjdCogcHJvdG90eXBlID0gbV9wcm90b3R5cGUuZ2V0KCk7CisgICAgaWYgKCFwcm90
b3R5cGUpCisgICAgICAgIHByb3RvdHlwZSA9IFtzZWxmIGFsbG9jYXRlQ29uc3RydWN0b3JBbmRQ
cm90b3R5cGVdLmZpcnN0OworICAgIEFTU0VSVCghIXByb3RvdHlwZSk7CisgICAgcmV0dXJuIHBy
b3RvdHlwZTsKIH0KIAogQGVuZApAQCAtNTkxLDcgKzU4Niw3IEBAIC0gKEpTT2JqQ0NsYXNzSW5m
byopY2xhc3NJbmZvRm9yQ2xhc3M6KEMKICAgICBpZiAoJ18nID09ICpjbGFzc19nZXROYW1lKGNs
cykpCiAgICAgICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10gPSBbc2VsZiBjbGFzc0luZm9Gb3JD
bGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKGNscyldOwogCi0gICAgcmV0dXJuIG1fY2xhc3NNYXBb
Y2xzXSA9IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5pdFdpdGhDb250ZXh0Om1fY29udGV4
dCBmb3JDbGFzczpjbHMgc3VwZXJDbGFzc0luZm86W3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xh
c3NfZ2V0U3VwZXJjbGFzcyhjbHMpXV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBtX2NsYXNz
TWFwW2Nsc10gPSBbW1tKU09iakNDbGFzc0luZm8gYWxsb2NdIGluaXRXaXRoQ29udGV4dDptX2Nv
bnRleHQgZm9yQ2xhc3M6Y2xzXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKEpTVmFsdWUgKilqc1dy
YXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy9SZWdyZXNzMTQxODA5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy9SZWdyZXNzMTQxODA5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKKwordm9pZCBydW5SZWdyZXNzMTQxODA5KCk7CisKKyNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL1JlZ3Jlc3MxNDE4MDkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJSZWdyZXNzMTQxODA5LmgiCisKKyNpbXBvcnQgPG9iamMvb2JqYy5oPgorI2ltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitleHRlcm4gIkMiIHZv
aWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBib29sIHBhc3NlZCk7CitleHRl
cm4gIkMiIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29u
dGV4dFJlZik7CisKK0Bwcm90b2NvbCBUZXN0Q2xhc3NBRXhwb3J0cyA8SlNFeHBvcnQ+CitAZW5k
CisKK0BpbnRlcmZhY2UgVGVzdENsYXNzQSA6IE5TT2JqZWN0PFRlc3RDbGFzc0FFeHBvcnRzPgor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdENsYXNzQQorQGVuZAorCitAcHJvdG9jb2wgVGVz
dENsYXNzQkV4cG9ydHMgPEpTRXhwb3J0PgorLSAoTlNTdHJpbmcgKiluYW1lOworQGVuZAorCitA
aW50ZXJmYWNlIFRlc3RDbGFzc0IgOiBUZXN0Q2xhc3NBIDxUZXN0Q2xhc3NCRXhwb3J0cz4KK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RDbGFzc0IKKy0gKE5TU3RyaW5nICopbmFtZQorewor
ICAgIHJldHVybiBAIkIiOworfQorQGVuZAorCitAcHJvdG9jb2wgVGVzdENsYXNzQ0V4cG9ydHMg
PEpTRXhwb3J0PgorLSAoTlNTdHJpbmcgKiluYW1lOworQGVuZAorCitAaW50ZXJmYWNlIFRlc3RD
bGFzc0MgOiBUZXN0Q2xhc3NCIDxUZXN0Q2xhc3NDRXhwb3J0cz4KK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RDbGFzc0MKKy0gKE5TU3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBAIkMi
OworfQorQGVuZAorCit2b2lkIHJ1blJlZ3Jlc3MxNDE4MDkoKQoreworICAgIC8vIFRlc3QgdGhh
dCB0aGUgT2JqQyBBUEkgY2FuIGNvcnJlY3RseSByZS1jb25zdHJ1Y3QgdGhlIHN5bnRoZXNpemVk
CisgICAgLy8gcHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBvZiBKUyBleHBvcnRlZCBPYmpDIGNs
YXNzZXMuCisgICAgLy8gU2VlIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDE4MDk+CisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgY29udGV4dFtAInByaW50Il0gPSBeKE5TU3RyaW5nKiBz
dHIpIHsKKyAgICAgICAgICAgIE5TTG9nKEAiJUAiLCBzdHIpOworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJmdW5jdGlvbiBkdW1wUHJvdG90
eXBlcyhvYmopIHsgXAorICAgICAgICAgICAgdmFyIG9iakRlcHRoID0gMDsgXAorICAgICAgICAg
ICAgdmFyIGN1cnJPYmogPSBvYmo7IFwKKyAgICAgICAgICAgIHZhciBvYmpDaGFpbiA9ICcnOyBc
CisgICAgICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICB2YXIgcHJvcEluZGV4ID0gMDsg
XAorICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9ICcnOyBcCisgICAgICAgICAgICAgICAgT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3Vyck9iaikuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlk
eCwgYXJyYXkpIHsgXAorICAgICAgICAgICAgICAgICAgICBwcm9wcyArPSAoKHByb3BJbmRleCA+
IDAgPyAnLCAnIDogJycpICsgdmFsKTsgXAorICAgICAgICAgICAgICAgICAgICBwcm9wSW5kZXgr
KzsgXAorICAgICAgICAgICAgICAgIH0pOyBcCisgICAgICAgICAgICAgICAgdmFyIHN0ciA9ICcn
OyBcCisgICAgICAgICAgICAgICAgaWYgKCFvYmpEZXB0aCkgXAorICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ29iaiAnOyBcCisgICAgICAgICAgICAgICAgZWxzZSB7IFwKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iakRlcHRoOyBpKyspIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ciArPSAnICc7IFwKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9ICctLT4g
cHJvdG8gJzsgXAorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgIHN0ciArPSBj
dXJyT2JqOyBcCisgICAgICAgICAgICAgICAgaWYgKHByb3BzKSBcCisgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSAoJyB3aXRoICcgKyBwcm9wSW5kZXggKyAnIHByb3BzOiAnICsgcHJvcHMpOyBc
CisgICAgICAgICAgICAgICAgcHJpbnQoc3RyKTsgXAorICAgICAgICAgICAgICAgIG9iakNoYWlu
ICs9IChzdHIgKyAnXFxuJyk7IFwKKyAgICAgICAgICAgICAgICBvYmpEZXB0aCsrOyBcCisgICAg
ICAgICAgICAgICAgY3Vyck9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyT2JqKTsgXAor
ICAgICAgICAgICAgfSB3aGlsZSAoY3Vyck9iaik7IFwKKyAgICAgICAgICAgIHJldHVybiB7IG9i
akRlcHRoOiBvYmpEZXB0aCwgb2JqQ2hhaW46IG9iakNoYWluIH07IFwKKyAgICAgICAgfSJdOwor
ICAgICAgICBKU1ZhbHVlKiBkdW1wUHJvdG90eXBlcyA9IGNvbnRleHRbQCJkdW1wUHJvdG90eXBl
cyJdOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0QmVmb3JlR0MgPSBuaWw7Cisg
ICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAgICAgVGVzdENsYXNzQyogb2JqID0g
W1tUZXN0Q2xhc3NDIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgIHJlc3VsdEJlZm9yZUdDID0g
W2R1bXBQcm90b3R5cGVzIGNhbGxXaXRoQXJndW1lbnRzOkBbb2JqXV07CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhb
Y29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKyAgICAgICAgCisgICAgICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICAgICAgVGVzdENsYXNzQyogb2JqID0gW1tUZXN0Q2xhc3NDIGFs
bG9jXSBpbml0XTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdEFmdGVyR0MgPSBbZHVtcFBy
b3RvdHlwZXMgY2FsbFdpdGhBcmd1bWVudHM6QFtvYmpdXTsKKyAgICAgICAgICAgIGNoZWNrUmVz
dWx0KEAib2JqZWN0IGFuZCBwcm90b3R5cGUgY2hhaW4gZGVwdGggaXMgNSBkZWVwIiwgW3Jlc3Vs
dEFmdGVyR0NbQCJvYmpEZXB0aCJdIHRvSW50MzJdID09IDUpOworICAgICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJvYmplY3QgYW5kIHByb3RvdHlwZSBjaGFpbiBkZXB0aCBiZWZvcmUgYW5kIGFmdGVy
IEdDIG1hdGNoZXMiLCBbcmVzdWx0QWZ0ZXJHQ1tAIm9iakRlcHRoIl0gdG9JbnQzMl0gPT0gW3Jl
c3VsdEJlZm9yZUdDW0Aib2JqRGVwdGgiXSB0b0ludDMyXSk7CisgICAgICAgICAgICBjaGVja1Jl
c3VsdChAIm9iamVjdCBhbmQgcHJvdG90eXBlIGNoYWluIGJlZm9yZSBhbmQgYWZ0ZXIgR0MgbWF0
Y2hlcyIsIFtbcmVzdWx0QWZ0ZXJHQ1tAIm9iakNoYWluIl0gdG9TdHJpbmddIGlzRXF1YWxUb1N0
cmluZzpbcmVzdWx0QmVmb3JlR0NbQCJvYmpDaGFpbiJdIHRvU3RyaW5nXV0pOworICAgICAgICB9
CisgICAgfQorfQorCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9uIDE4MDM2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCAiQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dl
dHRlclRlc3QuaCIKICNpbXBvcnQgIkRhdGVUZXN0cy5oIgogI2ltcG9ydCAiSlNFeHBvcnRUZXN0
cy5oIgorI2ltcG9ydCAiUmVncmVzczE0MTgwOS5oIgogCiAjaW1wb3J0IDxwdGhyZWFkLmg+CiAK
QEAgLTE0MzEsNiArMTQzMiw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIGN1cnJl
bnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0KCk7CiAgICAgcnVuRGF0ZVRlc3RzKCk7CiAgICAg
cnVuSlNFeHBvcnRUZXN0cygpOworICAgIHJ1blJlZ3Jlc3MxNDE4MDkoKTsKIH0KIAogI2Vsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAzNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTYxMiw2ICsxNjEyLDcgQEAKIAkJRkU3QkE2MTAxQTFB
N0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEg
LyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFG
MTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRUI1MUY2QzFBOTdCNjg4MDAxRjky
MUMgLyogUmVncmVzczE0MTgwOS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1t
ICovOyB9OwogCQlGRUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3Bl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4
QzEyMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwogCQlG
RUI1OEMxNTE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUI1OEMxMzE4N0I4QjE2MDA5
OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50
T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0NSw2ICszMzQ2LDggQEAKIAkJ
RkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRp
dmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUI1MUY2QTFBOTdCNjg4MDAxRjky
MUMgLyogUmVncmVzczE0MTgwOS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBS
ZWdyZXNzMTQxODA5Lmg7IHBhdGggPSBBUEkvdGVzdHMvUmVncmVzczE0MTgwOS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRUI1MUY2QjFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVz
czE0MTgwOS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJlZ3Jl
c3MxNDE4MDkubW07IHBhdGggPSBBUEkvdGVzdHMvUmVncmVzczE0MTgwOS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNThDMTIxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFu
ZGxpbmdTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJv
ckhhbmRsaW5nU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMx
MzE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9ySGFuZGxpbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRPcGNvZGUuaDsgcGF0aCA9IGxs
aW50L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzE1LDYg
KzM3MTgsOCBAQAogCQkJCUMyODhCMkREMThBNTREM0UwMDdCRTQwQiAvKiBEYXRlVGVzdHMubW0g
Ki8sCiAJCQkJQzIxODFGQzAxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMuaCAqLywK
IAkJCQlDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLywKKwkJ
CQlGRUI1MUY2QTFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5oICovLAorCQkJCUZF
QjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tICovLAogCQkJCTE0NDAw
NTE3MEE1MzFDQjUwMDA1RjA2MSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1QTJEMEEzRTkxRjYw
MEJBRjU5QyAvKiB0ZXN0YXBpLmMgKi8sCiAJCQkJMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8q
IHRlc3RhcGkuanMgKi8sCkBAIC02NzM1LDYgKzY3NDAsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUMyOUVDQjAzMTgwNEQwRUQwMEQyQ0JC
NCAvKiBDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzIwMzI4MjAxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2JhbE9iamVj
dENsYXNzVGVzdC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI4OEIyREUxOEE1NEQzRTAwN0JFNDBC
IC8qIERhdGVUZXN0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMyMTgxRkMyMThBOTQ4RkIwMDI1
QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="271934"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246991</attachid>
            <date>2015-02-20 12:59:45 -0800</date>
            <delta_ts>2015-02-20 13:43:25 -0800</delta_ts>
            <desc>take 4: with consistent constructor and prototype ordering in pair.</desc>
            <filename>bug-141809.patch</filename>
            <type>text/plain</type>
            <size>20332</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNDI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE1LTAyLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNPYmpDQ2xhc3NJbmZvIHJlYWxsb2NhdGVDb25zdHJ1Y3RvckFuZE9yUHJvdG90eXBlXSBzaG91
bGQgYWxzbyByZWFsbG9jYXRlIHN1cGVyIGNsYXNzIHByb3RvdHlwZSBjaGFpbi4KKyAgICAgICAg
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MTgwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBIE9iakMgY2xhc3MgdGhhdCBpbXBsZW1lbnQgdGhlIEpT
RXhwb3J0IHByb3RvY29sIHdpbGwgaGF2ZSBhIEpTIHByb3RvdHlwZQorICAgICAgICBjaGFpbiBh
bmQgY29uc3RydWN0b3IgYXV0b21hdGljYWxseSBzeW50aGVzaXplZCBmb3IgaXRzIEpTIHdyYXBw
ZXIgb2JqZWN0LgorICAgICAgICBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbnN0YW5j
ZXMgb2YgdGhhdCBPYmpDIGNsYXNzIHJlYWNoYWJsZSBieSBhCisgICAgICAgIEpTIEdDIHJvb3Qg
c2NhbiwgdGhlbiBpdHMgc3ludGhlc2l6ZWQgcHJvdG90eXBlIGNoYWluIGFuZCBjb25zdHJ1Y3Rv
cnMgbWF5CisgICAgICAgIGJlIHJlbGVhc2VkIGJ5IHRoZSBHQy4gIElmIGEgbmV3IGluc3RhbmNl
IG9mIHRoYXQgT2JqQyBjbGFzcyBpcyBzdWJzZXF1ZW50bHkKKyAgICAgICAgaW5zdGFudGlhdGVk
LCB0aGVuIFtKU09iakNDbGFzc0luZm8gcmVhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5
cGVdCisgICAgICAgIHNob3VsZCByZS1jb25zdHJ1Y3QgdGhlIHByb3RvdHlwZSBjaGFpbiBhbmQg
Y29uc3RydWN0b3IgKGlmIHRoZXkgd2VyZQorICAgICAgICBwcmV2aW91c2x5IHJlbGVhc2VkKS4g
IEhvd2V2ZXIsIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkKKyAgICAgICAgcmUtY29u
c3RydWN0cyB0aGUgaW1tZWRpYXRlIHByb3RvdHlwZSwgYnV0IG5vdCBldmVyeSBvdGhlciBwcm90
b3R5cGUKKyAgICAgICAgb2JqZWN0IHVwc3RyZWFtIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisK
KyAgICAgICAgVG8gZml4IHRoaXMsIHdlIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDEuIFdl
IG5vIGxvbmdlciBhbGxvY2F0ZSB0aGUgSlNPYmpDQ2xhc3NJbmZvJ3MgcHJvdG90eXBlIGFuZCBj
b25zdHJ1Y3RvcgorICAgICAgICAgICBlYWdlcmx5LiAgSGVuY2UsIC1pbml0V2l0aENvbnRleHQ6
Zm9yQ2xhc3M6IHdpbGwgbm8gbG9uZ2VyIGNhbGwKKyAgICAgICAgICAgLWFsbG9jYXRlQ29uc3Ry
dWN0b3JBbmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86LgorICAgICAgICAyLiBJbnN0ZWFk
LCB3ZSdsbCBhbHdheXMgYWNjZXNzIHRoZSBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIHRocnUK
KyAgICAgICAgICAgYWNjZXNzb3IgbWV0aG9kcy4gIFRoZSBhY2Nlc3NvciBtZXRob2RzIHdpbGwg
Y2FsbAorICAgICAgICAgICAtYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZTogaWYgbmVl
ZGVkLgorICAgICAgICAzLiAtYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZTogd2lsbCBm
ZXRjaCB0aGUgbmVlZGVkIHN1cGVyQ2xhc3NJbmZvCisgICAgICAgICAgIGZyb20gdGhlIEpTV3Jh
cHBlck1hcCBpdHNlbGYuICBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgd2Ugbm8gbG9uZ2VyCisgICAg
ICAgICAgIG5lZWQgdG8gcGFzcyB0aGUgc3VwZXJDbGFzc0luZm8gYWxsIG92ZXIuCisgICAgICAg
IDQuIC1hbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlOiB3aWxsIGdldCB0aGUgc3VwZXIg
Y2xhc3MgcHJvdG90eXBlCisgICAgICAgICAgIGJ5IGludm9raW5nIC1wcm90b3R5cGU6IG9uIHRo
ZSBzdXBlckNsYXNzSW5mbywgdGhlcmVieSBhbGxvd2luZyB0aGUKKyAgICAgICAgICAgc3VwZXIg
Y2xhc3MgdG8gYWxsb2NhdGUgaXRzIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaWYgbmVlZGVk
IGFuZAorICAgICAgICAgICBmaXhpbmcgdGhlIGlzc3VlIGluIHRoaXMgYnVnLgorCisgICAgICAg
IDUuIEFsc28gcmVtb3ZlZCB0aGUgR0Mgd2FybmluZyBjb21tZW50cywgYW5kIGVuc3VyZWQgdGhh
dCBuZWVkZWQgSlMKKyAgICAgICAgICAgb2JqZWN0cyBhcmUga2VwdCBhbGl2ZSBieSBoYXZpbmcg
YSBsb2NhbCB2YXIgcG9pbnRpbmcgdG8gaXQgZnJvbSB0aGUKKyAgICAgICAgICAgc3RhY2sgKHdo
aWNoIG1ha2VzIGEgR0Mgcm9vdCkuCisKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOgor
ICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0OmZvckNsYXNzOl0pOgor
ICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlw
ZV0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gd3JhcHBlckZvck9iamVjdDpdKToKKyAg
ICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGNvbnN0cnVjdG9yXSk6CisgICAgICAgICgtW0pTT2Jq
Q0NsYXNzSW5mbyBwcm90b3R5cGVdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGNsYXNzSW5m
b0ZvckNsYXNzOl0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0
OmZvckNsYXNzOnN1cGVyQ2xhc3NJbmZvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU09iakND
bGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVdpdGhTdXBlckNsYXNzSW5m
bzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIHJlYWxsb2NhdGVDb25z
dHJ1Y3RvckFuZE9yUHJvdG90eXBlXSk6IERlbGV0ZWQuCisgICAgICAgICogQVBJL3Rlc3RzL1Jl
Z3Jlc3MxNDE4MDkuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDku
bW06IEFkZGVkLgorICAgICAgICAoLVtUZXN0Q2xhc3NCIG5hbWVdKToKKyAgICAgICAgKC1bVGVz
dENsYXNzQyBuYW1lXSk6CisgICAgICAgIChydW5SZWdyZXNzMTQxODA5KToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCiAyMDE1LTAyLTIwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgbmVlZHMgdG8gY2hlY2sgZm9yIHN0YWNrIG92
ZXJmbG93IGF0IHRoZSBzdGFydCBvZiBQcm9ncmFtIGFuZCBFdmFsIGV4ZWN1dGlvbgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDE4MDM2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjQsMTUgKzM2NCwxNiBAQCBAaW50ZXJmYWNlIEpTT2JqQ0NsYXNzSW5mbyA6
IE5TT2JqZWN0IHsKICAgICBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4gbV9jb25zdHJ1Y3RvcjsK
IH0KIAotLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNz
OihDbGFzcyljbHMgc3VwZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0lu
Zm87CistIChpZClpbml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZm9yQ2xhc3M6
KENsYXNzKWNsczsKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Q7CiAt
IChKU1ZhbHVlICopY29uc3RydWN0b3I7CistIChKU0M6OkpTT2JqZWN0ICopcHJvdG90eXBlOwog
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBKU09iakNDbGFzc0luZm8KIAotLSAoaWQpaW5pdFdp
dGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNzOihDbGFzcyljbHMgc3VwZXJD
bGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KKy0gKGlkKWluaXRXaXRo
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzCiB7CiAgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCkBAIC0zODcsOCArMzg4LDYgQEAg
LSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZQogICAgIGRlZmluaXRpb24u
Y2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZk
ZWZpbml0aW9uKTsKIAotICAgIFtzZWxmIGFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVX
aXRoU3VwZXJDbGFzc0luZm86c3VwZXJDbGFzc0luZm9dOwotCiAgICAgcmV0dXJuIHNlbGY7CiB9
CiAKQEAgLTQ1MCw4ICs0NDksMTIgQEAgICAgICAgICAgICAgICAgIGluaXRUYWJsZS5zZXQobmFt
ZSwgcHJvdAogICAgIHJldHVybiBjb25zdHJ1Y3RvcldpdGhDdXN0b21CcmFuZChjb250ZXh0LCBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzQ29uc3RydWN0b3IiLCBjbGFzc05hbWVdLCBj
bHMpOwogfQogCi0tICh2b2lkKWFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVXaXRoU3Vw
ZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8KK3R5cGVkZWYgc3Rk
OjpwYWlyPEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTT2JqZWN0Kj4gQ29uc3RydWN0b3JQcm90b3R5
cGVQYWlyOworCistIChDb25zdHJ1Y3RvclByb3RvdHlwZVBhaXIpYWxsb2NhdGVDb25zdHJ1Y3Rv
ckFuZFByb3RvdHlwZQogeworICAgIEpTT2JqQ0NsYXNzSW5mbyogc3VwZXJDbGFzc0luZm8gPSBb
bV9jb250ZXh0LndyYXBwZXJNYXAgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xhc3NfZ2V0U3VwZXJjbGFz
cyhtX2NsYXNzKV07CisKICAgICBBU1NFUlQoIW1fY29uc3RydWN0b3IgfHwgIW1fcHJvdG90eXBl
KTsKICAgICBBU1NFUlQoKG1fY2xhc3MgPT0gW05TT2JqZWN0IGNsYXNzXSkgPT0gIXN1cGVyQ2xh
c3NJbmZvKTsKICAgICBpZiAoIXN1cGVyQ2xhc3NJbmZvKSB7CkBAIC00NjUsMTEgKzQ2OCw2IEBA
IC0gKHZvaWQpYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVcKICAgICAgICAgICAgIG1f
cHJvdG90eXBlID0gdG9KUyhKU1ZhbHVlVG9PYmplY3QoY0NvbnRleHQsIHZhbHVlSW50ZXJuYWxW
YWx1ZShwcm90b3R5cGUpLCAwKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICAv
LyBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyY2xhc3MgcHJvdG90eXBl
IGhlcmUgb24gdGhlIHN0YWNrCi0gICAgICAgIC8vIHRvIHRoYXQgaXQgd29uJ3QgZ2V0IEdDJ2Vk
IHdoaWxlIHdlIGRvIGFsbG9jYXRpb25zIGJldHdlZW4gbm93IGFuZCB3aGVuIHdlCi0gICAgICAg
IC8vIHNldCBpdCBpbiB0aGlzIGNsYXNzJyBwcm90b3R5cGUgYmVsb3cuCi0gICAgICAgIEpTQzo6
SlNPYmplY3QqIHN1cGVyQ2xhc3NQcm90b3R5cGUgPSBzdXBlckNsYXNzSW5mby0+bV9wcm90b3R5
cGUuZ2V0KCk7Ci0KICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xhc3NfZ2V0TmFt
ZShtX2NsYXNzKTsKIAogICAgICAgICAvLyBDcmVhdGUgb3IgZ3JhYiB0aGUgcHJvdG90eXBlL2Nv
bnN0cnVjdG9yIHBhaXIuCkBAIC00OTksMTUgKzQ5NywxMCBAQCAgICAgICAgIGZvckVhY2hQcm90
b2NvbEltcGxlbWVudGluZ1Byb3RvCiAgICAgICAgIH0pOwogCiAgICAgICAgIC8vIFNldCBbUHJv
dG90eXBlXS4KKyAgICAgICAgSlNDOjpKU09iamVjdCogc3VwZXJDbGFzc1Byb3RvdHlwZSA9IFtz
dXBlckNsYXNzSW5mbyBwcm90b3R5cGVdOwogICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShb
bV9jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHRvUmVmKG1fcHJvdG90eXBlLmdldCgpKSwg
dG9SZWYoc3VwZXJDbGFzc1Byb3RvdHlwZSkpOwogICAgIH0KLX0KLQotLSAodm9pZClyZWFsbG9j
YXRlQ29uc3RydWN0b3JBbmRPclByb3RvdHlwZQotewotICAgIFtzZWxmIGFsbG9jYXRlQ29uc3Ry
dWN0b3JBbmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86W21fY29udGV4dC53cmFwcGVyTWFw
IGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xhc3MobV9jbGFzcyldXTsKLSAgICAv
LyBXZSBzaG91bGQgbm90IGFkZCBhbnkgY29kZSBoZXJlIHRoYXQgY2FuIHRyaWdnZXIgYSBHQyBv
ciB0aGUgcHJvdG90eXBlIGFuZAotICAgIC8vIGNvbnN0cnVjdG9yIHRoYXQgd2UganVzdCBjcmVh
dGVkIG1heSBiZSBjb2xsZWN0ZWQgYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuCisgICAgcmV0dXJu
IENvbnN0cnVjdG9yUHJvdG90eXBlUGFpcihtX2NvbnN0cnVjdG9yLmdldCgpLCBtX3Byb3RvdHlw
ZS5nZXQoKSk7CiB9CiAKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3QK
QEAgLTUyNCwxMiArNTE3LDcgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9i
amVjdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFtX3Byb3RvdHlwZSkKLSAgICAgICAg
W3NlbGYgcmVhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kT3JQcm90b3R5cGVdOwotICAgIEFTU0VSVCgh
IW1fcHJvdG90eXBlKTsKLSAgICAvLyBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhl
IHByb3RvdHlwZSBoZXJlIG9uIHRoZSBzdGFjayB0byB0aGF0IGl0IHdvbid0Ci0gICAgLy8gZ2V0
IEdDJ2VkIHdoaWxlIHdlIGNyZWF0ZSB0aGUgd3JhcHBlciBiZWxvdy4KLSAgICBKU0M6OkpTT2Jq
ZWN0KiBwcm90b3R5cGUgPSBtX3Byb3RvdHlwZS5nZXQoKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBw
cm90b3R5cGUgPSBbc2VsZiBwcm90b3R5cGVdOwogCiAgICAgSlNPYmplY3RSZWYgd3JhcHBlciA9
IG1ha2VXcmFwcGVyKFttX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV9jbGFzc1JlZiwg
b2JqZWN0KTsKICAgICBKU09iamVjdFNldFByb3RvdHlwZShbbV9jb250ZXh0IEpTR2xvYmFsQ29u
dGV4dFJlZl0sIHdyYXBwZXIsIHRvUmVmKHByb3RvdHlwZSkpOwpAQCAtNTM4LDEzICs1MjYsMjAg
QEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAogCiAtIChKU1ZhbHVl
ICopY29uc3RydWN0b3IKIHsKLSAgICBpZiAoIW1fY29uc3RydWN0b3IpCi0gICAgICAgIFtzZWxm
IHJlYWxsb2NhdGVDb25zdHJ1Y3RvckFuZE9yUHJvdG90eXBlXTsKLSAgICBBU1NFUlQoISFtX2Nv
bnN0cnVjdG9yKTsKLSAgICAvLyBJZiB3ZSBuZWVkIHRvIGFkZCBhbnkgY29kZSBoZXJlIGluIHRo
ZSBmdXR1cmUgdGhhdCBjYW4gdHJpZ2dlciBhIEdDLCB3ZSBzaG91bGQKLSAgICAvLyBjYWNoZSB0
aGUgY29uc3RydWN0b3IgcG9pbnRlciBpbiBhIHN0YWNrIGxvY2FsIHZhciBmaXJzdCBzbyB0aGF0
IGl0IGlzIHByb3RlY3RlZAotICAgIC8vIGZyb20gdGhlIEdDIHVudGlsIGl0IGdldHMgdXNlZCBi
ZWxvdy4KLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihtX2Nv
bnN0cnVjdG9yLmdldCgpKSBpbkNvbnRleHQ6bV9jb250ZXh0XTsKKyAgICBKU0M6OkpTT2JqZWN0
KiBjb25zdHJ1Y3RvciA9IG1fY29uc3RydWN0b3IuZ2V0KCk7CisgICAgaWYgKCFjb25zdHJ1Y3Rv
cikKKyAgICAgICAgY29uc3RydWN0b3IgPSBbc2VsZiBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJv
dG90eXBlXS5maXJzdDsKKyAgICBBU1NFUlQoISFjb25zdHJ1Y3Rvcik7CisgICAgcmV0dXJuIFtK
U1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoY29uc3RydWN0b3IpIGluQ29udGV4dDpt
X2NvbnRleHRdOworfQorCistIChKU0M6OkpTT2JqZWN0Kilwcm90b3R5cGUKK3sKKyAgICBKU0M6
OkpTT2JqZWN0KiBwcm90b3R5cGUgPSBtX3Byb3RvdHlwZS5nZXQoKTsKKyAgICBpZiAoIXByb3Rv
dHlwZSkKKyAgICAgICAgcHJvdG90eXBlID0gW3NlbGYgYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFBy
b3RvdHlwZV0uc2Vjb25kOworICAgIEFTU0VSVCghIXByb3RvdHlwZSk7CisgICAgcmV0dXJuIHBy
b3RvdHlwZTsKIH0KIAogQGVuZApAQCAtNTkxLDcgKzU4Niw3IEBAIC0gKEpTT2JqQ0NsYXNzSW5m
byopY2xhc3NJbmZvRm9yQ2xhc3M6KEMKICAgICBpZiAoJ18nID09ICpjbGFzc19nZXROYW1lKGNs
cykpCiAgICAgICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10gPSBbc2VsZiBjbGFzc0luZm9Gb3JD
bGFzczpjbGFzc19nZXRTdXBlcmNsYXNzKGNscyldOwogCi0gICAgcmV0dXJuIG1fY2xhc3NNYXBb
Y2xzXSA9IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10gaW5pdFdpdGhDb250ZXh0Om1fY29udGV4
dCBmb3JDbGFzczpjbHMgc3VwZXJDbGFzc0luZm86W3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xh
c3NfZ2V0U3VwZXJjbGFzcyhjbHMpXV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBtX2NsYXNz
TWFwW2Nsc10gPSBbW1tKU09iakNDbGFzc0luZm8gYWxsb2NdIGluaXRXaXRoQ29udGV4dDptX2Nv
bnRleHQgZm9yQ2xhc3M6Y2xzXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKEpTVmFsdWUgKilqc1dy
YXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy9SZWdyZXNzMTQxODA5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy9SZWdyZXNzMTQxODA5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorCisjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKKwordm9pZCBydW5SZWdyZXNzMTQxODA5KCk7CisKKyNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL1JlZ3Jlc3MxNDE4MDkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJSZWdyZXNzMTQxODA5LmgiCisKKyNpbXBvcnQgPG9iamMvb2JqYy5oPgorI2ltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitleHRlcm4gIkMiIHZv
aWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBib29sIHBhc3NlZCk7CitleHRl
cm4gIkMiIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29u
dGV4dFJlZik7CisKK0Bwcm90b2NvbCBUZXN0Q2xhc3NBRXhwb3J0cyA8SlNFeHBvcnQ+CitAZW5k
CisKK0BpbnRlcmZhY2UgVGVzdENsYXNzQSA6IE5TT2JqZWN0PFRlc3RDbGFzc0FFeHBvcnRzPgor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdENsYXNzQQorQGVuZAorCitAcHJvdG9jb2wgVGVz
dENsYXNzQkV4cG9ydHMgPEpTRXhwb3J0PgorLSAoTlNTdHJpbmcgKiluYW1lOworQGVuZAorCitA
aW50ZXJmYWNlIFRlc3RDbGFzc0IgOiBUZXN0Q2xhc3NBIDxUZXN0Q2xhc3NCRXhwb3J0cz4KK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RDbGFzc0IKKy0gKE5TU3RyaW5nICopbmFtZQorewor
ICAgIHJldHVybiBAIkIiOworfQorQGVuZAorCitAcHJvdG9jb2wgVGVzdENsYXNzQ0V4cG9ydHMg
PEpTRXhwb3J0PgorLSAoTlNTdHJpbmcgKiluYW1lOworQGVuZAorCitAaW50ZXJmYWNlIFRlc3RD
bGFzc0MgOiBUZXN0Q2xhc3NCIDxUZXN0Q2xhc3NDRXhwb3J0cz4KK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RDbGFzc0MKKy0gKE5TU3RyaW5nICopbmFtZQoreworICAgIHJldHVybiBAIkMi
OworfQorQGVuZAorCit2b2lkIHJ1blJlZ3Jlc3MxNDE4MDkoKQoreworICAgIC8vIFRlc3QgdGhh
dCB0aGUgT2JqQyBBUEkgY2FuIGNvcnJlY3RseSByZS1jb25zdHJ1Y3QgdGhlIHN5bnRoZXNpemVk
CisgICAgLy8gcHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBvZiBKUyBleHBvcnRlZCBPYmpDIGNs
YXNzZXMuCisgICAgLy8gU2VlIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDE4MDk+CisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgY29udGV4dFtAInByaW50Il0gPSBeKE5TU3RyaW5nKiBz
dHIpIHsKKyAgICAgICAgICAgIE5TTG9nKEAiJUAiLCBzdHIpOworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJmdW5jdGlvbiBkdW1wUHJvdG90
eXBlcyhvYmopIHsgXAorICAgICAgICAgICAgdmFyIG9iakRlcHRoID0gMDsgXAorICAgICAgICAg
ICAgdmFyIGN1cnJPYmogPSBvYmo7IFwKKyAgICAgICAgICAgIHZhciBvYmpDaGFpbiA9ICcnOyBc
CisgICAgICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICB2YXIgcHJvcEluZGV4ID0gMDsg
XAorICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9ICcnOyBcCisgICAgICAgICAgICAgICAgT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3Vyck9iaikuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlk
eCwgYXJyYXkpIHsgXAorICAgICAgICAgICAgICAgICAgICBwcm9wcyArPSAoKHByb3BJbmRleCA+
IDAgPyAnLCAnIDogJycpICsgdmFsKTsgXAorICAgICAgICAgICAgICAgICAgICBwcm9wSW5kZXgr
KzsgXAorICAgICAgICAgICAgICAgIH0pOyBcCisgICAgICAgICAgICAgICAgdmFyIHN0ciA9ICcn
OyBcCisgICAgICAgICAgICAgICAgaWYgKCFvYmpEZXB0aCkgXAorICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ29iaiAnOyBcCisgICAgICAgICAgICAgICAgZWxzZSB7IFwKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iakRlcHRoOyBpKyspIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ciArPSAnICc7IFwKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9ICctLT4g
cHJvdG8gJzsgXAorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICAgIHN0ciArPSBj
dXJyT2JqOyBcCisgICAgICAgICAgICAgICAgaWYgKHByb3BzKSBcCisgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSAoJyB3aXRoICcgKyBwcm9wSW5kZXggKyAnIHByb3BzOiAnICsgcHJvcHMpOyBc
CisgICAgICAgICAgICAgICAgcHJpbnQoc3RyKTsgXAorICAgICAgICAgICAgICAgIG9iakNoYWlu
ICs9IChzdHIgKyAnXFxuJyk7IFwKKyAgICAgICAgICAgICAgICBvYmpEZXB0aCsrOyBcCisgICAg
ICAgICAgICAgICAgY3Vyck9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyT2JqKTsgXAor
ICAgICAgICAgICAgfSB3aGlsZSAoY3Vyck9iaik7IFwKKyAgICAgICAgICAgIHJldHVybiB7IG9i
akRlcHRoOiBvYmpEZXB0aCwgb2JqQ2hhaW46IG9iakNoYWluIH07IFwKKyAgICAgICAgfSJdOwor
ICAgICAgICBKU1ZhbHVlKiBkdW1wUHJvdG90eXBlcyA9IGNvbnRleHRbQCJkdW1wUHJvdG90eXBl
cyJdOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0QmVmb3JlR0MgPSBuaWw7Cisg
ICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAgICAgVGVzdENsYXNzQyogb2JqID0g
W1tUZXN0Q2xhc3NDIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgIHJlc3VsdEJlZm9yZUdDID0g
W2R1bXBQcm90b3R5cGVzIGNhbGxXaXRoQXJndW1lbnRzOkBbb2JqXV07CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhb
Y29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKyAgICAgICAgCisgICAgICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICAgICAgVGVzdENsYXNzQyogb2JqID0gW1tUZXN0Q2xhc3NDIGFs
bG9jXSBpbml0XTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdEFmdGVyR0MgPSBbZHVtcFBy
b3RvdHlwZXMgY2FsbFdpdGhBcmd1bWVudHM6QFtvYmpdXTsKKyAgICAgICAgICAgIGNoZWNrUmVz
dWx0KEAib2JqZWN0IGFuZCBwcm90b3R5cGUgY2hhaW4gZGVwdGggaXMgNSBkZWVwIiwgW3Jlc3Vs
dEFmdGVyR0NbQCJvYmpEZXB0aCJdIHRvSW50MzJdID09IDUpOworICAgICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJvYmplY3QgYW5kIHByb3RvdHlwZSBjaGFpbiBkZXB0aCBiZWZvcmUgYW5kIGFmdGVy
IEdDIG1hdGNoZXMiLCBbcmVzdWx0QWZ0ZXJHQ1tAIm9iakRlcHRoIl0gdG9JbnQzMl0gPT0gW3Jl
c3VsdEJlZm9yZUdDW0Aib2JqRGVwdGgiXSB0b0ludDMyXSk7CisgICAgICAgICAgICBjaGVja1Jl
c3VsdChAIm9iamVjdCBhbmQgcHJvdG90eXBlIGNoYWluIGJlZm9yZSBhbmQgYWZ0ZXIgR0MgbWF0
Y2hlcyIsIFtbcmVzdWx0QWZ0ZXJHQ1tAIm9iakNoYWluIl0gdG9TdHJpbmddIGlzRXF1YWxUb1N0
cmluZzpbcmVzdWx0QmVmb3JlR0NbQCJvYmpDaGFpbiJdIHRvU3RyaW5nXV0pOworICAgICAgICB9
CisgICAgfQorfQorCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9uIDE4MDM2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCAiQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dl
dHRlclRlc3QuaCIKICNpbXBvcnQgIkRhdGVUZXN0cy5oIgogI2ltcG9ydCAiSlNFeHBvcnRUZXN0
cy5oIgorI2ltcG9ydCAiUmVncmVzczE0MTgwOS5oIgogCiAjaW1wb3J0IDxwdGhyZWFkLmg+CiAK
QEAgLTE0MzEsNiArMTQzMiw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIGN1cnJl
bnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0KCk7CiAgICAgcnVuRGF0ZVRlc3RzKCk7CiAgICAg
cnVuSlNFeHBvcnRUZXN0cygpOworICAgIHJ1blJlZ3Jlc3MxNDE4MDkoKTsKIH0KIAogI2Vsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAzNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTYxMiw2ICsxNjEyLDcgQEAKIAkJRkU3QkE2MTAxQTFB
N0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEg
LyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFG
MTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRUI1MUY2QzFBOTdCNjg4MDAxRjky
MUMgLyogUmVncmVzczE0MTgwOS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1t
ICovOyB9OwogCQlGRUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3Bl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4
QzEyMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwogCQlG
RUI1OEMxNTE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUI1OEMxMzE4N0I4QjE2MDA5
OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50
T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0NSw2ICszMzQ2LDggQEAKIAkJ
RkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRp
dmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUI1MUY2QTFBOTdCNjg4MDAxRjky
MUMgLyogUmVncmVzczE0MTgwOS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBS
ZWdyZXNzMTQxODA5Lmg7IHBhdGggPSBBUEkvdGVzdHMvUmVncmVzczE0MTgwOS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRUI1MUY2QjFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVz
czE0MTgwOS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJlZ3Jl
c3MxNDE4MDkubW07IHBhdGggPSBBUEkvdGVzdHMvUmVncmVzczE0MTgwOS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNThDMTIxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFu
ZGxpbmdTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJv
ckhhbmRsaW5nU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMx
MzE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9ySGFuZGxpbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRPcGNvZGUuaDsgcGF0aCA9IGxs
aW50L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzE1LDYg
KzM3MTgsOCBAQAogCQkJCUMyODhCMkREMThBNTREM0UwMDdCRTQwQiAvKiBEYXRlVGVzdHMubW0g
Ki8sCiAJCQkJQzIxODFGQzAxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMuaCAqLywK
IAkJCQlDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLywKKwkJ
CQlGRUI1MUY2QTFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5oICovLAorCQkJCUZF
QjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tICovLAogCQkJCTE0NDAw
NTE3MEE1MzFDQjUwMDA1RjA2MSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1QTJEMEEzRTkxRjYw
MEJBRjU5QyAvKiB0ZXN0YXBpLmMgKi8sCiAJCQkJMTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8q
IHRlc3RhcGkuanMgKi8sCkBAIC02NzM1LDYgKzY3NDAsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUMyOUVDQjAzMTgwNEQwRUQwMEQyQ0JC
NCAvKiBDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzIwMzI4MjAxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2JhbE9iamVj
dENsYXNzVGVzdC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI4OEIyREUxOEE1NEQzRTAwN0JFNDBC
IC8qIERhdGVUZXN0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMyMTgxRkMyMThBOTQ4RkIwMDI1
QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="271937"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>