<?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>147393</bug_id>
          
          <creation_ts>2015-07-28 18:26:23 -0700</creation_ts>
          <short_desc>Parse the entire WebAssembly modules</short_desc>
          <delta_ts>2015-08-06 17:22:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>146064</blocked>
    
    <blocked>147738</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sukolsak Sakshuwong">sukolsak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>sukolsak</cc>
    
    <cc>teppeis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1112986</commentid>
    <comment_count>0</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-28 18:26:23 -0700</bug_when>
    <thetext>Parse the entire WebAssembly modules from WebAssembly files produced by pack-asmjs &lt;https://github.com/WebAssembly/polyfill-prototype-1&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112989</commentid>
    <comment_count>1</comment_count>
      <attachid>257716</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-28 18:31:10 -0700</bug_when>
    <thetext>Created attachment 257716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113063</commentid>
    <comment_count>2</comment_count>
      <attachid>257743</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-29 01:37:27 -0700</bug_when>
    <thetext>Created attachment 257743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113117</commentid>
    <comment_count>3</comment_count>
      <attachid>257743</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-07-29 11:07:14 -0700</bug_when>
    <thetext>Comment on attachment 257743
Patch

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

The direction here looks good, but this patch needs some work.

&gt; Source/JavaScriptCore/wasm/JSWASMModule.h:90
&gt; +enum class WASMType : uint8_t {
&gt; +    I32,
&gt; +    F32,
&gt; +    F64
&gt; +};
&gt; +
&gt; +enum class WASMReturnType : uint8_t {
&gt; +    I32,
&gt; +    F32,
&gt; +    F64,
&gt; +    Void
&gt; +};
&gt; +
&gt; +enum class WASMExportFormat : uint8_t {
&gt; +    Default,
&gt; +    Record
&gt; +};
&gt; +
&gt; +struct WASMSignature {
&gt; +    WASMReturnType returnType;
&gt; +    Vector&lt;WASMType&gt; arguments;
&gt; +};
&gt; +
&gt; +struct WASMFunctionImport {
&gt; +    String functionName;
&gt; +};
&gt; +
&gt; +struct WASMFunctionImportSignature {
&gt; +    uint32_t signatureIndex;
&gt; +    uint32_t functionImportIndex;
&gt; +};
&gt; +
&gt; +struct WASMFunctionDeclaration {
&gt; +    uint32_t signatureIndex;
&gt; +};
&gt; +
&gt; +struct WASMFunctionPointerTable {
&gt; +    uint32_t signatureIndex;
&gt; +    Vector&lt;uint32_t&gt; elements;
&gt; +};

In general, we keep one file per class in WebKit. Since these structs are separate from JSWASMModule, they should belong somewhere else.

It would be tedious to use one file per class for each of these structs, so let&apos;s use a shared file for all of the structs that define the format of a WASM tree. How about WASMFormat.h, as you suggested previously?

&gt; Source/JavaScriptCore/wasm/JSWASMModule.h:113
&gt; +    friend class WASMModuleParser;

&quot;friend&quot; tends toward spaghetti code. We use classes to establish a separation of concerns, so that we can think about one class, and change it, without worrying about all the other code that uses it. &quot;friend&quot; erases that separation and makes our code more brittle.

Instead of friend, in this case I recommend providing accessors methods for these underlying vectors.

&gt; Source/JavaScriptCore/wasm/WASMModuleParser.h:60
&gt; +    JSWASMModule* m_module;

You need to do something to prevent m_module from being garbage collected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113155</commentid>
    <comment_count>4</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-29 13:35:46 -0700</bug_when>
    <thetext>Thank you for the review.

(In reply to comment #3)
&gt; &gt; Source/JavaScriptCore/wasm/WASMModuleParser.h:60
&gt; &gt; +    JSWASMModule* m_module;
&gt; 
&gt; You need to do something to prevent m_module from being garbage collected.

Since WASMModuleParser is allocated on the stack, doesn&apos;t that prevent m_module from being GC&apos;d? Do I need to do something extra to protect it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113486</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-07-30 14:13:45 -0700</bug_when>
    <thetext>&gt; (In reply to comment #3)
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WASMModuleParser.h:60
&gt; &gt; &gt; +    JSWASMModule* m_module;
&gt; &gt; 
&gt; &gt; You need to do something to prevent m_module from being garbage collected.
&gt; 
&gt; Since WASMModuleParser is allocated on the stack, doesn&apos;t that prevent
&gt; m_module from being GC&apos;d? Do I need to do something extra to protect it?

In practice, you can probably produce GC safety by allocating WASMModuleParser on the stack. But that&apos;s a dangerous thing to do because there&apos;s no way to prevent a future coder from moving WASMModuleParser to the heap, and in general, C++ is intentionally agnostic about whether an object was instantiated on the stack or the heap.

I think a better solution is to use Strong&lt;T&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113672</commentid>
    <comment_count>6</comment_count>
      <attachid>257910</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-31 00:08:53 -0700</bug_when>
    <thetext>Created attachment 257910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113682</commentid>
    <comment_count>7</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-31 00:42:59 -0700</bug_when>
    <thetext>Thanks.

(In reply to comment #3)
&gt; In general, we keep one file per class in WebKit. Since these structs are
&gt; separate from JSWASMModule, they should belong somewhere else.
&gt; 
&gt; It would be tedious to use one file per class for each of these structs, so
&gt; let&apos;s use a shared file for all of the structs that define the format of a
&gt; WASM tree. How about WASMFormat.h, as you suggested previously?

Fixed.

&gt; &gt; Source/JavaScriptCore/wasm/JSWASMModule.h:113
&gt; &gt; +    friend class WASMModuleParser;
&gt; 
&gt; &quot;friend&quot; tends toward spaghetti code. We use classes to establish a
&gt; separation of concerns, so that we can think about one class, and change it,
&gt; without worrying about all the other code that uses it. &quot;friend&quot; erases that
&gt; separation and makes our code more brittle.
&gt; 
&gt; Instead of friend, in this case I recommend providing accessors methods for
&gt; these underlying vectors.

Fixed.

(In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; Source/JavaScriptCore/wasm/WASMModuleParser.h:60
&gt; &gt; &gt; &gt; +    JSWASMModule* m_module;
&gt; &gt; &gt; 
&gt; &gt; &gt; You need to do something to prevent m_module from being garbage collected.
&gt; &gt; 
&gt; &gt; Since WASMModuleParser is allocated on the stack, doesn&apos;t that prevent
&gt; &gt; m_module from being GC&apos;d? Do I need to do something extra to protect it?
&gt; 
&gt; In practice, you can probably produce GC safety by allocating
&gt; WASMModuleParser on the stack. But that&apos;s a dangerous thing to do because
&gt; there&apos;s no way to prevent a future coder from moving WASMModuleParser to the
&gt; heap, and in general, C++ is intentionally agnostic about whether an object
&gt; was instantiated on the stack or the heap.
&gt; 
&gt; I think a better solution is to use Strong&lt;T&gt;.

Fixed. I guess one way to do it without using Strong&lt;T&gt; is probably

JSWASMModule* WASMModuleParser::parse(...)
{
    JSWASMModule* module = JSWASMModule::create(...);
    m_module = module;
    ...
    return module;
}

but it seems very hacky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113685</commentid>
    <comment_count>8</comment_count>
      <attachid>257910</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-07-31 00:48:40 -0700</bug_when>
    <thetext>Comment on attachment 257910
Patch

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

&gt; Source/JavaScriptCore/wasm/WASMReader.cpp:83
&gt; +    CHECK_READ(1);

Why not do everything in the loop?

&gt; Source/JavaScriptCore/wasm/WASMReader.cpp:89
&gt; +    while (true) {

What&apos;s stopping this from reading more than 4 bytes?

&gt; Source/JavaScriptCore/wasm/WASMReader.cpp:96
&gt; +        result |= (byte &amp; 0x7f) &lt;&lt; shift;

Or maybe the limit is we can read at most 5 bytes?
Can compact int values be larger than 2^28?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113699</commentid>
    <comment_count>9</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-31 02:40:28 -0700</bug_when>
    <thetext>Thanks.

(In reply to comment #8)
&gt; Comment on attachment 257910 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257910&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WASMReader.cpp:83
&gt; &gt; +    CHECK_READ(1);
&gt; 
&gt; Why not do everything in the loop?

It&apos;s just an optimization for small integers. If this seems like a micro-optimization, let me know and I will fix it.

&gt; &gt; Source/JavaScriptCore/wasm/WASMReader.cpp:89
&gt; &gt; +    while (true) {
&gt; 
&gt; What&apos;s stopping this from reading more than 4 bytes?
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WASMReader.cpp:96
&gt; &gt; +        result |= (byte &amp; 0x7f) &lt;&lt; shift;
&gt; 
&gt; Or maybe the limit is we can read at most 5 bytes?
&gt; Can compact int values be larger than 2^28?

My first thought was that users couldn&apos;t do anything malicious with this anyway, because we always used CHECK_READ(), and unsigned integer overflow is well-defined. But I can see why this can be a problem. So, should we limit the number of bytes?

Compact (LEB128) uint32 values can be up to 2^32 - 1. So, the limit should be 5 bytes. If we check the number of bytes, should we check as well that the fifth byte is less than 2^(32-28) = 2^4 to prevent an integer overflow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113856</commentid>
    <comment_count>10</comment_count>
      <attachid>257910</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-07-31 14:22:25 -0700</bug_when>
    <thetext>Comment on attachment 257910
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WASMReader.cpp:83
&gt;&gt;&gt; +    CHECK_READ(1);
&gt;&gt; 
&gt;&gt; Why not do everything in the loop?
&gt; 
&gt; It&apos;s just an optimization for small integers. If this seems like a micro-optimization, let me know and I will fix it.

I&apos;m not sure that optimizing here will yield much difference because we&apos;re parsing values from an untrusted file, and we need to do all sorts of error checks anyway.  I suggest implementing this all as follows:

1. Use a do-while loop because it is more succinct and easier to read.
2. Use a uint64_t local value instead of storing into the result directly. Using the local allows the compiler to put it in a register, and register operations are cheap.  We only incur the memory write to result at the end.
3. When the computation is done,
    (1) break out of the loop,
    (2) validate that the computed value is within size of a uint32,  and
    (3) copy the local value into the result.  

4. The loop can loop while (value &lt; numeric_limits&lt;uint32_t&gt;::max()).  This ensures that we don&apos;t overflow our uint64_t local value and that the validation check in 3.2 will work as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113906</commentid>
    <comment_count>11</comment_count>
      <attachid>257974</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-31 15:57:17 -0700</bug_when>
    <thetext>Created attachment 257974
Rewrote WASMReader::readCompactUInt32()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113913</commentid>
    <comment_count>12</comment_count>
      <attachid>257974</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-31 16:10:25 -0700</bug_when>
    <thetext>Comment on attachment 257974
Rewrote WASMReader::readCompactUInt32()

Rewrote WASMReader::readCompactUInt32()
- check that the number of bytes does not exceed 5
- check that the fifth byte is less than 2^(32 - 7*4) = 2^4 to prevent integer overflows
- check that the last byte is not zero, unless it&apos;s the only byte of the number</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113916</commentid>
    <comment_count>13</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-31 16:21:41 -0700</bug_when>
    <thetext>Thanks.

(In reply to comment #10)
&gt; 1. Use a do-while loop because it is more succinct and easier to read.

Done.

&gt; 2. Use a uint64_t local value instead of storing into the result directly.
&gt; Using the local allows the compiler to put it in a register, and register
&gt; operations are cheap.  We only incur the memory write to result at the end.

Used a local value.

&gt; 3. When the computation is done,
&gt;     (1) break out of the loop,
&gt;     (2) validate that the computed value is within size of a uint32,  and
&gt;     (3) copy the local value into the result.  
&gt; 
&gt; 4. The loop can loop while (value &lt; numeric_limits&lt;uint32_t&gt;::max()).  This
&gt; ensures that we don&apos;t overflow our uint64_t local value and that the
&gt; validation check in 3.2 will work as expected.

As discussed on IRC, checking that (value &lt; numeric_limits&lt;uint32_t&gt;::max()) is not enough, because the bytes could be 0x80 0x80 0x80 0x80 0x80 ... . Checking that the number of bytes doesn&apos;t exceed 5 and that the fifth byte is &lt;= 0b00001111 should prevent that and also eliminate the need for uint64_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114424</commentid>
    <comment_count>14</comment_count>
      <attachid>258130</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-03 16:04:53 -0700</bug_when>
    <thetext>Created attachment 258130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115074</commentid>
    <comment_count>15</comment_count>
      <attachid>258288</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-05 11:32:57 -0700</bug_when>
    <thetext>Created attachment 258288
Override JSCell::destroy()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115402</commentid>
    <comment_count>16</comment_count>
      <attachid>258288</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-06 11:51:57 -0700</bug_when>
    <thetext>Comment on attachment 258288
Override JSCell::destroy()

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

Looks pretty good to me. This was a fly-by review. I&apos;ll look at it in more detail and look at the polyfill when I have more time.

&gt; Source/JavaScriptCore/wasm/JSWASMModule.h:57
&gt; +    Vector&lt;uint32_t&gt;&amp; i32Constants() { return m_i32Constants; }

Nit: These functions can all be marked as &quot;const&quot;.

&gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:38
&gt; +#define READ_UINT32_OR_FAIL(x, errorMessage) do { if (!m_reader.readUInt32(x)) FAIL_WITH_MESSAGE(errorMessage); } while (0)

I think we should use better names than &quot;x&quot; here and below. Maybe like numConstants or inOutNumConstants?

&gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:108
&gt; +        m_module-&gt;i32Constants().append(constant);

I think this (and all appends below) can be uncheckedAppend() since we&apos;re reserving their space up front.

&gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:257
&gt; +    // TODO: Support any functions.

Nit: We tend to use FIXME instead of TODO
Also, is there a bug open for this? If so, let&apos;s include the link to it here.
If not, we should open one and link it here.

&gt; Source/JavaScriptCore/wasm/WASMReader.cpp:81
&gt; +bool WASMReader::readCompactUInt32(uint32_t&amp; result)

I wonder if some of this would be easier to read if we wrote numbers in binary or gave then names.
Like: 
uint8_t firstSevenBits = 0x7f;
or
uint8_t byteValueMask = 0x7f;

Or maybe this is silly and we should just stick with hex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115448</commentid>
    <comment_count>17</comment_count>
      <attachid>258288</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-06 14:24:24 -0700</bug_when>
    <thetext>Comment on attachment 258288
Override JSCell::destroy()

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

r=me

&gt;&gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:108
&gt;&gt; +        m_module-&gt;i32Constants().append(constant);
&gt; 
&gt; I think this (and all appends below) can be uncheckedAppend() since we&apos;re reserving their space up front.

I agree.

&gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:138
&gt; +        m_module-&gt;signatures().append(signature);

Same here, and a few places below..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115510</commentid>
    <comment_count>18</comment_count>
      <attachid>258411</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-06 16:01:15 -0700</bug_when>
    <thetext>Created attachment 258411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115522</commentid>
    <comment_count>19</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-06 16:16:40 -0700</bug_when>
    <thetext>Thanks you for the review.

(In reply to comment #16)
&gt; &gt; Source/JavaScriptCore/wasm/JSWASMModule.h:57
&gt; &gt; +    Vector&lt;uint32_t&gt;&amp; i32Constants() { return m_i32Constants; }
&gt; 
&gt; Nit: These functions can all be marked as &quot;const&quot;.

They cannot be marked as const, because I modify them.

&gt; &gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:38
&gt; &gt; +#define READ_UINT32_OR_FAIL(x, errorMessage) do { if (!m_reader.readUInt32(x)) FAIL_WITH_MESSAGE(errorMessage); } while (0)
&gt; 
&gt; I think we should use better names than &quot;x&quot; here and below. Maybe like
&gt; numConstants or inOutNumConstants?

Done. Changed it to &quot;result&quot; to be consistent with the name I use in WASMReader.

&gt; &gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:108
&gt; &gt; +        m_module-&gt;i32Constants().append(constant);
&gt; 
&gt; I think this (and all appends below) can be uncheckedAppend() since we&apos;re
&gt; reserving their space up front.

Done. Also added a check for numberOfSignatures in WASMModuleParser::parseFunctionImportSection() for safety.

&gt; &gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:257
&gt; &gt; +    // TODO: Support any functions.
&gt; 
&gt; Nit: We tend to use FIXME instead of TODO
&gt; Also, is there a bug open for this? If so, let&apos;s include the link to it here.
&gt; If not, we should open one and link it here.

Done. Changed it to TODO and added a link to https://bugs.webkit.org/show_bug.cgi?id=147738

&gt; &gt; Source/JavaScriptCore/wasm/WASMReader.cpp:81
&gt; &gt; +bool WASMReader::readCompactUInt32(uint32_t&amp; result)
&gt; 
&gt; I wonder if some of this would be easier to read if we wrote numbers in
&gt; binary or gave then names.
&gt; Like: 
&gt; uint8_t firstSevenBits = 0x7f;
&gt; or
&gt; uint8_t byteValueMask = 0x7f;
&gt; 
&gt; Or maybe this is silly and we should just stick with hex.

Done. Added &quot;static const uint32_t firstSevenBitsMask = 0x7f;&quot;. This will be used again when I add a signed version of compact ints. I agree that it would be easier to read if it&apos;s in binary, but I can&apos;t find 0b... used anywhere other than in comments. I&apos;m not sure what our policy is on binary literals.

(In reply to comment #17)
&gt; &gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:138
&gt; &gt; +        m_module-&gt;signatures().append(signature);
&gt; 
&gt; Same here, and a few places below..

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115525</commentid>
    <comment_count>20</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-06 16:18:59 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Done. Changed it to TODO and added a link to
&gt; https://bugs.webkit.org/show_bug.cgi?id=147738

Sorry, I meant &quot;Changed it to FIXME.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115537</commentid>
    <comment_count>21</comment_count>
      <attachid>258411</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-06 16:31:46 -0700</bug_when>
    <thetext>Comment on attachment 258411
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115564</commentid>
    <comment_count>22</comment_count>
      <attachid>258411</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 17:22:01 -0700</bug_when>
    <thetext>Comment on attachment 258411
Patch

Clearing flags on attachment: 258411

Committed r188099: &lt;http://trac.webkit.org/changeset/188099&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115565</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 17:22:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257716</attachid>
            <date>2015-07-28 18:31:10 -0700</date>
            <delta_ts>2015-07-29 01:37:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147393-20150728182948.patch</filename>
            <type>text/plain</type>
            <size>22515</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NWE3MTY0ZjVhY2ZlY2ZiMzk5ZmMxYWRjOTlmODUyMzRiMzVmZDZkLi40ZDNiMmYwNTdlOTc2MTcz
ODI0ZWNjOGM0MjRhYzZhNTk3YTIwYTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0NCBAQAorMjAxNS0wNy0yOCAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgZW50aXJlIFdlYkFzc2VtYmx5IG1vZHVsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNlIHRo
ZSBlbnRpcmUgV2ViQXNzZW1ibHkgbW9kdWxlcyBmcm9tIFdlYkFzc2VtYmx5IGZpbGVzIHByb2R1
Y2VkIGJ5IHBhY2stYXNtanMKKyAgICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJs
eS9wb2x5ZmlsbC1wcm90b3R5cGUtMT4uIFRoaXMgcGF0Y2ggY2FuIG9ubHkgcGFyc2UKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgdGFrZSBubyBhcmd1bWVudHMgYW5kIGhhdmUgInJldHVybiAwOyIg
YXMgdGhlaXIgb25seSBzdGF0ZW1lbnQuCisgICAgICAgIFBhcnNpbmcgb2YgYW55IGZ1bmN0aW9u
cyB3aWxsIGJlIGltcGxlbWVudGVkIGluIGEgc3Vic2VxdWVudCBwYXRjaC4KKworICAgICAgICAq
IHdhc20vSlNXQVNNTW9kdWxlLmg6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlND
OjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1
bGVQYXJzZXI6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01N
b2R1bGVQYXJzZXI6OnBhcnNlU2lnbmF0dXJlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01N
b2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6
V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6CisgICAgICAg
IChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKToKKyAg
ICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmlu
aXRpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rp
b24pOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20v
V0FTTVJlYWRlci5jcHA6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkQ29tcGFjdFVJbnQzMik6CisgICAgICAgIChK
U0M6OldBU01SZWFkZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpy
ZWFkVHlwZSk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRSZXR1cm5UeXBlKToKKyAg
ICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZEV4cG9ydEZvcm1hdCk6CisgICAgICAgIChKU0M6
OldBU01SZWFkZXI6OnJlYWRCeXRlKToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFVu
c2lnbmVkSW50MzIpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTVJlYWRlci5oOgorICAg
ICAgICAoSlNDOjpXQVNNUmVhZGVyOjppbmRleCk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6
OnNldEluZGV4KToKKwogMjAxNS0wNy0yOCAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2Fr
QGdtYWlsLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgV2ViQXNzZW1ibHkgbW9kdWxlIHBhcnNl
cgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3Mjkz
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKaW5kZXggOGFkOWUz
Yjg5MWFlODU2M2U2ODA3OTNiODdhOWU1MTRkNjkxMDc1YS4uNDQyZTM0ZGVjZjBkYTY3ZWYyNzJm
ZjZlM2ExMGQ2Yjg5Y2NiODJiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXQVNNTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNN
TW9kdWxlLmgKQEAgLTMyLDYgKzMyLDQzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitlbnVtIGNs
YXNzIFdBU01UeXBlIDogdWludDhfdCB7CisgICAgSTMyLAorICAgIEYzMiwKKyAgICBGNjQKK307
CisKK2VudW0gY2xhc3MgV0FTTVJldHVyblR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAg
RjMyLAorICAgIEY2NCwKKyAgICBWb2lkCit9OworCitlbnVtIGNsYXNzIFdBU01FeHBvcnRGb3Jt
YXQgOiB1aW50OF90IHsKKyAgICBEZWZhdWx0LAorICAgIFJlY29yZAorfTsKKworc3RydWN0IFdB
U01TaWduYXR1cmUgeworICAgIFdBU01SZXR1cm5UeXBlIHJldHVyblR5cGU7CisgICAgVmVjdG9y
PFdBU01UeXBlPiBhcmd1bWVudHM7Cit9OworCitzdHJ1Y3QgV0FTTUZ1bmN0aW9uRGVjbGFyYXRp
b24geworICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworfTsKKworc3RydWN0IFdBU01GdW5j
dGlvbkltcG9ydFNpZ25hdHVyZSB7CisgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAg
dWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleDsKK307CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25Q
b2ludGVyVGFibGUgeworICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgIFZlY3Rvcjx1
aW50MzJfdD4gZWxlbWVudHM7Cit9OworCiBjbGFzcyBKU1dBU01Nb2R1bGUgOiBwdWJsaWMgSlNE
ZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVP
YmplY3QgQmFzZTsKQEAgLTUzLDExICs5MCwyMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBXQVNNTW9kdWxlUGFyc2VyOworCiAgICAgSlNXQVNNTW9kdWxlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAg
IHsKICAgICB9CiAKKyAgICBWZWN0b3I8V0FTTVNpZ25hdHVyZT4gbV9zaWduYXR1cmVzOworICAg
IFZlY3Rvcjx1aW50MzJfdD4gbV9jb25zdGFudEkzMnM7CisgICAgVmVjdG9yPGZsb2F0PiBtX2Nv
bnN0YW50RjMyczsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2NvbnN0YW50RjY0czsKKyAgICBWZWN0
b3I8U3RyaW5nPiBtX2Z1bmN0aW9uSW1wb3J0TmFtZXM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlv
bkltcG9ydFNpZ25hdHVyZT4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7CisgICAgVmVjdG9y
PFdBU01UeXBlPiBtX2dsb2JhbFR5cGVzOworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJh
dGlvbj4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9p
bnRlclRhYmxlPiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsKKwogICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRleCBkOGQzMGY1MzhjNzRmMDg5
ZDRmYTVlNjkzZjFkMzEyOTUzZjE0YmYzLi40M2VmZGU5NjMyMmMzMjVlNGQzZWQzYjk0NGUwODQ2
MmQzYmQyZjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9k
dWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxl
UGFyc2VyLmNwcApAQCAtMzIsMTEgKzMyLDE3IEBACiAjaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgi
CiAjaW5jbHVkZSAiV0FTTU1hZ2ljTnVtYmVyLmgiCiAKLSNkZWZpbmUgRkFJTF9XSVRIX01FU1NB
R0UoZXJyb3JNZXNzYWdlKSBkbyB7IG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlOyByZXR1
cm4gZmFsc2U7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfVU5TSUdORURfSU5UMzJfT1JfRkFJ
TCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMih4
KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUg
RkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKSBkbyB7IG1fZXJyb3JNZXNzYWdlID0gZXJy
b3JNZXNzYWdlOyByZXR1cm47IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfVUlOVDMyX09SX0ZB
SUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFVJbnQzMih4KSkgRkFJ
TF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgUkVBRF9G
TE9BVF9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRGbG9h
dCh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKICNkZWZp
bmUgUkVBRF9ET1VCTEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRl
ci5yZWFkRG91YmxlKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxl
ICgwKQorI2RlZmluZSBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdl
KSBkbyB7IGlmICghbV9yZWFkZXIucmVhZENvbXBhY3RVSW50MzIoeCkpIEZBSUxfV0lUSF9NRVNT
QUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfU1RSSU5HX09SX0ZB
SUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFN0cmluZyh4KSkgRkFJ
TF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9U
WVBFX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFR5cGUo
eCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5l
IFJFQURfUkVUVVJOX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3Jl
YWRlci5yZWFkUmV0dXJuVHlwZSh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsg
fSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9FWFBPUlRfRk9STUFUX09SX0ZBSUwoeCwgZXJyb3JN
ZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZEV4cG9ydEZvcm1hdCh4KSkgRkFJTF9XSVRI
X01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgRkFJTF9JRl9GQUxT
RShjb25kaXRpb24sIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIShjb25kaXRpb24pKSBGQUlMX1dJ
VEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBQUk9QQUdBVEVf
RVJST1IoKSBkbyB7IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHJldHVybjsgfSB3aGls
ZSAoMCkKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ3LDI0ICs1MywyMzQgQEAgV0FTTU1vZHVs
ZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAKIEpT
V0FTTU1vZHVsZSogV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBKU1dBU01Nb2R1
bGUqIG1vZHVsZSA9IEpTV0FTTU1vZHVsZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPndhc21N
b2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgbV9tb2R1bGUgPSBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpOwogICAgIHBhcnNlTW9kdWxl
KCk7CiAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgewogICAgICAgICBlcnJvck1l
c3NhZ2UgPSBtX2Vycm9yTWVzc2FnZTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQot
ICAgIHJldHVybiBtb2R1bGU7CisgICAgcmV0dXJuIG1fbW9kdWxlOwogfQogCi1ib29sIFdBU01N
b2R1bGVQYXJzZXI6OnBhcnNlTW9kdWxlKCkKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VN
b2R1bGUoKQogewogICAgIHVpbnQzMl90IG1hZ2ljTnVtYmVyOwotICAgIFJFQURfVU5TSUdORURf
SU5UMzJfT1JfRkFJTChtYWdpY051bWJlciwgIkNhbm5vdCByZWFkIHRoZSBtYWdpYyBudW1iZXIu
Iik7CisgICAgUkVBRF9VSU5UMzJfT1JfRkFJTChtYWdpY051bWJlciwgIkNhbm5vdCByZWFkIHRo
ZSBtYWdpYyBudW1iZXIuIik7CiAgICAgRkFJTF9JRl9GQUxTRShtYWdpY051bWJlciA9PSB3YXNt
TWFnaWNOdW1iZXIsICJUaGUgbWFnaWMgbnVtYmVyIGlzIGluY29ycmVjdC4iKTsKIAotICAgIC8v
IFRPRE86IHBhcnNlIHRoZSByZXN0CisgICAgdWludDMyX3Qgb3V0cHV0U2l6ZUluQVNNSlM7Cisg
ICAgUkVBRF9VSU5UMzJfT1JfRkFJTChvdXRwdXRTaXplSW5BU01KUywgIkNhbm5vdCByZWFkIHRo
ZSBvdXRwdXQgc2l6ZSBpbiBhc20uanMgZm9ybWF0LiIpOwogCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7Cisg
ICAgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAg
cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAg
ICBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7Cisg
ICAgcGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMoKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsK
KyAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKKyAgICBwYXJzZUV4cG9ydFNlY3Rpb24oKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFy
c2VyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9m
STMyczsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMnM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZG
NjRzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkkzMnMsICJDYW5u
b3QgcmVhZCB0aGUgbnVtYmVyIG9mIGludDMyIGNvbnN0YW50cy4iKTsKKyAgICBSRUFEX0NPTVBB
Q1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGMzJzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBv
ZiBmbG9hdDMyIGNvbnN0YW50cy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwo
bnVtYmVyT2ZGNjRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmbG9hdDY0IGNvbnN0YW50
cy4iKTsKKworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPm1fY29uc3RhbnRJMzJzLnRyeVJl
c2VydmVDYXBhY2l0eShudW1iZXJPZkkzMnMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3Ig
dGhlIGludDMyIGNvbnN0YW50cy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5tX2Nv
bnN0YW50RjMycy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZGMzJzKSwgIkNhbm5vdCBhbGxv
Y2F0ZSBtZW1vcnkgZm9yIHRoZSBmbG9hdDMyIGNvbnN0YW50cy4iKTsKKyAgICBGQUlMX0lGX0ZB
TFNFKG1fbW9kdWxlLT5tX2NvbnN0YW50RjY0cy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZG
NjRzKSwgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmbG9hdDY0IGNvbnN0YW50cy4i
KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMnM7ICsraSkKKyAg
ICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG1fbW9kdWxlLT5tX2NvbnN0YW50STMy
c1tpXSwgIkNhbm5vdCByZWFkIGFuIGludDMyIGNvbnN0YW50LiIpOworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMnM7ICsraSkKKyAgICAgICAgUkVBRF9GTE9BVF9PUl9G
QUlMKG1fbW9kdWxlLT5tX2NvbnN0YW50RjMyc1tpXSwgIkNhbm5vdCByZWFkIGEgZmxvYXQzMiBj
b25zdGFudC4iKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRzOyAr
K2kpCisgICAgICAgIFJFQURfRE9VQkxFX09SX0ZBSUwobV9tb2R1bGUtPm1fY29uc3RhbnRGNjRz
W2ldLCAiQ2Fubm90IHJlYWQgYSBmbG9hdDY0IGNvbnN0YW50LiIpOworfQorCit2b2lkIFdBU01N
b2R1bGVQYXJzZXI6OnBhcnNlU2lnbmF0dXJlU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVt
YmVyT2ZTaWduYXR1cmVzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJP
ZlNpZ25hdHVyZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMuIik7Cisg
ICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+bV9zaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0
eShudW1iZXJPZlNpZ25hdHVyZXMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHNp
Z25hdHVyZXMuIik7CisgICAgZm9yICh1aW50MzJfdCBzaWduYXR1cmVJbmRleCA9IDA7IHNpZ25h
dHVyZUluZGV4IDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK3NpZ25hdHVyZUluZGV4KSB7CisgICAg
ICAgIFdBU01TaWduYXR1cmUgc2lnbmF0dXJlOworICAgICAgICBSRUFEX1JFVFVSTl9UWVBFX09S
X0ZBSUwoc2lnbmF0dXJlLnJldHVyblR5cGUsICJDYW5ub3QgcmVhZCB0aGUgcmV0dXJuIHR5cGUu
Iik7CisgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7CisgICAgICAgIFJFQURfQ09NUEFD
VF9VSU5UMzJfT1JfRkFJTChhcmd1bWVudENvdW50LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBv
ZiBhcmd1bWVudHMuIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0Uoc2lnbmF0dXJlLmFyZ3VtZW50
cy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJDYW5ub3QgYWxsb2NhdGUgbWVt
b3J5IGZvciB0aGUgYXJndW1lbnRzLiIpOworICAgICAgICBmb3IgKHVpbnQzMl90IGFyZ3VtZW50
SW5kZXggPSAwOyBhcmd1bWVudEluZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmd1bWVudEluZGV4
KSB7CisgICAgICAgICAgICBXQVNNVHlwZSB0eXBlOworICAgICAgICAgICAgUkVBRF9UWVBFX09S
X0ZBSUwodHlwZSwgIkNhbm5vdCByZWFkIHRoZSB0eXBlIG9mIGFuIGFyZ3VtZW50LiIpOworICAg
ICAgICAgICAgc2lnbmF0dXJlLmFyZ3VtZW50cy5hcHBlbmQodHlwZSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9tb2R1bGUtPm1fc2lnbmF0dXJlcy5hcHBlbmQoc2lnbmF0dXJlKTsKKyAgICB9Cit9
CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKQor
eworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25JbXBvcnRzOworICAgIHVpbnQzMl90IG51
bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJf
T1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uSW1wb3J0cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIg
b2YgZnVuY3Rpb24gaW1wb3J0cy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwo
bnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVy
IG9mIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmVzLiIpOworCisgICAgRkFJTF9JRl9GQUxTRSht
X21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydE5hbWVzLnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJP
ZkZ1bmN0aW9uSW1wb3J0cyksICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZnVuY3Rp
b24gaW1wb3J0cy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5tX2Z1bmN0aW9uSW1w
b3J0U2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNp
Z25hdHVyZXMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZ1bmN0aW9uIGltcG9y
dCBzaWduYXR1cmVzLiIpOworCisgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4
ID0gMDsgZnVuY3Rpb25JbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY3Rpb25JbXBvcnRzOyArK2Z1
bmN0aW9uSW1wb3J0SW5kZXgpIHsKKyAgICAgICAgU3RyaW5nIGltcG9ydE5hbWU7CisgICAgICAg
IFJFQURfU1RSSU5HX09SX0ZBSUwoaW1wb3J0TmFtZSwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlv
biBpbXBvcnQgbmFtZS4iKTsKKyAgICAgICAgbV9tb2R1bGUtPm1fZnVuY3Rpb25JbXBvcnROYW1l
cy5hcHBlbmQoaW1wb3J0TmFtZSk7CisKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1
cmVzOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTaWduYXR1
cmVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBzaWduYXR1cmVzLiIpOworICAgICAgICBG
QUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5tX2Z1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcy5zaXplKCkg
KyBudW1iZXJPZlNpZ25hdHVyZXMgPD0gbnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMs
ICJUaGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmVzIGlzIGluY29ycmVjdC4i
KTsKKworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTaWduYXR1cmVz
OyArK2kpIHsKKyAgICAgICAgICAgIFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSBmdW5jdGlv
bkltcG9ydFNpZ25hdHVyZTsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJ
TChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5zaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFkIHRo
ZSBzaWduYXR1cmUgaW5kZXguIik7CisgICAgICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9u
SW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4IDwgbV9tb2R1bGUtPm1fc2lnbmF0dXJlcy5z
aXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgICAg
IGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLmZ1bmN0aW9uSW1wb3J0SW5kZXggPSBmdW5jdGlvbklt
cG9ydEluZGV4OworICAgICAgICAgICAgbV9tb2R1bGUtPm1fZnVuY3Rpb25JbXBvcnRTaWduYXR1
cmVzLmFwcGVuZChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMuc2l6
ZSgpID09IG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiVGhlIG51bWJlciBvZiBm
dW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcyBpcyBpbmNvcnJlY3QuIik7Cit9CisKK3ZvaWQgV0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkkzMlplcm87CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJaZXJvOworICAgIHVpbnQzMl90
IG51bWJlck9mRjY0WmVybzsKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMkltcG9ydDsKKyAgICB1
aW50MzJfdCBudW1iZXJPZkYzMkltcG9ydDsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NEltcG9y
dDsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJMzJaZXJvLCAiQ2Fu
bm90IHJlYWQgdGhlIG51bWJlciBvZiBnbG9iYWwgaW50MzIgdmFyaWFibGVzLiIpOworICAgIFJF
QURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkYzMlplcm8sICJDYW5ub3QgcmVhZCB0
aGUgbnVtYmVyIG9mIGdsb2JhbCBmbG9hdDMyIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBB
Q1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGNjRaZXJvLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJl
ciBvZiBnbG9iYWwgZmxvYXQ2NCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKG51bWJlck9mSTMySW1wb3J0LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBp
bXBvcnRlZCBnbG9iYWwgaW50MzIgdmFyaWFibGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTChudW1iZXJPZkYzMkltcG9ydCwgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Yg
aW1wb3J0ZWQgZ2xvYmFsIGZsb2F0MzIgdmFyaWFibGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChudW1iZXJPZkY2NEltcG9ydCwgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIg
b2YgaW1wb3J0ZWQgZ2xvYmFsIGZsb2F0NjQgdmFyaWFibGVzLiIpOworICAgIHVpbnQzMl90IG51
bWJlck9mR2xvYmFsVmFyaWFibGVzID0gbnVtYmVyT2ZJMzJaZXJvICsgbnVtYmVyT2ZGMzJaZXJv
ICsgbnVtYmVyT2ZGNjRaZXJvICsgbnVtYmVyT2ZJMzJJbXBvcnQgKyBudW1iZXJPZkYzMkltcG9y
dCArIG51bWJlck9mRjY0SW1wb3J0OworCisgICAgVmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFsVHlw
ZXMgPSBtX21vZHVsZS0+bV9nbG9iYWxUeXBlczsKKyAgICBGQUlMX0lGX0ZBTFNFKGdsb2JhbFR5
cGVzLnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJPZkdsb2JhbFZhcmlhYmxlcyksICJDYW5ub3Qg
YWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJaZXJvOyArK2kpCisgICAgICAgIGdsb2JhbFR5
cGVzLmFwcGVuZChXQVNNVHlwZTo6STMyKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZGMzJaZXJvOyArK2kpCisgICAgICAgIGdsb2JhbFR5cGVzLmFwcGVuZChXQVNNVHlw
ZTo6RjMyKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRaZXJvOyAr
K2kpCisgICAgICAgIGdsb2JhbFR5cGVzLmFwcGVuZChXQVNNVHlwZTo6RjY0KTsKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJJbXBvcnQ7ICsraSkgeworICAgICAgICBT
dHJpbmcgaW1wb3J0TmFtZTsKKyAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1l
LCAiQ2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGEgZ2xvYmFsIGludDMyIHZhcmlhYmxl
LiIpOworICAgICAgICBnbG9iYWxUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkkzMik7CisgICAgfQor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9ydDsgKytpKSB7Cisg
ICAgICAgIFN0cmluZyBpbXBvcnROYW1lOworICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGlt
cG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUgb2YgYSBnbG9iYWwgZmxvYXQz
MiB2YXJpYWJsZS4iKTsKKyAgICAgICAgZ2xvYmFsVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpGMzIp
OworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRJbXBvcnQ7
ICsraSkgeworICAgICAgICBTdHJpbmcgaW1wb3J0TmFtZTsKKyAgICAgICAgUkVBRF9TVFJJTkdf
T1JfRkFJTChpbXBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGEgZ2xv
YmFsIGZsb2F0NjQgdmFyaWFibGUuIik7CisgICAgICAgIGdsb2JhbFR5cGVzLmFwcGVuZChXQVNN
VHlwZTo6RjY0KTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xhcmF0aW9uczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZG
dW5jdGlvbkRlY2xhcmF0aW9ucywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24g
ZGVjbGFyYXRpb25zLiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPm1fZnVuY3Rpb25E
ZWNsYXJhdGlvbnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlv
bnMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9u
cy4iKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRlY2xh
cmF0aW9uczsgKytpKSB7CisgICAgICAgIFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9u
RGVjbGFyYXRpb247CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlv
bkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBp
bmRleC4iKTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkRlY2xhcmF0aW9uLnNpZ25h
dHVyZUluZGV4IDwgbV9tb2R1bGUtPm1fc2lnbmF0dXJlcy5zaXplKCksICJUaGUgc2lnbmF0dXJl
IGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPm1fZnVuY3Rpb25EZWNs
YXJhdGlvbnMuYXBwZW5kKGZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIH0KK30KKwordm9pZCBX
QVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcygpCit7CisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXM7CisgICAgUkVBRF9DT01QQUNUX1VJ
TlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFibGVzLCAiQ2Fubm90IHJlYWQg
dGhlIG51bWJlciBvZiBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcy4iKTsKKyAgICBGQUlMX0lGX0ZB
TFNFKG1fbW9kdWxlLT5tX2Z1bmN0aW9uUG9pbnRlclRhYmxlcy50cnlSZXNlcnZlQ2FwYWNpdHko
bnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBm
b3IgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzLiIpOworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uUG9pbnRlclRhYmxlczsgKytpKSB7CisgICAgICAgIFdB
U01GdW5jdGlvblBvaW50ZXJUYWJsZSBmdW5jdGlvblBvaW50ZXJUYWJsZTsKKyAgICAgICAgUkVB
RF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUlu
ZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICAgICAgRkFJTF9J
Rl9GQUxTRShmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleCA8IG1fbW9kdWxlLT5t
X3NpZ25hdHVyZXMuc2l6ZSgpLCAiVGhlIHNpZ25hdHVyZSBpbmRleCBpcyBpbmNvcnJlY3QuIik7
CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mRWxlbWVudHM7CisgICAgICAgIFJFQURfQ09NUEFD
VF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkVsZW1lbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJl
ciBvZiBlbGVtZW50cyBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7CisgICAgICAgIEZB
SUxfSUZfRkFMU0UoZnVuY3Rpb25Qb2ludGVyVGFibGUuZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KG51bWJlck9mRWxlbWVudHMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGVs
ZW1lbnRzIG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgZm9yICh1aW50
MzJfdCBqID0gMDsgaiA8IG51bWJlck9mRWxlbWVudHM7ICsraikgeworICAgICAgICAgICAgdWlu
dDMyX3QgZWxlbWVudDsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChl
bGVtZW50LCAiQ2Fubm90IHJlYWQgYW4gZWxlbWVudCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFi
bGUuIik7CisgICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5lbGVtZW50cy5hcHBlbmQo
ZWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgbV9tb2R1bGUtPm1fZnVuY3Rpb25Qb2ludGVy
VGFibGVzLmFwcGVuZChmdW5jdGlvblBvaW50ZXJUYWJsZSk7CisgICAgfQorfQorCit2b2lkIFdB
U01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21vZHVsZS0+bV9mdW5jdGlvbkRlY2xhcmF0aW9ucy5z
aXplKCk7ICsraSkKKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oKTsKK30KKwordm9p
ZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpCit7CisgICAgLy8g
VE9ETzogU3VwcG9ydCBhbnkgZnVuY3Rpb25zLgorICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBz
dXBwb3J0IGZ1bmN0aW9ucyB0aGF0IHRha2Ugbm8gYXJndW1lbnRzIGFuZCBoYXZlICJyZXR1cm4g
MDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LgorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBjb25z
aXN0IG9mIGV4YWN0bHkgNCBieXRlcywgaS5lLgorICAgIC8vIDEuIFRoZSBudW1iZXIgb2YgbG9j
YWwgdmFyaWFibGVzICgwKS4KKyAgICAvLyAyLiBUaGUgbnVtYmVyIG9mIHN0YXRlbWVudHMgKDEp
LgorICAgIC8vIDMuIFRoZSByZXR1cm4gc3RhdGVtZW50LgorICAgIC8vIDQuIFRoZSBpbW1lZGlh
dGUgZXhwcmVzc2lvbiAoMCkuCisgICAgbV9yZWFkZXIuc2V0SW5kZXgobV9yZWFkZXIuaW5kZXgo
KSArIDQpOworfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0U2VjdGlvbigp
Cit7CisgICAgV0FTTUV4cG9ydEZvcm1hdCBleHBvcnRGb3JtYXQ7CisgICAgUkVBRF9FWFBPUlRf
Rk9STUFUX09SX0ZBSUwoZXhwb3J0Rm9ybWF0LCAiQ2Fubm90IHJlYWQgdGhlIGV4cG9ydCBmb3Jt
YXQuIik7CisgICAgc3dpdGNoIChleHBvcnRGb3JtYXQpIHsKKyAgICBjYXNlIFdBU01FeHBvcnRG
b3JtYXQ6OkRlZmF1bHQ6IHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKKyAgICAg
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVh
ZCB0aGUgZnVuY3Rpb24gaW5kZXguIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25J
bmRleCA8IG1fbW9kdWxlLT5tX2Z1bmN0aW9uRGVjbGFyYXRpb25zLnNpemUoKSwgIlRoZSBmdW5j
dGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgIC8vIFRPRE86IEV4cG9ydCB0aGUg
ZnVuY3Rpb24uCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdBU01FeHBvcnRGb3Jt
YXQ6OlJlY29yZDogeworICAgICAgICB1aW50MzJfdCBudW1iZXJPZkV4cG9ydHM7CisgICAgICAg
IFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkV4cG9ydHMsICJDYW5ub3QgcmVh
ZCB0aGUgbnVtYmVyIG9mIGV4cG9ydHMuIik7CisgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0
SW5kZXggPSAwOyBleHBvcnRJbmRleCA8IG51bWJlck9mRXhwb3J0czsgKytleHBvcnRJbmRleCkg
eworICAgICAgICAgICAgU3RyaW5nIGV4cG9ydE5hbWU7CisgICAgICAgICAgICBSRUFEX1NUUklO
R19PUl9GQUlMKGV4cG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gZXhwb3J0IG5h
bWUuIik7CisgICAgICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiBleHBvcnROYW1lIGlzIGxlZ2Fs
LgorICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgICAgIFJFQURf
Q09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1
bmN0aW9uIGluZGV4LiIpOworICAgICAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkluZGV4
IDwgbV9tb2R1bGUtPm1fZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9u
IGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgICAgIC8vIFRPRE86IEV4cG9ydCB0aGUg
ZnVuY3Rpb24uCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6
CisgICAgICAgIEZBSUxfV0lUSF9NRVNTQUdFKCJVbmtub3duIGV4cG9ydCBmb3JtYXQuIik7Cisg
ICAgfQogfQogCiBKU1dBU01Nb2R1bGUqIHBhcnNlV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCmluZGV4IGY1ZDZhMzE3
ODllMTMxMGQ0NzcyZDU4MTI4ZWRhYTRkNjZkM2M0MjUuLjFjYTgzNzdmNzYxMTI3ZGIzMWE4ODU1
NDQwNDlkZDdlZTA2MmRiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmgKQEAgLTQ1LDkgKzQ1LDE5IEBAIHB1YmxpYzoKICAgICBKU1dBU01Nb2R1
bGUqIHBhcnNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZU1vZHVsZSgpOworICAgIHZvaWQgcGFyc2VNb2R1bGUo
KTsKKyAgICB2b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VT
aWduYXR1cmVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigp
OworICAgIHZvaWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxl
cygpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCk7CisgICAgdm9p
ZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOworICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9u
KCk7CiAKICAgICBXQVNNUmVhZGVyIG1fcmVhZGVyOworICAgIEpTV0FTTU1vZHVsZSogbV9tb2R1
bGU7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNUmVhZGVyLmNwcAppbmRleCAyN2JmOTM5NDJiYWMxYmQ0OTJiZjc0MzI4MzBi
ZTcxMTBiZGFhOTc2Li5kYzNhOGU3NjJlMDFkODVjMDI4YWUzZWJmOGU0MDQ4MWQxOGZlNzc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmNwcApAQCAtMjgsMTEgKzI4
LDEzIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CisKICNkZWZpbmUgQ0hFQ0tfUkVBRChsZW5ndGgpIGRvIHsgaWYgKG1f
Y3Vyc29yICsgbGVuZ3RoID4gbV9idWZmZXIuZW5kKCkpIHJldHVybiBmYWxzZTsgfSB3aGlsZSAo
MCkKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgV0FTTVJlYWRlcjo6cmVhZFVuc2lnbmVkSW50
MzIodWludDMyX3QmIHJlc3VsdCkKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZFVJbnQzMih1aW50MzJf
dCYgcmVzdWx0KQogewogICAgIENIRUNLX1JFQUQoNCk7CiAgICAgcmVzdWx0ID0gbV9jdXJzb3Jb
MF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1cnNvclszXSA8
PCAyNDsKQEAgLTc2LDYgKzc4LDYyIEBAIGJvb2wgV0FTTVJlYWRlcjo6cmVhZERvdWJsZShkb3Vi
bGUmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBXQVNNUmVhZGVyOjpyZWFk
Q29tcGFjdFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQoreworICAgIENIRUNLX1JFQUQoMSk7Cisg
ICAgcmVzdWx0ID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHJlc3VsdCA8IDB4ODApCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIHJlc3VsdCAmPSAweDdmOworICAgIHVuc2lnbmVkIHNoaWZ0ID0g
NzsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBDSEVDS19SRUFEKDEpOworICAgICAgICB1
aW50MzJfdCBieXRlID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmIChieXRlIDwgMHg4MCkgewor
ICAgICAgICAgICAgcmVzdWx0IHw9IChieXRlIDw8IHNoaWZ0KTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCB8PSAoYnl0ZSAmIDB4N2YpIDw8IHNo
aWZ0OworICAgICAgICBzaGlmdCArPSA3OworICAgIH0KK30KKworYm9vbCBXQVNNUmVhZGVyOjpy
ZWFkU3RyaW5nKFN0cmluZyYgcmVzdWx0KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBDSEVDS19SRUFEKDEpOworICAgICAgICBjaGFy
IGMgPSAqbV9jdXJzb3IrKzsKKyAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGMpOworICAgIH0KKyAgICByZXN1bHQgPSBidWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZFR5
cGUoV0FTTVR5cGUmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gcmVhZEJ5dGU8V0FTTVR5cGU+KHJl
c3VsdCk7Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZFJldHVyblR5cGUoV0FTTVJldHVyblR5
cGUmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gcmVhZEJ5dGU8V0FTTVJldHVyblR5cGU+KHJlc3Vs
dCk7Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZEV4cG9ydEZvcm1hdChXQVNNRXhwb3J0Rm9y
bWF0JiByZXN1bHQpCit7CisgICAgcmV0dXJuIHJlYWRCeXRlPFdBU01FeHBvcnRGb3JtYXQ+KHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBib29sIFdBU01SZWFkZXI6OnJlYWRCeXRl
KFQmIHJlc3VsdCkKK3sKKyAgICBDSEVDS19SRUFEKDEpOworICAgIHJlc3VsdCA9IFQoKm1fY3Vy
c29yKyspOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01SZWFkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01S
ZWFkZXIuaAppbmRleCA3Y2RlYTJiOTJkODJkZTZkYWE3OGNiN2Q4ZjMzMmEyM2YzZWZmY2UxLi4w
MjkwMjU0MmJkMmVkMGZmMmI0ZmFmN2I2ZTBhZmU5NzE4NWFkYTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTVJlYWRlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsMTEgKzQxLDIxIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgYm9vbCByZWFkVW5zaWduZWRJbnQzMih1aW50MzJfdCYgcmVz
dWx0KTsKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yIC0gbV9i
dWZmZXIuZGF0YSgpOyB9CisgICAgdm9pZCBzZXRJbmRleCh1bnNpZ25lZCBpbmRleCkgeyBtX2N1
cnNvciA9IG1fYnVmZmVyLmRhdGEoKSArIGluZGV4OyB9CisKKyAgICBib29sIHJlYWRVSW50MzIo
dWludDMyX3QmIHJlc3VsdCk7CiAgICAgYm9vbCByZWFkRmxvYXQoZmxvYXQmIHJlc3VsdCk7CiAg
ICAgYm9vbCByZWFkRG91YmxlKGRvdWJsZSYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRDb21wYWN0
VUludDMyKHVpbnQzMl90JiByZXN1bHQpOworICAgIGJvb2wgcmVhZFN0cmluZyhTdHJpbmcmIHJl
c3VsdCk7CisgICAgYm9vbCByZWFkVHlwZShXQVNNVHlwZSYgcmVzdWx0KTsKKyAgICBib29sIHJl
YWRSZXR1cm5UeXBlKFdBU01SZXR1cm5UeXBlJiByZXN1bHQpOworICAgIGJvb2wgcmVhZEV4cG9y
dEZvcm1hdChXQVNNRXhwb3J0Rm9ybWF0JiByZXN1bHQpOwogCiBwcml2YXRlOgorICAgIHRlbXBs
YXRlIDxjbGFzcyBUPiBib29sIHJlYWRCeXRlKFQmIHJlc3VsdCk7CisKICAgICBjb25zdCBWZWN0
b3I8dWludDhfdD4mIG1fYnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fY3Vyc29yOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257743</attachid>
            <date>2015-07-29 01:37:27 -0700</date>
            <delta_ts>2015-07-31 00:08:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147393-20150729013605.patch</filename>
            <type>text/plain</type>
            <size>24575</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NWE3MTY0ZjVhY2ZlY2ZiMzk5ZmMxYWRjOTlmODUyMzRiMzVmZDZkLi44NzJkYTIwNmYyZmUyMDJm
NzQwODkyZTE5YzdhZmYzYTRhNDMzMGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAxNS0wNy0yOSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgZW50aXJlIFdlYkFzc2VtYmx5IG1vZHVsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNlIHRo
ZSBlbnRpcmUgV2ViQXNzZW1ibHkgbW9kdWxlcyBmcm9tIGZpbGVzIHByb2R1Y2VkIGJ5IHBhY2st
YXNtanMKKyAgICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9wb2x5ZmlsbC1w
cm90b3R5cGUtMT4uIFRoaXMgcGF0Y2ggY2FuIG9ubHkKKyAgICAgICAgcGFyc2UgbW9kdWxlcyB3
aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNlY3Rpb24gY29udGFpbnMgb25seSBmdW5jdGlvbnMg
dGhhdAorICAgICAgICBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LiBQ
YXJzaW5nIG9mIGFueSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBh
IHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5oOgorICAg
ICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OldBU01Nb2R1
bGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VN
b2R1bGUpOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9v
bFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZVNpZ25hdHVy
ZVNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
SW1wb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlR2xv
YmFsU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvblNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1
bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6
OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpT
Qzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKToKKyAgICAgICAgKiB3YXNt
L1dBU01Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL1dBU01SZWFkZXIuY3BwOgorICAg
ICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkVUludDMyKToKKyAgICAgICAgKEpTQzo6V0FTTVJl
YWRlcjo6cmVhZENvbXBhY3RVSW50MzIpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFk
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFR5cGUpOgorICAgICAgICAo
SlNDOjpXQVNNUmVhZGVyOjpyZWFkUmV0dXJuVHlwZSk6CisgICAgICAgIChKU0M6OldBU01SZWFk
ZXI6OnJlYWRFeHBvcnRGb3JtYXQpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkQnl0
ZSk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRVbnNpZ25lZEludDMyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3YXNtL1dBU01SZWFkZXIuaDoKKwogMjAxNS0wNy0yOCAgU3Vrb2xzYWsg
U2Frc2h1d29uZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgV2Vi
QXNzZW1ibHkgbW9kdWxlIHBhcnNlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vSlNXQVNNTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01N
b2R1bGUuaAppbmRleCA4YWQ5ZTNiODkxYWU4NTYzZTY4MDc5M2I4N2E5ZTUxNGQ2OTEwNzVhLi4x
YWE2ODFkYmMyZGExZGVjNzE4OTYyOTZlZjg0NWRjYzY1MDEyYjMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaApAQCAtMjEsNiArMjEsMjIgQEAKICAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAog
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0aGUgcmVwb3NpdG9yeSBhdXRob3Jz
IG9mIHBvbHlmaWxsLXByb3RvdHlwZS0xLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFj
aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICog
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKICNpZm5kZWYgSlNXQVNNTW9kdWxlX2gK
QEAgLTMyLDYgKzQ4LDQ3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitlbnVtIGNsYXNzIFdBU01U
eXBlIDogdWludDhfdCB7CisgICAgSTMyLAorICAgIEYzMiwKKyAgICBGNjQKK307CisKK2VudW0g
Y2xhc3MgV0FTTVJldHVyblR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMyLAorICAg
IEY2NCwKKyAgICBWb2lkCit9OworCitlbnVtIGNsYXNzIFdBU01FeHBvcnRGb3JtYXQgOiB1aW50
OF90IHsKKyAgICBEZWZhdWx0LAorICAgIFJlY29yZAorfTsKKworc3RydWN0IFdBU01TaWduYXR1
cmUgeworICAgIFdBU01SZXR1cm5UeXBlIHJldHVyblR5cGU7CisgICAgVmVjdG9yPFdBU01UeXBl
PiBhcmd1bWVudHM7Cit9OworCitzdHJ1Y3QgV0FTTUZ1bmN0aW9uSW1wb3J0IHsKKyAgICBTdHJp
bmcgZnVuY3Rpb25OYW1lOworfTsKKworc3RydWN0IFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZSB7CisgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgdWludDMyX3QgZnVuY3Rpb25J
bXBvcnRJbmRleDsKK307CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbiB7CisgICAg
dWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7Cit9OworCitzdHJ1Y3QgV0FTTUZ1bmN0aW9uUG9pbnRl
clRhYmxlIHsKKyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGVsZW1lbnRzOworfTsKKwogY2xhc3MgSlNXQVNNTW9kdWxlIDogcHVibGljIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7CkBAIC01MywxMSArMTEwLDIzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFdBU01Nb2R1bGVQYXJzZXI7CisKICAgICBKU1dBU01Nb2R1bGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgewog
ICAgIH0KIAorICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9pMzJDb25zdGFudHM7CisgICAgVmVjdG9y
PGZsb2F0PiBtX2YzMkNvbnN0YW50czsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2Y2NENvbnN0YW50
czsKKyAgICBWZWN0b3I8V0FTTVNpZ25hdHVyZT4gbV9zaWduYXR1cmVzOworICAgIFZlY3RvcjxX
QVNNRnVuY3Rpb25JbXBvcnQ+IG1fZnVuY3Rpb25JbXBvcnRzOworICAgIFZlY3RvcjxXQVNNRnVu
Y3Rpb25JbXBvcnRTaWduYXR1cmU+IG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOworICAgIFZl
Y3RvcjxXQVNNVHlwZT4gbV9nbG9iYWxWYXJpYWJsZVR5cGVzOworICAgIFZlY3RvcjxXQVNNRnVu
Y3Rpb25EZWNsYXJhdGlvbj4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8V0FT
TUZ1bmN0aW9uUG9pbnRlclRhYmxlPiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsKKwogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRleCBkOGQz
MGY1MzhjNzRmMDg5ZDRmYTVlNjkzZjFkMzEyOTUzZjE0YmYzLi5jMmRlNjNlZTlhNmNlNDU3ZGNm
OTQ2MzZjNjhhMDMxZmNmNDJjYTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtMzIsMTEgKzMyLDE3IEBACiAjaW5jbHVkZSAiSlNX
QVNNTW9kdWxlLmgiCiAjaW5jbHVkZSAiV0FTTU1hZ2ljTnVtYmVyLmgiCiAKLSNkZWZpbmUgRkFJ
TF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKSBkbyB7IG1fZXJyb3JNZXNzYWdlID0gZXJyb3JN
ZXNzYWdlOyByZXR1cm4gZmFsc2U7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfVU5TSUdORURf
SU5UMzJfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkVW5z
aWduZWRJbnQzMih4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAo
MCkKKyNkZWZpbmUgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKSBkbyB7IG1fZXJyb3JN
ZXNzYWdlID0gZXJyb3JNZXNzYWdlOyByZXR1cm47IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURf
VUlOVDMyX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFVJ
bnQzMih4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKICNk
ZWZpbmUgUkVBRF9GTE9BVF9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVh
ZGVyLnJlYWRGbG9hdCh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGls
ZSAoMCkKICNkZWZpbmUgUkVBRF9ET1VCTEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsg
aWYgKCFtX3JlYWRlci5yZWFkRG91YmxlKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3Nh
Z2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoeCwg
ZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZENvbXBhY3RVSW50MzIoeCkpIEZB
SUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURf
U1RSSU5HX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFN0
cmluZyh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNk
ZWZpbmUgUkVBRF9UWVBFX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFk
ZXIucmVhZFR5cGUoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUg
KDApCisjZGVmaW5lIFJFQURfUkVUVVJOX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRv
IHsgaWYgKCFtX3JlYWRlci5yZWFkUmV0dXJuVHlwZSh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJy
b3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9FWFBPUlRfRk9STUFUX09SX0ZB
SUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZEV4cG9ydEZvcm1hdCh4
KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUg
RkFJTF9JRl9GQUxTRShjb25kaXRpb24sIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIShjb25kaXRp
b24pKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmlu
ZSBQUk9QQUdBVEVfRVJST1IoKSBkbyB7IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHJl
dHVybjsgfSB3aGlsZSAoMCkKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ3LDI0ICs1MywyNDcg
QEAgV0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcihjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UpCiAKIEpTV0FTTU1vZHVsZSogV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAg
ICBKU1dBU01Nb2R1bGUqIG1vZHVsZSA9IEpTV0FTTU1vZHVsZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QtPndhc21Nb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgbV9tb2R1bGUgPSBKU1dBU01Nb2R1
bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpOwogICAg
IHBhcnNlTW9kdWxlKCk7CiAgICAgaWYgKCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgewogICAg
ICAgICBlcnJvck1lc3NhZ2UgPSBtX2Vycm9yTWVzc2FnZTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQotICAgIHJldHVybiBtb2R1bGU7CisgICAgcmV0dXJuIG1fbW9kdWxlOwogfQog
Ci1ib29sIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlTW9kdWxlKCkKK3ZvaWQgV0FTTU1vZHVsZVBh
cnNlcjo6cGFyc2VNb2R1bGUoKQogewogICAgIHVpbnQzMl90IG1hZ2ljTnVtYmVyOwotICAgIFJF
QURfVU5TSUdORURfSU5UMzJfT1JfRkFJTChtYWdpY051bWJlciwgIkNhbm5vdCByZWFkIHRoZSBt
YWdpYyBudW1iZXIuIik7CisgICAgUkVBRF9VSU5UMzJfT1JfRkFJTChtYWdpY051bWJlciwgIkNh
bm5vdCByZWFkIHRoZSBtYWdpYyBudW1iZXIuIik7CiAgICAgRkFJTF9JRl9GQUxTRShtYWdpY051
bWJlciA9PSB3YXNtTWFnaWNOdW1iZXIsICJUaGUgbWFnaWMgbnVtYmVyIGlzIGluY29ycmVjdC4i
KTsKIAotICAgIC8vIFRPRE86IHBhcnNlIHRoZSByZXN0CisgICAgdWludDMyX3Qgb3V0cHV0U2l6
ZUluQVNNSlM7CisgICAgUkVBRF9VSU5UMzJfT1JfRkFJTChvdXRwdXRTaXplSW5BU01KUywgIkNh
bm5vdCByZWFkIHRoZSBvdXRwdXQgc2l6ZSBpbiBhc20uanMgZm9ybWF0LiIpOwogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgUFJPUEFHQVRF
X0VSUk9SKCk7CisgICAgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VS
Uk9SKCk7CisgICAgcGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVf
RVJST1IoKTsKKyAgICBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1Io
KTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgUFJPUEFHQVRF
X0VSUk9SKCk7CisgICAgcGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZVNlY3Rpb24oKTsKKyAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oKTsK
KyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUV4cG9ydFNlY3Rpb24oKTsKK30KKwor
dm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKQoreworICAg
IHVpbnQzMl90IG51bWJlck9mSTMyQ29uc3RhbnRzOworICAgIHVpbnQzMl90IG51bWJlck9mRjMy
Q29uc3RhbnRzOworICAgIHVpbnQzMl90IG51bWJlck9mRjY0Q29uc3RhbnRzOworICAgIFJFQURf
Q09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkkzMkNvbnN0YW50cywgIkNhbm5vdCByZWFk
IHRoZSBudW1iZXIgb2YgaW50MzIgY29uc3RhbnRzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTChudW1iZXJPZkYzMkNvbnN0YW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIg
b2YgZmxvYXQzMiBjb25zdGFudHMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlM
KG51bWJlck9mRjY0Q29uc3RhbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmbG9hdDY0
IGNvbnN0YW50cy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5tX2kzMkNvbnN0YW50
cy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZJMzJDb25zdGFudHMpLCAiQ2Fubm90IGFsbG9j
YXRlIG1lbW9yeSBmb3IgdGhlIGludDMyIGNvbnN0YW50cy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNF
KG1fbW9kdWxlLT5tX2YzMkNvbnN0YW50cy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZGMzJD
b25zdGFudHMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZsb2F0MzIgY29uc3Rh
bnRzLiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPm1fZjY0Q29uc3RhbnRzLnRyeVJl
c2VydmVDYXBhY2l0eShudW1iZXJPZkY2NENvbnN0YW50cyksICJDYW5ub3QgYWxsb2NhdGUgbWVt
b3J5IGZvciB0aGUgZmxvYXQ2NCBjb25zdGFudHMuIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZJMzJDb25zdGFudHM7ICsraSkgeworICAgICAgICB1aW50MzJfdCBj
b25zdGFudDsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGNvbnN0YW50LCAi
Q2Fubm90IHJlYWQgYW4gaW50MzIgY29uc3RhbnQuIik7CisgICAgICAgIG1fbW9kdWxlLT5tX2kz
MkNvbnN0YW50cy5hcHBlbmQoY29uc3RhbnQpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZGMzJDb25zdGFudHM7ICsraSkgeworICAgICAgICBmbG9hdCBjb25z
dGFudDsKKyAgICAgICAgUkVBRF9GTE9BVF9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQg
YSBmbG9hdDMyIGNvbnN0YW50LiIpOworICAgICAgICBtX21vZHVsZS0+bV9mMzJDb25zdGFudHMu
YXBwZW5kKGNvbnN0YW50KTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bWJlck9mRjY0Q29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGNvbnN0YW50OworICAg
ICAgICBSRUFEX0RPVUJMRV9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYSBmbG9hdDY0
IGNvbnN0YW50LiIpOworICAgICAgICBtX21vZHVsZS0+bV9mNjRDb25zdGFudHMuYXBwZW5kKGNv
bnN0YW50KTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VTaWduYXR1
cmVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXM7CisgICAgUkVB
RF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mU2lnbmF0dXJlcywgIkNhbm5vdCByZWFk
IHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxl
LT5tX3NpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mU2lnbmF0dXJlcyksICJD
YW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc2lnbmF0dXJlcy4iKTsKKyAgICBmb3IgKHVp
bnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5kZXggPCBudW1iZXJPZlNpZ25h
dHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgV0FTTVNpZ25hdHVyZSBzaWduYXR1
cmU7CisgICAgICAgIFJFQURfUkVUVVJOX1RZUEVfT1JfRkFJTChzaWduYXR1cmUucmV0dXJuVHlw
ZSwgIkNhbm5vdCByZWFkIHRoZSByZXR1cm4gdHlwZS4iKTsKKyAgICAgICAgdWludDMyX3QgYXJn
dW1lbnRDb3VudDsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGFyZ3VtZW50
Q291bnQsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTsKKyAgICAgICAg
RkFJTF9JRl9GQUxTRShzaWduYXR1cmUuYXJndW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1
bWVudENvdW50KSwgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBhcmd1bWVudHMuIik7
CisgICAgICAgIGZvciAodWludDMyX3QgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXgg
PCBhcmd1bWVudENvdW50OyArK2FyZ3VtZW50SW5kZXgpIHsKKyAgICAgICAgICAgIFdBU01UeXBl
IHR5cGU7CisgICAgICAgICAgICBSRUFEX1RZUEVfT1JfRkFJTCh0eXBlLCAiQ2Fubm90IHJlYWQg
dGhlIHR5cGUgb2YgYW4gYXJndW1lbnQuIik7CisgICAgICAgICAgICBzaWduYXR1cmUuYXJndW1l
bnRzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBtX21vZHVsZS0+bV9zaWduYXR1
cmVzLmFwcGVuZChzaWduYXR1cmUpOworICAgIH0KK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2Vy
OjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZG
dW5jdGlvbkltcG9ydHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25h
dHVyZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25J
bXBvcnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnRzLiIpOwor
ICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gaW1wb3J0IHNpZ25h
dHVyZXMuIik7CisgICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25JbXBvcnRzKSwgIkNhbm5vdCBhbGxv
Y2F0ZSBtZW1vcnkgZm9yIHRoZSBmdW5jdGlvbiBpbXBvcnRzLiIpOworICAgIEZBSUxfSUZfRkFM
U0UobV9tb2R1bGUtPm1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0
eShudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcyksICJDYW5ub3QgYWxsb2NhdGUgbWVt
b3J5IGZvciB0aGUgZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZXMuIik7CisKKyAgICBmb3IgKHVp
bnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXggPSAwOyBmdW5jdGlvbkltcG9ydEluZGV4IDwgbnVt
YmVyT2ZGdW5jdGlvbkltcG9ydHM7ICsrZnVuY3Rpb25JbXBvcnRJbmRleCkgeworICAgICAgICBX
QVNNRnVuY3Rpb25JbXBvcnQgZnVuY3Rpb25JbXBvcnQ7CisgICAgICAgIFJFQURfU1RSSU5HX09S
X0ZBSUwoZnVuY3Rpb25JbXBvcnQuZnVuY3Rpb25OYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0
aW9uIGltcG9ydCBuYW1lLiIpOworICAgICAgICBtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydHMu
YXBwZW5kKGZ1bmN0aW9uSW1wb3J0KTsKKworICAgICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25h
dHVyZXM7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZlNpZ25h
dHVyZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMuIik7CisgICAgICAg
IEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPm1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLnNpemUo
KSArIG51bWJlck9mU2lnbmF0dXJlcyA8PSBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
cywgIlRoZSBudW1iZXIgb2YgZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZXMgaXMgaW5jb3JyZWN0
LiIpOworCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNpZ25hdHVy
ZXM7ICsraSkgeworICAgICAgICAgICAgV0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIGZ1bmN0
aW9uSW1wb3J0U2lnbmF0dXJlOworICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9G
QUlMKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQg
dGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rp
b25JbXBvcnRTaWduYXR1cmUuc2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+bV9zaWduYXR1cmVz
LnNpemUoKSwgIlRoZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgICAgICAg
ICAgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUuZnVuY3Rpb25JbXBvcnRJbmRleCA9IGZ1bmN0aW9u
SW1wb3J0SW5kZXg7CisgICAgICAgICAgICBtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydFNpZ25h
dHVyZXMuYXBwZW5kKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5tX2Z1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcy5z
aXplKCkgPT0gbnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMsICJUaGUgbnVtYmVyIG9m
IGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmVzIGlzIGluY29ycmVjdC4iKTsKK30KKwordm9pZCBX
QVNNTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51
bWJlck9mTm9uSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXM7CisgICAgdWludDMyX3QgbnVtYmVy
T2ZOb25JbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlczsKKyAgICB1aW50MzJfdCBudW1iZXJPZk5v
bkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOworICAgIHVpbnQzMl90IG51bWJlck9mSW1wb3J0
ZWRJMzJHbG9iYWxWYXJpYWJsZXM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJbXBvcnRlZEYzMkds
b2JhbFZhcmlhYmxlczsKKyAgICB1aW50MzJfdCBudW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFy
aWFibGVzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZk5vbkltcG9y
dGVkSTMyR2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBub24taW1w
b3J0ZWQgaW50MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMy
X09SX0ZBSUwobnVtYmVyT2ZOb25JbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCBy
ZWFkIHRoZSBudW1iZXIgb2Ygbm9uLWltcG9ydGVkIGZsb2F0MzIgZ2xvYmFsIHZhcmlhYmxlcy4i
KTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZOb25JbXBvcnRlZEY2
NEdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Ygbm9uLWltcG9ydGVk
IGZsb2F0NjQgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09S
X0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRo
ZSBudW1iZXIgb2YgaW1wb3J0ZWQgaW50MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxl
cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgZmxvYXQzMiBnbG9iYWwgdmFy
aWFibGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkltcG9y
dGVkRjY0R2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbXBvcnRl
ZCBmbG9hdDY0IGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgdWludDMyX3QgbnVtYmVyT2ZHbG9i
YWxWYXJpYWJsZXMgPSBudW1iZXJPZk5vbkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzICsgbnVt
YmVyT2ZOb25JbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mTm9uSW1wb3J0ZWRG
NjRHbG9iYWxWYXJpYWJsZXMgKworICAgICAgICBudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFy
aWFibGVzICsgbnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW1w
b3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXM7CisKKyAgICBWZWN0b3I8V0FTTVR5cGU+JiBnbG9iYWxW
YXJpYWJsZVR5cGVzID0gbV9tb2R1bGUtPm1fZ2xvYmFsVmFyaWFibGVUeXBlczsKKyAgICBGQUlM
X0lGX0ZBTFNFKGdsb2JhbFZhcmlhYmxlVHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9m
R2xvYmFsVmFyaWFibGVzKSwgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBnbG9iYWwg
dmFyaWFibGVzLiIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZk5vbklt
cG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOyArK2kpCisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlw
ZXMuYXBwZW5kKFdBU01UeXBlOjpJMzIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZk5vbkltcG9ydGVkRjMyR2xvYmFsVmFyaWFibGVzOyArK2kpCisgICAgICAgIGdsb2Jh
bFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpGMzIpOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZk5vbkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOyArK2kpCisg
ICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpGNjQpOworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVz
OyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGltcG9ydE5hbWU7CisgICAgICAgIFJFQURfU1RSSU5H
X09SX0ZBSUwoaW1wb3J0TmFtZSwgIkNhbm5vdCByZWFkIHRoZSBpbXBvcnQgbmFtZSBvZiBhbiBp
bnQzMiBnbG9iYWwgdmFyaWFibGUuIik7CisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBw
ZW5kKFdBU01UeXBlOjpJMzIpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlczsgKytpKSB7CisgICAgICAgIFN0cmlu
ZyBpbXBvcnROYW1lOworICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJD
YW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUgb2YgYSBmbG9hdDMyIGdsb2JhbCB2YXJpYWJsZS4i
KTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkYzMik7Cisg
ICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkltcG9ydGVkRjY0R2xv
YmFsVmFyaWFibGVzOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGltcG9ydE5hbWU7CisgICAgICAg
IFJFQURfU1RSSU5HX09SX0ZBSUwoaW1wb3J0TmFtZSwgIkNhbm5vdCByZWFkIHRoZSBpbXBvcnQg
bmFtZSBvZiBhIGZsb2F0NjQgZ2xvYmFsIHZhcmlhYmxlLiIpOworICAgICAgICBnbG9iYWxWYXJp
YWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6RjY0KTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpCit7CisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9uczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucywgIkNhbm5vdCByZWFkIHRo
ZSBudW1iZXIgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiIpOworICAgIEZBSUxfSUZfRkFMU0Uo
bV9tb2R1bGUtPm1fZnVuY3Rpb25EZWNsYXJhdGlvbnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJl
ck9mRnVuY3Rpb25EZWNsYXJhdGlvbnMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhl
IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4iKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9uczsgKytpKSB7CisgICAgICAgIFdBU01GdW5jdGlv
bkRlY2xhcmF0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAgICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChmdW5jdGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90
IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5j
dGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4IDwgbV9tb2R1bGUtPm1fc2lnbmF0dXJlcy5z
aXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgbV9t
b2R1bGUtPm1fZnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKGZ1bmN0aW9uRGVjbGFyYXRpb24p
OworICAgIH0KK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRl
clRhYmxlU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJU
YWJsZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25Q
b2ludGVyVGFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBwb2ludGVy
IHRhYmxlcy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5tX2Z1bmN0aW9uUG9pbnRl
clRhYmxlcy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXMp
LCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVz
LiIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uUG9pbnRl
clRhYmxlczsgKytpKSB7CisgICAgICAgIFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSBmdW5jdGlv
blBvaW50ZXJUYWJsZTsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0
aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVy
ZSBpbmRleC4iKTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvblBvaW50ZXJUYWJsZS5z
aWduYXR1cmVJbmRleCA8IG1fbW9kdWxlLT5tX3NpZ25hdHVyZXMuc2l6ZSgpLCAiVGhlIHNpZ25h
dHVyZSBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mRWxl
bWVudHM7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkVsZW1l
bnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiBhIGZ1bmN0aW9uIHBv
aW50ZXIgdGFibGUuIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25Qb2ludGVyVGFi
bGUuZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mRWxlbWVudHMpLCAiQ2Fubm90
IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0
YWJsZS4iKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IG51bWJlck9mRWxlbWVu
dHM7ICsraikgeworICAgICAgICAgICAgdWludDMyX3QgZWxlbWVudDsKKyAgICAgICAgICAgIFJF
QURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChlbGVtZW50LCAiQ2Fubm90IHJlYWQgYW4gZWxlbWVu
dCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7CisgICAgICAgICAgICBmdW5jdGlvblBv
aW50ZXJUYWJsZS5lbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAg
bV9tb2R1bGUtPm1fZnVuY3Rpb25Qb2ludGVyVGFibGVzLmFwcGVuZChmdW5jdGlvblBvaW50ZXJU
YWJsZSk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25E
ZWZpbml0aW9uU2VjdGlvbigpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21vZHVs
ZS0+bV9mdW5jdGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBwYXJzZUZ1
bmN0aW9uRGVmaW5pdGlvbigpOworICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oKQorewor
ICAgIC8vIFRPRE86IFN1cHBvcnQgYW55IGZ1bmN0aW9ucy4KKyAgICAvLyBDdXJyZW50bHksIHdl
IG9ubHkgc3VwcG9ydCBmdW5jdGlvbnMgdGhhdCBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9u
bHkgc3RhdGVtZW50LgorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBjb25zaXN0IG9mIGV4YWN0bHkg
NCBieXRlcywgaS5lLgorICAgIC8vIDEuIFRoZSBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzICgw
KSBbMHg4MF0KKyAgICAvLyAyLiBUaGUgbnVtYmVyIG9mIHN0YXRlbWVudHMgKDEpIFsweDAxXQor
ICAgIC8vIDMuIFRoZSByZXR1cm4gc3RhdGVtZW50IFsweDBmXQorICAgIC8vIDQuIFRoZSBpbW1l
ZGlhdGUgZXhwcmVzc2lvbiAoMCkgWzB4YTBdCisgICAgdWludDMyX3QgZnVuY3Rpb25EZWZpbml0
aW9uQnl0ZXM7CisgICAgUkVBRF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkRlZmluaXRpb25CeXRl
cywgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiIpOworICAgIEZBSUxfSUZf
RkFMU0UoZnVuY3Rpb25EZWZpbml0aW9uQnl0ZXMgPT0gMHhhMDBmMDE4MCwgIk9ubHkgZnVuY3Rp
b25zIHRoYXQgaGF2ZSBcInJldHVybiAwO1wiICIKKyAgICAgICAgImFzIHRoZWlyIG9ubHkgc3Rh
dGVtZW50IGFyZSBzdXBwcG9ydGVkIGF0IHRoZSBtb21lbnQuIik7Cit9CisKK3ZvaWQgV0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKCkKK3sKKyAgICBXQVNNRXhwb3J0Rm9ybWF0
IGV4cG9ydEZvcm1hdDsKKyAgICBSRUFEX0VYUE9SVF9GT1JNQVRfT1JfRkFJTChleHBvcnRGb3Jt
YXQsICJDYW5ub3QgcmVhZCB0aGUgZXhwb3J0IGZvcm1hdC4iKTsKKyAgICBzd2l0Y2ggKGV4cG9y
dEZvcm1hdCkgeworICAgIGNhc2UgV0FTTUV4cG9ydEZvcm1hdDo6RGVmYXVsdDogeworICAgICAg
ICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09S
X0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbmRleC4iKTsK
KyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGUtPm1fZnVuY3Rp
b25EZWNsYXJhdGlvbnMuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4IGlzIGluY29ycmVjdC4i
KTsKKyAgICAgICAgLy8gVE9ETzogRXhwb3J0IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgV0FTTUV4cG9ydEZvcm1hdDo6UmVjb3JkOiB7CisgICAgICAgIHVp
bnQzMl90IG51bWJlck9mRXhwb3J0czsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9G
QUlMKG51bWJlck9mRXhwb3J0cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZXhwb3J0cy4i
KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBleHBvcnRJbmRleCA9IDA7IGV4cG9ydEluZGV4IDwg
bnVtYmVyT2ZFeHBvcnRzOyArK2V4cG9ydEluZGV4KSB7CisgICAgICAgICAgICBTdHJpbmcgZXhw
b3J0TmFtZTsKKyAgICAgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoZXhwb3J0TmFtZSwgIkNh
bm5vdCByZWFkIHRoZSBmdW5jdGlvbiBleHBvcnQgbmFtZS4iKTsKKyAgICAgICAgICAgIC8vIFRP
RE86IENoZWNrIGlmIGV4cG9ydE5hbWUgaXMgbGVnYWwuCisgICAgICAgICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4OworICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1
bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW5kZXguIik7CisgICAgICAg
ICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZS0+bV9mdW5jdGlvbkRl
Y2xhcmF0aW9ucy5zaXplKCksICJUaGUgZnVuY3Rpb24gaW5kZXggaXMgaW5jb3JyZWN0LiIpOwor
ICAgICAgICAgICAgLy8gVE9ETzogRXhwb3J0IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgRkFJTF9XSVRIX01FU1NB
R0UoIlVua25vd24gZXhwb3J0IGZvcm1hdC4iKTsKKyAgICB9CiB9CiAKIEpTV0FTTU1vZHVsZSog
cGFyc2VXZWJBc3NlbWJseShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmgKaW5kZXggZjVkNmEzMTc4OWUxMzEwZDQ3NzJkNTgxMjhlZGFhNGQ2
NmQzYzQyNS4uZmU3MDg5YjEwZjg4ZDNkMDEyYmMwNDA1M2YyYTdkYzNkNDk1MWU2MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaApAQCAtNDUsOSAr
NDUsMTkgQEAgcHVibGljOgogICAgIEpTV0FTTU1vZHVsZSogcGFyc2UoVk0mLCBKU0dsb2JhbE9i
amVjdCosIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAogcHJpdmF0ZToKLSAgICBib29sIHBhcnNl
TW9kdWxlKCk7CisgICAgdm9pZCBwYXJzZU1vZHVsZSgpOworICAgIHZvaWQgcGFyc2VDb25zdGFu
dFBvb2xTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2
b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUdsb2JhbFNl
Y3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAg
ICB2b2lkIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJz
ZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWZp
bml0aW9uKCk7CisgICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rpb24oKTsKIAogICAgIFdBU01SZWFk
ZXIgbV9yZWFkZXI7CisgICAgSlNXQVNNTW9kdWxlKiBtX21vZHVsZTsKICAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNUmVhZGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIu
Y3BwCmluZGV4IDI3YmY5Mzk0MmJhYzFiZDQ5MmJmNzQzMjgzMGJlNzExMGJkYWE5NzYuLmRjM2E4
ZTc2MmUwMWQ4NWMwMjhhZTNlYmY4ZTQwNDgxZDE4ZmU3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01SZWFkZXIuY3BwCkBAIC0yOCwxMSArMjgsMTMgQEAKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwog
I2RlZmluZSBDSEVDS19SRUFEKGxlbmd0aCkgZG8geyBpZiAobV9jdXJzb3IgKyBsZW5ndGggPiBt
X2J1ZmZlci5lbmQoKSkgcmV0dXJuIGZhbHNlOyB9IHdoaWxlICgwKQogCiBuYW1lc3BhY2UgSlND
IHsKIAotYm9vbCBXQVNNUmVhZGVyOjpyZWFkVW5zaWduZWRJbnQzMih1aW50MzJfdCYgcmVzdWx0
KQorYm9vbCBXQVNNUmVhZGVyOjpyZWFkVUludDMyKHVpbnQzMl90JiByZXN1bHQpCiB7CiAgICAg
Q0hFQ0tfUkVBRCg0KTsKICAgICByZXN1bHQgPSBtX2N1cnNvclswXSB8IG1fY3Vyc29yWzFdIDw8
IDggfCBtX2N1cnNvclsyXSA8PCAxNiB8IG1fY3Vyc29yWzNdIDw8IDI0OwpAQCAtNzYsNiArNzgs
NjIgQEAgYm9vbCBXQVNNUmVhZGVyOjpyZWFkRG91YmxlKGRvdWJsZSYgcmVzdWx0KQogICAgIHJl
dHVybiB0cnVlOwogfQogCitib29sIFdBU01SZWFkZXI6OnJlYWRDb21wYWN0VUludDMyKHVpbnQz
Ml90JiByZXN1bHQpCit7CisgICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICByZXN1bHQgPSAqbV9jdXJz
b3IrKzsKKyAgICBpZiAocmVzdWx0IDwgMHg4MCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmVzdWx0ICY9IDB4N2Y7CisgICAgdW5zaWduZWQgc2hpZnQgPSA3OworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIENIRUNLX1JFQUQoMSk7CisgICAgICAgIHVpbnQzMl90IGJ5dGUgPSAqbV9j
dXJzb3IrKzsKKyAgICAgICAgaWYgKGJ5dGUgPCAweDgwKSB7CisgICAgICAgICAgICByZXN1bHQg
fD0gKGJ5dGUgPDwgc2hpZnQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgICAgIHNoaWZ0
ICs9IDc7CisgICAgfQorfQorCitib29sIFdBU01SZWFkZXI6OnJlYWRTdHJpbmcoU3RyaW5nJiBy
ZXN1bHQpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgIENIRUNLX1JFQUQoMSk7CisgICAgICAgIGNoYXIgYyA9ICptX2N1cnNvcisrOwor
ICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoYyk7CisgICAgfQorICAgIHJlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXQVNNUmVhZGVyOjpyZWFkVHlwZShXQVNNVHlwZSYgcmVzdWx0
KQoreworICAgIHJldHVybiByZWFkQnl0ZTxXQVNNVHlwZT4ocmVzdWx0KTsKK30KKworYm9vbCBX
QVNNUmVhZGVyOjpyZWFkUmV0dXJuVHlwZShXQVNNUmV0dXJuVHlwZSYgcmVzdWx0KQoreworICAg
IHJldHVybiByZWFkQnl0ZTxXQVNNUmV0dXJuVHlwZT4ocmVzdWx0KTsKK30KKworYm9vbCBXQVNN
UmVhZGVyOjpyZWFkRXhwb3J0Rm9ybWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gcmVhZEJ5dGU8V0FTTUV4cG9ydEZvcm1hdD4ocmVzdWx0KTsKK30KKwordGVtcGxh
dGUgPGNsYXNzIFQ+IGJvb2wgV0FTTVJlYWRlcjo6cmVhZEJ5dGUoVCYgcmVzdWx0KQoreworICAg
IENIRUNLX1JFQUQoMSk7CisgICAgcmVzdWx0ID0gVCgqbV9jdXJzb3IrKyk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oCmluZGV4IDdjZGVh
MmI5MmQ4MmRlNmRhYTc4Y2I3ZDhmMzMyYTIzZjNlZmZjZTEuLjYwMzgyZjVmMjkwMGQ5ODYwOGFj
NTA0ZTQyYzdlMTU0Y2RhOTU4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01SZWFkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVh
ZGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2lu
Y2x1ZGUgIkpTV0FTTU1vZHVsZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00MCwxMSArNDEsMTggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAg
ICBib29sIHJlYWRVbnNpZ25lZEludDMyKHVpbnQzMl90JiByZXN1bHQpOworICAgIGJvb2wgcmVh
ZFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKICAgICBib29sIHJlYWRGbG9hdChmbG9hdCYgcmVz
dWx0KTsKICAgICBib29sIHJlYWREb3VibGUoZG91YmxlJiByZXN1bHQpOworICAgIGJvb2wgcmVh
ZENvbXBhY3RVSW50MzIodWludDMyX3QmIHJlc3VsdCk7CisgICAgYm9vbCByZWFkU3RyaW5nKFN0
cmluZyYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRUeXBlKFdBU01UeXBlJiByZXN1bHQpOworICAg
IGJvb2wgcmVhZFJldHVyblR5cGUoV0FTTVJldHVyblR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCBy
ZWFkRXhwb3J0Rm9ybWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3VsdCk7CiAKIHByaXZhdGU6Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmVhZEJ5dGUoVCYgcmVzdWx0KTsKKwogICAgIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgbV9idWZmZXI7CiAgICAgY29uc3QgdWludDhfdCogbV9jdXJz
b3I7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257910</attachid>
            <date>2015-07-31 00:08:53 -0700</date>
            <delta_ts>2015-07-31 15:57:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147393-20150731000851.patch</filename>
            <type>text/plain</type>
            <size>31460</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2EyZWM3YjI1ODBjNWQ3NTI4NzgzYzE5MTc1OWI0ZjMyZWFlYjQ2Li5iYjk0ODcyY2JhZGFiNDQ0
N2E2MzgyYjhiMWIyMGY2ZjNjNjQ0MDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNS0wNy0zMSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgZW50aXJlIFdlYkFzc2VtYmx5IG1vZHVsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNlIHRo
ZSBlbnRpcmUgV2ViQXNzZW1ibHkgbW9kdWxlcyBmcm9tIGZpbGVzIHByb2R1Y2VkIGJ5IHBhY2st
YXNtanMKKyAgICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9wb2x5ZmlsbC1w
cm90b3R5cGUtMT4uIFRoaXMgcGF0Y2ggY2FuIG9ubHkKKyAgICAgICAgcGFyc2UgbW9kdWxlcyB3
aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNlY3Rpb24gY29udGFpbnMgb25seSBmdW5jdGlvbnMg
dGhhdAorICAgICAgICBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LiBQ
YXJzaW5nIG9mIGFueSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBh
IHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdhc20vSlNXQVNNTW9kdWxlLmg6CisgICAgICAg
IChKU0M6OkpTV0FTTU1vZHVsZTo6aTMyQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXQVNN
TW9kdWxlOjpmMzJDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmY2NENv
bnN0YW50cyk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6c2lnbmF0dXJlcyk6CisgICAg
ICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRzKToKKyAgICAgICAgKEpTQzo6
SlNXQVNNTW9kdWxlOjpmdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMpOgorICAgICAgICAoSlNDOjpK
U1dBU01Nb2R1bGU6Omdsb2JhbFZhcmlhYmxlVHlwZXMpOgorICAgICAgICAoSlNDOjpKU1dBU01N
b2R1bGU6OmZ1bmN0aW9uRGVjbGFyYXRpb25zKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxl
OjpmdW5jdGlvblBvaW50ZXJUYWJsZXMpOgorICAgICAgICAqIHdhc20vV0FTTUZvcm1hdC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgu
CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlQ29uc3Rh
bnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlU2ln
bmF0dXJlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVu
Y3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFy
c2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24pOgorICAgICAg
ICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAq
IHdhc20vV0FTTU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV0FTTVJlYWRlci5jcHA6
CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRVSW50MzIpOgorICAgICAgICAoSlNDOjpX
QVNNUmVhZGVyOjpyZWFkQ29tcGFjdFVJbnQzMik6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6
OnJlYWRTdHJpbmcpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkVHlwZSk6CisgICAg
ICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRSZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6V0FT
TVJlYWRlcjo6cmVhZEV4cG9ydEZvcm1hdCk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJl
YWRCeXRlKToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFVuc2lnbmVkSW50MzIpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTVJlYWRlci5oOgorCiAyMDE1LTA3LTI5ICBCYXNp
bGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCBza2lwcGluZyBhIHRlc3QgdGhhdCBpcyB0b28gY29tcGxleCBmb3IgaXRzIG93biBnb29k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMwNjY5YzdmZTM1MGJhNWVhNDUzMWFh
YzU1Mzg3NDhlOWY5MzY1M2MuLjE1ZmU0N2U3ZDdkYzMzNzkwNjJlOTI3ZTY0Yjc4MzMwOGI1NDE0
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDI4LDYgKzEwMjgsNyBAQAog
CQk3QjdBNUUyNzFCNjgyODhDMDAyN0NBRDAgLyogV0FTTU1hZ2ljTnVtYmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjdBNUUyNjFCNjgyODg0MDAy
N0NBRDAgLyogV0FTTU1hZ2ljTnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8qIEpTV0FTTU1v
ZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLzsgfTsKIAkJN0I5
OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8q
IEpTV0FTTU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkM1NDdEMjFCNjk1OTlC
MDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VE
ZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovOyB9
OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Q5MTg3MTI0
QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3NjMxQjYwMDk1NUMyNCAvKiBN
aWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc4MSw2ICsyNzgyLDcgQEAKIAkJ
N0I3QTVFMjYxQjY4Mjg4NDAwMjdDQUQwIC8qIFdBU01NYWdpY051bWJlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNTWFnaWNOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dBU01Nb2R1bGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQg
LyogSlNXQVNNTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV0FT
TU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkM1NDdEMjFCNjk1OTlC
MDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQVNNRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q4MTg3
MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb21pc2VEZWZlcnJlZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZl
cnJlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb21pc2VEZWZlcnJl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENFNTE4NzYzMUI2MDA5NTVD
MjQgLyogTWljcm90YXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pY3Jv
dGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDMxNyw2ICs0MzE5LDcgQEAK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01N
b2R1bGUuY3BwICovLAogCQkJCTdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1
bGUuaCAqLywKKwkJCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICov
LAogCQkJCTdCN0E1RTI2MUI2ODI4ODQwMDI3Q0FEMCAvKiBXQVNNTWFnaWNOdW1iZXIuaCAqLywK
IAkJCQk3QjM5Rjc2OTFCNjJERTIyMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8s
CiAJCQkJN0IzOUY3NkExQjYyREUyMjAwMzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywK
QEAgLTYxMDgsNiArNjExMSw3IEBACiAJCQkJQzI1RjhCQ0UxNTc1NDRBOTAwMjQ1QjcxIC8qIElu
Y3JlbWVudGFsU3dlZXBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTkxNUVEOEU0NjAw
RjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5QTE1
RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3QkM1NDdEMzFCNjk1OUExMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDRUZBQjAxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZN
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDQzE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlh
bGl6ZUxMVk1QT1NJWC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV0FTTU1vZHVsZS5oCmluZGV4IDhhZDllM2I4OTFhZTg1NjNlNjgwNzkzYjg3YTllNTE0ZDY5
MTA3NWEuLjhmZmZhNWVhNDNhNTc3MWE1ODEyNTcyNWI3MGFlZDM4MDk3NTk5ZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3Qu
aCIKKyNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01Miwx
MiArNTMsMzIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCisgICAgVmVjdG9yPHVpbnQzMl90PiYgaTMyQ29uc3RhbnRz
KCkgeyByZXR1cm4gbV9pMzJDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8ZmxvYXQ+JiBmMzJDb25z
dGFudHMoKSB7IHJldHVybiBtX2YzMkNvbnN0YW50czsgfQorICAgIFZlY3Rvcjxkb3VibGU+JiBm
NjRDb25zdGFudHMoKSB7IHJldHVybiBtX2Y2NENvbnN0YW50czsgfQorICAgIFZlY3RvcjxXQVNN
U2lnbmF0dXJlPiYgc2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fc2lnbmF0dXJlczsgfQorICAgIFZl
Y3RvcjxXQVNNRnVuY3Rpb25JbXBvcnQ+JiBmdW5jdGlvbkltcG9ydHMoKSB7IHJldHVybiBtX2Z1
bmN0aW9uSW1wb3J0czsgfQorICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBvcnRTaWduYXR1cmU+
JiBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlczsgfQorICAgIFZlY3RvcjxXQVNNVHlwZT4mIGdsb2JhbFZhcmlhYmxlVHlwZXMoKSB7
IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7IH0KKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9u
RGVjbGFyYXRpb24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25E
ZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlPiYgZnVu
Y3Rpb25Qb2ludGVyVGFibGVzKCkgeyByZXR1cm4gbV9mdW5jdGlvblBvaW50ZXJUYWJsZXM7IH0K
KwogcHJpdmF0ZToKICAgICBKU1dBU01Nb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgewogICAgIH0KIAorICAgIFZl
Y3Rvcjx1aW50MzJfdD4gbV9pMzJDb25zdGFudHM7CisgICAgVmVjdG9yPGZsb2F0PiBtX2YzMkNv
bnN0YW50czsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2Y2NENvbnN0YW50czsKKyAgICBWZWN0b3I8
V0FTTVNpZ25hdHVyZT4gbV9zaWduYXR1cmVzOworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBv
cnQ+IG1fZnVuY3Rpb25JbXBvcnRzOworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBvcnRTaWdu
YXR1cmU+IG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOworICAgIFZlY3RvcjxXQVNNVHlwZT4g
bV9nbG9iYWxWYXJpYWJsZVR5cGVzOworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJhdGlv
bj4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9pbnRl
clRhYmxlPiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsKKwogICAgIFZlY3RvcjxXcml0ZUJhcnJp
ZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkYzkyMzM1NTY1ZmEzNzQ2ZDViNmZjNmNhZjMx
ZTIyYTMxMmZhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRm9ybWF0LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgYnkgdGhlIHJlcG9zaXRvcnkgYXV0aG9ycyBvZgorICogV2ViQXNzZW1ibHkvcG9s
eWZpbGwtcHJvdG90eXBlLTEuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBXQVNNRm9ybWF0X2gKKyNkZWZpbmUg
V0FTTUZvcm1hdF9oCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIGNsYXNzIFdBU01UeXBlIDogdWludDhfdCB7CisgICAgSTMyLAorICAgIEYz
MiwKKyAgICBGNjQKK307CisKK2VudW0gY2xhc3MgV0FTTVJldHVyblR5cGUgOiB1aW50OF90IHsK
KyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NCwKKyAgICBWb2lkCit9OworCitlbnVtIGNsYXNz
IFdBU01FeHBvcnRGb3JtYXQgOiB1aW50OF90IHsKKyAgICBEZWZhdWx0LAorICAgIFJlY29yZAor
fTsKKworc3RydWN0IFdBU01TaWduYXR1cmUgeworICAgIFdBU01SZXR1cm5UeXBlIHJldHVyblR5
cGU7CisgICAgVmVjdG9yPFdBU01UeXBlPiBhcmd1bWVudHM7Cit9OworCitzdHJ1Y3QgV0FTTUZ1
bmN0aW9uSW1wb3J0IHsKKyAgICBTdHJpbmcgZnVuY3Rpb25OYW1lOworfTsKKworc3RydWN0IFdB
U01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSB7CisgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7
CisgICAgdWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleDsKK307CisKK3N0cnVjdCBXQVNNRnVu
Y3Rpb25EZWNsYXJhdGlvbiB7CisgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7Cit9OworCitz
dHJ1Y3QgV0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlIHsKKyAgICB1aW50MzJfdCBzaWduYXR1cmVJ
bmRleDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGVsZW1lbnRzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNlbmRpZiAvLyBXQVNN
Rm9ybWF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1
bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNl
ci5jcHAKaW5kZXggZDhkMzBmNTM4Yzc0ZjA4OWQ0ZmE1ZTY5M2YxZDMxMjk1M2YxNGJmMy4uNDk4
ZTgwN2JjYTkyNWUxM2RiYmFkZmFiNjQ0MWM5M2IzOTU5MjE1ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKQEAgLTMwLDEzICszMCwyMCBA
QAogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV0FTTU1vZHVsZS5oIgor
I2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJXQVNNTWFnaWNOdW1iZXIuaCIK
IAotI2RlZmluZSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpIGRvIHsgbV9lcnJvck1l
c3NhZ2UgPSBlcnJvck1lc3NhZ2U7IHJldHVybiBmYWxzZTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUg
UkVBRF9VTlNJR05FRF9JTlQzMl9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1f
cmVhZGVyLnJlYWRVbnNpZ25lZEludDMyKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3Nh
Z2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2Up
IGRvIHsgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7IHJldHVybjsgfSB3aGlsZSAoMCkK
KyNkZWZpbmUgUkVBRF9VSU5UMzJfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFt
X3JlYWRlci5yZWFkVUludDMyKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9
IHdoaWxlICgwKQogI2RlZmluZSBSRUFEX0ZMT0FUX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBk
byB7IGlmICghbV9yZWFkZXIucmVhZEZsb2F0KHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1l
c3NhZ2UpOyB9IHdoaWxlICgwKQogI2RlZmluZSBSRUFEX0RPVUJMRV9PUl9GQUlMKHgsIGVycm9y
TWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWREb3VibGUoeCkpIEZBSUxfV0lUSF9NRVNT
QUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkQ29tcGFj
dFVJbnQzMih4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkK
KyNkZWZpbmUgUkVBRF9TVFJJTkdfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFt
X3JlYWRlci5yZWFkU3RyaW5nKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9
IHdoaWxlICgwKQorI2RlZmluZSBSRUFEX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRv
IHsgaWYgKCFtX3JlYWRlci5yZWFkVHlwZSh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNz
YWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9SRVRVUk5fVFlQRV9PUl9GQUlMKHgsIGVy
cm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRSZXR1cm5UeXBlKHgpKSBGQUlMX1dJ
VEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRUFEX0VYUE9S
VF9GT1JNQVRfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFk
RXhwb3J0Rm9ybWF0KHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxl
ICgwKQogI2RlZmluZSBGQUlMX0lGX0ZBTFNFKGNvbmRpdGlvbiwgZXJyb3JNZXNzYWdlKSBkbyB7
IGlmICghKGNvbmRpdGlvbikpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hp
bGUgKDApCisjZGVmaW5lIFBST1BBR0FURV9FUlJPUigpIGRvIHsgaWYgKCFtX2Vycm9yTWVzc2Fn
ZS5pc051bGwoKSkgcmV0dXJuOyB9IHdoaWxlICgwKQogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NDcsMjQgKzU0LDI0NyBAQCBXQVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSkKIAogSlNXQVNNTW9kdWxlKiBXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQogewotICAgIEpTV0FTTU1vZHVsZSogbW9kdWxlID0gSlNXQVNNTW9kdWxlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0cnVjdHVyZSgpKTsKKyAgICBtX21vZHVs
ZS5zZXQodm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPndhc21Nb2R1
bGVTdHJ1Y3R1cmUoKSkpOwogICAgIHBhcnNlTW9kdWxlKCk7CiAgICAgaWYgKCFtX2Vycm9yTWVz
c2FnZS5pc051bGwoKSkgewogICAgICAgICBlcnJvck1lc3NhZ2UgPSBtX2Vycm9yTWVzc2FnZTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBtb2R1bGU7CisgICAg
cmV0dXJuIG1fbW9kdWxlLmdldCgpOwogfQogCi1ib29sIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
TW9kdWxlKCkKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUoKQogewogICAgIHVp
bnQzMl90IG1hZ2ljTnVtYmVyOwotICAgIFJFQURfVU5TSUdORURfSU5UMzJfT1JfRkFJTChtYWdp
Y051bWJlciwgIkNhbm5vdCByZWFkIHRoZSBtYWdpYyBudW1iZXIuIik7CisgICAgUkVBRF9VSU5U
MzJfT1JfRkFJTChtYWdpY051bWJlciwgIkNhbm5vdCByZWFkIHRoZSBtYWdpYyBudW1iZXIuIik7
CiAgICAgRkFJTF9JRl9GQUxTRShtYWdpY051bWJlciA9PSB3YXNtTWFnaWNOdW1iZXIsICJUaGUg
bWFnaWMgbnVtYmVyIGlzIGluY29ycmVjdC4iKTsKIAotICAgIC8vIFRPRE86IHBhcnNlIHRoZSBy
ZXN0CisgICAgdWludDMyX3Qgb3V0cHV0U2l6ZUluQVNNSlM7CisgICAgUkVBRF9VSU5UMzJfT1Jf
RkFJTChvdXRwdXRTaXplSW5BU01KUywgIkNhbm5vdCByZWFkIHRoZSBvdXRwdXQgc2l6ZSBpbiBh
c20uanMgZm9ybWF0LiIpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcGFyc2VDb25zdGFudFBv
b2xTZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcGFyc2VTaWduYXR1cmVT
ZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcGFyc2VGdW5jdGlvbkltcG9y
dFNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUdsb2JhbFNlY3Rp
b24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b25TZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcGFyc2VGdW5jdGlvblBv
aW50ZXJUYWJsZVNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1
bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBw
YXJzZUV4cG9ydFNlY3Rpb24oKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUNv
bnN0YW50UG9vbFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMyQ29uc3RhbnRz
OworICAgIHVpbnQzMl90IG51bWJlck9mRjMyQ29uc3RhbnRzOworICAgIHVpbnQzMl90IG51bWJl
ck9mRjY0Q29uc3RhbnRzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJP
ZkkzMkNvbnN0YW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW50MzIgY29uc3RhbnRz
LiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkYzMkNvbnN0YW50
cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZmxvYXQzMiBjb25zdGFudHMuIik7CisgICAg
UkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRjY0Q29uc3RhbnRzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBmbG9hdDY0IGNvbnN0YW50cy4iKTsKKyAgICBGQUlMX0lGX0ZB
TFNFKG1fbW9kdWxlLT5pMzJDb25zdGFudHMoKS50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZJ
MzJDb25zdGFudHMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludDMyIGNvbnN0
YW50cy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5mMzJDb25zdGFudHMoKS50cnlS
ZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZGMzJDb25zdGFudHMpLCAiQ2Fubm90IGFsbG9jYXRlIG1l
bW9yeSBmb3IgdGhlIGZsb2F0MzIgY29uc3RhbnRzLiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9t
b2R1bGUtPmY2NENvbnN0YW50cygpLnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJPZkY2NENvbnN0
YW50cyksICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmxvYXQ2NCBjb25zdGFudHMu
Iik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJDb25zdGFudHM7
ICsraSkgeworICAgICAgICB1aW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgUkVBRF9DT01QQUNU
X1VJTlQzMl9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYW4gaW50MzIgY29uc3RhbnQu
Iik7CisgICAgICAgIG1fbW9kdWxlLT5pMzJDb25zdGFudHMoKS5hcHBlbmQoY29uc3RhbnQpOwor
ICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJDb25zdGFudHM7
ICsraSkgeworICAgICAgICBmbG9hdCBjb25zdGFudDsKKyAgICAgICAgUkVBRF9GTE9BVF9PUl9G
QUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYSBmbG9hdDMyIGNvbnN0YW50LiIpOworICAgICAg
ICBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCkuYXBwZW5kKGNvbnN0YW50KTsKKyAgICB9CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0Q29uc3RhbnRzOyArK2kpIHsKKyAg
ICAgICAgZG91YmxlIGNvbnN0YW50OworICAgICAgICBSRUFEX0RPVUJMRV9PUl9GQUlMKGNvbnN0
YW50LCAiQ2Fubm90IHJlYWQgYSBmbG9hdDY0IGNvbnN0YW50LiIpOworICAgICAgICBtX21vZHVs
ZS0+ZjY0Q29uc3RhbnRzKCkuYXBwZW5kKGNvbnN0YW50KTsKKyAgICB9Cit9CisKK3ZvaWQgV0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBu
dW1iZXJPZlNpZ25hdHVyZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJl
ck9mU2lnbmF0dXJlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsK
KyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5zaWduYXR1cmVzKCkudHJ5UmVzZXJ2ZUNhcGFj
aXR5KG51bWJlck9mU2lnbmF0dXJlcyksICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUg
c2lnbmF0dXJlcy4iKTsKKyAgICBmb3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2ln
bmF0dXJlSW5kZXggPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAg
ICAgICAgV0FTTVNpZ25hdHVyZSBzaWduYXR1cmU7CisgICAgICAgIFJFQURfUkVUVVJOX1RZUEVf
T1JfRkFJTChzaWduYXR1cmUucmV0dXJuVHlwZSwgIkNhbm5vdCByZWFkIHRoZSByZXR1cm4gdHlw
ZS4iKTsKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKKyAgICAgICAgUkVBRF9DT01Q
QUNUX1VJTlQzMl9PUl9GQUlMKGFyZ3VtZW50Q291bnQsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVy
IG9mIGFyZ3VtZW50cy4iKTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRShzaWduYXR1cmUuYXJndW1l
bnRzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgIkNhbm5vdCBhbGxvY2F0ZSBt
ZW1vcnkgZm9yIHRoZSBhcmd1bWVudHMuIik7CisgICAgICAgIGZvciAodWludDMyX3QgYXJndW1l
bnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ3VtZW50SW5k
ZXgpIHsKKyAgICAgICAgICAgIFdBU01UeXBlIHR5cGU7CisgICAgICAgICAgICBSRUFEX1RZUEVf
T1JfRkFJTCh0eXBlLCAiQ2Fubm90IHJlYWQgdGhlIHR5cGUgb2YgYW4gYXJndW1lbnQuIik7Cisg
ICAgICAgICAgICBzaWduYXR1cmUuYXJndW1lbnRzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQor
ICAgICAgICBtX21vZHVsZS0+c2lnbmF0dXJlcygpLmFwcGVuZChzaWduYXR1cmUpOworICAgIH0K
K30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigp
Cit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkltcG9ydHM7CisgICAgdWludDMyX3Qg
bnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25JbXBvcnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJl
ciBvZiBmdW5jdGlvbiBpbXBvcnRzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJ
TChudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcywgIkNhbm5vdCByZWFkIHRoZSBudW1i
ZXIgb2YgZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZXMuIik7CisgICAgRkFJTF9JRl9GQUxTRSht
X21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRzKCkudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mRnVu
Y3Rpb25JbXBvcnRzKSwgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmdW5jdGlvbiBp
bXBvcnRzLiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlcygpLnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0
dXJlcyksICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZnVuY3Rpb24gaW1wb3J0IHNp
Z25hdHVyZXMuIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXggPSAw
OyBmdW5jdGlvbkltcG9ydEluZGV4IDwgbnVtYmVyT2ZGdW5jdGlvbkltcG9ydHM7ICsrZnVuY3Rp
b25JbXBvcnRJbmRleCkgeworICAgICAgICBXQVNNRnVuY3Rpb25JbXBvcnQgZnVuY3Rpb25JbXBv
cnQ7CisgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoZnVuY3Rpb25JbXBvcnQuZnVuY3Rpb25O
YW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGltcG9ydCBuYW1lLiIpOworICAgICAgICBt
X21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRzKCkuYXBwZW5kKGZ1bmN0aW9uSW1wb3J0KTsKKworICAg
ICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXM7CisgICAgICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChudW1iZXJPZlNpZ25hdHVyZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVy
IG9mIHNpZ25hdHVyZXMuIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmZ1bmN0
aW9uSW1wb3J0U2lnbmF0dXJlcygpLnNpemUoKSArIG51bWJlck9mU2lnbmF0dXJlcyA8PSBudW1i
ZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcywgIlRoZSBudW1iZXIgb2YgZnVuY3Rpb24gaW1w
b3J0IHNpZ25hdHVyZXMgaXMgaW5jb3JyZWN0LiIpOworCisgICAgICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsraSkgeworICAgICAgICAgICAgV0FTTUZ1
bmN0aW9uSW1wb3J0U2lnbmF0dXJlIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlOworICAgICAgICAg
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLnNp
Z25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICAg
ICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUuc2lnbmF0dXJlSW5k
ZXggPCBtX21vZHVsZS0+c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWduYXR1cmUgaW5kZXgg
aXMgaW5jb3JyZWN0LiIpOworICAgICAgICAgICAgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUuZnVu
Y3Rpb25JbXBvcnRJbmRleCA9IGZ1bmN0aW9uSW1wb3J0SW5kZXg7CisgICAgICAgICAgICBtX21v
ZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkuYXBwZW5kKGZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5m
dW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS5zaXplKCkgPT0gbnVtYmVyT2ZGdW5jdGlvbkltcG9y
dFNpZ25hdHVyZXMsICJUaGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmVzIGlz
IGluY29ycmVjdC4iKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFNl
Y3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mTm9uSW1wb3J0ZWRJMzJHbG9iYWxWYXJp
YWJsZXM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZOb25JbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxl
czsKKyAgICB1aW50MzJfdCBudW1iZXJPZk5vbkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOwor
ICAgIHVpbnQzMl90IG51bWJlck9mSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXM7CisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlczsKKyAgICB1aW50MzJfdCBu
dW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOworICAgIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTChudW1iZXJPZk5vbkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBub24taW1wb3J0ZWQgaW50MzIgZ2xvYmFsIHZhcmlhYmxlcy4i
KTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZOb25JbXBvcnRlZEYz
Mkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Ygbm9uLWltcG9ydGVk
IGZsb2F0MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09S
X0ZBSUwobnVtYmVyT2ZOb25JbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFk
IHRoZSBudW1iZXIgb2Ygbm9uLWltcG9ydGVkIGZsb2F0NjQgZ2xvYmFsIHZhcmlhYmxlcy4iKTsK
KyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2Jh
bFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgaW50MzIgZ2xv
YmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVy
T2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Yg
aW1wb3J0ZWQgZmxvYXQzMiBnbG9iYWwgdmFyaWFibGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChudW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBpbXBvcnRlZCBmbG9hdDY0IGdsb2JhbCB2YXJpYWJsZXMuIik7
CisgICAgdWludDMyX3QgbnVtYmVyT2ZHbG9iYWxWYXJpYWJsZXMgPSBudW1iZXJPZk5vbkltcG9y
dGVkSTMyR2xvYmFsVmFyaWFibGVzICsgbnVtYmVyT2ZOb25JbXBvcnRlZEYzMkdsb2JhbFZhcmlh
YmxlcyArIG51bWJlck9mTm9uSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXMgKworICAgICAgICBu
dW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzICsgbnVtYmVyT2ZJbXBvcnRlZEYzMkds
b2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXM7CisKKyAg
ICBWZWN0b3I8V0FTTVR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzID0gbV9tb2R1bGUtPmdsb2Jh
bFZhcmlhYmxlVHlwZXMoKTsKKyAgICBGQUlMX0lGX0ZBTFNFKGdsb2JhbFZhcmlhYmxlVHlwZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mR2xvYmFsVmFyaWFibGVzKSwgIkNhbm5vdCBhbGxv
Y2F0ZSBtZW1vcnkgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGVzLiIpOworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZk5vbkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOyArK2kp
CisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpJMzIpOworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZk5vbkltcG9ydGVkRjMyR2xvYmFsVmFy
aWFibGVzOyArK2kpCisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBl
OjpGMzIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZk5vbkltcG9ydGVk
RjY0R2xvYmFsVmFyaWFibGVzOyArK2kpCisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBw
ZW5kKFdBU01UeXBlOjpGNjQpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGltcG9y
dE5hbWU7CisgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoaW1wb3J0TmFtZSwgIkNhbm5vdCBy
ZWFkIHRoZSBpbXBvcnQgbmFtZSBvZiBhbiBpbnQzMiBnbG9iYWwgdmFyaWFibGUuIik7CisgICAg
ICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpJMzIpOworICAgIH0KKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlh
YmxlczsgKytpKSB7CisgICAgICAgIFN0cmluZyBpbXBvcnROYW1lOworICAgICAgICBSRUFEX1NU
UklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUgb2Yg
YSBmbG9hdDMyIGdsb2JhbCB2YXJpYWJsZS4iKTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVUeXBl
cy5hcHBlbmQoV0FTTVR5cGU6OkYzMik7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOyArK2kpIHsKKyAgICAgICAg
U3RyaW5nIGltcG9ydE5hbWU7CisgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoaW1wb3J0TmFt
ZSwgIkNhbm5vdCByZWFkIHRoZSBpbXBvcnQgbmFtZSBvZiBhIGZsb2F0NjQgZ2xvYmFsIHZhcmlh
YmxlLiIpOworICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6RjY0
KTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0
aW9uczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkRl
Y2xhcmF0aW9ucywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gZGVjbGFyYXRp
b25zLiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25z
KCkudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnMpLCAiQ2Fu
bm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4iKTsKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9uczsg
KytpKSB7CisgICAgICAgIFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9uRGVjbGFyYXRp
b247CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkRlY2xhcmF0
aW9uLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsK
KyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4
IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4IGlz
IGluY29ycmVjdC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCku
YXBwZW5kKGZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIH0KK30KKwordm9pZCBXQVNNTW9kdWxl
UGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbigpCit7CisgICAgdWludDMy
X3QgbnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFibGVzLCAiQ2Fubm90IHJlYWQgdGhl
IG51bWJlciBvZiBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNF
KG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXJUYWJsZXMoKS50cnlSZXNlcnZlQ2FwYWNpdHkobnVt
YmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3Ig
dGhlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzLiIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkZ1bmN0aW9uUG9pbnRlclRhYmxlczsgKytpKSB7CisgICAgICAgIFdBU01G
dW5jdGlvblBvaW50ZXJUYWJsZSBmdW5jdGlvblBvaW50ZXJUYWJsZTsKKyAgICAgICAgUkVBRF9D
T01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4
LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICAgICAgRkFJTF9JRl9G
QUxTRShmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleCA8IG1fbW9kdWxlLT5zaWdu
YXR1cmVzKCkuc2l6ZSgpLCAiVGhlIHNpZ25hdHVyZSBpbmRleCBpcyBpbmNvcnJlY3QuIik7Cisg
ICAgICAgIHVpbnQzMl90IG51bWJlck9mRWxlbWVudHM7CisgICAgICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChudW1iZXJPZkVsZW1lbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBv
ZiBlbGVtZW50cyBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7CisgICAgICAgIEZBSUxf
SUZfRkFMU0UoZnVuY3Rpb25Qb2ludGVyVGFibGUuZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KG51bWJlck9mRWxlbWVudHMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGVsZW1l
bnRzIG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgZm9yICh1aW50MzJf
dCBqID0gMDsgaiA8IG51bWJlck9mRWxlbWVudHM7ICsraikgeworICAgICAgICAgICAgdWludDMy
X3QgZWxlbWVudDsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChlbGVt
ZW50LCAiQ2Fubm90IHJlYWQgYW4gZWxlbWVudCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUu
Iik7CisgICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5lbGVtZW50cy5hcHBlbmQoZWxl
bWVudCk7CisgICAgICAgIH0KKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRhYmxl
cygpLmFwcGVuZChmdW5jdGlvblBvaW50ZXJUYWJsZSk7CisgICAgfQorfQorCit2b2lkIFdBU01N
b2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXpl
KCk7ICsraSkgeworICAgICAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOworICAgICAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFy
c2VGdW5jdGlvbkRlZmluaXRpb24oKQoreworICAgIC8vIFRPRE86IFN1cHBvcnQgYW55IGZ1bmN0
aW9ucy4KKyAgICAvLyBDdXJyZW50bHksIHdlIG9ubHkgc3VwcG9ydCBmdW5jdGlvbnMgdGhhdCBo
YXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LgorICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBjb25zaXN0IG9mIGV4YWN0bHkgNCBieXRlcywgaS5lLgorICAgIC8vIDEuIFRoZSBu
dW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzICgwKSBbMHg4MF0KKyAgICAvLyAyLiBUaGUgbnVtYmVy
IG9mIHN0YXRlbWVudHMgKDEpIFsweDAxXQorICAgIC8vIDMuIFRoZSByZXR1cm4gc3RhdGVtZW50
IFsweDBmXQorICAgIC8vIDQuIFRoZSBpbW1lZGlhdGUgZXhwcmVzc2lvbiAoMCkgWzB4YTBdCisg
ICAgdWludDMyX3QgZnVuY3Rpb25EZWZpbml0aW9uQnl0ZXM7CisgICAgUkVBRF9VSU5UMzJfT1Jf
RkFJTChmdW5jdGlvbkRlZmluaXRpb25CeXRlcywgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBk
ZWZpbml0aW9uLiIpOworICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25EZWZpbml0aW9uQnl0ZXMg
PT0gMHhhMDBmMDE4MCwgIk9ubHkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBcInJldHVybiAwO1wiICIK
KyAgICAgICAgImFzIHRoZWlyIG9ubHkgc3RhdGVtZW50IGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1v
bWVudC4iKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24o
KQoreworICAgIFdBU01FeHBvcnRGb3JtYXQgZXhwb3J0Rm9ybWF0OworICAgIFJFQURfRVhQT1JU
X0ZPUk1BVF9PUl9GQUlMKGV4cG9ydEZvcm1hdCwgIkNhbm5vdCByZWFkIHRoZSBleHBvcnQgZm9y
bWF0LiIpOworICAgIHN3aXRjaCAoZXhwb3J0Rm9ybWF0KSB7CisgICAgY2FzZSBXQVNNRXhwb3J0
Rm9ybWF0OjpEZWZhdWx0OiB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAg
ICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJl
YWQgdGhlIGZ1bmN0aW9uIGluZGV4LiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9u
SW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCksICJUaGUgZnVu
Y3Rpb24gaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgICAgICAvLyBUT0RPOiBFeHBvcnQgdGhl
IGZ1bmN0aW9uLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXQVNNRXhwb3J0Rm9y
bWF0OjpSZWNvcmQ6IHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZFeHBvcnRzOworICAgICAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZFeHBvcnRzLCAiQ2Fubm90IHJl
YWQgdGhlIG51bWJlciBvZiBleHBvcnRzLiIpOworICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9y
dEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgp
IHsKKyAgICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOworICAgICAgICAgICAgUkVBRF9TVFJJ
TkdfT1JfRkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGV4cG9ydCBu
YW1lLiIpOworICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgZXhwb3J0TmFtZSBpcyBsZWdh
bC4KKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgICAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBm
dW5jdGlvbiBpbmRleC4iKTsKKyAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRl
eCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKSwgIlRoZSBmdW5jdGlv
biBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgICAgICAvLyBUT0RPOiBFeHBvcnQgdGhl
IGZ1bmN0aW9uLgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBGQUlMX1dJVEhfTUVTU0FHRSgiVW5rbm93biBleHBvcnQgZm9ybWF0LiIpOwor
ICAgIH0KIH0KIAogSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAppbmRleCBmNWQ2YTMx
Nzg5ZTEzMTBkNDc3MmQ1ODEyOGVkYWE0ZDY2ZDNjNDI1Li41ZWM1ZmQzODg1ZDJlMDIwY2I5ZjVi
ZDRkZmEyYjY1NmQzNzkwOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU1vZHVsZVBhcnNlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKKyNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJXQVNNUmVhZGVyLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ1LDkgKzQ2LDE5IEBAIHB1YmxpYzoK
ICAgICBKU1dBU01Nb2R1bGUqIHBhcnNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZU1vZHVsZSgpOworICAgIHZv
aWQgcGFyc2VNb2R1bGUoKTsKKyAgICB2b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOwor
ICAgIHZvaWQgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9u
SW1wb3J0U2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9p
ZCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0
aW9uUG9pbnRlclRhYmxlU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRp
b25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOworICAgIHZv
aWQgcGFyc2VFeHBvcnRTZWN0aW9uKCk7CiAKICAgICBXQVNNUmVhZGVyIG1fcmVhZGVyOworICAg
IFN0cm9uZzxKU1dBU01Nb2R1bGU+IG1fbW9kdWxlOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2Fn
ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFk
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKaW5kZXgg
MjdiZjkzOTQyYmFjMWJkNDkyYmY3NDMyODMwYmU3MTEwYmRhYTk3Ni4uZGMzYThlNzYyZTAxZDg1
YzAyOGFlM2ViZjhlNDA0ODFkMThmZTc3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTVJlYWRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTVJlYWRlci5jcHAKQEAgLTI4LDExICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCiAjZGVmaW5lIENI
RUNLX1JFQUQobGVuZ3RoKSBkbyB7IGlmIChtX2N1cnNvciArIGxlbmd0aCA+IG1fYnVmZmVyLmVu
ZCgpKSByZXR1cm4gZmFsc2U7IH0gd2hpbGUgKDApCiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29s
IFdBU01SZWFkZXI6OnJlYWRVbnNpZ25lZEludDMyKHVpbnQzMl90JiByZXN1bHQpCitib29sIFdB
U01SZWFkZXI6OnJlYWRVSW50MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICBDSEVDS19SRUFE
KDQpOwogICAgIHJlc3VsdCA9IG1fY3Vyc29yWzBdIHwgbV9jdXJzb3JbMV0gPDwgOCB8IG1fY3Vy
c29yWzJdIDw8IDE2IHwgbV9jdXJzb3JbM10gPDwgMjQ7CkBAIC03Niw2ICs3OCw2MiBAQCBib29s
IFdBU01SZWFkZXI6OnJlYWREb3VibGUoZG91YmxlJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZENvbXBhY3RVSW50MzIodWludDMyX3QmIHJlc3Vs
dCkKK3sKKyAgICBDSEVDS19SRUFEKDEpOworICAgIHJlc3VsdCA9ICptX2N1cnNvcisrOworICAg
IGlmIChyZXN1bHQgPCAweDgwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXN1bHQgJj0g
MHg3ZjsKKyAgICB1bnNpZ25lZCBzaGlmdCA9IDc7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICAgICAgdWludDMyX3QgYnl0ZSA9ICptX2N1cnNvcisrOwor
ICAgICAgICBpZiAoYnl0ZSA8IDB4ODApIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSAoYnl0ZSA8
PCBzaGlmdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQgfD0gKGJ5dGUgJiAweDdmKSA8PCBzaGlmdDsKKyAgICAgICAgc2hpZnQgKz0gNzsKKyAg
ICB9Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZFN0cmluZyhTdHJpbmcmIHJlc3VsdCkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
Q0hFQ0tfUkVBRCgxKTsKKyAgICAgICAgY2hhciBjID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlm
ICghYykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKKyAg
ICB9CisgICAgcmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdBU01SZWFkZXI6OnJlYWRUeXBlKFdBU01UeXBlJiByZXN1bHQpCit7CisgICAg
cmV0dXJuIHJlYWRCeXRlPFdBU01UeXBlPihyZXN1bHQpOworfQorCitib29sIFdBU01SZWFkZXI6
OnJlYWRSZXR1cm5UeXBlKFdBU01SZXR1cm5UeXBlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIHJl
YWRCeXRlPFdBU01SZXR1cm5UeXBlPihyZXN1bHQpOworfQorCitib29sIFdBU01SZWFkZXI6OnJl
YWRFeHBvcnRGb3JtYXQoV0FTTUV4cG9ydEZvcm1hdCYgcmVzdWx0KQoreworICAgIHJldHVybiBy
ZWFkQnl0ZTxXQVNNRXhwb3J0Rm9ybWF0PihyZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gYm9vbCBXQVNNUmVhZGVyOjpyZWFkQnl0ZShUJiByZXN1bHQpCit7CisgICAgQ0hFQ0tfUkVB
RCgxKTsKKyAgICByZXN1bHQgPSBUKCptX2N1cnNvcisrKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmgKaW5kZXggN2NkZWEyYjkyZDgyZGU2
ZGFhNzhjYjdkOGYzMzJhMjNmM2VmZmNlMS4uMWRjNDY3MDkwNGYzMWQzNjFhNGExODc5NjE4NzAx
NzVmYjhiOTczMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJl
YWRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaApAQCAt
MjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV0FT
TUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC00MCwxMSArNDEsMTggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHJlYWRV
bnNpZ25lZEludDMyKHVpbnQzMl90JiByZXN1bHQpOworICAgIGJvb2wgcmVhZFVJbnQzMih1aW50
MzJfdCYgcmVzdWx0KTsKICAgICBib29sIHJlYWRGbG9hdChmbG9hdCYgcmVzdWx0KTsKICAgICBi
b29sIHJlYWREb3VibGUoZG91YmxlJiByZXN1bHQpOworICAgIGJvb2wgcmVhZENvbXBhY3RVSW50
MzIodWludDMyX3QmIHJlc3VsdCk7CisgICAgYm9vbCByZWFkU3RyaW5nKFN0cmluZyYgcmVzdWx0
KTsKKyAgICBib29sIHJlYWRUeXBlKFdBU01UeXBlJiByZXN1bHQpOworICAgIGJvb2wgcmVhZFJl
dHVyblR5cGUoV0FTTVJldHVyblR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCByZWFkRXhwb3J0Rm9y
bWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3VsdCk7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGJvb2wgcmVhZEJ5dGUoVCYgcmVzdWx0KTsKKwogICAgIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgbV9idWZmZXI7CiAgICAgY29uc3QgdWludDhfdCogbV9jdXJzb3I7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257974</attachid>
            <date>2015-07-31 15:57:17 -0700</date>
            <delta_ts>2015-08-03 16:04:48 -0700</delta_ts>
            <desc>Rewrote WASMReader::readCompactUInt32()</desc>
            <filename>bug-147393-20150731155714.patch</filename>
            <type>text/plain</type>
            <size>31422</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NWRjYTRkNjQ2ZDk2Y2YzMGMyOWUyMjBkOWFmOWE2ODFkOTQxMzRjLi43YTk5MWVhODYwMWYzNTNi
Zjg0YTU0YzQzMzkyZjYwYjk3OGU4YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNS0wNy0zMSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgZW50aXJlIFdlYkFzc2VtYmx5IG1vZHVsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNlIHRo
ZSBlbnRpcmUgV2ViQXNzZW1ibHkgbW9kdWxlcyBmcm9tIGZpbGVzIHByb2R1Y2VkIGJ5IHBhY2st
YXNtanMKKyAgICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9wb2x5ZmlsbC1w
cm90b3R5cGUtMT4uIFRoaXMgcGF0Y2ggY2FuIG9ubHkKKyAgICAgICAgcGFyc2UgbW9kdWxlcyB3
aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNlY3Rpb24gY29udGFpbnMgb25seSBmdW5jdGlvbnMg
dGhhdAorICAgICAgICBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LiBQ
YXJzaW5nIG9mIGFueSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBh
IHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdhc20vSlNXQVNNTW9kdWxlLmg6CisgICAgICAg
IChKU0M6OkpTV0FTTU1vZHVsZTo6aTMyQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXQVNN
TW9kdWxlOjpmMzJDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmY2NENv
bnN0YW50cyk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6c2lnbmF0dXJlcyk6CisgICAg
ICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRzKToKKyAgICAgICAgKEpTQzo6
SlNXQVNNTW9kdWxlOjpmdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMpOgorICAgICAgICAoSlNDOjpK
U1dBU01Nb2R1bGU6Omdsb2JhbFZhcmlhYmxlVHlwZXMpOgorICAgICAgICAoSlNDOjpKU1dBU01N
b2R1bGU6OmZ1bmN0aW9uRGVjbGFyYXRpb25zKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxl
OjpmdW5jdGlvblBvaW50ZXJUYWJsZXMpOgorICAgICAgICAqIHdhc20vV0FTTUZvcm1hdC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgu
CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlQ29uc3Rh
bnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlU2ln
bmF0dXJlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVu
Y3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFy
c2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24pOgorICAgICAg
ICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAq
IHdhc20vV0FTTU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV0FTTVJlYWRlci5jcHA6
CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRVSW50MzIpOgorICAgICAgICAoSlNDOjpX
QVNNUmVhZGVyOjpyZWFkQ29tcGFjdFVJbnQzMik6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6
OnJlYWRTdHJpbmcpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkVHlwZSk6CisgICAg
ICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRSZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6V0FT
TVJlYWRlcjo6cmVhZEV4cG9ydEZvcm1hdCk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJl
YWRCeXRlKToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFVuc2lnbmVkSW50MzIpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTVJlYWRlci5oOgorCiAyMDE1LTA3LTMxICBTYWFt
IGJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KIAogICAgICAgICBFUzYgY2xhc3Mgc3lu
dGF4IHNob3VsZCB1c2UgYmxvY2sgc2NvcGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA2YTAzOTgyN2QzNDgwOWViZTc4MTQ0YzhiZWUzMWJhMDcwNzA0NTY3Li42MDcyODNjZDc3
OTc1NWY5ZTA5NWQ1YmNiZDU1NDkwZDVkZjg1MDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTAyOCw2ICsxMDI4LDcgQEAKIAkJN0I3QTVFMjcxQjY4Mjg4QzAwMjdDQUQwIC8q
IFdBU01NYWdpY051bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0I3QTVFMjYxQjY4Mjg4NDAwMjdDQUQwIC8qIFdBU01NYWdpY051bWJlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCOThEMTM2
MUI2MENENUYwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpT
V0FTTU1vZHVsZS5jcHAgKi87IH07CiAJCTdCOThEMTM3MUI2MENENjIwMDIzQjFBNCAvKiBKU1dB
U01Nb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QkM1NDdEMzFCNjk1OUExMDA5
NTlCNTggLyogV0FTTUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAwOENEQTE4
NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDgxODcxMjRCQjAwOTU1QzI0IC8q
IEpTUHJvbWlzZURlZmVycmVkLmNwcCAqLzsgfTsKIAkJN0MwMDhDREIxODcxMjRCQjAwOTU1QzI0
IC8qIEpTUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJy
ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENFNTE4NzYzMUI2MDA5NTVDMjQgLyog
TWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTI4MDUsNiArMjgwNiw3IEBACiAJCTdCN0E1RTI2MUI2ODI4ODQwMDI3Q0FEMCAvKiBX
QVNNTWFnaWNOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU1h
Z2ljTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCOThEMTM0MUI2MENE
NUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXQVNNTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dBU01Nb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZvcm1hdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVm
ZXJyZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9taXNl
RGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEOTE4NzEy
NEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MwMDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNaWNyb3Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQzNzEsNiArNDM3Myw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3Qjk4RDEz
NDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLywKIAkJCQk3Qjk4RDEzNTFC
NjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi8sCisJCQkJN0JDNTQ3RDIxQjY5NTk5
QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLywKIAkJCQk3QjdBNUUyNjFCNjgyODg0MDAyN0NB
RDAgLyogV0FTTU1hZ2ljTnVtYmVyLmggKi8sCiAJCQkJN0IzOUY3NjkxQjYyREUyMjAwMzYwRkI0
IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTdCMzlGNzZBMUI2MkRFMjIwMDM2MEZC
NCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCkBAIC02NjY4LDYgKzY2NzEsNyBAQAogCQkJCTBG
NDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FT
TU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKaW5k
ZXggOGFkOWUzYjg5MWFlODU2M2U2ODA3OTNiODdhOWU1MTRkNjkxMDc1YS4uOGZmZmE1ZWE0M2E1
NzcxYTU4MTI1NzI1YjcwYWVkMzgwOTc1OTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXQVNNTW9kdWxlLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIldBU01G
b3JtYXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUyLDEyICs1MywzMiBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAKKyAgICBWZWN0b3I8dWludDMyX3Q+JiBpMzJDb25zdGFudHMoKSB7IHJldHVybiBtX2kzMkNv
bnN0YW50czsgfQorICAgIFZlY3RvcjxmbG9hdD4mIGYzMkNvbnN0YW50cygpIHsgcmV0dXJuIG1f
ZjMyQ29uc3RhbnRzOyB9CisgICAgVmVjdG9yPGRvdWJsZT4mIGY2NENvbnN0YW50cygpIHsgcmV0
dXJuIG1fZjY0Q29uc3RhbnRzOyB9CisgICAgVmVjdG9yPFdBU01TaWduYXR1cmU+JiBzaWduYXR1
cmVzKCkgeyByZXR1cm4gbV9zaWduYXR1cmVzOyB9CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbklt
cG9ydD4mIGZ1bmN0aW9uSW1wb3J0cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRzOyB9Cisg
ICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4mIGZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOyB9CisgICAgVmVj
dG9yPFdBU01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcygpIHsgcmV0dXJuIG1fZ2xvYmFsVmFy
aWFibGVUeXBlczsgfQorICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbj4mIGZ1bmN0
aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAg
IFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+JiBmdW5jdGlvblBvaW50ZXJUYWJsZXMo
KSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsgfQorCiBwcml2YXRlOgogICAgIEpT
V0FTTU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKICAgICB7CiAgICAgfQogCisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2kz
MkNvbnN0YW50czsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fZjMyQ29uc3RhbnRzOworICAgIFZlY3Rv
cjxkb3VibGU+IG1fZjY0Q29uc3RhbnRzOworICAgIFZlY3RvcjxXQVNNU2lnbmF0dXJlPiBtX3Np
Z25hdHVyZXM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydD4gbV9mdW5jdGlvbkltcG9y
dHM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4gbV9mdW5jdGlvbklt
cG9ydFNpZ25hdHVyZXM7CisgICAgVmVjdG9yPFdBU01UeXBlPiBtX2dsb2JhbFZhcmlhYmxlVHlw
ZXM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uPiBtX2Z1bmN0aW9uRGVjbGFy
YXRpb25zOworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+IG1fZnVuY3Rpb25Q
b2ludGVyVGFibGVzOworCiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4gbV9m
dW5jdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmRjOTIzMzU1NjVmYTM3NDZkNWI2ZmM2Y2FmMzFlMjJhMzEyZmEzMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaApAQCAt
MCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgor
ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0aGUgcmVw
b3NpdG9yeSBhdXRob3JzIG9mCisgKiBXZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUtMS4K
KyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KyAqLworCisjaWZuZGVmIFdBU01Gb3JtYXRfaAorI2RlZmluZSBXQVNNRm9ybWF0X2gKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3Mg
V0FTTVR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NAorfTsKKwor
ZW51bSBjbGFzcyBXQVNNUmV0dXJuVHlwZSA6IHVpbnQ4X3QgeworICAgIEkzMiwKKyAgICBGMzIs
CisgICAgRjY0LAorICAgIFZvaWQKK307CisKK2VudW0gY2xhc3MgV0FTTUV4cG9ydEZvcm1hdCA6
IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAgUmVjb3JkCit9OworCitzdHJ1Y3QgV0FTTVNp
Z25hdHVyZSB7CisgICAgV0FTTVJldHVyblR5cGUgcmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8V0FT
TVR5cGU+IGFyZ3VtZW50czsKK307CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25JbXBvcnQgeworICAg
IFN0cmluZyBmdW5jdGlvbk5hbWU7Cit9OworCitzdHJ1Y3QgV0FTTUZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlIHsKKyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICB1aW50MzJfdCBmdW5j
dGlvbkltcG9ydEluZGV4OworfTsKKworc3RydWN0IFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIHsK
KyAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKK307CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25Q
b2ludGVyVGFibGUgeworICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgIFZlY3Rvcjx1
aW50MzJfdD4gZWxlbWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2VuZGlmIC8vIFdBU01Gb3JtYXRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRleCBkOGQzMGY1
MzhjNzRmMDg5ZDRmYTVlNjkzZjFkMzEyOTUzZjE0YmYzLi40OThlODA3YmNhOTI1ZTEzZGJiYWRm
YWI2NDQxYzkzYjM5NTkyMTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtMzAsMTMgKzMwLDIwIEBACiAKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5s
aW5lcy5oIgogI2luY2x1ZGUgIldBU01NYWdpY051bWJlci5oIgogCi0jZGVmaW5lIEZBSUxfV0lU
SF9NRVNTQUdFKGVycm9yTWVzc2FnZSkgZG8geyBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2Fn
ZTsgcmV0dXJuIGZhbHNlOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX1VOU0lHTkVEX0lOVDMy
X09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFVuc2lnbmVk
SW50MzIoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisj
ZGVmaW5lIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSkgZG8geyBtX2Vycm9yTWVzc2Fn
ZSA9IGVycm9yTWVzc2FnZTsgcmV0dXJuOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRUFEX1VJTlQz
Ml9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRVSW50MzIo
eCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCiAjZGVmaW5l
IFJFQURfRkxPQVRfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5y
ZWFkRmxvYXQoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDAp
CiAjZGVmaW5lIFJFQURfRE9VQkxFX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICgh
bV9yZWFkZXIucmVhZERvdWJsZSh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsg
fSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKHgsIGVycm9y
TWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRDb21wYWN0VUludDMyKHgpKSBGQUlMX1dJ
VEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRUFEX1NUUklO
R19PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRTdHJpbmco
eCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5l
IFJFQURfVFlQRV9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJl
YWRUeXBlKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQor
I2RlZmluZSBSRUFEX1JFVFVSTl9UWVBFX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlm
ICghbV9yZWFkZXIucmVhZFJldHVyblR5cGUoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVz
c2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfRVhQT1JUX0ZPUk1BVF9PUl9GQUlMKHgs
IGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRFeHBvcnRGb3JtYXQoeCkpIEZB
SUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIEZBSUxf
SUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCEoY29uZGl0aW9uKSkg
RkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFJP
UEFHQVRFX0VSUk9SKCkgZG8geyBpZiAoIW1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpKSByZXR1cm47
IH0gd2hpbGUgKDApCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywyNCArNTQsMjQ3IEBAIFdB
U01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIoY29uc3QgU291cmNlQ29kZSYgc291cmNl
KQogCiBKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgSlNX
QVNNTW9kdWxlKiBtb2R1bGUgPSBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpOworICAgIG1fbW9kdWxlLnNldCh2bSwgSlNXQVNNTW9k
dWxlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0cnVjdHVyZSgpKSk7CiAg
ICAgcGFyc2VNb2R1bGUoKTsKICAgICBpZiAoIW1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpKSB7CiAg
ICAgICAgIGVycm9yTWVzc2FnZSA9IG1fZXJyb3JNZXNzYWdlOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIG1vZHVsZTsKKyAgICByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7CiB9CiAKLWJvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUoKQordm9pZCBXQVNN
TW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSgpCiB7CiAgICAgdWludDMyX3QgbWFnaWNOdW1iZXI7
Ci0gICAgUkVBRF9VTlNJR05FRF9JTlQzMl9PUl9GQUlMKG1hZ2ljTnVtYmVyLCAiQ2Fubm90IHJl
YWQgdGhlIG1hZ2ljIG51bWJlci4iKTsKKyAgICBSRUFEX1VJTlQzMl9PUl9GQUlMKG1hZ2ljTnVt
YmVyLCAiQ2Fubm90IHJlYWQgdGhlIG1hZ2ljIG51bWJlci4iKTsKICAgICBGQUlMX0lGX0ZBTFNF
KG1hZ2ljTnVtYmVyID09IHdhc21NYWdpY051bWJlciwgIlRoZSBtYWdpYyBudW1iZXIgaXMgaW5j
b3JyZWN0LiIpOwogCi0gICAgLy8gVE9ETzogcGFyc2UgdGhlIHJlc3QKKyAgICB1aW50MzJfdCBv
dXRwdXRTaXplSW5BU01KUzsKKyAgICBSRUFEX1VJTlQzMl9PUl9GQUlMKG91dHB1dFNpemVJbkFT
TUpTLCAiQ2Fubm90IHJlYWQgdGhlIG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3JtYXQuIik7CiAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKTsKKyAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICBQUk9Q
QUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpOworICAgIFBS
T1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlR2xvYmFsU2VjdGlvbigpOworICAgIFBST1BBR0FU
RV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbigp
OworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2Vj
dGlvbigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRXhwb3J0U2VjdGlvbigp
OworfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigp
Cit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJDb25zdGFudHM7CisgICAgdWludDMyX3QgbnVt
YmVyT2ZGMzJDb25zdGFudHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGNjRDb25zdGFudHM7Cisg
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mSTMyQ29uc3RhbnRzLCAiQ2Fu
bm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnQzMiBjb25zdGFudHMuIik7CisgICAgUkVBRF9DT01Q
QUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRjMyQ29uc3RhbnRzLCAiQ2Fubm90IHJlYWQgdGhl
IG51bWJlciBvZiBmbG9hdDMyIGNvbnN0YW50cy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMy
X09SX0ZBSUwobnVtYmVyT2ZGNjRDb25zdGFudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9m
IGZsb2F0NjQgY29uc3RhbnRzLiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmkzMkNv
bnN0YW50cygpLnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJPZkkzMkNvbnN0YW50cyksICJDYW5u
b3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50MzIgY29uc3RhbnRzLiIpOworICAgIEZBSUxf
SUZfRkFMU0UobV9tb2R1bGUtPmYzMkNvbnN0YW50cygpLnRyeVJlc2VydmVDYXBhY2l0eShudW1i
ZXJPZkYzMkNvbnN0YW50cyksICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmxvYXQz
MiBjb25zdGFudHMuIik7CisgICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+ZjY0Q29uc3RhbnRz
KCkudHJ5UmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mRjY0Q29uc3RhbnRzKSwgIkNhbm5vdCBhbGxv
Y2F0ZSBtZW1vcnkgZm9yIHRoZSBmbG9hdDY0IGNvbnN0YW50cy4iKTsKKworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMkNvbnN0YW50czsgKytpKSB7CisgICAgICAgIHVp
bnQzMl90IGNvbnN0YW50OworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoY29u
c3RhbnQsICJDYW5ub3QgcmVhZCBhbiBpbnQzMiBjb25zdGFudC4iKTsKKyAgICAgICAgbV9tb2R1
bGUtPmkzMkNvbnN0YW50cygpLmFwcGVuZChjb25zdGFudCk7CisgICAgfQorICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkNvbnN0YW50czsgKytpKSB7CisgICAgICAgIGZs
b2F0IGNvbnN0YW50OworICAgICAgICBSRUFEX0ZMT0FUX09SX0ZBSUwoY29uc3RhbnQsICJDYW5u
b3QgcmVhZCBhIGZsb2F0MzIgY29uc3RhbnQuIik7CisgICAgICAgIG1fbW9kdWxlLT5mMzJDb25z
dGFudHMoKS5hcHBlbmQoY29uc3RhbnQpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZGNjRDb25zdGFudHM7ICsraSkgeworICAgICAgICBkb3VibGUgY29uc3Rh
bnQ7CisgICAgICAgIFJFQURfRE9VQkxFX09SX0ZBSUwoY29uc3RhbnQsICJDYW5ub3QgcmVhZCBh
IGZsb2F0NjQgY29uc3RhbnQuIik7CisgICAgICAgIG1fbW9kdWxlLT5mNjRDb25zdGFudHMoKS5h
cHBlbmQoY29uc3RhbnQpOworICAgIH0KK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJz
ZVNpZ25hdHVyZVNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0dXJlczsK
KyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTaWduYXR1cmVzLCAiQ2Fu
bm90IHJlYWQgdGhlIG51bWJlciBvZiBzaWduYXR1cmVzLiIpOworICAgIEZBSUxfSUZfRkFMU0Uo
bV9tb2R1bGUtPnNpZ25hdHVyZXMoKS50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZTaWduYXR1
cmVzKSwgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzaWduYXR1cmVzLiIpOworICAg
IGZvciAodWludDMyX3Qgc2lnbmF0dXJlSW5kZXggPSAwOyBzaWduYXR1cmVJbmRleCA8IG51bWJl
ck9mU2lnbmF0dXJlczsgKytzaWduYXR1cmVJbmRleCkgeworICAgICAgICBXQVNNU2lnbmF0dXJl
IHNpZ25hdHVyZTsKKyAgICAgICAgUkVBRF9SRVRVUk5fVFlQRV9PUl9GQUlMKHNpZ25hdHVyZS5y
ZXR1cm5UeXBlLCAiQ2Fubm90IHJlYWQgdGhlIHJldHVybiB0eXBlLiIpOworICAgICAgICB1aW50
MzJfdCBhcmd1bWVudENvdW50OworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwo
YXJndW1lbnRDb3VudCwgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiIpOwor
ICAgICAgICBGQUlMX0lGX0ZBTFNFKHNpZ25hdHVyZS5hcmd1bWVudHMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGFyZ3VtZW50Q291bnQpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGFyZ3Vt
ZW50cy4iKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1l
bnRJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkgeworICAgICAgICAgICAg
V0FTTVR5cGUgdHlwZTsKKyAgICAgICAgICAgIFJFQURfVFlQRV9PUl9GQUlMKHR5cGUsICJDYW5u
b3QgcmVhZCB0aGUgdHlwZSBvZiBhbiBhcmd1bWVudC4iKTsKKyAgICAgICAgICAgIHNpZ25hdHVy
ZS5hcmd1bWVudHMuYXBwZW5kKHR5cGUpOworICAgICAgICB9CisgICAgICAgIG1fbW9kdWxlLT5z
aWduYXR1cmVzKCkuYXBwZW5kKHNpZ25hdHVyZSk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1
bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBu
dW1iZXJPZkZ1bmN0aW9uSW1wb3J0czsKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uSW1w
b3J0U2lnbmF0dXJlczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZG
dW5jdGlvbkltcG9ydHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9y
dHMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25J
bXBvcnRTaWduYXR1cmVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBv
cnQgc2lnbmF0dXJlcy4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5mdW5jdGlvbklt
cG9ydHMoKS50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpLCAiQ2Fu
bm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZ1bmN0aW9uIGltcG9ydHMuIik7CisgICAgRkFJ
TF9JRl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkudHJ5UmVzZXJ2
ZUNhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKSwgIkNhbm5vdCBhbGxv
Y2F0ZSBtZW1vcnkgZm9yIHRoZSBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcy4iKTsKKworICAg
IGZvciAodWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleCA9IDA7IGZ1bmN0aW9uSW1wb3J0SW5k
ZXggPCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0czsgKytmdW5jdGlvbkltcG9ydEluZGV4KSB7Cisg
ICAgICAgIFdBU01GdW5jdGlvbkltcG9ydCBmdW5jdGlvbkltcG9ydDsKKyAgICAgICAgUkVBRF9T
VFJJTkdfT1JfRkFJTChmdW5jdGlvbkltcG9ydC5mdW5jdGlvbk5hbWUsICJDYW5ub3QgcmVhZCB0
aGUgZnVuY3Rpb24gaW1wb3J0IG5hbWUuIik7CisgICAgICAgIG1fbW9kdWxlLT5mdW5jdGlvbklt
cG9ydHMoKS5hcHBlbmQoZnVuY3Rpb25JbXBvcnQpOworCisgICAgICAgIHVpbnQzMl90IG51bWJl
ck9mU2lnbmF0dXJlczsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJl
ck9mU2lnbmF0dXJlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsK
KyAgICAgICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVz
KCkuc2l6ZSgpICsgbnVtYmVyT2ZTaWduYXR1cmVzIDw9IG51bWJlck9mRnVuY3Rpb25JbXBvcnRT
aWduYXR1cmVzLCAiVGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcyBpcyBp
bmNvcnJlY3QuIik7CisKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
U2lnbmF0dXJlczsgKytpKSB7CisgICAgICAgICAgICBXQVNNRnVuY3Rpb25JbXBvcnRTaWduYXR1
cmUgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmU7CisgICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUuc2lnbmF0dXJlSW5kZXgsICJDYW5u
b3QgcmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOworICAgICAgICAgICAgRkFJTF9JRl9GQUxT
RShmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5zaWduYXR1cmVJbmRleCA8IG1fbW9kdWxlLT5zaWdu
YXR1cmVzKCkuc2l6ZSgpLCAiVGhlIHNpZ25hdHVyZSBpbmRleCBpcyBpbmNvcnJlY3QuIik7Cisg
ICAgICAgICAgICBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5mdW5jdGlvbkltcG9ydEluZGV4ID0g
ZnVuY3Rpb25JbXBvcnRJbmRleDsKKyAgICAgICAgICAgIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9y
dFNpZ25hdHVyZXMoKS5hcHBlbmQoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUpOworICAgICAgICB9
CisgICAgfQorICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0
dXJlcygpLnNpemUoKSA9PSBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcywgIlRoZSBu
dW1iZXIgb2YgZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZXMgaXMgaW5jb3JyZWN0LiIpOworfQor
Cit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsU2VjdGlvbigpCit7CisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZOb25JbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlczsKKyAgICB1aW50MzJf
dCBudW1iZXJPZk5vbkltcG9ydGVkRjMyR2xvYmFsVmFyaWFibGVzOworICAgIHVpbnQzMl90IG51
bWJlck9mTm9uSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXM7CisgICAgdWludDMyX3QgbnVtYmVy
T2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlczsKKyAgICB1aW50MzJfdCBudW1iZXJPZkltcG9y
dGVkRjMyR2xvYmFsVmFyaWFibGVzOworICAgIHVpbnQzMl90IG51bWJlck9mSW1wb3J0ZWRGNjRH
bG9iYWxWYXJpYWJsZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9m
Tm9uSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9m
IG5vbi1pbXBvcnRlZCBpbnQzMiBnbG9iYWwgdmFyaWFibGVzLiIpOworICAgIFJFQURfQ09NUEFD
VF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZk5vbkltcG9ydGVkRjMyR2xvYmFsVmFyaWFibGVzLCAi
Q2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBub24taW1wb3J0ZWQgZmxvYXQzMiBnbG9iYWwgdmFy
aWFibGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZk5vbklt
cG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBub24t
aW1wb3J0ZWQgZmxvYXQ2NCBnbG9iYWwgdmFyaWFibGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBpbXBvcnRlZCBpbnQzMiBnbG9iYWwgdmFyaWFibGVzLiIpOwor
ICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkltcG9ydGVkRjMyR2xvYmFs
VmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbXBvcnRlZCBmbG9hdDMyIGds
b2JhbCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJl
ck9mSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9m
IGltcG9ydGVkIGZsb2F0NjQgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkdsb2JhbFZhcmlhYmxlcyA9IG51bWJlck9mTm9uSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJs
ZXMgKyBudW1iZXJPZk5vbkltcG9ydGVkRjMyR2xvYmFsVmFyaWFibGVzICsgbnVtYmVyT2ZOb25J
bXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlcyArCisgICAgICAgIG51bWJlck9mSW1wb3J0ZWRJMzJH
bG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkltcG9ydGVkRjMyR2xvYmFsVmFyaWFibGVzICsgbnVt
YmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsKKworICAgIFZlY3RvcjxXQVNNVHlwZT4m
IGdsb2JhbFZhcmlhYmxlVHlwZXMgPSBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpOwor
ICAgIEZBSUxfSUZfRkFMU0UoZ2xvYmFsVmFyaWFibGVUeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHko
bnVtYmVyT2ZHbG9iYWxWYXJpYWJsZXMpLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhl
IGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mTm9uSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkKKyAgICAgICAgZ2xvYmFsVmFy
aWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkkzMik7CisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG51bWJlck9mTm9uSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkKKyAgICAg
ICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkYzMik7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mTm9uSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXM7
ICsraSkKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkY2NCk7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSW1wb3J0ZWRJMzJHbG9iYWxW
YXJpYWJsZXM7ICsraSkgeworICAgICAgICBTdHJpbmcgaW1wb3J0TmFtZTsKKyAgICAgICAgUkVB
RF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1l
IG9mIGFuIGludDMyIGdsb2JhbCB2YXJpYWJsZS4iKTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVU
eXBlcy5hcHBlbmQoV0FTTVR5cGU6OkkzMik7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkltcG9ydGVkRjMyR2xvYmFsVmFyaWFibGVzOyArK2kpIHsKKyAgICAg
ICAgU3RyaW5nIGltcG9ydE5hbWU7CisgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoaW1wb3J0
TmFtZSwgIkNhbm5vdCByZWFkIHRoZSBpbXBvcnQgbmFtZSBvZiBhIGZsb2F0MzIgZ2xvYmFsIHZh
cmlhYmxlLiIpOworICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6
RjMyKTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSW1wb3J0
ZWRGNjRHbG9iYWxWYXJpYWJsZXM7ICsraSkgeworICAgICAgICBTdHJpbmcgaW1wb3J0TmFtZTsK
KyAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhl
IGltcG9ydCBuYW1lIG9mIGEgZmxvYXQ2NCBnbG9iYWwgdmFyaWFibGUuIik7CisgICAgICAgIGds
b2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpGNjQpOworICAgIH0KK30KKwordm9p
ZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKK3sK
KyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOworICAgIFJFQURfQ09N
UEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIik7CisgICAgRkFJTF9J
Rl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS50cnlSZXNlcnZlQ2FwYWNp
dHkobnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucyksICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5
IGZvciB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiIpOworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOyArK2kpIHsKKyAgICAgICAgV0FT
TUZ1bmN0aW9uRGVjbGFyYXRpb24gZnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgUkVBRF9D
T01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2lnbmF0dXJlSW5kZXgs
ICJDYW5ub3QgcmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOworICAgICAgICBGQUlMX0lGX0ZB
TFNFKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+c2lnbmF0
dXJlcygpLnNpemUoKSwgIlRoZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAg
ICAgICBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5hcHBlbmQoZnVuY3Rpb25EZWNs
YXJhdGlvbik7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25Qb2ludGVyVGFibGVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9u
UG9pbnRlclRhYmxlczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZG
dW5jdGlvblBvaW50ZXJUYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9u
IHBvaW50ZXIgdGFibGVzLiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmZ1bmN0aW9u
UG9pbnRlclRhYmxlcygpLnRyeVJlc2VydmVDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uUG9pbnRl
clRhYmxlcyksICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZnVuY3Rpb24gcG9pbnRl
ciB0YWJsZXMuIik7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRnVuY3Rp
b25Qb2ludGVyVGFibGVzOyArK2kpIHsKKyAgICAgICAgV0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxl
IGZ1bmN0aW9uUG9pbnRlclRhYmxlOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZB
SUwoZnVuY3Rpb25Qb2ludGVyVGFibGUuc2lnbmF0dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUg
c2lnbmF0dXJlIGluZGV4LiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uUG9pbnRl
clRhYmxlLnNpZ25hdHVyZUluZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJU
aGUgc2lnbmF0dXJlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgdWludDMyX3QgbnVt
YmVyT2ZFbGVtZW50czsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJl
ck9mRWxlbWVudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgZnVu
Y3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvblBv
aW50ZXJUYWJsZS5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZFbGVtZW50cyks
ICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZWxlbWVudHMgb2YgYSBmdW5jdGlvbiBw
b2ludGVyIHRhYmxlLiIpOworICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgbnVtYmVy
T2ZFbGVtZW50czsgKytqKSB7CisgICAgICAgICAgICB1aW50MzJfdCBlbGVtZW50OworICAgICAg
ICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGVsZW1lbnQsICJDYW5ub3QgcmVhZCBh
biBlbGVtZW50IG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uUG9pbnRlclRhYmxlLmVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKKyAgICAgICAgfQor
ICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkuYXBwZW5kKGZ1bmN0aW9u
UG9pbnRlclRhYmxlKTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAg
IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKCk7CisgICAgICAgIFBST1BBR0FURV9FUlJPUigpOwor
ICAgIH0KK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bigpCit7CisgICAgLy8gVE9ETzogU3VwcG9ydCBhbnkgZnVuY3Rpb25zLgorICAgIC8vIEN1cnJl
bnRseSwgd2Ugb25seSBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0IGhhdmUgInJldHVybiAwOyIgYXMg
dGhlaXIgb25seSBzdGF0ZW1lbnQuCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGNvbnNpc3Qgb2Yg
ZXhhY3RseSA0IGJ5dGVzLCBpLmUuCisgICAgLy8gMS4gVGhlIG51bWJlciBvZiBsb2NhbCB2YXJp
YWJsZXMgKDApIFsweDgwXQorICAgIC8vIDIuIFRoZSBudW1iZXIgb2Ygc3RhdGVtZW50cyAoMSkg
WzB4MDFdCisgICAgLy8gMy4gVGhlIHJldHVybiBzdGF0ZW1lbnQgWzB4MGZdCisgICAgLy8gNC4g
VGhlIGltbWVkaWF0ZSBleHByZXNzaW9uICgwKSBbMHhhMF0KKyAgICB1aW50MzJfdCBmdW5jdGlv
bkRlZmluaXRpb25CeXRlczsKKyAgICBSRUFEX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uRGVmaW5p
dGlvbkJ5dGVzLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIik7CisgICAg
RkFJTF9JRl9GQUxTRShmdW5jdGlvbkRlZmluaXRpb25CeXRlcyA9PSAweGEwMGYwMTgwLCAiT25s
eSBmdW5jdGlvbnMgdGhhdCBoYXZlIFwicmV0dXJuIDA7XCIgIgorICAgICAgICAiYXMgdGhlaXIg
b25seSBzdGF0ZW1lbnQgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LiIpOworfQorCit2b2lk
IFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0U2VjdGlvbigpCit7CisgICAgV0FTTUV4cG9y
dEZvcm1hdCBleHBvcnRGb3JtYXQ7CisgICAgUkVBRF9FWFBPUlRfRk9STUFUX09SX0ZBSUwoZXhw
b3J0Rm9ybWF0LCAiQ2Fubm90IHJlYWQgdGhlIGV4cG9ydCBmb3JtYXQuIik7CisgICAgc3dpdGNo
IChleHBvcnRGb3JtYXQpIHsKKyAgICBjYXNlIFdBU01FeHBvcnRGb3JtYXQ6OkRlZmF1bHQ6IHsK
KyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJ
TlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW5k
ZXguIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5m
dW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNv
cnJlY3QuIik7CisgICAgICAgIC8vIFRPRE86IEV4cG9ydCB0aGUgZnVuY3Rpb24uCisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdBU01FeHBvcnRGb3JtYXQ6OlJlY29yZDogeworICAg
ICAgICB1aW50MzJfdCBudW1iZXJPZkV4cG9ydHM7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTChudW1iZXJPZkV4cG9ydHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGV4
cG9ydHMuIik7CisgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0SW5kZXggPSAwOyBleHBvcnRJ
bmRleCA8IG51bWJlck9mRXhwb3J0czsgKytleHBvcnRJbmRleCkgeworICAgICAgICAgICAgU3Ry
aW5nIGV4cG9ydE5hbWU7CisgICAgICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGV4cG9ydE5h
bWUsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gZXhwb3J0IG5hbWUuIik7CisgICAgICAgICAg
ICAvLyBUT0RPOiBDaGVjayBpZiBleHBvcnROYW1lIGlzIGxlZ2FsLgorICAgICAgICAgICAgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1Jf
RkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGluZGV4LiIpOwor
ICAgICAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGUtPmZ1bmN0
aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4IGlzIGluY29ycmVj
dC4iKTsKKyAgICAgICAgICAgIC8vIFRPRE86IEV4cG9ydCB0aGUgZnVuY3Rpb24uCisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEZBSUxfV0lU
SF9NRVNTQUdFKCJVbmtub3duIGV4cG9ydCBmb3JtYXQuIik7CisgICAgfQogfQogCiBKU1dBU01N
b2R1bGUqIHBhcnNlV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCmluZGV4IGY1ZDZhMzE3ODllMTMxMGQ0NzcyZDU4MTI4
ZWRhYTRkNjZkM2M0MjUuLjVlYzVmZDM4ODVkMmUwMjBjYjlmNWJkNGRmYTJiNjU2ZDM3OTA5ZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIlN0
cm9uZy5oIgogI2luY2x1ZGUgIldBU01SZWFkZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtNDUsOSArNDYsMTkgQEAgcHVibGljOgogICAgIEpTV0FTTU1vZHVsZSog
cGFyc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAogcHJp
dmF0ZToKLSAgICBib29sIHBhcnNlTW9kdWxlKCk7CisgICAgdm9pZCBwYXJzZU1vZHVsZSgpOwor
ICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZVNpZ25h
dHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7Cisg
ICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWNs
YXJhdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0
aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oKTsKKyAgICB2
b2lkIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKCk7CisgICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rp
b24oKTsKIAogICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7CisgICAgU3Ryb25nPEpTV0FTTU1vZHVs
ZT4gbV9tb2R1bGU7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmNwcAppbmRleCAyN2JmOTM5NDJiYWMxYmQ0OTJi
Zjc0MzI4MzBiZTcxMTBiZGFhOTc2Li43YWFkOWI2ZDcwOGMzOGVkZmYwMzJkNTkzNjVmMGExMDhk
MzIyYWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmNwcApAQCAt
MjgsMTEgKzI4LDEzIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKICNkZWZpbmUgQ0hFQ0tfUkVBRChsZW5ndGgpIGRv
IHsgaWYgKG1fY3Vyc29yICsgbGVuZ3RoID4gbV9idWZmZXIuZW5kKCkpIHJldHVybiBmYWxzZTsg
fSB3aGlsZSAoMCkKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgV0FTTVJlYWRlcjo6cmVhZFVu
c2lnbmVkSW50MzIodWludDMyX3QmIHJlc3VsdCkKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZFVJbnQz
Mih1aW50MzJfdCYgcmVzdWx0KQogewogICAgIENIRUNLX1JFQUQoNCk7CiAgICAgcmVzdWx0ID0g
bV9jdXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1
cnNvclszXSA8PCAyNDsKQEAgLTc2LDYgKzc4LDYxIEBAIGJvb2wgV0FTTVJlYWRlcjo6cmVhZERv
dWJsZShkb3VibGUmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBXQVNNUmVh
ZGVyOjpyZWFkQ29tcGFjdFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQoreworICAgIHVpbnQzMl90
IHN1bSA9IDA7CisgICAgdW5zaWduZWQgc2hpZnQgPSAwOworICAgIGRvIHsKKyAgICAgICAgQ0hF
Q0tfUkVBRCgxKTsKKyAgICAgICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yKys7CisgICAgICAg
IGlmIChieXRlIDwgMHg4MCkgeworICAgICAgICAgICAgaWYgKChzaGlmdCA9PSAyOCAmJiBieXRl
ID49IDB4MTApIHx8IChzaGlmdCAmJiAhYnl0ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmVzdWx0ID0gc3VtIHwgKGJ5dGUgPDwgc2hpZnQpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgc3VtIHw9IChieXRlICYgMHg3
ZikgPDwgc2hpZnQ7CisgICAgICAgIHNoaWZ0ICs9IDc7CisgICAgfSB3aGlsZSAoc2hpZnQgPCAz
NSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdBU01SZWFkZXI6OnJlYWRTdHJpbmco
U3RyaW5nJiByZXN1bHQpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgIENIRUNLX1JFQUQoMSk7CisgICAgICAgIGNoYXIgYyA9ICptX2N1
cnNvcisrOworICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoYyk7CisgICAgfQorICAgIHJlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXQVNNUmVhZGVyOjpyZWFkVHlwZShXQVNNVHlw
ZSYgcmVzdWx0KQoreworICAgIHJldHVybiByZWFkQnl0ZTxXQVNNVHlwZT4ocmVzdWx0KTsKK30K
KworYm9vbCBXQVNNUmVhZGVyOjpyZWFkUmV0dXJuVHlwZShXQVNNUmV0dXJuVHlwZSYgcmVzdWx0
KQoreworICAgIHJldHVybiByZWFkQnl0ZTxXQVNNUmV0dXJuVHlwZT4ocmVzdWx0KTsKK30KKwor
Ym9vbCBXQVNNUmVhZGVyOjpyZWFkRXhwb3J0Rm9ybWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3Vs
dCkKK3sKKyAgICByZXR1cm4gcmVhZEJ5dGU8V0FTTUV4cG9ydEZvcm1hdD4ocmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgV0FTTVJlYWRlcjo6cmVhZEJ5dGUoVCYgcmVzdWx0
KQoreworICAgIENIRUNLX1JFQUQoMSk7CisgICAgcmVzdWx0ID0gVCgqbV9jdXJzb3IrKyk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTVJlYWRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oCmlu
ZGV4IDdjZGVhMmI5MmQ4MmRlNmRhYTc4Y2I3ZDhmMzMyYTIzZjNlZmZjZTEuLjFkYzQ2NzA5MDRm
MzFkMzYxYTRhMTg3OTYxODcwMTc1ZmI4Yjk3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNUmVhZGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAorI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsMTEgKzQxLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgYm9vbCByZWFkVW5zaWduZWRJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBi
b29sIHJlYWRVSW50MzIodWludDMyX3QmIHJlc3VsdCk7CiAgICAgYm9vbCByZWFkRmxvYXQoZmxv
YXQmIHJlc3VsdCk7CiAgICAgYm9vbCByZWFkRG91YmxlKGRvdWJsZSYgcmVzdWx0KTsKKyAgICBi
b29sIHJlYWRDb21wYWN0VUludDMyKHVpbnQzMl90JiByZXN1bHQpOworICAgIGJvb2wgcmVhZFN0
cmluZyhTdHJpbmcmIHJlc3VsdCk7CisgICAgYm9vbCByZWFkVHlwZShXQVNNVHlwZSYgcmVzdWx0
KTsKKyAgICBib29sIHJlYWRSZXR1cm5UeXBlKFdBU01SZXR1cm5UeXBlJiByZXN1bHQpOworICAg
IGJvb2wgcmVhZEV4cG9ydEZvcm1hdChXQVNNRXhwb3J0Rm9ybWF0JiByZXN1bHQpOwogCiBwcml2
YXRlOgorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBib29sIHJlYWRCeXRlKFQmIHJlc3VsdCk7CisK
ICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1fYnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3Qq
IG1fY3Vyc29yOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258130</attachid>
            <date>2015-08-03 16:04:53 -0700</date>
            <delta_ts>2015-08-05 11:32:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147393-20150803160446.patch</filename>
            <type>text/plain</type>
            <size>32753</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3Nzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
MDIyZWJmNzc3NjEwMDcyNjIzMzhlMDI0MmJjMzA4NjFiY2ZiY2JjLi5lODAyNTFiYjk2M2RhMDE2
NzVlOTBkYzM0M2M3YTdkZmFjMTcwZTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAxNS0wOC0wMyAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgZW50aXJlIFdlYkFzc2VtYmx5IG1vZHVsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNlIHRo
ZSBlbnRpcmUgV2ViQXNzZW1ibHkgbW9kdWxlcyBmcm9tIGZpbGVzIHByb2R1Y2VkIGJ5IHBhY2st
YXNtanMKKyAgICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9wb2x5ZmlsbC1w
cm90b3R5cGUtMT4uIFRoaXMgcGF0Y2ggY2FuIG9ubHkKKyAgICAgICAgcGFyc2UgbW9kdWxlcyB3
aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNlY3Rpb24gY29udGFpbnMgb25seSBmdW5jdGlvbnMg
dGhhdAorICAgICAgICBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LiBQ
YXJzaW5nIG9mIGFueSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBh
IHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5o
OgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmkzMkNvbnN0YW50cyk6CisgICAgICAgIChK
U0M6OkpTV0FTTU1vZHVsZTo6ZjMyQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9k
dWxlOjpmNjRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OnNpZ25hdHVy
ZXMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0cyk6CisgICAg
ICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKToKKyAgICAg
ICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpnbG9iYWxWYXJpYWJsZVR5cGVzKToKKyAgICAgICAgKEpT
Qzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlvbkRlY2xhcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpT
V0FTTU1vZHVsZTo6ZnVuY3Rpb25Qb2ludGVyVGFibGVzKToKKyAgICAgICAgKiB3YXNtL1dBU01G
b3JtYXQuaDogQWRkZWQuCisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXQVNN
TW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQ
YXJzZXI6OnBhcnNlU2lnbmF0dXJlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQ
YXJzZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVs
ZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6
OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmlu
aXRpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rp
b24pOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20v
V0FTTVJlYWRlci5jcHA6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkQ29tcGFjdFVJbnQzMik6CisgICAgICAgIChK
U0M6OldBU01SZWFkZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpy
ZWFkVHlwZSk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRFeHByZXNzaW9uVHlwZSk6
CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRFeHBvcnRGb3JtYXQpOgorICAgICAgICAo
SlNDOjpXQVNNUmVhZGVyOjpyZWFkQnl0ZSk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJl
YWRVbnNpZ25lZEludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01SZWFkZXIuaDoK
KwogMjAxNS0wOC0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAog
ICAgICAgICBKYXZhc2NyaXB0Q29yZSBDcmFzaCBpbiBKU0M6OkFTVEJ1aWxkZXI6OlByb3BlcnR5
IEpTQzo6UGFyc2VyPEpTQzo6TGV4ZXI8dW5zaWduZWQgY2hhcj4gPjo6cGFyc2VQcm9wZXJ0eTxK
U0M6OkFTVEJ1aWxkZXI+KEpTQzo6QVNUQnVpbGRlciYsIGJvb2wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagppbmRleCA5MTM2OTcwN2RlZGUyYjY5MTUzYWZhZjU0NDQ5MDk3
MzQ5MzlhMmY2Li43ZjBlY2FkM2Y3YzcwY2FhMWIzYWJmNTliYjI0MzE4ZDdjNzFiM2I1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTE3NTQsNiArMTc1NCw3IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xQcm9maWxlVHJlZU5vZGUuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFRpZXJlZE1NYXBBcnJheS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd2FzbVxKU1dBU01Nb2R1bGUuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHdhc21cV0FTTUZvcm1hdC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd2FzbVxXQVNNTWFnaWNOdW1iZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHdhc21cV0FTTU1vZHVsZVBhcnNlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cd2FzbVxXQVNNUmVhZGVyLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMDA5YjJmMTIyODBmYWU3ODJiMjk3
ZWY0ZGNhMjdjNjMwMzkxYzU1ZS4uMDkxZDhiZTg1OGE0YjM4Y2NhOTliNzEzYjUxYzQyMWQzNDI4
NGNkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycwpAQCAtNDM2MSw2ICs0MzYxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHdh
c21cSlNXQVNNTW9kdWxlLmgiPgogICAgICAgPEZpbHRlcj53YXNtPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3YXNtXFdBU01Gb3JtYXQuaCI+
CisgICAgICA8RmlsdGVyPndhc208L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHdhc21cV0FTTU1hZ2ljTnVtYmVyLmgiPgogICAgICAgPEZpbHRl
cj53YXNtPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDZhMDM5ODI3ZDM0ODA5ZWJlNzgxNDRjOGJlZTMxYmEwNzA3MDQ1NjcuLjYwNzI4
M2NkNzc5NzU1ZjllMDk1ZDViY2JkNTU0OTBkNWRmODUwMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMDI4LDYgKzEwMjgsNyBAQAogCQk3QjdBNUUyNzFCNjgyODhDMDAyN0NB
RDAgLyogV0FTTU1hZ2ljTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QjdBNUUyNjFCNjgyODg0MDAyN0NBRDAgLyogV0FTTU1hZ2ljTnVtYmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I5
OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQg
LyogSlNXQVNNTW9kdWxlLmNwcCAqLzsgfTsKIAkJN0I5OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8q
IEpTV0FTTU1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCQzU0N0QzMUI2OTU5
QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4
Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVD
MjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5
NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VE
ZWZlcnJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdDMDA4Q0U3MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMy
NCAvKiBNaWNyb3Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjgwNSw2ICsyODA2LDcgQEAKIAkJN0I3QTVFMjYxQjY4Mjg4NDAwMjdDQUQw
IC8qIFdBU01NYWdpY051bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVNNTWFnaWNOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5OEQxMzQx
QjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21p
c2VEZWZlcnJlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1By
b21pc2VEZWZlcnJlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q5
MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1Byb21pc2VEZWZlcnJlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzAwOENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pY3JvdGFzay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDM3MSw2ICs0MzczLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTdC
OThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwICovLAogCQkJCTdCOThE
MTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCAqLywKKwkJCQk3QkM1NDdEMjFC
Njk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovLAogCQkJCTdCN0E1RTI2MUI2ODI4ODQw
MDI3Q0FEMCAvKiBXQVNNTWFnaWNOdW1iZXIuaCAqLywKIAkJCQk3QjM5Rjc2OTFCNjJERTIyMDAz
NjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8sCiAJCQkJN0IzOUY3NkExQjYyREUyMjAw
MzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywKQEAgLTY2NjgsNiArNjY3MSw3IEBACiAJ
CQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3QkM1NDdEMzFCNjk1OUExMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXQVNNTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUu
aAppbmRleCA4YWQ5ZTNiODkxYWU4NTYzZTY4MDc5M2I4N2E5ZTUxNGQ2OTEwNzVhLi44ZmZmYTVl
YTQzYTU3NzFhNTgxMjU3MjViNzBhZWQzODA5NzU5OWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dBU01Nb2R1bGUuaApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAi
V0FTTUZvcm1hdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTIsMTIgKzUzLDMyIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAorICAgIFZlY3Rvcjx1aW50MzJfdD4mIGkzMkNvbnN0YW50cygpIHsgcmV0dXJuIG1f
aTMyQ29uc3RhbnRzOyB9CisgICAgVmVjdG9yPGZsb2F0PiYgZjMyQ29uc3RhbnRzKCkgeyByZXR1
cm4gbV9mMzJDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8ZG91YmxlPiYgZjY0Q29uc3RhbnRzKCkg
eyByZXR1cm4gbV9mNjRDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8V0FTTVNpZ25hdHVyZT4mIHNp
Z25hdHVyZXMoKSB7IHJldHVybiBtX3NpZ25hdHVyZXM7IH0KKyAgICBWZWN0b3I8V0FTTUZ1bmN0
aW9uSW1wb3J0PiYgZnVuY3Rpb25JbXBvcnRzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydHM7
IH0KKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlPiYgZnVuY3Rpb25JbXBv
cnRTaWduYXR1cmVzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7IH0KKyAg
ICBWZWN0b3I8V0FTTVR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzKCkgeyByZXR1cm4gbV9nbG9i
YWxWYXJpYWJsZVR5cGVzOyB9CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uPiYg
ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOyB9
CisgICAgVmVjdG9yPFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZT4mIGZ1bmN0aW9uUG9pbnRlclRh
YmxlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25Qb2ludGVyVGFibGVzOyB9CisKIHByaXZhdGU6CiAg
ICAgSlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQogICAgIHsKICAgICB9CiAKKyAgICBWZWN0b3I8dWludDMyX3Q+
IG1faTMyQ29uc3RhbnRzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mMzJDb25zdGFudHM7CisgICAg
VmVjdG9yPGRvdWJsZT4gbV9mNjRDb25zdGFudHM7CisgICAgVmVjdG9yPFdBU01TaWduYXR1cmU+
IG1fc2lnbmF0dXJlczsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0PiBtX2Z1bmN0aW9u
SW1wb3J0czsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlPiBtX2Z1bmN0
aW9uSW1wb3J0U2lnbmF0dXJlczsKKyAgICBWZWN0b3I8V0FTTVR5cGU+IG1fZ2xvYmFsVmFyaWFi
bGVUeXBlczsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24+IG1fZnVuY3Rpb25E
ZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZT4gbV9mdW5j
dGlvblBvaW50ZXJUYWJsZXM7CisKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+
PiBtX2Z1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hYmE5Zjk4YTBlNjY5NmRiY2NjZTE5MjI4OTIwYzMzOGYzMjc3MWVlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5o
CkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0
aGUgcmVwb3NpdG9yeSBhdXRob3JzIG9mCisgKiBXZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5
cGUtMS4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KKyAqLworCisjaWZuZGVmIFdBU01Gb3JtYXRfaAorI2RlZmluZSBXQVNNRm9ybWF0X2gK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0g
Y2xhc3MgV0FTTVR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NCwK
KyAgICBOdW1iZXJPZlR5cGVzCit9OworCitlbnVtIGNsYXNzIFdBU01FeHByZXNzaW9uVHlwZSA6
IHVpbnQ4X3QgeworICAgIEkzMiwKKyAgICBGMzIsCisgICAgRjY0LAorICAgIFZvaWQsCisgICAg
TnVtYmVyT2ZFeHByZXNzaW9uVHlwZXMKK307CisKK2VudW0gY2xhc3MgV0FTTUV4cG9ydEZvcm1h
dCA6IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAgUmVjb3JkLAorICAgIE51bWJlck9mRXhw
b3J0Rm9ybWF0cworfTsKKworc3RydWN0IFdBU01TaWduYXR1cmUgeworICAgIFdBU01FeHByZXNz
aW9uVHlwZSByZXR1cm5UeXBlOworICAgIFZlY3RvcjxXQVNNVHlwZT4gYXJndW1lbnRzOworfTsK
Kworc3RydWN0IFdBU01GdW5jdGlvbkltcG9ydCB7CisgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZTsK
K307CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgeworICAgIHVpbnQzMl90
IHNpZ25hdHVyZUluZGV4OworICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXg7Cit9Owor
CitzdHJ1Y3QgV0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24geworICAgIHVpbnQzMl90IHNpZ25hdHVy
ZUluZGV4OworfTsKKworc3RydWN0IFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSB7CisgICAgdWlu
dDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjZW5kaWYgLy8gV0FTTUZvcm1hdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IGQ4ZDMwZjUzOGM3NGYwODlkNGZhNWU2OTNmMWQz
MTI5NTNmMTRiZjMuLmJhMTZiMGJhNWMwMDdjZWY1YTdmMzdmYTEyZTJmN2ZlNzQ1ZjdjMzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCkBA
IC0zMCwxMyArMzAsMjEgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U1dBU01Nb2R1bGUuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV0FT
TU1hZ2ljTnVtYmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2RlZmluZSBG
QUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpIGRvIHsgbV9lcnJvck1lc3NhZ2UgPSBlcnJv
ck1lc3NhZ2U7IHJldHVybiBmYWxzZTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9VTlNJR05F
RF9JTlQzMl9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRV
bnNpZ25lZEludDMyKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxl
ICgwKQorI2RlZmluZSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpIGRvIHsgbV9lcnJv
ck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7IHJldHVybjsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVB
RF9VSU5UMzJfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFk
VUludDMyKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQog
I2RlZmluZSBSRUFEX0ZMT0FUX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9y
ZWFkZXIucmVhZEZsb2F0KHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdo
aWxlICgwKQogI2RlZmluZSBSRUFEX0RPVUJMRV9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8g
eyBpZiAoIW1fcmVhZGVyLnJlYWREb3VibGUoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVz
c2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTCh4
LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkQ29tcGFjdFVJbnQzMih4KSkg
RkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVB
RF9TVFJJTkdfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFk
U3RyaW5nKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQor
I2RlZmluZSBSRUFEX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3Jl
YWRlci5yZWFkVHlwZSh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGls
ZSAoMCkKKyNkZWZpbmUgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3Nh
Z2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkRXhwcmVzc2lvblR5cGUoeCkpIEZBSUxfV0lUSF9N
RVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfRVhQT1JUX0ZP
Uk1BVF9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRFeHBv
cnRGb3JtYXQoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDAp
CiAjZGVmaW5lIEZBSUxfSUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYg
KCEoY29uZGl0aW9uKSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAo
MCkKKyNkZWZpbmUgUFJPUEFHQVRFX0VSUk9SKCkgZG8geyBpZiAoIW1fZXJyb3JNZXNzYWdlLmlz
TnVsbCgpKSByZXR1cm47IH0gd2hpbGUgKDApCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00Nywy
NCArNTUsMjQ3IEBAIFdBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIoY29uc3QgU291
cmNlQ29kZSYgc291cmNlKQogCiBKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCiB7Ci0gICAgSlNXQVNNTW9kdWxlKiBtb2R1bGUgPSBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpOworICAgIG1fbW9kdWxlLnNl
dCh2bSwgSlNXQVNNTW9kdWxlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0
cnVjdHVyZSgpKSk7CiAgICAgcGFyc2VNb2R1bGUoKTsKICAgICBpZiAoIW1fZXJyb3JNZXNzYWdl
LmlzTnVsbCgpKSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IG1fZXJyb3JNZXNzYWdlOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIG1vZHVsZTsKKyAgICByZXR1
cm4gbV9tb2R1bGUuZ2V0KCk7CiB9CiAKLWJvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1
bGUoKQordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSgpCiB7CiAgICAgdWludDMy
X3QgbWFnaWNOdW1iZXI7Ci0gICAgUkVBRF9VTlNJR05FRF9JTlQzMl9PUl9GQUlMKG1hZ2ljTnVt
YmVyLCAiQ2Fubm90IHJlYWQgdGhlIG1hZ2ljIG51bWJlci4iKTsKKyAgICBSRUFEX1VJTlQzMl9P
Ul9GQUlMKG1hZ2ljTnVtYmVyLCAiQ2Fubm90IHJlYWQgdGhlIG1hZ2ljIG51bWJlci4iKTsKICAg
ICBGQUlMX0lGX0ZBTFNFKG1hZ2ljTnVtYmVyID09IHdhc21NYWdpY051bWJlciwgIlRoZSBtYWdp
YyBudW1iZXIgaXMgaW5jb3JyZWN0LiIpOwogCi0gICAgLy8gVE9ETzogcGFyc2UgdGhlIHJlc3QK
KyAgICB1aW50MzJfdCBvdXRwdXRTaXplSW5BU01KUzsKKyAgICBSRUFEX1VJTlQzMl9PUl9GQUlM
KG91dHB1dFNpemVJbkFTTUpTLCAiQ2Fubm90IHJlYWQgdGhlIG91dHB1dCBzaXplIGluIGFzbS5q
cyBmb3JtYXQuIik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBwYXJzZUNvbnN0YW50UG9vbFNl
Y3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZVNpZ25hdHVyZVNlY3Rp
b24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uSW1wb3J0U2Vj
dGlvbigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlR2xvYmFsU2VjdGlvbigp
OworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNl
Y3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uUG9pbnRl
clRhYmxlU2VjdGlvbigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rp
b25EZWZpbml0aW9uU2VjdGlvbigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNl
RXhwb3J0U2VjdGlvbigpOworfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlQ29uc3Rh
bnRQb29sU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJDb25zdGFudHM7Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZGMzJDb25zdGFudHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZG
NjRDb25zdGFudHM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mSTMy
Q29uc3RhbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnQzMiBjb25zdGFudHMuIik7
CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRjMyQ29uc3RhbnRzLCAi
Q2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmbG9hdDMyIGNvbnN0YW50cy4iKTsKKyAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGNjRDb25zdGFudHMsICJDYW5ub3QgcmVh
ZCB0aGUgbnVtYmVyIG9mIGZsb2F0NjQgY29uc3RhbnRzLiIpOworICAgIG1fbW9kdWxlLT5pMzJD
b25zdGFudHMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mSTMyQ29uc3RhbnRzKTsK
KyAgICBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1i
ZXJPZkYzMkNvbnN0YW50cyk7CisgICAgbV9tb2R1bGUtPmY2NENvbnN0YW50cygpLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGNjRDb25zdGFudHMpOworCisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IG51bWJlck9mSTMyQ29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAgdWludDMy
X3QgY29uc3RhbnQ7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChjb25zdGFu
dCwgIkNhbm5vdCByZWFkIGFuIGludDMyIGNvbnN0YW50LiIpOworICAgICAgICBtX21vZHVsZS0+
aTMyQ29uc3RhbnRzKCkuYXBwZW5kKGNvbnN0YW50KTsKKyAgICB9CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IG51bWJlck9mRjMyQ29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAgZmxvYXQg
Y29uc3RhbnQ7CisgICAgICAgIFJFQURfRkxPQVRfT1JfRkFJTChjb25zdGFudCwgIkNhbm5vdCBy
ZWFkIGEgZmxvYXQzMiBjb25zdGFudC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmYzMkNvbnN0YW50
cygpLmFwcGVuZChjb25zdGFudCk7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkY2NENvbnN0YW50czsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjb25zdGFudDsK
KyAgICAgICAgUkVBRF9ET1VCTEVfT1JfRkFJTChjb25zdGFudCwgIkNhbm5vdCByZWFkIGEgZmxv
YXQ2NCBjb25zdGFudC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmY2NENvbnN0YW50cygpLmFwcGVu
ZChjb25zdGFudCk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlU2ln
bmF0dXJlU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1cmVzOworICAg
IFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZlNpZ25hdHVyZXMsICJDYW5ub3Qg
cmVhZCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMuIik7CisgICAgbV9tb2R1bGUtPnNpZ25hdHVy
ZXMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mU2lnbmF0dXJlcyk7CisgICAgZm9y
ICh1aW50MzJfdCBzaWduYXR1cmVJbmRleCA9IDA7IHNpZ25hdHVyZUluZGV4IDwgbnVtYmVyT2ZT
aWduYXR1cmVzOyArK3NpZ25hdHVyZUluZGV4KSB7CisgICAgICAgIFdBU01TaWduYXR1cmUgc2ln
bmF0dXJlOworICAgICAgICBSRUFEX0VYUFJFU1NJT05fVFlQRV9PUl9GQUlMKHNpZ25hdHVyZS5y
ZXR1cm5UeXBlLCAiQ2Fubm90IHJlYWQgdGhlIHJldHVybiB0eXBlLiIpOworICAgICAgICB1aW50
MzJfdCBhcmd1bWVudENvdW50OworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwo
YXJndW1lbnRDb3VudCwgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiIpOwor
ICAgICAgICBzaWduYXR1cmUuYXJndW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJndW1l
bnRDb3VudCk7CisgICAgICAgIGZvciAodWludDMyX3QgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3Vt
ZW50SW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ3VtZW50SW5kZXgpIHsKKyAgICAgICAgICAg
IFdBU01UeXBlIHR5cGU7CisgICAgICAgICAgICBSRUFEX1RZUEVfT1JfRkFJTCh0eXBlLCAiQ2Fu
bm90IHJlYWQgdGhlIHR5cGUgb2YgYW4gYXJndW1lbnQuIik7CisgICAgICAgICAgICBzaWduYXR1
cmUuYXJndW1lbnRzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBtX21vZHVsZS0+
c2lnbmF0dXJlcygpLmFwcGVuZChzaWduYXR1cmUpOworICAgIH0KK30KKwordm9pZCBXQVNNTW9k
dWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpCit7CisgICAgdWludDMyX3Qg
bnVtYmVyT2ZGdW5jdGlvbkltcG9ydHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbklt
cG9ydFNpZ25hdHVyZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9m
RnVuY3Rpb25JbXBvcnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBv
cnRzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9u
SW1wb3J0U2lnbmF0dXJlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gaW1w
b3J0IHNpZ25hdHVyZXMuIik7CisgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0cygpLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpOworICAgIG1fbW9kdWxl
LT5mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJl
ck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKTsKKworICAgIGZvciAodWludDMyX3QgZnVuY3Rp
b25JbXBvcnRJbmRleCA9IDA7IGZ1bmN0aW9uSW1wb3J0SW5kZXggPCBudW1iZXJPZkZ1bmN0aW9u
SW1wb3J0czsgKytmdW5jdGlvbkltcG9ydEluZGV4KSB7CisgICAgICAgIFdBU01GdW5jdGlvbklt
cG9ydCBmdW5jdGlvbkltcG9ydDsKKyAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChmdW5jdGlv
bkltcG9ydC5mdW5jdGlvbk5hbWUsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW1wb3J0IG5h
bWUuIik7CisgICAgICAgIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydHMoKS5hcHBlbmQoZnVuY3Rp
b25JbXBvcnQpOworCisgICAgICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0dXJlczsKKyAgICAg
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mU2lnbmF0dXJlcywgIkNhbm5v
dCByZWFkIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsKKworICAgICAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK2kpIHsKKyAgICAgICAgICAgIFdB
U01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZTsKKyAgICAg
ICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZS5zaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBzaWduYXR1cmUgaW5kZXguIik7Cisg
ICAgICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVy
ZUluZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0dXJlIGlu
ZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
LmZ1bmN0aW9uSW1wb3J0SW5kZXggPSBmdW5jdGlvbkltcG9ydEluZGV4OworICAgICAgICAgICAg
bV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygpLmFwcGVuZChmdW5jdGlvbkltcG9y
dFNpZ25hdHVyZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgRkFJTF9JRl9GQUxTRShtX21vZHVs
ZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkuc2l6ZSgpID09IG51bWJlck9mRnVuY3Rpb25J
bXBvcnRTaWduYXR1cmVzLCAiVGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJl
cyBpcyBpbmNvcnJlY3QuIik7Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWxTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZk5vbkltcG9ydGVkSTMyR2xvYmFs
VmFyaWFibGVzOworICAgIHVpbnQzMl90IG51bWJlck9mTm9uSW1wb3J0ZWRGMzJHbG9iYWxWYXJp
YWJsZXM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZOb25JbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxl
czsKKyAgICB1aW50MzJfdCBudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOworICAg
IHVpbnQzMl90IG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7CisgICAgdWludDMy
X3QgbnVtYmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsKKyAgICBSRUFEX0NPTVBBQ1Rf
VUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZOb25JbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcywgIkNh
bm5vdCByZWFkIHRoZSBudW1iZXIgb2Ygbm9uLWltcG9ydGVkIGludDMyIGdsb2JhbCB2YXJpYWJs
ZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mTm9uSW1wb3J0
ZWRGMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIG5vbi1pbXBv
cnRlZCBmbG9hdDMyIGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKG51bWJlck9mTm9uSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3Qg
cmVhZCB0aGUgbnVtYmVyIG9mIG5vbi1pbXBvcnRlZCBmbG9hdDY0IGdsb2JhbCB2YXJpYWJsZXMu
Iik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mSW1wb3J0ZWRJMzJH
bG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGltcG9ydGVkIGludDMy
IGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51
bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVy
IG9mIGltcG9ydGVkIGZsb2F0MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBB
Q1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlcywgIkNh
bm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgZmxvYXQ2NCBnbG9iYWwgdmFyaWFibGVz
LiIpOworICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFsVmFyaWFibGVzID0gbnVtYmVyT2ZOb25J
bXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mTm9uSW1wb3J0ZWRGMzJHbG9iYWxW
YXJpYWJsZXMgKyBudW1iZXJPZk5vbkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzICsKKyAgICAg
ICAgbnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW1wb3J0ZWRG
MzJHbG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOwor
CisgICAgVmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcyA9IG1fbW9kdWxlLT5n
bG9iYWxWYXJpYWJsZVR5cGVzKCk7CisgICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG51bWJlck9mR2xvYmFsVmFyaWFibGVzKTsKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZOb25JbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlczsgKytpKQor
ICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6STMyKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZOb25JbXBvcnRlZEYzMkdsb2JhbFZhcmlh
YmxlczsgKytpKQorICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6
RjMyKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZOb25JbXBvcnRlZEY2
NEdsb2JhbFZhcmlhYmxlczsgKytpKQorICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVu
ZChXQVNNVHlwZTo6RjY0KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
bXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlczsgKytpKSB7CisgICAgICAgIFN0cmluZyBpbXBvcnRO
YW1lOworICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJDYW5ub3QgcmVh
ZCB0aGUgaW1wb3J0IG5hbWUgb2YgYW4gaW50MzIgZ2xvYmFsIHZhcmlhYmxlLiIpOworICAgICAg
ICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6STMyKTsKKyAgICB9CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJs
ZXM7ICsraSkgeworICAgICAgICBTdHJpbmcgaW1wb3J0TmFtZTsKKyAgICAgICAgUkVBRF9TVFJJ
TkdfT1JfRkFJTChpbXBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGEg
ZmxvYXQzMiBnbG9iYWwgdmFyaWFibGUuIik7CisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMu
YXBwZW5kKFdBU01UeXBlOjpGMzIpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsgKytpKSB7CisgICAgICAgIFN0
cmluZyBpbXBvcnROYW1lOworICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUs
ICJDYW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUgb2YgYSBmbG9hdDY0IGdsb2JhbCB2YXJpYWJs
ZS4iKTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkY2NCk7
CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvblNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlv
bnM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25EZWNs
YXJhdGlvbnMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9u
cy4iKTsKKyAgICBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnMpOworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOyArK2kpIHsKKyAgICAg
ICAgV0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24gZnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAg
UkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2lnbmF0dXJl
SW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOworICAgICAgICBGQUlM
X0lGX0ZBTFNFKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+
c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIp
OworICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5hcHBlbmQoZnVuY3Rp
b25EZWNsYXJhdGlvbik7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
RnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1
bmN0aW9uUG9pbnRlclRhYmxlczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVt
YmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZ1
bmN0aW9uIHBvaW50ZXIgdGFibGVzLiIpOworICAgIG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXJU
YWJsZXMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFi
bGVzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvblBvaW50
ZXJUYWJsZXM7ICsraSkgeworICAgICAgICBXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGUgZnVuY3Rp
b25Qb2ludGVyVGFibGU7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5j
dGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBzaWduYXR1
cmUgaW5kZXguIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25Qb2ludGVyVGFibGUu
c2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWdu
YXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgICAgICB1aW50MzJfdCBudW1iZXJPZkVs
ZW1lbnRzOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZFbGVt
ZW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSBmdW5jdGlvbiBw
b2ludGVyIHRhYmxlLiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKGhhc09uZUJpdFNldChudW1i
ZXJPZkVsZW1lbnRzKSwgIlRoZSBudW1iZXIgb2YgZWxlbWVudHMgbXVzdCBiZSBhIHBvd2VyIG9m
IHR3by4iKTsKKyAgICAgICAgZnVuY3Rpb25Qb2ludGVyVGFibGUuZWxlbWVudHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1iZXJPZkVsZW1lbnRzKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBq
ID0gMDsgaiA8IG51bWJlck9mRWxlbWVudHM7ICsraikgeworICAgICAgICAgICAgdWludDMyX3Qg
ZWxlbWVudDsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChlbGVtZW50
LCAiQ2Fubm90IHJlYWQgYW4gZWxlbWVudCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7
CisgICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5lbGVtZW50cy5hcHBlbmQoZWxlbWVu
dCk7CisgICAgICAgIH0KKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRhYmxlcygp
LmFwcGVuZChmdW5jdGlvblBvaW50ZXJUYWJsZSk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1
bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCk7
ICsraSkgeworICAgICAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOworICAgICAgICBQUk9Q
QUdBVEVfRVJST1IoKTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbkRlZmluaXRpb24oKQoreworICAgIC8vIFRPRE86IFN1cHBvcnQgYW55IGZ1bmN0aW9u
cy4KKyAgICAvLyBDdXJyZW50bHksIHdlIG9ubHkgc3VwcG9ydCBmdW5jdGlvbnMgdGhhdCBoYXZl
ICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LgorICAgIC8vIFRoZXNlIGZ1bmN0
aW9ucyBjb25zaXN0IG9mIGV4YWN0bHkgNCBieXRlcywgaS5lLgorICAgIC8vIDEuIFRoZSBudW1i
ZXIgb2YgbG9jYWwgdmFyaWFibGVzICgwKSBbMHg4MF0KKyAgICAvLyAyLiBUaGUgbnVtYmVyIG9m
IHN0YXRlbWVudHMgKDEpIFsweDAxXQorICAgIC8vIDMuIFRoZSByZXR1cm4gc3RhdGVtZW50IFsw
eDBmXQorICAgIC8vIDQuIFRoZSBpbW1lZGlhdGUgZXhwcmVzc2lvbiAoMCkgWzB4YTBdCisgICAg
dWludDMyX3QgZnVuY3Rpb25EZWZpbml0aW9uQnl0ZXM7CisgICAgUkVBRF9VSU5UMzJfT1JfRkFJ
TChmdW5jdGlvbkRlZmluaXRpb25CeXRlcywgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBkZWZp
bml0aW9uLiIpOworICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25EZWZpbml0aW9uQnl0ZXMgPT0g
MHhhMDBmMDE4MCwgIk9ubHkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBcInJldHVybiAwO1wiICIKKyAg
ICAgICAgImFzIHRoZWlyIG9ubHkgc3RhdGVtZW50IGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVu
dC4iKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQor
eworICAgIFdBU01FeHBvcnRGb3JtYXQgZXhwb3J0Rm9ybWF0OworICAgIFJFQURfRVhQT1JUX0ZP
Uk1BVF9PUl9GQUlMKGV4cG9ydEZvcm1hdCwgIkNhbm5vdCByZWFkIHRoZSBleHBvcnQgZm9ybWF0
LiIpOworICAgIHN3aXRjaCAoZXhwb3J0Rm9ybWF0KSB7CisgICAgY2FzZSBXQVNNRXhwb3J0Rm9y
bWF0OjpEZWZhdWx0OiB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAg
IFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQg
dGhlIGZ1bmN0aW9uIGluZGV4LiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW5k
ZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCksICJUaGUgZnVuY3Rp
b24gaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgICAgICAvLyBUT0RPOiBFeHBvcnQgdGhlIGZ1
bmN0aW9uLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXQVNNRXhwb3J0Rm9ybWF0
OjpSZWNvcmQ6IHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZFeHBvcnRzOworICAgICAgICBS
RUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZFeHBvcnRzLCAiQ2Fubm90IHJlYWQg
dGhlIG51bWJlciBvZiBleHBvcnRzLiIpOworICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9ydElu
ZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsK
KyAgICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOworICAgICAgICAgICAgUkVBRF9TVFJJTkdf
T1JfRkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGV4cG9ydCBuYW1l
LiIpOworICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgZXhwb3J0TmFtZSBpcyBsZWdhbC4K
KyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgICAgICBSRUFEX0NP
TVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBmdW5j
dGlvbiBpbmRleC4iKTsKKyAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRleCA8
IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBp
bmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgICAgICAvLyBUT0RPOiBFeHBvcnQgdGhlIGZ1
bmN0aW9uLgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0Ogor
ICAgICAgICBGQUlMX1dJVEhfTUVTU0FHRSgiVW5rbm93biBleHBvcnQgZm9ybWF0LiIpOworICAg
IH0KIH0KIAogSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAppbmRleCBmNWQ2YTMxNzg5
ZTEzMTBkNDc3MmQ1ODEyOGVkYWE0ZDY2ZDNjNDI1Li41ZWM1ZmQzODg1ZDJlMDIwY2I5ZjViZDRk
ZmEyYjY1NmQzNzkwOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1v
ZHVsZVBhcnNlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKKyNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJXQVNNUmVhZGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ1LDkgKzQ2LDE5IEBAIHB1YmxpYzoKICAg
ICBKU1dBU01Nb2R1bGUqIHBhcnNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZU1vZHVsZSgpOworICAgIHZvaWQg
cGFyc2VNb2R1bGUoKTsKKyAgICB2b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAg
IHZvaWQgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1w
b3J0U2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9pZCBw
YXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9u
UG9pbnRlclRhYmxlU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25T
ZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOworICAgIHZvaWQg
cGFyc2VFeHBvcnRTZWN0aW9uKCk7CiAKICAgICBXQVNNUmVhZGVyIG1fcmVhZGVyOworICAgIFN0
cm9uZzxKU1dBU01Nb2R1bGU+IG1fbW9kdWxlOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKaW5kZXggMjdi
ZjkzOTQyYmFjMWJkNDkyYmY3NDMyODMwYmU3MTEwYmRhYTk3Ni4uZDUzNzRmMzNjYjJiNGI3ZWU4
N2Q4MGMyMjNkNDJjZWNhMzMxNWYwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTVJlYWRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TVJlYWRlci5jcHAKQEAgLTI4LDExICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCiAjZGVmaW5lIENIRUNL
X1JFQUQobGVuZ3RoKSBkbyB7IGlmIChtX2N1cnNvciArIGxlbmd0aCA+IG1fYnVmZmVyLmVuZCgp
KSByZXR1cm4gZmFsc2U7IH0gd2hpbGUgKDApCiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIFdB
U01SZWFkZXI6OnJlYWRVbnNpZ25lZEludDMyKHVpbnQzMl90JiByZXN1bHQpCitib29sIFdBU01S
ZWFkZXI6OnJlYWRVSW50MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICBDSEVDS19SRUFEKDQp
OwogICAgIHJlc3VsdCA9IG1fY3Vyc29yWzBdIHwgbV9jdXJzb3JbMV0gPDwgOCB8IG1fY3Vyc29y
WzJdIDw8IDE2IHwgbV9jdXJzb3JbM10gPDwgMjQ7CkBAIC03Niw2ICs3OCw2NCBAQCBib29sIFdB
U01SZWFkZXI6OnJlYWREb3VibGUoZG91YmxlJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZENvbXBhY3RVSW50MzIodWludDMyX3QmIHJlc3VsdCkK
K3sKKyAgICB1aW50MzJfdCBzdW0gPSAwOworICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKKyAgICBk
byB7CisgICAgICAgIENIRUNLX1JFQUQoMSk7CisgICAgICAgIHVpbnQzMl90IGJ5dGUgPSAqbV9j
dXJzb3IrKzsKKyAgICAgICAgaWYgKGJ5dGUgPCAweDgwKSB7CisgICAgICAgICAgICBpZiAoKHNo
aWZ0ID09IDI4ICYmIGJ5dGUgPj0gMHgxMCkgfHwgKHNoaWZ0ICYmICFieXRlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXN1bHQgPSBzdW0gfCAoYnl0ZSA8
PCBzaGlmdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBz
dW0gfD0gKGJ5dGUgJiAweDdmKSA8PCBzaGlmdDsKKyAgICAgICAgc2hpZnQgKz0gNzsKKyAgICB9
IHdoaWxlIChzaGlmdCA8IDM1KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV0FTTVJl
YWRlcjo6cmVhZFN0cmluZyhTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICAg
ICAgY2hhciBjID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmICghYykKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKKyAgICB9CisgICAgcmVzdWx0ID0gYnVp
bGRlci50b1N0cmluZygpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdBU01SZWFkZXI6
OnJlYWRUeXBlKFdBU01UeXBlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIHJlYWRCeXRlPFdBU01U
eXBlPihyZXN1bHQsICh1aW50OF90KVdBU01UeXBlOjpOdW1iZXJPZlR5cGVzKTsKK30KKworYm9v
bCBXQVNNUmVhZGVyOjpyZWFkRXhwcmVzc2lvblR5cGUoV0FTTUV4cHJlc3Npb25UeXBlJiByZXN1
bHQpCit7CisgICAgcmV0dXJuIHJlYWRCeXRlPFdBU01FeHByZXNzaW9uVHlwZT4ocmVzdWx0LCAo
dWludDhfdClXQVNNRXhwcmVzc2lvblR5cGU6Ok51bWJlck9mRXhwcmVzc2lvblR5cGVzKTsKK30K
KworYm9vbCBXQVNNUmVhZGVyOjpyZWFkRXhwb3J0Rm9ybWF0KFdBU01FeHBvcnRGb3JtYXQmIHJl
c3VsdCkKK3sKKyAgICByZXR1cm4gcmVhZEJ5dGU8V0FTTUV4cG9ydEZvcm1hdD4ocmVzdWx0LCAo
dWludDhfdClXQVNNRXhwb3J0Rm9ybWF0OjpOdW1iZXJPZkV4cG9ydEZvcm1hdHMpOworfQorCit0
ZW1wbGF0ZSA8Y2xhc3MgVD4gYm9vbCBXQVNNUmVhZGVyOjpyZWFkQnl0ZShUJiByZXN1bHQsIHVp
bnQ4X3QgbnVtYmVyT2ZWYWx1ZXMpCit7CisgICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICB1aW50OF90
IGJ5dGUgPSAqbV9jdXJzb3IrKzsKKyAgICBpZiAoYnl0ZSA+PSBudW1iZXJPZlZhbHVlcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IFQoYnl0ZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oCmluZGV4IDdjZGVhMmI5
MmQ4MmRlNmRhYTc4Y2I3ZDhmMzMyYTIzZjNlZmZjZTEuLmI5Y2I1NzE0Nzk3Njc4YmFhZGEyYmZh
MGZhNzg5YmM1NmNjNWUzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01SZWFkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVy
LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1
ZGUgIldBU01Gb3JtYXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNDAsMTEgKzQxLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgYm9v
bCByZWFkVW5zaWduZWRJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRVSW50
MzIodWludDMyX3QmIHJlc3VsdCk7CiAgICAgYm9vbCByZWFkRmxvYXQoZmxvYXQmIHJlc3VsdCk7
CiAgICAgYm9vbCByZWFkRG91YmxlKGRvdWJsZSYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRDb21w
YWN0VUludDMyKHVpbnQzMl90JiByZXN1bHQpOworICAgIGJvb2wgcmVhZFN0cmluZyhTdHJpbmcm
IHJlc3VsdCk7CisgICAgYm9vbCByZWFkVHlwZShXQVNNVHlwZSYgcmVzdWx0KTsKKyAgICBib29s
IHJlYWRFeHByZXNzaW9uVHlwZShXQVNNRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgYm9v
bCByZWFkRXhwb3J0Rm9ybWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3VsdCk7CiAKIHByaXZhdGU6
CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmVhZEJ5dGUoVCYgcmVzdWx0LCB1aW50OF90
IG51bWJlck9mVmFsdWVzKTsKKwogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbV9idWZmZXI7
CiAgICAgY29uc3QgdWludDhfdCogbV9jdXJzb3I7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258288</attachid>
            <date>2015-08-05 11:32:57 -0700</date>
            <delta_ts>2015-08-06 16:01:02 -0700</delta_ts>
            <desc>Override JSCell::destroy()</desc>
            <filename>bug-147393-20150805113249.patch</filename>
            <type>text/plain</type>
            <size>33593</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3OTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MjlkODQ1YjY5ODM5OTgxMjFhZTZjYTcxZDlmY2M1NDdiMzc5NDE1Li5iY2YzM2RlZDM4ZWU1MmI1
YjgzYTc5YmJlMmE0MTQxYjIxZmUwMGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxNS0wOC0wNSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgZW50aXJlIFdlYkFzc2VtYmx5IG1vZHVsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNlIHRo
ZSBlbnRpcmUgV2ViQXNzZW1ibHkgbW9kdWxlcyBmcm9tIGZpbGVzIHByb2R1Y2VkIGJ5IHBhY2st
YXNtanMKKyAgICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9wb2x5ZmlsbC1w
cm90b3R5cGUtMT4uIFRoaXMgcGF0Y2ggY2FuIG9ubHkKKyAgICAgICAgcGFyc2UgbW9kdWxlcyB3
aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNlY3Rpb24gY29udGFpbnMgb25seSBmdW5jdGlvbnMg
dGhhdAorICAgICAgICBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LiBQ
YXJzaW5nIG9mIGFueSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBh
IHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5j
cHA6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZGVzdHJveSk6CisgICAgICAgICogd2Fz
bS9KU1dBU01Nb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjppMzJDb25zdGFu
dHMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmYzMkNvbnN0YW50cyk6CisgICAgICAg
IChKU0M6OkpTV0FTTU1vZHVsZTo6ZjY0Q29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXQVNN
TW9kdWxlOjpzaWduYXR1cmVzKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlv
bkltcG9ydHMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlcyk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6Z2xvYmFsVmFyaWFibGVUeXBl
cyk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25EZWNsYXJhdGlvbnMpOgor
ICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAg
ICAgICogd2FzbS9XQVNNRm9ybWF0Lmg6IEFkZGVkLgorICAgICAgICAqIHdhc20vV0FTTU1vZHVs
ZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAg
ICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUpOgorICAgICAgICAoSlND
OjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24pOgorICAgICAgICAo
SlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZVNpZ25hdHVyZVNlY3Rpb24pOgorICAgICAgICAo
SlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAg
ICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsU2VjdGlvbik6CisgICAgICAg
IChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24p
OgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRh
YmxlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25EZWZpbml0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VFeHBvcnRTZWN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dBU01Nb2R1bGVQYXJzZXIuaDoK
KyAgICAgICAgKiB3YXNtL1dBU01SZWFkZXIuY3BwOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVy
OjpyZWFkVUludDMyKToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZENvbXBhY3RVSW50
MzIpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6V0FTTVJlYWRlcjo6cmVhZFR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFk
RXhwcmVzc2lvblR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkRXhwb3J0Rm9y
bWF0KToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZEJ5dGUpOgorICAgICAgICAoSlND
OjpXQVNNUmVhZGVyOjpyZWFkVW5zaWduZWRJbnQzMik6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9XQVNNUmVhZGVyLmg6CisKIDIwMTUtMDgtMDUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXByb3ZlIFN1cHBvcnQgZm9y
IFByb3BlcnR5TmFtZSBJdGVyYXRvciAoUmVmbGVjdC5lbnVtZXJhdGUpIGluIEluc3BlY3Rvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggZjQxZTcwMzQyYmQ2OTQ4
OWRlYjQyZWZlODRkNTk0YzI0YjVlOTEzZi4uOTI1ZjY1ZjFiMmJlYWEyNTVhZDdjM2RhOWFkMWE2
N2JjNWIxMzg0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC0x
NzYyLDYgKzE3NjIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcUHJvZmls
ZVRyZWVOb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xUaWVyZWRN
TWFwQXJyYXkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHdhc21cSlNXQVNNTW9k
dWxlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3YXNtXFdBU01Gb3JtYXQuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHdhc21cV0FTTU1hZ2ljTnVtYmVyLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3YXNtXFdBU01Nb2R1bGVQYXJzZXIuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHdhc21cV0FTTVJlYWRlci5oIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDlhMjVk
ZmRkMjBjNThlYjE5YjI2ZTE4ZjE5MTMzMTBiOTZkOGVmMzYuLmNjOTk1ZmI3ODE2OWM2YjYyZDU0
MDM4NjQ1ZWRkNDBlMTNlYThiNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTQzNTYsNiArNDM1Niw5IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlx3YXNtXEpTV0FTTU1vZHVsZS5oIj4KICAgICAgIDxGaWx0ZXI+d2FzbTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd2Fz
bVxXQVNNRm9ybWF0LmgiPgorICAgICAgPEZpbHRlcj53YXNtPC9GaWx0ZXI+CisgICAgPC9DbElu
Y2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3YXNtXFdBU01NYWdpY051bWJlci5o
Ij4KICAgICAgIDxGaWx0ZXI+d2FzbTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjZjEwN2I2NWI1ZjUyNjI5YWYzMGFmMjYyMDA1ZmQ3
YjY5OTkxMjljLi5kMTU3NzUxYjJlZDU5MWY4NWM2NTFiYTZmOTNkYWY3ZDA5YmYxMDU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAzOCw2ICsxMDM4LDcgQEAKIAkJN0I3QTVF
MjcxQjY4Mjg4QzAwMjdDQUQwIC8qIFdBU01NYWdpY051bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3QTVFMjYxQjY4Mjg4NDAwMjdDQUQwIC8q
IFdBU01NYWdpY051bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCOThEMTM2MUI2MENENUYwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzQx
QjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi87IH07CiAJCTdCOThEMTM3MUI2
MENENjIwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01N
b2R1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3QkM1NDdEMzFCNjk1OUExMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4
IC8qIFdBU01Gb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3QzAwOENEQTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhD
RDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCAqLzsgfTsKIAkJN0Mw
MDhDREIxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEOTE4NzEyNEJCMDA5NTVD
MjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENF
NTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4MjMsNiArMjgyNCw3IEBACiAJCTdCN0E1RTI2
MUI2ODI4ODQwMDI3Q0FEMCAvKiBXQVNNTWFnaWNOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0FTTU1hZ2ljTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXQVNNTW9kdWxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FT
TU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dBU01Nb2R1bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4
IC8qIFdBU01Gb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZv
cm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEODE4NzEyNEJCMDA5
NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1p
Y3JvdGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaWNyb3Rhc2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQzODcsNiArNDM4OSw3IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNw
cCAqLywKIAkJCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi8s
CisJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLywKIAkJCQk3
QjdBNUUyNjFCNjgyODg0MDAyN0NBRDAgLyogV0FTTU1hZ2ljTnVtYmVyLmggKi8sCiAJCQkJN0Iz
OUY3NjkxQjYyREUyMjAwMzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTdC
MzlGNzZBMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCkBAIC02Njk2
LDYgKzY2OTksNyBAQAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVn
aXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBW
TS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50
cnlTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8q
IFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0
RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNDMTM0RkYwQTYw
MEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9KU1dBU01Nb2R1bGUuY3BwCmluZGV4IDRlMmIwYzE3MWZjZmVjMjBjMWRmMDFkMjUxOGZk
OTA2NTZiMzMxOWMuLmE2MWIzNmMyNGMwN2MyNGQwOTAxNjljNTRmYmU3MTI0MmEwNmExZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcApAQCAtMzUsNiAr
MzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dBU01Nb2R1bGU6
OnNfaW5mbyA9IHsgIldBU01Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTV0FTTU1vZHVsZSkgfTsKIAordm9pZCBKU1dBU01Nb2R1bGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQoreworICAgIEpTV0FTTU1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dB
U01Nb2R1bGUqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1dBU01Nb2R1bGU6On5KU1dBU01N
b2R1bGUoKTsKK30KKwogdm9pZCBKU1dBU01Nb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1dBU01Nb2R1bGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNXQVNNTW9kdWxlKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL0pTV0FTTU1vZHVsZS5oCmluZGV4IDhhZDllM2I4OTFhZTg1NjNlNjgwNzkzYjg3YTllNTE0
ZDY5MTA3NWEuLmE3MjY2YjU3ZGE4ZDM3ZTcwNmVhY2YwNzgwYzJiZDdjMGJlMWY4ZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmpl
Y3QuaCIKKyNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01
MCwxNCArNTEsMzUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAorICAgIFZlY3Rvcjx1aW50MzJfdD4mIGkzMkNvbnN0YW50cygpIHsgcmV0dXJuIG1faTMy
Q29uc3RhbnRzOyB9CisgICAgVmVjdG9yPGZsb2F0PiYgZjMyQ29uc3RhbnRzKCkgeyByZXR1cm4g
bV9mMzJDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8ZG91YmxlPiYgZjY0Q29uc3RhbnRzKCkgeyBy
ZXR1cm4gbV9mNjRDb25zdGFudHM7IH0KKyAgICBWZWN0b3I8V0FTTVNpZ25hdHVyZT4mIHNpZ25h
dHVyZXMoKSB7IHJldHVybiBtX3NpZ25hdHVyZXM7IH0KKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9u
SW1wb3J0PiYgZnVuY3Rpb25JbXBvcnRzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydHM7IH0K
KyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlPiYgZnVuY3Rpb25JbXBvcnRT
aWduYXR1cmVzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7IH0KKyAgICBW
ZWN0b3I8V0FTTVR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzKCkgeyByZXR1cm4gbV9nbG9iYWxW
YXJpYWJsZVR5cGVzOyB9CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uPiYgZnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOyB9Cisg
ICAgVmVjdG9yPFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZT4mIGZ1bmN0aW9uUG9pbnRlclRhYmxl
cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25Qb2ludGVyVGFibGVzOyB9CisKIHByaXZhdGU6CiAgICAg
SlNXQVNNTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQogICAgIHsKICAgICB9CiAKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1f
aTMyQ29uc3RhbnRzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mMzJDb25zdGFudHM7CisgICAgVmVj
dG9yPGRvdWJsZT4gbV9mNjRDb25zdGFudHM7CisgICAgVmVjdG9yPFdBU01TaWduYXR1cmU+IG1f
c2lnbmF0dXJlczsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0PiBtX2Z1bmN0aW9uSW1w
b3J0czsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlPiBtX2Z1bmN0aW9u
SW1wb3J0U2lnbmF0dXJlczsKKyAgICBWZWN0b3I8V0FTTVR5cGU+IG1fZ2xvYmFsVmFyaWFibGVU
eXBlczsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24+IG1fZnVuY3Rpb25EZWNs
YXJhdGlvbnM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZT4gbV9mdW5jdGlv
blBvaW50ZXJUYWJsZXM7CisKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+PiBt
X2Z1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYmE5Zjk4YTBlNjY5NmRiY2NjZTE5MjI4OTIwYzMzOGYzMjc3MWVlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCkBA
IC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
KgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0aGUg
cmVwb3NpdG9yeSBhdXRob3JzIG9mCisgKiBXZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUt
MS4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KKyAqLworCisjaWZuZGVmIFdBU01Gb3JtYXRfaAorI2RlZmluZSBXQVNNRm9ybWF0X2gKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xh
c3MgV0FTTVR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NCwKKyAg
ICBOdW1iZXJPZlR5cGVzCit9OworCitlbnVtIGNsYXNzIFdBU01FeHByZXNzaW9uVHlwZSA6IHVp
bnQ4X3QgeworICAgIEkzMiwKKyAgICBGMzIsCisgICAgRjY0LAorICAgIFZvaWQsCisgICAgTnVt
YmVyT2ZFeHByZXNzaW9uVHlwZXMKK307CisKK2VudW0gY2xhc3MgV0FTTUV4cG9ydEZvcm1hdCA6
IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAgUmVjb3JkLAorICAgIE51bWJlck9mRXhwb3J0
Rm9ybWF0cworfTsKKworc3RydWN0IFdBU01TaWduYXR1cmUgeworICAgIFdBU01FeHByZXNzaW9u
VHlwZSByZXR1cm5UeXBlOworICAgIFZlY3RvcjxXQVNNVHlwZT4gYXJndW1lbnRzOworfTsKKwor
c3RydWN0IFdBU01GdW5jdGlvbkltcG9ydCB7CisgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZTsKK307
CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgeworICAgIHVpbnQzMl90IHNp
Z25hdHVyZUluZGV4OworICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXg7Cit9OworCitz
dHJ1Y3QgV0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24geworICAgIHVpbnQzMl90IHNpZ25hdHVyZUlu
ZGV4OworfTsKKworc3RydWN0IFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSB7CisgICAgdWludDMy
X3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
ZW5kaWYgLy8gV0FTTUZvcm1hdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IGQ4ZDMwZjUzOGM3NGYwODlkNGZhNWU2OTNmMWQzMTI5
NTNmMTRiZjMuLjg1ZGZhZDhmYzU4YmE4ZGQ4Y2Q4ZDA3ZjE2OTYyN2I1Njk2OTAyNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCkBAIC0z
MCwxMyArMzAsMjEgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dB
U01Nb2R1bGUuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV0FTTU1h
Z2ljTnVtYmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2RlZmluZSBGQUlM
X1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpIGRvIHsgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1l
c3NhZ2U7IHJldHVybiBmYWxzZTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9VTlNJR05FRF9J
TlQzMl9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRVbnNp
Z25lZEludDMyKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgw
KQorI2RlZmluZSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpIGRvIHsgbV9lcnJvck1l
c3NhZ2UgPSBlcnJvck1lc3NhZ2U7IHJldHVybjsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9V
SU5UMzJfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkVUlu
dDMyKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQogI2Rl
ZmluZSBSRUFEX0ZMT0FUX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFk
ZXIucmVhZEZsb2F0KHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxl
ICgwKQogI2RlZmluZSBSRUFEX0RPVUJMRV9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBp
ZiAoIW1fcmVhZGVyLnJlYWREb3VibGUoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2Fn
ZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTCh4LCBl
cnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkQ29tcGFjdFVJbnQzMih4KSkgRkFJ
TF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9T
VFJJTkdfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkU3Ry
aW5nKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2Rl
ZmluZSBSRUFEX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRl
ci5yZWFkVHlwZSh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAo
MCkKKyNkZWZpbmUgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2Up
IGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkRXhwcmVzc2lvblR5cGUoeCkpIEZBSUxfV0lUSF9NRVNT
QUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfRVhQT1JUX0ZPUk1B
VF9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRFeHBvcnRG
b3JtYXQoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCiAj
ZGVmaW5lIEZBSUxfSUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCEo
Y29uZGl0aW9uKSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkK
KyNkZWZpbmUgUFJPUEFHQVRFX0VSUk9SKCkgZG8geyBpZiAoIW1fZXJyb3JNZXNzYWdlLmlzTnVs
bCgpKSByZXR1cm47IH0gd2hpbGUgKDApCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywyNCAr
NTUsMjQ3IEBAIFdBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIoY29uc3QgU291cmNl
Q29kZSYgc291cmNlKQogCiBKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
CiB7Ci0gICAgSlNXQVNNTW9kdWxlKiBtb2R1bGUgPSBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpOworICAgIG1fbW9kdWxlLnNldCh2
bSwgSlNXQVNNTW9kdWxlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+d2FzbU1vZHVsZVN0cnVj
dHVyZSgpKSk7CiAgICAgcGFyc2VNb2R1bGUoKTsKICAgICBpZiAoIW1fZXJyb3JNZXNzYWdlLmlz
TnVsbCgpKSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IG1fZXJyb3JNZXNzYWdlOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIG1vZHVsZTsKKyAgICByZXR1cm4g
bV9tb2R1bGUuZ2V0KCk7CiB9CiAKLWJvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUo
KQordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSgpCiB7CiAgICAgdWludDMyX3Qg
bWFnaWNOdW1iZXI7Ci0gICAgUkVBRF9VTlNJR05FRF9JTlQzMl9PUl9GQUlMKG1hZ2ljTnVtYmVy
LCAiQ2Fubm90IHJlYWQgdGhlIG1hZ2ljIG51bWJlci4iKTsKKyAgICBSRUFEX1VJTlQzMl9PUl9G
QUlMKG1hZ2ljTnVtYmVyLCAiQ2Fubm90IHJlYWQgdGhlIG1hZ2ljIG51bWJlci4iKTsKICAgICBG
QUlMX0lGX0ZBTFNFKG1hZ2ljTnVtYmVyID09IHdhc21NYWdpY051bWJlciwgIlRoZSBtYWdpYyBu
dW1iZXIgaXMgaW5jb3JyZWN0LiIpOwogCi0gICAgLy8gVE9ETzogcGFyc2UgdGhlIHJlc3QKKyAg
ICB1aW50MzJfdCBvdXRwdXRTaXplSW5BU01KUzsKKyAgICBSRUFEX1VJTlQzMl9PUl9GQUlMKG91
dHB1dFNpemVJbkFTTUpTLCAiQ2Fubm90IHJlYWQgdGhlIG91dHB1dCBzaXplIGluIGFzbS5qcyBm
b3JtYXQuIik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBwYXJzZUNvbnN0YW50UG9vbFNlY3Rp
b24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZVNpZ25hdHVyZVNlY3Rpb24o
KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlv
bigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlR2xvYmFsU2VjdGlvbigpOwor
ICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rp
b24oKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uUG9pbnRlclRh
YmxlU2VjdGlvbigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25E
ZWZpbml0aW9uU2VjdGlvbigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRXhw
b3J0U2VjdGlvbigpOworfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlQ29uc3RhbnRQ
b29sU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJDb25zdGFudHM7CisgICAg
dWludDMyX3QgbnVtYmVyT2ZGMzJDb25zdGFudHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGNjRD
b25zdGFudHM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mSTMyQ29u
c3RhbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnQzMiBjb25zdGFudHMuIik7Cisg
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRjMyQ29uc3RhbnRzLCAiQ2Fu
bm90IHJlYWQgdGhlIG51bWJlciBvZiBmbG9hdDMyIGNvbnN0YW50cy4iKTsKKyAgICBSRUFEX0NP
TVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGNjRDb25zdGFudHMsICJDYW5ub3QgcmVhZCB0
aGUgbnVtYmVyIG9mIGZsb2F0NjQgY29uc3RhbnRzLiIpOworICAgIG1fbW9kdWxlLT5pMzJDb25z
dGFudHMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mSTMyQ29uc3RhbnRzKTsKKyAg
ICBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJP
ZkYzMkNvbnN0YW50cyk7CisgICAgbV9tb2R1bGUtPmY2NENvbnN0YW50cygpLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobnVtYmVyT2ZGNjRDb25zdGFudHMpOworCisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bWJlck9mSTMyQ29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAgdWludDMyX3Qg
Y29uc3RhbnQ7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChjb25zdGFudCwg
IkNhbm5vdCByZWFkIGFuIGludDMyIGNvbnN0YW50LiIpOworICAgICAgICBtX21vZHVsZS0+aTMy
Q29uc3RhbnRzKCkuYXBwZW5kKGNvbnN0YW50KTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bWJlck9mRjMyQ29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAgZmxvYXQgY29u
c3RhbnQ7CisgICAgICAgIFJFQURfRkxPQVRfT1JfRkFJTChjb25zdGFudCwgIkNhbm5vdCByZWFk
IGEgZmxvYXQzMiBjb25zdGFudC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmYzMkNvbnN0YW50cygp
LmFwcGVuZChjb25zdGFudCk7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkY2NENvbnN0YW50czsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjb25zdGFudDsKKyAg
ICAgICAgUkVBRF9ET1VCTEVfT1JfRkFJTChjb25zdGFudCwgIkNhbm5vdCByZWFkIGEgZmxvYXQ2
NCBjb25zdGFudC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmY2NENvbnN0YW50cygpLmFwcGVuZChj
b25zdGFudCk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlU2lnbmF0
dXJlU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1cmVzOworICAgIFJF
QURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZlNpZ25hdHVyZXMsICJDYW5ub3QgcmVh
ZCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMuIik7CisgICAgbV9tb2R1bGUtPnNpZ25hdHVyZXMo
KS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mU2lnbmF0dXJlcyk7CisgICAgZm9yICh1
aW50MzJfdCBzaWduYXR1cmVJbmRleCA9IDA7IHNpZ25hdHVyZUluZGV4IDwgbnVtYmVyT2ZTaWdu
YXR1cmVzOyArK3NpZ25hdHVyZUluZGV4KSB7CisgICAgICAgIFdBU01TaWduYXR1cmUgc2lnbmF0
dXJlOworICAgICAgICBSRUFEX0VYUFJFU1NJT05fVFlQRV9PUl9GQUlMKHNpZ25hdHVyZS5yZXR1
cm5UeXBlLCAiQ2Fubm90IHJlYWQgdGhlIHJldHVybiB0eXBlLiIpOworICAgICAgICB1aW50MzJf
dCBhcmd1bWVudENvdW50OworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoYXJn
dW1lbnRDb3VudCwgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiIpOworICAg
ICAgICBzaWduYXR1cmUuYXJndW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJndW1lbnRD
b3VudCk7CisgICAgICAgIGZvciAodWludDMyX3QgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50
SW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ3VtZW50SW5kZXgpIHsKKyAgICAgICAgICAgIFdB
U01UeXBlIHR5cGU7CisgICAgICAgICAgICBSRUFEX1RZUEVfT1JfRkFJTCh0eXBlLCAiQ2Fubm90
IHJlYWQgdGhlIHR5cGUgb2YgYW4gYXJndW1lbnQuIik7CisgICAgICAgICAgICBzaWduYXR1cmUu
YXJndW1lbnRzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBtX21vZHVsZS0+c2ln
bmF0dXJlcygpLmFwcGVuZChzaWduYXR1cmUpOworICAgIH0KK30KKwordm9pZCBXQVNNTW9kdWxl
UGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVt
YmVyT2ZGdW5jdGlvbkltcG9ydHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkltcG9y
dFNpZ25hdHVyZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVu
Y3Rpb25JbXBvcnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnRz
LiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uSW1w
b3J0U2lnbmF0dXJlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gaW1wb3J0
IHNpZ25hdHVyZXMuIik7CisgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0cygpLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpOworICAgIG1fbW9kdWxlLT5m
dW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9m
RnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKTsKKworICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25J
bXBvcnRJbmRleCA9IDA7IGZ1bmN0aW9uSW1wb3J0SW5kZXggPCBudW1iZXJPZkZ1bmN0aW9uSW1w
b3J0czsgKytmdW5jdGlvbkltcG9ydEluZGV4KSB7CisgICAgICAgIFdBU01GdW5jdGlvbkltcG9y
dCBmdW5jdGlvbkltcG9ydDsKKyAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChmdW5jdGlvbklt
cG9ydC5mdW5jdGlvbk5hbWUsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW1wb3J0IG5hbWUu
Iik7CisgICAgICAgIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydHMoKS5hcHBlbmQoZnVuY3Rpb25J
bXBvcnQpOworCisgICAgICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0dXJlczsKKyAgICAgICAg
UkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mU2lnbmF0dXJlcywgIkNhbm5vdCBy
ZWFkIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsKKworICAgICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK2kpIHsKKyAgICAgICAgICAgIFdBU01G
dW5jdGlvbkltcG9ydFNpZ25hdHVyZSBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZTsKKyAgICAgICAg
ICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5z
aWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBzaWduYXR1cmUgaW5kZXguIik7CisgICAg
ICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVyZUlu
ZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4
IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLmZ1
bmN0aW9uSW1wb3J0SW5kZXggPSBmdW5jdGlvbkltcG9ydEluZGV4OworICAgICAgICAgICAgbV9t
b2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygpLmFwcGVuZChmdW5jdGlvbkltcG9ydFNp
Z25hdHVyZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+
ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkuc2l6ZSgpID09IG51bWJlck9mRnVuY3Rpb25JbXBv
cnRTaWduYXR1cmVzLCAiVGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcyBp
cyBpbmNvcnJlY3QuIik7Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxT
ZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkludGVybmFsSTMyR2xvYmFsVmFyaWFi
bGVzOworICAgIHVpbnQzMl90IG51bWJlck9mSW50ZXJuYWxGMzJHbG9iYWxWYXJpYWJsZXM7Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZJbnRlcm5hbEY2NEdsb2JhbFZhcmlhYmxlczsKKyAgICB1aW50
MzJfdCBudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOworICAgIHVpbnQzMl90IG51
bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJ
bXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZB
SUwobnVtYmVyT2ZJbnRlcm5hbEkzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBu
dW1iZXIgb2YgaW50ZXJuYWwgaW50MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NP
TVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbnRlcm5hbEYzMkdsb2JhbFZhcmlhYmxlcywg
IkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgZmxvYXQzMiBnbG9iYWwgdmFyaWFi
bGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkludGVybmFs
RjY0R2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBm
bG9hdDY0IGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9G
QUlMKG51bWJlck9mSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUg
bnVtYmVyIG9mIGltcG9ydGVkIGludDMyIGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9D
T01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXMs
ICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGltcG9ydGVkIGZsb2F0MzIgZ2xvYmFsIHZhcmlh
Ymxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRl
ZEY2NEdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQg
ZmxvYXQ2NCBnbG9iYWwgdmFyaWFibGVzLiIpOworICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFs
VmFyaWFibGVzID0gbnVtYmVyT2ZJbnRlcm5hbEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9m
SW50ZXJuYWxGMzJHbG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkludGVybmFsRjY0R2xvYmFsVmFy
aWFibGVzICsKKyAgICAgICAgbnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcyArIG51
bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkltcG9ydGVkRjY0R2xv
YmFsVmFyaWFibGVzOworCisgICAgVmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBl
cyA9IG1fbW9kdWxlLT5nbG9iYWxWYXJpYWJsZVR5cGVzKCk7CisgICAgZ2xvYmFsVmFyaWFibGVU
eXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mR2xvYmFsVmFyaWFibGVzKTsKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnRlcm5hbEkzMkdsb2JhbFZhcmlh
YmxlczsgKytpKQorICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6
STMyKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnRlcm5hbEYzMkds
b2JhbFZhcmlhYmxlczsgKytpKQorICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChX
QVNNVHlwZTo6RjMyKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnRl
cm5hbEY2NEdsb2JhbFZhcmlhYmxlczsgKytpKQorICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVz
LmFwcGVuZChXQVNNVHlwZTo6RjY0KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlczsgKytpKSB7CisgICAgICAgIFN0cmluZyBp
bXBvcnROYW1lOworICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJDYW5u
b3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUgb2YgYW4gaW50MzIgZ2xvYmFsIHZhcmlhYmxlLiIpOwor
ICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLmFwcGVuZChXQVNNVHlwZTo6STMyKTsKKyAgICB9
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxW
YXJpYWJsZXM7ICsraSkgeworICAgICAgICBTdHJpbmcgaW1wb3J0TmFtZTsKKyAgICAgICAgUkVB
RF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1l
IG9mIGEgZmxvYXQzMiBnbG9iYWwgdmFyaWFibGUuIik7CisgICAgICAgIGdsb2JhbFZhcmlhYmxl
VHlwZXMuYXBwZW5kKFdBU01UeXBlOjpGMzIpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsgKytpKSB7CisgICAg
ICAgIFN0cmluZyBpbXBvcnROYW1lOworICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9y
dE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUgb2YgYSBmbG9hdDY0IGdsb2JhbCB2
YXJpYWJsZS4iKTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6
OkY2NCk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvblNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25EZWNs
YXJhdGlvbnM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rp
b25EZWNsYXJhdGlvbnMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGRlY2xh
cmF0aW9ucy4iKTsKKyAgICBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnMpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOyArK2kpIHsK
KyAgICAgICAgV0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24gZnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAg
ICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2ln
bmF0dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOworICAgICAg
ICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2lnbmF0dXJlSW5kZXggPCBtX21v
ZHVsZS0+c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3Jy
ZWN0LiIpOworICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5hcHBlbmQo
ZnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6
OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkZ1bmN0aW9uUG9pbnRlclRhYmxlczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZB
SUwobnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVy
IG9mIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzLiIpOworICAgIG1fbW9kdWxlLT5mdW5jdGlvblBv
aW50ZXJUYWJsZXMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25Qb2lu
dGVyVGFibGVzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlv
blBvaW50ZXJUYWJsZXM7ICsraSkgeworICAgICAgICBXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGUg
ZnVuY3Rpb25Qb2ludGVyVGFibGU7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJ
TChmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBz
aWduYXR1cmUgaW5kZXguIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25Qb2ludGVy
VGFibGUuc2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+c2lnbmF0dXJlcygpLnNpemUoKSwgIlRo
ZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgICAgICB1aW50MzJfdCBudW1i
ZXJPZkVsZW1lbnRzOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVy
T2ZFbGVtZW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSBmdW5j
dGlvbiBwb2ludGVyIHRhYmxlLiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKGhhc09uZUJpdFNl
dChudW1iZXJPZkVsZW1lbnRzKSwgIlRoZSBudW1iZXIgb2YgZWxlbWVudHMgbXVzdCBiZSBhIHBv
d2VyIG9mIHR3by4iKTsKKyAgICAgICAgZnVuY3Rpb25Qb2ludGVyVGFibGUuZWxlbWVudHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkVsZW1lbnRzKTsKKyAgICAgICAgZm9yICh1aW50
MzJfdCBqID0gMDsgaiA8IG51bWJlck9mRWxlbWVudHM7ICsraikgeworICAgICAgICAgICAgdWlu
dDMyX3QgZWxlbWVudDsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChl
bGVtZW50LCAiQ2Fubm90IHJlYWQgYW4gZWxlbWVudCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFi
bGUuIik7CisgICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5lbGVtZW50cy5hcHBlbmQo
ZWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRh
YmxlcygpLmFwcGVuZChmdW5jdGlvblBvaW50ZXJUYWJsZSk7CisgICAgfQorfQorCit2b2lkIFdB
U01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5z
aXplKCk7ICsraSkgeworICAgICAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOworICAgICAg
ICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oKQoreworICAgIC8vIFRPRE86IFN1cHBvcnQgYW55IGZ1
bmN0aW9ucy4KKyAgICAvLyBDdXJyZW50bHksIHdlIG9ubHkgc3VwcG9ydCBmdW5jdGlvbnMgdGhh
dCBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LgorICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBjb25zaXN0IG9mIGV4YWN0bHkgNCBieXRlcywgaS5lLgorICAgIC8vIDEuIFRo
ZSBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzICgwKSBbMHg4MF0KKyAgICAvLyAyLiBUaGUgbnVt
YmVyIG9mIHN0YXRlbWVudHMgKDEpIFsweDAxXQorICAgIC8vIDMuIFRoZSByZXR1cm4gc3RhdGVt
ZW50IFsweDBmXQorICAgIC8vIDQuIFRoZSBpbW1lZGlhdGUgZXhwcmVzc2lvbiAoMCkgWzB4YTBd
CisgICAgdWludDMyX3QgZnVuY3Rpb25EZWZpbml0aW9uQnl0ZXM7CisgICAgUkVBRF9VSU5UMzJf
T1JfRkFJTChmdW5jdGlvbkRlZmluaXRpb25CeXRlcywgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlv
biBkZWZpbml0aW9uLiIpOworICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25EZWZpbml0aW9uQnl0
ZXMgPT0gMHhhMDBmMDE4MCwgIk9ubHkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBcInJldHVybiAwO1wi
ICIKKyAgICAgICAgImFzIHRoZWlyIG9ubHkgc3RhdGVtZW50IGFyZSBzdXBwb3J0ZWQgYXQgdGhl
IG1vbWVudC4iKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rp
b24oKQoreworICAgIFdBU01FeHBvcnRGb3JtYXQgZXhwb3J0Rm9ybWF0OworICAgIFJFQURfRVhQ
T1JUX0ZPUk1BVF9PUl9GQUlMKGV4cG9ydEZvcm1hdCwgIkNhbm5vdCByZWFkIHRoZSBleHBvcnQg
Zm9ybWF0LiIpOworICAgIHN3aXRjaCAoZXhwb3J0Rm9ybWF0KSB7CisgICAgY2FzZSBXQVNNRXhw
b3J0Rm9ybWF0OjpEZWZhdWx0OiB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Cisg
ICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90
IHJlYWQgdGhlIGZ1bmN0aW9uIGluZGV4LiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0
aW9uSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCksICJUaGUg
ZnVuY3Rpb24gaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgICAgICAvLyBUT0RPOiBFeHBvcnQg
dGhlIGZ1bmN0aW9uLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXQVNNRXhwb3J0
Rm9ybWF0OjpSZWNvcmQ6IHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZFeHBvcnRzOworICAg
ICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZFeHBvcnRzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBleHBvcnRzLiIpOworICAgICAgICBmb3IgKHVpbnQzMl90IGV4
cG9ydEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5k
ZXgpIHsKKyAgICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOworICAgICAgICAgICAgUkVBRF9T
VFJJTkdfT1JfRkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGV4cG9y
dCBuYW1lLiIpOworICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgdGhhdCBleHBvcnROYW1lIGlz
IGxlZ2FsLgorICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgICAg
IFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQg
dGhlIGZ1bmN0aW9uIGluZGV4LiIpOworICAgICAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlv
bkluZGV4IDwgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpLCAiVGhlIGZ1
bmN0aW9uIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgICAgIC8vIFRPRE86IEV4cG9y
dCB0aGUgZnVuY3Rpb24uCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogSlNXQVNN
TW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAppbmRleCBmNWQ2YTMxNzg5ZTEzMTBkNDc3MmQ1ODEy
OGVkYWE0ZDY2ZDNjNDI1Li41ZWM1ZmQzODg1ZDJlMDIwY2I5ZjViZDRkZmEyYjY1NmQzNzkwOWQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2Vy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJT
dHJvbmcuaCIKICNpbmNsdWRlICJXQVNNUmVhZGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKQEAgLTQ1LDkgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICBKU1dBU01Nb2R1bGUq
IHBhcnNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBwYXJzZU1vZHVsZSgpOworICAgIHZvaWQgcGFyc2VNb2R1bGUoKTsK
KyAgICB2b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VTaWdu
YXR1cmVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpOwor
ICAgIHZvaWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVj
bGFyYXRpb25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2Vj
dGlvbigpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCk7CisgICAg
dm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOworICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0
aW9uKCk7CiAKICAgICBXQVNNUmVhZGVyIG1fcmVhZGVyOworICAgIFN0cm9uZzxKU1dBU01Nb2R1
bGU+IG1fbW9kdWxlOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKaW5kZXggMjdiZjkzOTQyYmFjMWJkNDky
YmY3NDMyODMwYmU3MTEwYmRhYTk3Ni4uZDUzNzRmMzNjYjJiNGI3ZWU4N2Q4MGMyMjNkNDJjZWNh
MzMxNWYwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKQEAg
LTI4LDExICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCiAjZGVmaW5lIENIRUNLX1JFQUQobGVuZ3RoKSBk
byB7IGlmIChtX2N1cnNvciArIGxlbmd0aCA+IG1fYnVmZmVyLmVuZCgpKSByZXR1cm4gZmFsc2U7
IH0gd2hpbGUgKDApCiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIFdBU01SZWFkZXI6OnJlYWRV
bnNpZ25lZEludDMyKHVpbnQzMl90JiByZXN1bHQpCitib29sIFdBU01SZWFkZXI6OnJlYWRVSW50
MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICBDSEVDS19SRUFEKDQpOwogICAgIHJlc3VsdCA9
IG1fY3Vyc29yWzBdIHwgbV9jdXJzb3JbMV0gPDwgOCB8IG1fY3Vyc29yWzJdIDw8IDE2IHwgbV9j
dXJzb3JbM10gPDwgMjQ7CkBAIC03Niw2ICs3OCw2NCBAQCBib29sIFdBU01SZWFkZXI6OnJlYWRE
b3VibGUoZG91YmxlJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgV0FTTVJl
YWRlcjo6cmVhZENvbXBhY3RVSW50MzIodWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICB1aW50MzJf
dCBzdW0gPSAwOworICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKKyAgICBkbyB7CisgICAgICAgIENI
RUNLX1JFQUQoMSk7CisgICAgICAgIHVpbnQzMl90IGJ5dGUgPSAqbV9jdXJzb3IrKzsKKyAgICAg
ICAgaWYgKGJ5dGUgPCAweDgwKSB7CisgICAgICAgICAgICBpZiAoKHNoaWZ0ID09IDI4ICYmIGJ5
dGUgPj0gMHgxMCkgfHwgKHNoaWZ0ICYmICFieXRlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXN1bHQgPSBzdW0gfCAoYnl0ZSA8PCBzaGlmdCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBzdW0gfD0gKGJ5dGUgJiAw
eDdmKSA8PCBzaGlmdDsKKyAgICAgICAgc2hpZnQgKz0gNzsKKyAgICB9IHdoaWxlIChzaGlmdCA8
IDM1KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZFN0cmlu
ZyhTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICAgICAgY2hhciBjID0gKm1f
Y3Vyc29yKys7CisgICAgICAgIGlmICghYykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChjKTsKKyAgICB9CisgICAgcmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdBU01SZWFkZXI6OnJlYWRUeXBlKFdBU01U
eXBlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIHJlYWRCeXRlPFdBU01UeXBlPihyZXN1bHQsICh1
aW50OF90KVdBU01UeXBlOjpOdW1iZXJPZlR5cGVzKTsKK30KKworYm9vbCBXQVNNUmVhZGVyOjpy
ZWFkRXhwcmVzc2lvblR5cGUoV0FTTUV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgcmV0
dXJuIHJlYWRCeXRlPFdBU01FeHByZXNzaW9uVHlwZT4ocmVzdWx0LCAodWludDhfdClXQVNNRXhw
cmVzc2lvblR5cGU6Ok51bWJlck9mRXhwcmVzc2lvblR5cGVzKTsKK30KKworYm9vbCBXQVNNUmVh
ZGVyOjpyZWFkRXhwb3J0Rm9ybWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gcmVhZEJ5dGU8V0FTTUV4cG9ydEZvcm1hdD4ocmVzdWx0LCAodWludDhfdClXQVNNRXhw
b3J0Rm9ybWF0OjpOdW1iZXJPZkV4cG9ydEZvcm1hdHMpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gYm9vbCBXQVNNUmVhZGVyOjpyZWFkQnl0ZShUJiByZXN1bHQsIHVpbnQ4X3QgbnVtYmVyT2ZW
YWx1ZXMpCit7CisgICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJz
b3IrKzsKKyAgICBpZiAoYnl0ZSA+PSBudW1iZXJPZlZhbHVlcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJlc3VsdCA9IFQoYnl0ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oCmluZGV4IDdjZGVhMmI5MmQ4MmRlNmRhYTc4Y2I3
ZDhmMzMyYTIzZjNlZmZjZTEuLmI5Y2I1NzE0Nzk3Njc4YmFhZGEyYmZhMGZhNzg5YmM1NmNjNWUz
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmgKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldBU01Gb3JtYXQu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsMTEg
KzQxLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCByZWFkVW5zaWduZWRJ
bnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRVSW50MzIodWludDMyX3QmIHJl
c3VsdCk7CiAgICAgYm9vbCByZWFkRmxvYXQoZmxvYXQmIHJlc3VsdCk7CiAgICAgYm9vbCByZWFk
RG91YmxlKGRvdWJsZSYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRDb21wYWN0VUludDMyKHVpbnQz
Ml90JiByZXN1bHQpOworICAgIGJvb2wgcmVhZFN0cmluZyhTdHJpbmcmIHJlc3VsdCk7CisgICAg
Ym9vbCByZWFkVHlwZShXQVNNVHlwZSYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRFeHByZXNzaW9u
VHlwZShXQVNNRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCByZWFkRXhwb3J0Rm9y
bWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3VsdCk7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGJvb2wgcmVhZEJ5dGUoVCYgcmVzdWx0LCB1aW50OF90IG51bWJlck9mVmFsdWVz
KTsKKwogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbV9idWZmZXI7CiAgICAgY29uc3QgdWlu
dDhfdCogbV9jdXJzb3I7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258411</attachid>
            <date>2015-08-06 16:01:15 -0700</date>
            <delta_ts>2015-08-06 17:22:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147393-20150806160105.patch</filename>
            <type>text/plain</type>
            <size>34301</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OTExNjczOTBkYTI1ZjRjNzU5OGE4OTQ2NTAzZjZkZjUxYjNiYjM0Li5lZTE5MGFhM2UwMTM5MTgz
OTZjMDU1ZjlkOGM5Y2I5NTNiZDdjMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxNS0wOC0wNiAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBQYXJzZSB0aGUgZW50aXJlIFdlYkFzc2VtYmx5IG1vZHVsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzM5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNlIHRo
ZSBlbnRpcmUgV2ViQXNzZW1ibHkgbW9kdWxlcyBmcm9tIGZpbGVzIHByb2R1Y2VkIGJ5IHBhY2st
YXNtanMKKyAgICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9wb2x5ZmlsbC1w
cm90b3R5cGUtMT4uIFRoaXMgcGF0Y2ggY2FuIG9ubHkKKyAgICAgICAgcGFyc2UgbW9kdWxlcyB3
aG9zZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNlY3Rpb24gY29udGFpbnMgb25seSBmdW5jdGlvbnMg
dGhhdAorICAgICAgICBoYXZlICJyZXR1cm4gMDsiIGFzIHRoZWlyIG9ubHkgc3RhdGVtZW50LiBQ
YXJzaW5nIG9mIGFueSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBh
IHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3YXNtL0pTV0FTTU1vZHVsZS5j
cHA6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZGVzdHJveSk6CisgICAgICAgICogd2Fz
bS9KU1dBU01Nb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjppMzJDb25zdGFu
dHMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmYzMkNvbnN0YW50cyk6CisgICAgICAg
IChKU0M6OkpTV0FTTU1vZHVsZTo6ZjY0Q29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXQVNN
TW9kdWxlOjpzaWduYXR1cmVzKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlv
bkltcG9ydHMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlcyk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6Z2xvYmFsVmFyaWFibGVUeXBl
cyk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25EZWNsYXJhdGlvbnMpOgor
ICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAg
ICAgICogd2FzbS9XQVNNRm9ybWF0Lmg6IEFkZGVkLgorICAgICAgICAqIHdhc20vV0FTTU1vZHVs
ZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAg
ICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUpOgorICAgICAgICAoSlND
OjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24pOgorICAgICAgICAo
SlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZVNpZ25hdHVyZVNlY3Rpb24pOgorICAgICAgICAo
SlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAg
ICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsU2VjdGlvbik6CisgICAgICAg
IChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24p
OgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRh
YmxlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25EZWZpbml0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VFeHBvcnRTZWN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dBU01Nb2R1bGVQYXJzZXIuaDoK
KyAgICAgICAgKiB3YXNtL1dBU01SZWFkZXIuY3BwOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVy
OjpyZWFkVUludDMyKToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZENvbXBhY3RVSW50
MzIpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6V0FTTVJlYWRlcjo6cmVhZFR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFk
RXhwcmVzc2lvblR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkRXhwb3J0Rm9y
bWF0KToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZEJ5dGUpOgorICAgICAgICAoSlND
OjpXQVNNUmVhZGVyOjpyZWFkVW5zaWduZWRJbnQzMik6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9XQVNNUmVhZGVyLmg6CisKIDIwMTUtMDgtMDYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFVuc3BlY2lmaWVkQm9vbFR5cGUgZnJvbSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IGQ3YTQ5NzIwZTc5
OTYyNmI5MDIxZmQ1NjgxNmE5ZTY3N2Y3Mzg0MDIuLmFhNGE1MGExY2I0ZDg2MGE4MTVmMjhhYjVl
MjNiZmQ1ODEyN2ZkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpA
QCAtMTc1OCw2ICsxNzU4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFBy
b2ZpbGVUcmVlTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcVGll
cmVkTU1hcEFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3YXNtXEpTV0FT
TU1vZHVsZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd2FzbVxXQVNNRm9ybWF0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3YXNtXFdBU01NYWdpY051bWJlci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd2FzbVxXQVNNTW9kdWxlUGFyc2VyLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3YXNtXFdBU01SZWFkZXIuaCIgLz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBl
NGQ1MzgyMzdiOWI4NDMwMjc4MGNjOWY4NzdmOWRmNjFlMDMxOGM2Li5iMGQyMmE1OTU0ZDM0ZmFj
YTQwZjhkNmYyZTk2YjAyZTAwYTU5MGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC00MzQ4LDYgKzQzNDgsOSBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cd2FzbVxKU1dBU01Nb2R1bGUuaCI+CiAgICAgICA8RmlsdGVyPndh
c208L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHdhc21cV0FTTUZvcm1hdC5oIj4KKyAgICAgIDxGaWx0ZXI+d2FzbTwvRmlsdGVyPgorICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd2FzbVxXQVNNTWFnaWNOdW1i
ZXIuaCI+CiAgICAgICA8RmlsdGVyPndhc208L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjkyNGZiZDdmZDYxM2RkYmJjZDRlNTg4MjU4
NWE2YWNiOGQzM2QxZi4uN2I2OTk4ZGE3MGQ5NTI1ODVjMmRiYWE3ODk2NThhMGVjNmUwOTQ0YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMzQsNiArMTAzNCw3IEBACiAJCTdC
N0E1RTI3MUI2ODI4OEMwMDI3Q0FEMCAvKiBXQVNNTWFnaWNOdW1iZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCN0E1RTI2MUI2ODI4ODQwMDI3Q0FE
MCAvKiBXQVNNTWFnaWNOdW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3Qjk4RDEzNjFCNjBDRDVGMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOThE
MTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwICovOyB9OwogCQk3Qjk4RDEz
NzFCNjBDRDYyMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNX
QVNNTW9kdWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1
OUI1OCAvKiBXQVNNRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVy
cmVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
MDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgKi87IH07CiAJ
CTdDMDA4Q0RCMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDkxODcxMjRCQjAw
OTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMDhDRTcxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3Jv
dGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mw
MDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yODE1LDYgKzI4MTYsNyBAQAogCQk3QjdB
NUUyNjFCNjgyODg0MDAyN0NBRDAgLyogV0FTTU1hZ2ljTnVtYmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01NYWdpY051bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBK
U1dBU01Nb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXQVNNTW9k
dWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQzU0N0QyMUI2OTU5OUIwMDk1
OUI1OCAvKiBXQVNNRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
U01Gb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRDgxODcxMjRC
QjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MwMDhDRDkxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAv
KiBNaWNyb3Rhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWljcm90YXNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00Mzc5LDYgKzQzODEsNyBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJN0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVs
ZS5jcHAgKi8sCiAJCQkJN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5o
ICovLAorCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggKi8sCiAJ
CQkJN0I3QTVFMjYxQjY4Mjg4NDAwMjdDQUQwIC8qIFdBU01NYWdpY051bWJlci5oICovLAogCQkJ
CTdCMzlGNzY5MUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJ
CQk3QjM5Rjc2QTFCNjJERTIyMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5oICovLApAQCAt
NjY4Miw2ICs2Njg1LDcgQEAKIAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVh
bFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAg
LyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTkzMkE4MTgzQzVBMjYwMEExRUNDQyAvKiBW
TUVudHJ5U2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1
OCAvKiBXQVNNRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQ5NEYyRjE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDI2MTU4NTNDRTMw
MDRBNEU3RCAvKiBXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQzEzNEZG
MEE2MDBBRkFEQjUgLyogV2Vhay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcAppbmRleCA0ZTJiMGMxNzFmY2ZlYzIwYzFkZjAxZDI1
MThmZDkwNjU2YjMzMTljLi5hNjFiMzZjMjRjMDdjMjRkMDkwMTY5YzU0ZmJlNzEyNDJhMDZhMWY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5jcHAKQEAgLTM1
LDYgKzM1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXQVNNTW9k
dWxlOjpzX2luZm8gPSB7ICJXQVNNTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1dBU01Nb2R1bGUpIH07CiAKK3ZvaWQgSlNXQVNNTW9kdWxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1dBU01Nb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNXQVNNTW9kdWxlKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNXQVNNTW9kdWxlOjp+SlNX
QVNNTW9kdWxlKCk7Cit9CisKIHZvaWQgSlNXQVNNTW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNXQVNNTW9kdWxlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTV0FTTU1vZHVsZSo+KGNlbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dBU01Nb2R1bGUuaAppbmRleCA4YWQ5ZTNiODkxYWU4NTYzZTY4MDc5M2I4N2E5
ZTUxNGQ2OTEwNzVhLi5hNzI2NmI1N2RhOGQzN2U3MDZlYWNmMDc4MGMyYmQ3YzBiZTFmOGQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaApAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCisjaW5jbHVkZSAiV0FTTUZvcm1hdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNTAsMTQgKzUxLDM1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKKyAgICBWZWN0b3I8dWludDMyX3Q+JiBpMzJDb25zdGFudHMoKSB7IHJldHVybiBt
X2kzMkNvbnN0YW50czsgfQorICAgIFZlY3RvcjxmbG9hdD4mIGYzMkNvbnN0YW50cygpIHsgcmV0
dXJuIG1fZjMyQ29uc3RhbnRzOyB9CisgICAgVmVjdG9yPGRvdWJsZT4mIGY2NENvbnN0YW50cygp
IHsgcmV0dXJuIG1fZjY0Q29uc3RhbnRzOyB9CisgICAgVmVjdG9yPFdBU01TaWduYXR1cmU+JiBz
aWduYXR1cmVzKCkgeyByZXR1cm4gbV9zaWduYXR1cmVzOyB9CisgICAgVmVjdG9yPFdBU01GdW5j
dGlvbkltcG9ydD4mIGZ1bmN0aW9uSW1wb3J0cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRz
OyB9CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4mIGZ1bmN0aW9uSW1w
b3J0U2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOyB9Cisg
ICAgVmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcygpIHsgcmV0dXJuIG1fZ2xv
YmFsVmFyaWFibGVUeXBlczsgfQorICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbj4m
IGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xhcmF0aW9uczsg
fQorICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+JiBmdW5jdGlvblBvaW50ZXJU
YWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsgfQorCiBwcml2YXRlOgog
ICAgIEpTV0FTTU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICB7CiAgICAgfQogCisgICAgVmVjdG9yPHVpbnQzMl90
PiBtX2kzMkNvbnN0YW50czsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fZjMyQ29uc3RhbnRzOworICAg
IFZlY3Rvcjxkb3VibGU+IG1fZjY0Q29uc3RhbnRzOworICAgIFZlY3RvcjxXQVNNU2lnbmF0dXJl
PiBtX3NpZ25hdHVyZXM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydD4gbV9mdW5jdGlv
bkltcG9ydHM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4gbV9mdW5j
dGlvbkltcG9ydFNpZ25hdHVyZXM7CisgICAgVmVjdG9yPFdBU01UeXBlPiBtX2dsb2JhbFZhcmlh
YmxlVHlwZXM7CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uPiBtX2Z1bmN0aW9u
RGVjbGFyYXRpb25zOworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+IG1fZnVu
Y3Rpb25Qb2ludGVyVGFibGVzOworCiAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
Pj4gbV9mdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWJhOWY5OGEwZTY2OTZkYmNjY2UxOTIyODkyMGMzMzhmMzI3NzFlZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQu
aApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgYnkg
dGhlIHJlcG9zaXRvcnkgYXV0aG9ycyBvZgorICogV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90
eXBlLTEuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCisgKi8KKworI2lmbmRlZiBXQVNNRm9ybWF0X2gKKyNkZWZpbmUgV0FTTUZvcm1hdF9o
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVt
IGNsYXNzIFdBU01UeXBlIDogdWludDhfdCB7CisgICAgSTMyLAorICAgIEYzMiwKKyAgICBGNjQs
CisgICAgTnVtYmVyT2ZUeXBlcworfTsKKworZW51bSBjbGFzcyBXQVNNRXhwcmVzc2lvblR5cGUg
OiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NCwKKyAgICBWb2lkLAorICAg
IE51bWJlck9mRXhwcmVzc2lvblR5cGVzCit9OworCitlbnVtIGNsYXNzIFdBU01FeHBvcnRGb3Jt
YXQgOiB1aW50OF90IHsKKyAgICBEZWZhdWx0LAorICAgIFJlY29yZCwKKyAgICBOdW1iZXJPZkV4
cG9ydEZvcm1hdHMKK307CisKK3N0cnVjdCBXQVNNU2lnbmF0dXJlIHsKKyAgICBXQVNNRXhwcmVz
c2lvblR5cGUgcmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8V0FTTVR5cGU+IGFyZ3VtZW50czsKK307
CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25JbXBvcnQgeworICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7
Cit9OworCitzdHJ1Y3QgV0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIHsKKyAgICB1aW50MzJf
dCBzaWduYXR1cmVJbmRleDsKKyAgICB1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4OworfTsK
Kworc3RydWN0IFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIHsKKyAgICB1aW50MzJfdCBzaWduYXR1
cmVJbmRleDsKK307CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGUgeworICAgIHVp
bnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgIFZlY3Rvcjx1aW50MzJfdD4gZWxlbWVudHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2VuZGlmIC8vIFdBU01Gb3JtYXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRleCBkOGQzMGY1MzhjNzRmMDg5ZDRmYTVlNjkzZjFk
MzEyOTUzZjE0YmYzLi4yMzE0OGUyNjQxMjU0NTE5ZmJmYzE3Nzg3YWVjMTI1ZmYzODAyOGUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcApA
QCAtMzAsMTMgKzMwLDIxIEBACiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNXQVNNTW9kdWxlLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldB
U01NYWdpY051bWJlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNkZWZpbmUg
RkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKSBkbyB7IG1fZXJyb3JNZXNzYWdlID0gZXJy
b3JNZXNzYWdlOyByZXR1cm4gZmFsc2U7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfVU5TSUdO
RURfSU5UMzJfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFk
VW5zaWduZWRJbnQzMih4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGls
ZSAoMCkKLSNkZWZpbmUgUkVBRF9GTE9BVF9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBp
ZiAoIW1fcmVhZGVyLnJlYWRGbG9hdCh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdl
KTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9ET1VCTEVfT1JfRkFJTCh4LCBlcnJvck1lc3Nh
Z2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkRG91YmxlKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShl
cnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBGQUlMX1dJVEhfTUVTU0FHRShlcnJv
ck1lc3NhZ2UpIGRvIHsgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7IHJldHVybjsgfSB3
aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9VSU5UMzJfT1JfRkFJTChyZXN1bHQsIGVycm9yTWVzc2Fn
ZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRVSW50MzIocmVzdWx0KSkgRkFJTF9XSVRIX01FU1NB
R0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9GTE9BVF9PUl9GQUlM
KHJlc3VsdCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZEZsb2F0KHJlc3Vs
dCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5l
IFJFQURfRE9VQkxFX09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3Jl
YWRlci5yZWFkRG91YmxlKHJlc3VsdCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7
IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChyZXN1bHQs
IGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRDb21wYWN0VUludDMyKHJlc3Vs
dCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5l
IFJFQURfU1RSSU5HX09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3Jl
YWRlci5yZWFkU3RyaW5nKHJlc3VsdCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7
IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfVFlQRV9PUl9GQUlMKHJlc3VsdCwgZXJyb3JNZXNz
YWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFR5cGUocmVzdWx0KSkgRkFJTF9XSVRIX01FU1NB
R0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9FWFBSRVNTSU9OX1RZ
UEVfT1JfRkFJTChyZXN1bHQsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRF
eHByZXNzaW9uVHlwZShyZXN1bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9
IHdoaWxlICgwKQorI2RlZmluZSBSRUFEX0VYUE9SVF9GT1JNQVRfT1JfRkFJTChyZXN1bHQsIGVy
cm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRFeHBvcnRGb3JtYXQocmVzdWx0KSkg
RkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgRkFJ
TF9JRl9GQUxTRShjb25kaXRpb24sIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIShjb25kaXRpb24p
KSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBQ
Uk9QQUdBVEVfRVJST1IoKSBkbyB7IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHJldHVy
bjsgfSB3aGlsZSAoMCkKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ3LDI0ICs1NSwyNDggQEAg
V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcihjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UpCiAKIEpTV0FTTU1vZHVsZSogV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBK
U1dBU01Nb2R1bGUqIG1vZHVsZSA9IEpTV0FTTU1vZHVsZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QtPndhc21Nb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgbV9tb2R1bGUuc2V0KHZtLCBKU1dBU01N
b2R1bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpKTsK
ICAgICBwYXJzZU1vZHVsZSgpOwogICAgIGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsK
ICAgICAgICAgZXJyb3JNZXNzYWdlID0gbV9lcnJvck1lc3NhZ2U7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbW9kdWxlOworICAgIHJldHVybiBtX21vZHVsZS5n
ZXQoKTsKIH0KIAotYm9vbCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSgpCit2b2lkIFdB
U01Nb2R1bGVQYXJzZXI6OnBhcnNlTW9kdWxlKCkKIHsKICAgICB1aW50MzJfdCBtYWdpY051bWJl
cjsKLSAgICBSRUFEX1VOU0lHTkVEX0lOVDMyX09SX0ZBSUwobWFnaWNOdW1iZXIsICJDYW5ub3Qg
cmVhZCB0aGUgbWFnaWMgbnVtYmVyLiIpOworICAgIFJFQURfVUlOVDMyX09SX0ZBSUwobWFnaWNO
dW1iZXIsICJDYW5ub3QgcmVhZCB0aGUgbWFnaWMgbnVtYmVyLiIpOwogICAgIEZBSUxfSUZfRkFM
U0UobWFnaWNOdW1iZXIgPT0gd2FzbU1hZ2ljTnVtYmVyLCAiVGhlIG1hZ2ljIG51bWJlciBpcyBp
bmNvcnJlY3QuIik7CiAKLSAgICAvLyBUT0RPOiBwYXJzZSB0aGUgcmVzdAorICAgIHVpbnQzMl90
IG91dHB1dFNpemVJbkFTTUpTOworICAgIFJFQURfVUlOVDMyX09SX0ZBSUwob3V0cHV0U2l6ZUlu
QVNNSlMsICJDYW5ub3QgcmVhZCB0aGUgb3V0cHV0IHNpemUgaW4gYXNtLmpzIGZvcm1hdC4iKTsK
IAotICAgIHJldHVybiB0cnVlOworICAgIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAg
IFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlU2lnbmF0dXJlU2VjdGlvbigpOworICAgIFBS
T1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAg
UFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgUFJPUEFH
QVRFX0VSUk9SKCk7CisgICAgcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAg
IFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9u
KCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25T
ZWN0aW9uKCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcGFyc2VFeHBvcnRTZWN0aW9u
KCk7Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9u
KCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMkNvbnN0YW50czsKKyAgICB1aW50MzJfdCBu
dW1iZXJPZkYzMkNvbnN0YW50czsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NENvbnN0YW50czsK
KyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJMzJDb25zdGFudHMsICJD
YW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGludDMyIGNvbnN0YW50cy4iKTsKKyAgICBSRUFEX0NP
TVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGMzJDb25zdGFudHMsICJDYW5ub3QgcmVhZCB0
aGUgbnVtYmVyIG9mIGZsb2F0MzIgY29uc3RhbnRzLiIpOworICAgIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTChudW1iZXJPZkY2NENvbnN0YW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIg
b2YgZmxvYXQ2NCBjb25zdGFudHMuIik7CisgICAgbV9tb2R1bGUtPmkzMkNvbnN0YW50cygpLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZJMzJDb25zdGFudHMpOworICAgIG1fbW9kdWxl
LT5mMzJDb25zdGFudHMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRjMyQ29uc3Rh
bnRzKTsKKyAgICBtX21vZHVsZS0+ZjY0Q29uc3RhbnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1iZXJPZkY2NENvbnN0YW50cyk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZJMzJDb25zdGFudHM7ICsraSkgeworICAgICAgICB1aW50MzJfdCBjb25zdGFudDsK
KyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJl
YWQgYW4gaW50MzIgY29uc3RhbnQuIik7CisgICAgICAgIG1fbW9kdWxlLT5pMzJDb25zdGFudHMo
KS51bmNoZWNrZWRBcHBlbmQoY29uc3RhbnQpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZGMzJDb25zdGFudHM7ICsraSkgeworICAgICAgICBmbG9hdCBjb25z
dGFudDsKKyAgICAgICAgUkVBRF9GTE9BVF9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQg
YSBmbG9hdDMyIGNvbnN0YW50LiIpOworICAgICAgICBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCku
dW5jaGVja2VkQXBwZW5kKGNvbnN0YW50KTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG51bWJlck9mRjY0Q29uc3RhbnRzOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGNvbnN0
YW50OworICAgICAgICBSRUFEX0RPVUJMRV9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQg
YSBmbG9hdDY0IGNvbnN0YW50LiIpOworICAgICAgICBtX21vZHVsZS0+ZjY0Q29uc3RhbnRzKCku
dW5jaGVja2VkQXBwZW5kKGNvbnN0YW50KTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBh
cnNlcjo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlNp
Z25hdHVyZXM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mU2lnbmF0
dXJlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsKKyAgICBtX21v
ZHVsZS0+c2lnbmF0dXJlcygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZTaWduYXR1
cmVzKTsKKyAgICBmb3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5k
ZXggPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgV0FT
TVNpZ25hdHVyZSBzaWduYXR1cmU7CisgICAgICAgIFJFQURfRVhQUkVTU0lPTl9UWVBFX09SX0ZB
SUwoc2lnbmF0dXJlLnJldHVyblR5cGUsICJDYW5ub3QgcmVhZCB0aGUgcmV0dXJuIHR5cGUuIik7
CisgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7CisgICAgICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChhcmd1bWVudENvdW50LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBh
cmd1bWVudHMuIik7CisgICAgICAgIHNpZ25hdHVyZS5hcmd1bWVudHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShhcmd1bWVudENvdW50KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudElu
ZGV4ID0gMDsgYXJndW1lbnRJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkg
eworICAgICAgICAgICAgV0FTTVR5cGUgdHlwZTsKKyAgICAgICAgICAgIFJFQURfVFlQRV9PUl9G
QUlMKHR5cGUsICJDYW5ub3QgcmVhZCB0aGUgdHlwZSBvZiBhbiBhcmd1bWVudC4iKTsKKyAgICAg
ICAgICAgIHNpZ25hdHVyZS5hcmd1bWVudHMudW5jaGVja2VkQXBwZW5kKHR5cGUpOworICAgICAg
ICB9CisgICAgICAgIG1fbW9kdWxlLT5zaWduYXR1cmVzKCkudW5jaGVja2VkQXBwZW5kKHNpZ25h
dHVyZSk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25J
bXBvcnRTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0czsK
KyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlczsKKyAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMsICJDYW5ub3Qg
cmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9ydHMuIik7CisgICAgUkVBRF9DT01QQUNU
X1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcy4iKTsKKyAgICBt
X21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJP
ZkZ1bmN0aW9uSW1wb3J0cyk7CisgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
cygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZXMpOworCisgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4ID0gMDsgZnVuY3Rp
b25JbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY3Rpb25JbXBvcnRzOyArK2Z1bmN0aW9uSW1wb3J0
SW5kZXgpIHsKKyAgICAgICAgV0FTTUZ1bmN0aW9uSW1wb3J0IGZ1bmN0aW9uSW1wb3J0OworICAg
ICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGZ1bmN0aW9uSW1wb3J0LmZ1bmN0aW9uTmFtZSwgIkNh
bm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbXBvcnQgbmFtZS4iKTsKKyAgICAgICAgbV9tb2R1bGUt
PmZ1bmN0aW9uSW1wb3J0cygpLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvbkltcG9ydCk7CisKKyAg
ICAgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1cmVzOworICAgICAgICBSRUFEX0NPTVBBQ1Rf
VUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTaWduYXR1cmVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJl
ciBvZiBzaWduYXR1cmVzLiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKG51bWJlck9mU2lnbmF0
dXJlcyA8PSBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcyAtIG1fbW9kdWxlLT5mdW5j
dGlvbkltcG9ydFNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMg
aXMgaW5jb3JyZWN0LiIpOworCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZlNpZ25hdHVyZXM7ICsraSkgeworICAgICAgICAgICAgV0FTTUZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlOworICAgICAgICAgICAgUkVBRF9DT01QQUNU
X1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4LCAi
Q2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICAgICAgICAgIEZBSUxfSUZf
RkFMU0UoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUuc2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+
c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIp
OworICAgICAgICAgICAgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUuZnVuY3Rpb25JbXBvcnRJbmRl
eCA9IGZ1bmN0aW9uSW1wb3J0SW5kZXg7CisgICAgICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25J
bXBvcnRTaWduYXR1cmVzKCkudW5jaGVja2VkQXBwZW5kKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5mdW5jdGlv
bkltcG9ydFNpZ25hdHVyZXMoKS5zaXplKCkgPT0gbnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25h
dHVyZXMsICJUaGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmVzIGlzIGluY29y
cmVjdC4iKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFNlY3Rpb24o
KQoreworICAgIHVpbnQzMl90IG51bWJlck9mSW50ZXJuYWxJMzJHbG9iYWxWYXJpYWJsZXM7Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZJbnRlcm5hbEYzMkdsb2JhbFZhcmlhYmxlczsKKyAgICB1aW50
MzJfdCBudW1iZXJPZkludGVybmFsRjY0R2xvYmFsVmFyaWFibGVzOworICAgIHVpbnQzMl90IG51
bWJlck9mSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJ
bXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlczsKKyAgICB1aW50MzJfdCBudW1iZXJPZkltcG9ydGVk
RjY0R2xvYmFsVmFyaWFibGVzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1i
ZXJPZkludGVybmFsSTMyR2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBv
ZiBpbnRlcm5hbCBpbnQzMiBnbG9iYWwgdmFyaWFibGVzLiIpOworICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChudW1iZXJPZkludGVybmFsRjMyR2xvYmFsVmFyaWFibGVzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBmbG9hdDMyIGdsb2JhbCB2YXJpYWJsZXMuIik7
CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mSW50ZXJuYWxGNjRHbG9i
YWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGludGVybmFsIGZsb2F0NjQg
Z2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVt
YmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIg
b2YgaW1wb3J0ZWQgaW50MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1Rf
VUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5v
dCByZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgZmxvYXQzMiBnbG9iYWwgdmFyaWFibGVzLiIp
OworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkltcG9ydGVkRjY0R2xv
YmFsVmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbXBvcnRlZCBmbG9hdDY0
IGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgdWludDMyX3QgbnVtYmVyT2ZHbG9iYWxWYXJpYWJs
ZXMgPSBudW1iZXJPZkludGVybmFsSTMyR2xvYmFsVmFyaWFibGVzICsgbnVtYmVyT2ZJbnRlcm5h
bEYzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW50ZXJuYWxGNjRHbG9iYWxWYXJpYWJsZXMg
KworICAgICAgICBudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzICsgbnVtYmVyT2ZJ
bXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW1wb3J0ZWRGNjRHbG9iYWxWYXJp
YWJsZXM7CisKKyAgICBWZWN0b3I8V0FTTVR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzID0gbV9t
b2R1bGUtPmdsb2JhbFZhcmlhYmxlVHlwZXMoKTsKKyAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZHbG9iYWxWYXJpYWJsZXMpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkludGVybmFsSTMyR2xvYmFsVmFyaWFibGVzOyAr
K2kpCisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMudW5jaGVja2VkQXBwZW5kKFdBU01UeXBl
OjpJMzIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkludGVybmFsRjMy
R2xvYmFsVmFyaWFibGVzOyArK2kpCisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMudW5jaGVj
a2VkQXBwZW5kKFdBU01UeXBlOjpGMzIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkludGVybmFsRjY0R2xvYmFsVmFyaWFibGVzOyArK2kpCisgICAgICAgIGdsb2JhbFZh
cmlhYmxlVHlwZXMudW5jaGVja2VkQXBwZW5kKFdBU01UeXBlOjpGNjQpOworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOyArK2kp
IHsKKyAgICAgICAgU3RyaW5nIGltcG9ydE5hbWU7CisgICAgICAgIFJFQURfU1RSSU5HX09SX0ZB
SUwoaW1wb3J0TmFtZSwgIkNhbm5vdCByZWFkIHRoZSBpbXBvcnQgbmFtZSBvZiBhbiBpbnQzMiBn
bG9iYWwgdmFyaWFibGUuIik7CisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMudW5jaGVja2Vk
QXBwZW5kKFdBU01UeXBlOjpJMzIpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlczsgKytpKSB7CisgICAgICAgIFN0
cmluZyBpbXBvcnROYW1lOworICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUs
ICJDYW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUgb2YgYSBmbG9hdDMyIGdsb2JhbCB2YXJpYWJs
ZS4iKTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVUeXBlcy51bmNoZWNrZWRBcHBlbmQoV0FTTVR5
cGU6OkYzMik7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZklt
cG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGltcG9ydE5h
bWU7CisgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoaW1wb3J0TmFtZSwgIkNhbm5vdCByZWFk
IHRoZSBpbXBvcnQgbmFtZSBvZiBhIGZsb2F0NjQgZ2xvYmFsIHZhcmlhYmxlLiIpOworICAgICAg
ICBnbG9iYWxWYXJpYWJsZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6RjY0KTsKKyAg
ICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9u
U2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9uczsK
KyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0
aW9ucywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiIp
OworICAgIG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucyk7CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bWJlck9mRnVuY3Rpb25EZWNsYXJhdGlvbnM7ICsraSkgeworICAgICAgICBX
QVNNRnVuY3Rpb25EZWNsYXJhdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25EZWNsYXJhdGlvbi5zaWduYXR1cmVJbmRl
eCwgIkNhbm5vdCByZWFkIHRoZSBzaWduYXR1cmUgaW5kZXguIik7CisgICAgICAgIEZBSUxfSUZf
RkFMU0UoZnVuY3Rpb25EZWNsYXJhdGlvbi5zaWduYXR1cmVJbmRleCA8IG1fbW9kdWxlLT5zaWdu
YXR1cmVzKCkuc2l6ZSgpLCAiVGhlIHNpZ25hdHVyZSBpbmRleCBpcyBpbmNvcnJlY3QuIik7Cisg
ICAgICAgIG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnVuY2hlY2tlZEFwcGVuZChm
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZVNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJl
ck9mRnVuY3Rpb25Qb2ludGVyVGFibGVzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJ
TChudW1iZXJPZkZ1bmN0aW9uUG9pbnRlclRhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIg
b2YgZnVuY3Rpb24gcG9pbnRlciB0YWJsZXMuIik7CisgICAgbV9tb2R1bGUtPmZ1bmN0aW9uUG9p
bnRlclRhYmxlcygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvblBvaW50
ZXJUYWJsZXMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9u
UG9pbnRlclRhYmxlczsgKytpKSB7CisgICAgICAgIFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSBm
dW5jdGlvblBvaW50ZXJUYWJsZTsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlM
KGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNp
Z25hdHVyZSBpbmRleC4iKTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvblBvaW50ZXJU
YWJsZS5zaWduYXR1cmVJbmRleCA8IG1fbW9kdWxlLT5zaWduYXR1cmVzKCkuc2l6ZSgpLCAiVGhl
IHNpZ25hdHVyZSBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgIHVpbnQzMl90IG51bWJl
ck9mRWxlbWVudHM7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJP
ZkVsZW1lbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiBhIGZ1bmN0
aW9uIHBvaW50ZXIgdGFibGUuIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UoaGFzT25lQml0U2V0
KG51bWJlck9mRWxlbWVudHMpLCAiVGhlIG51bWJlciBvZiBlbGVtZW50cyBtdXN0IGJlIGEgcG93
ZXIgb2YgdHdvLiIpOworICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5lbGVtZW50cy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRWxlbWVudHMpOworICAgICAgICBmb3IgKHVpbnQz
Ml90IGogPSAwOyBqIDwgbnVtYmVyT2ZFbGVtZW50czsgKytqKSB7CisgICAgICAgICAgICB1aW50
MzJfdCBlbGVtZW50OworICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGVs
ZW1lbnQsICJDYW5ub3QgcmVhZCBhbiBlbGVtZW50IG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJs
ZS4iKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uUG9pbnRlclRhYmxlLmVsZW1lbnRzLnVuY2hlY2tl
ZEFwcGVuZChlbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25Q
b2ludGVyVGFibGVzKCkudW5jaGVja2VkQXBwZW5kKGZ1bmN0aW9uUG9pbnRlclRhYmxlKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25T
ZWN0aW9uKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbW9kdWxlLT5mdW5jdGlv
bkRlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIHBhcnNlRnVuY3Rpb25EZWZp
bml0aW9uKCk7CisgICAgICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIH0KK30KKwordm9pZCBX
QVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpCit7CisgICAgLy8gRklY
TUU6IFN1cHBvcnQgYW55IGZ1bmN0aW9ucy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NzczOAorICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IGZ1bmN0
aW9ucyB0aGF0IGhhdmUgInJldHVybiAwOyIgYXMgdGhlaXIgb25seSBzdGF0ZW1lbnQuCisgICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGNvbnNpc3Qgb2YgZXhhY3RseSA0IGJ5dGVzLCBpLmUuCisgICAg
Ly8gMS4gVGhlIG51bWJlciBvZiBsb2NhbCB2YXJpYWJsZXMgKDApIFsweDgwXQorICAgIC8vIDIu
IFRoZSBudW1iZXIgb2Ygc3RhdGVtZW50cyAoMSkgWzB4MDFdCisgICAgLy8gMy4gVGhlIHJldHVy
biBzdGF0ZW1lbnQgWzB4MGZdCisgICAgLy8gNC4gVGhlIGltbWVkaWF0ZSBleHByZXNzaW9uICgw
KSBbMHhhMF0KKyAgICB1aW50MzJfdCBmdW5jdGlvbkRlZmluaXRpb25CeXRlczsKKyAgICBSRUFE
X1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uRGVmaW5pdGlvbkJ5dGVzLCAiQ2Fubm90IHJlYWQgdGhl
IGZ1bmN0aW9uIGRlZmluaXRpb24uIik7CisgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkRlZmlu
aXRpb25CeXRlcyA9PSAweGEwMGYwMTgwLCAiT25seSBmdW5jdGlvbnMgdGhhdCBoYXZlIFwicmV0
dXJuIDA7XCIgIgorICAgICAgICAiYXMgdGhlaXIgb25seSBzdGF0ZW1lbnQgYXJlIHN1cHBvcnRl
ZCBhdCB0aGUgbW9tZW50LiIpOworfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRXhw
b3J0U2VjdGlvbigpCit7CisgICAgV0FTTUV4cG9ydEZvcm1hdCBleHBvcnRGb3JtYXQ7CisgICAg
UkVBRF9FWFBPUlRfRk9STUFUX09SX0ZBSUwoZXhwb3J0Rm9ybWF0LCAiQ2Fubm90IHJlYWQgdGhl
IGV4cG9ydCBmb3JtYXQuIik7CisgICAgc3dpdGNoIChleHBvcnRGb3JtYXQpIHsKKyAgICBjYXNl
IFdBU01FeHBvcnRGb3JtYXQ6OkRlZmF1bHQ6IHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25J
bmRleDsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgs
ICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW5kZXguIik7CisgICAgICAgIEZBSUxfSUZfRkFM
U0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUo
KSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgIC8vIEZJWE1F
OiBFeHBvcnQgdGhlIGZ1bmN0aW9uLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBX
QVNNRXhwb3J0Rm9ybWF0OjpSZWNvcmQ6IHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZFeHBv
cnRzOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZFeHBvcnRz
LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBleHBvcnRzLiIpOworICAgICAgICBmb3IgKHVp
bnQzMl90IGV4cG9ydEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsr
ZXhwb3J0SW5kZXgpIHsKKyAgICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOworICAgICAgICAg
ICAgUkVBRF9TVFJJTkdfT1JfRkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0
aW9uIGV4cG9ydCBuYW1lLiIpOworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoYXQgZXhw
b3J0TmFtZSBpcyBsZWdhbC4KKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Cisg
ICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNh
bm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbmRleC4iKTsKKyAgICAgICAgICAgIEZBSUxfSUZfRkFM
U0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUo
KSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgICAgICAvLyBG
SVhNRTogRXhwb3J0IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQog
fQogCiBKU1dBU01Nb2R1bGUqIHBhcnNlV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCmluZGV4IGY1ZDZhMzE3ODllMTMx
MGQ0NzcyZDU4MTI4ZWRhYTRkNjZkM2M0MjUuLjVlYzVmZDM4ODVkMmUwMjBjYjlmNWJkNGRmYTJi
NjU2ZDM3OTA5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01N
b2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxl
UGFyc2VyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAor
I2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIldBU01SZWFkZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDUsOSArNDYsMTkgQEAgcHVibGljOgogICAgIEpT
V0FTTU1vZHVsZSogcGFyc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKIAogcHJpdmF0ZToKLSAgICBib29sIHBhcnNlTW9kdWxlKCk7CisgICAgdm9pZCBwYXJz
ZU1vZHVsZSgpOworICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgdm9p
ZCBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRT
ZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNl
RnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25Qb2lu
dGVyVGFibGVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rp
b24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKCk7CisgICAgdm9pZCBwYXJz
ZUV4cG9ydFNlY3Rpb24oKTsKIAogICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7CisgICAgU3Ryb25n
PEpTV0FTTU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmNwcAppbmRleCAyN2JmOTM5
NDJiYWMxYmQ0OTJiZjc0MzI4MzBiZTcxMTBiZGFhOTc2Li4yOGUxMzU3YTEzNWY0MjcyNTNkNDNi
OTU5M2Y0MjI4N2RjZGUxYjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVh
ZGVyLmNwcApAQCAtMjgsMTEgKzI4LDEzIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKICNkZWZpbmUgQ0hFQ0tfUkVB
RChsZW5ndGgpIGRvIHsgaWYgKG1fY3Vyc29yICsgbGVuZ3RoID4gbV9idWZmZXIuZW5kKCkpIHJl
dHVybiBmYWxzZTsgfSB3aGlsZSAoMCkKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgV0FTTVJl
YWRlcjo6cmVhZFVuc2lnbmVkSW50MzIodWludDMyX3QmIHJlc3VsdCkKK2Jvb2wgV0FTTVJlYWRl
cjo6cmVhZFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogewogICAgIENIRUNLX1JFQUQoNCk7CiAg
ICAgcmVzdWx0ID0gbV9jdXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9jdXJzb3JbMl0g
PDwgMTYgfCBtX2N1cnNvclszXSA8PCAyNDsKQEAgLTc2LDYgKzc4LDY0IEBAIGJvb2wgV0FTTVJl
YWRlcjo6cmVhZERvdWJsZShkb3VibGUmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCBXQVNNUmVhZGVyOjpyZWFkQ29tcGFjdFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQorewor
ICAgIHVpbnQzMl90IHN1bSA9IDA7CisgICAgdW5zaWduZWQgc2hpZnQgPSAwOworICAgIGRvIHsK
KyAgICAgICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICAgICAgdWludDMyX3QgYnl0ZSA9ICptX2N1cnNv
cisrOworICAgICAgICBpZiAoYnl0ZSA8IDB4ODApIHsKKyAgICAgICAgICAgIGlmICgoc2hpZnQg
PT0gMjggJiYgYnl0ZSA+PSAweDEwKSB8fCAoc2hpZnQgJiYgIWJ5dGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1bSB8IChieXRlIDw8IHNo
aWZ0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHN1bSB8
PSAoYnl0ZSAmIGZpcnN0U2V2ZW5CaXRzTWFzaykgPDwgc2hpZnQ7CisgICAgICAgIHNoaWZ0ICs9
IDc7CisgICAgfSB3aGlsZSAoc2hpZnQgPCAzNSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFdBU01SZWFkZXI6OnJlYWRTdHJpbmcoU3RyaW5nJiByZXN1bHQpCit7CisgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIENIRUNLX1JFQUQo
MSk7CisgICAgICAgIGNoYXIgYyA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAoIWMpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CisgICAgfQorICAgIHJl
c3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBX
QVNNUmVhZGVyOjpyZWFkVHlwZShXQVNNVHlwZSYgcmVzdWx0KQoreworICAgIHJldHVybiByZWFk
Qnl0ZTxXQVNNVHlwZT4ocmVzdWx0LCAodWludDhfdClXQVNNVHlwZTo6TnVtYmVyT2ZUeXBlcyk7
Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZEV4cHJlc3Npb25UeXBlKFdBU01FeHByZXNzaW9u
VHlwZSYgcmVzdWx0KQoreworICAgIHJldHVybiByZWFkQnl0ZTxXQVNNRXhwcmVzc2lvblR5cGU+
KHJlc3VsdCwgKHVpbnQ4X3QpV0FTTUV4cHJlc3Npb25UeXBlOjpOdW1iZXJPZkV4cHJlc3Npb25U
eXBlcyk7Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZEV4cG9ydEZvcm1hdChXQVNNRXhwb3J0
Rm9ybWF0JiByZXN1bHQpCit7CisgICAgcmV0dXJuIHJlYWRCeXRlPFdBU01FeHBvcnRGb3JtYXQ+
KHJlc3VsdCwgKHVpbnQ4X3QpV0FTTUV4cG9ydEZvcm1hdDo6TnVtYmVyT2ZFeHBvcnRGb3JtYXRz
KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgV0FTTVJlYWRlcjo6cmVhZEJ5dGUoVCYg
cmVzdWx0LCB1aW50OF90IG51bWJlck9mVmFsdWVzKQoreworICAgIENIRUNLX1JFQUQoMSk7Cisg
ICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yKys7CisgICAgaWYgKGJ5dGUgPj0gbnVtYmVyT2ZW
YWx1ZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBUKGJ5dGUpOworICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01SZWFkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaAppbmRl
eCA3Y2RlYTJiOTJkODJkZTZkYWE3OGNiN2Q4ZjMzMmEyM2YzZWZmY2UxLi43NmVhMjZiNmRmN2Jm
ODUwODVhMTZlYTEzMzg4MzBhOTNmMzQyYzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNUmVhZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTVJlYWRlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKKyNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTQwLDExICs0MSwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
IAotICAgIGJvb2wgcmVhZFVuc2lnbmVkSW50MzIodWludDMyX3QmIHJlc3VsdCk7CisgICAgYm9v
bCByZWFkVUludDMyKHVpbnQzMl90JiByZXN1bHQpOwogICAgIGJvb2wgcmVhZEZsb2F0KGZsb2F0
JiByZXN1bHQpOwogICAgIGJvb2wgcmVhZERvdWJsZShkb3VibGUmIHJlc3VsdCk7CisgICAgYm9v
bCByZWFkQ29tcGFjdFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRTdHJp
bmcoU3RyaW5nJiByZXN1bHQpOworICAgIGJvb2wgcmVhZFR5cGUoV0FTTVR5cGUmIHJlc3VsdCk7
CisgICAgYm9vbCByZWFkRXhwcmVzc2lvblR5cGUoV0FTTUV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIGJvb2wgcmVhZEV4cG9ydEZvcm1hdChXQVNNRXhwb3J0Rm9ybWF0JiByZXN1bHQpOwog
CiBwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBmaXJzdFNldmVuQml0c01hc2sg
PSAweDdmOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmVhZEJ5dGUoVCYgcmVzdWx0
LCB1aW50OF90IG51bWJlck9mVmFsdWVzKTsKKwogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
bV9idWZmZXI7CiAgICAgY29uc3QgdWludDhfdCogbV9jdXJzb3I7CiB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>