<?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>148213</bug_id>
          
          <creation_ts>2015-08-19 22:23:05 -0700</creation_ts>
          <short_desc>Lets rename codeOriginIndex to callSiteIndex and get rid of CallFrame::Location.</short_desc>
          <delta_ts>2015-10-08 21:53:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1119189</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-19 22:23:05 -0700</bug_when>
    <thetext>This will help when we need more fine grained control over call sites that cause exceptions when
implementing try/catch in the DFG.
HandlerInfo should use a CallSiteIndex instead of an unsigned byte code index. CodeBlock&apos;s
linear search through handlers should be keyed by CallSiteIndex.

Also, we should get rid of CallFrame::Location. The first bit that encodes as CodeOriginIndex/BytecodeIndex
can be determined by CodeBlock::jitType().

StructureStubInfo should also have a field that is a CallSiteIndex and Repatch should store this as the CallFrame&apos;s
CallSiteIndex. It should no longer get this information from ExecState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119530</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-20 18:16:35 -0700</bug_when>
    <thetext>I&apos;m going to save HandlerInfo indexing for DFG exception handling patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119542</commentid>
    <comment_count>2</comment_count>
      <attachid>259551</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-20 18:35:44 -0700</bug_when>
    <thetext>Created attachment 259551
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119545</commentid>
    <comment_count>3</comment_count>
      <attachid>259551</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-20 18:37:17 -0700</bug_when>
    <thetext>Comment on attachment 259551
patch

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

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:55
&gt; +    struct CallSiteIndex {
&gt; +        explicit CallSiteIndex(uint32_t bits)
&gt; +            : m_bits(bits)
&gt; +        { }
&gt; +#if USE(JSVALUE32_64)
&gt; +        explicit CallSiteIndex(Instruction* instruction)
&gt; +            : m_bits(bitwise_cast&lt;uint32_t&gt;(instruction))
&gt; +        { }
&gt; +#endif
&gt; +        inline uint32_t bits() const { return m_bits; }
&gt; +
&gt; +    private:
&gt; +        uint32_t m_bits;
&gt; +    };
&gt; +

This should be in its own header.  It should also be a class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119550</commentid>
    <comment_count>4</comment_count>
      <attachid>259551</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-20 18:39:57 -0700</bug_when>
    <thetext>Comment on attachment 259551
patch

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

&gt; Source/JavaScriptCore/interpreter/CallFrameInlines.h:70
&gt; +inline bool CallFrame::hasLocationAsCallSiteIndex() const
&gt;  {
&gt; -    ASSERT(hasLocationAsBytecodeOffset());
&gt;      ASSERT(codeBlock());
&gt; -    return Location::decode(locationAsRawBits());
&gt; +    switch (codeBlock()-&gt;jitType()) {
&gt; +    case JITCode::DFGJIT:
&gt; +    case JITCode::FTLJIT:
&gt; +        return true;
&gt; +    case JITCode::None:
&gt; +    case JITCode::HostCallThunk:
&gt; +        RELEASE_ASSERT_NOT_REACHED();
&gt; +        return false;
&gt; +    default:
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; +    return false;
&gt;  }

I don&apos;t get this.  Does everyone have a location as a CallSiteIndex?

Also, can we get rid of the term &quot;location&quot;?  It appears that very location is encoded as a CallSiteIndex, so there shouldn&apos;t be a separate notion of &quot;location&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119553</commentid>
    <comment_count>5</comment_count>
      <attachid>259552</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-20 18:41:41 -0700</bug_when>
    <thetext>Created attachment 259552
patch

rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119557</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-20 18:43:51 -0700</bug_when>
    <thetext>Attachment 259552 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:83:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:54:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:117:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:143:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:59:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119562</commentid>
    <comment_count>7</comment_count>
      <attachid>259554</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-20 18:47:36 -0700</bug_when>
    <thetext>Created attachment 259554
patch

it should also build with ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119565</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-20 18:51:05 -0700</bug_when>
    <thetext>Attachment 259554 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:83:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:54:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:117:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:143:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:59:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119893</commentid>
    <comment_count>9</comment_count>
      <attachid>259554</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 13:33:23 -0700</bug_when>
    <thetext>Comment on attachment 259554
patch

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

&gt; Source/JavaScriptCore/interpreter/CallFrameInlines.h:34
&gt;  inline bool CallFrame::hasLocationAsBytecodeOffset() const

Should this be &quot;hasCallSiteIndexAsBytecodeOffset&quot;?

&gt; Source/JavaScriptCore/interpreter/CallFrameInlines.h:53
&gt; +inline bool CallFrame::hasLocationAsCallSiteIndex() const

I still don&apos;t get this method name.  Isn&apos;t the thing we store into the tag of the argument count always a CallSiteIndex?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120417</commentid>
    <comment_count>10</comment_count>
      <attachid>259782</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-24 14:54:45 -0700</bug_when>
    <thetext>Created attachment 259782
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120419</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-24 14:56:44 -0700</bug_when>
    <thetext>Attachment 259782 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:83:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:54:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:117:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:143:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:59:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120421</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-24 15:06:09 -0700</bug_when>
    <thetext>Bug renamed locally in changelog,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120454</commentid>
    <comment_count>13</comment_count>
      <attachid>259782</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-24 16:40:06 -0700</bug_when>
    <thetext>Comment on attachment 259782
patch

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

&gt; Source/JavaScriptCore/interpreter/CallFrame.cpp:104
&gt; +                return codeOrigin.bytecodeIndex;

This line of code is unreachable and removed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120689</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-25 12:41:15 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/188932</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131806</commentid>
    <comment_count>15</comment_count>
      <attachid>259782</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 20:03:08 -0700</bug_when>
    <thetext>Comment on attachment 259782
patch

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

&gt; Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:44
&gt; -    InlineCacheDescriptor(unsigned stackmapID, CodeOrigin codeOrigin, UniquedStringImpl* uid)
&gt; +    InlineCacheDescriptor(unsigned stackmapID, CallSiteIndex callSite, UniquedStringImpl* uid)

This change was wrong.  An instance of an InlineCacheDescriptor corresponds to a single DFG IR inline cache.  This will lower to a single LLVM IR patchpoint.  But that patchpoint can get duplicated in LLVM IR (for example via jump threading or tail duplication).  This is represented by having each InlineCacheDescriptor subclass have a Vector&lt;&gt; of inline caches.

All of those inline caches will share the same CodeOrigin.  But, they should not share the same CallSiteIndex.  Each inline cache generated by one of these descriptors should have its own CallSiteIndex.  That&apos;s because each inline cache will have its own patchpoint, and so its own StackMaps::Record, and so it will have its own unique set of registers (its own used register set, its own input registers, its own result register, and its own registers for OSR exit).  Therefore each one needs to have its own exception handler, which means having its own CallSiteIndex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131825</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-08 21:53:37 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 259782 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=259782&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:44
&gt; &gt; -    InlineCacheDescriptor(unsigned stackmapID, CodeOrigin codeOrigin, UniquedStringImpl* uid)
&gt; &gt; +    InlineCacheDescriptor(unsigned stackmapID, CallSiteIndex callSite, UniquedStringImpl* uid)
&gt; 
&gt; This change was wrong.  An instance of an InlineCacheDescriptor corresponds
&gt; to a single DFG IR inline cache.  This will lower to a single LLVM IR
&gt; patchpoint.  But that patchpoint can get duplicated in LLVM IR (for example
&gt; via jump threading or tail duplication).  This is represented by having each
&gt; InlineCacheDescriptor subclass have a Vector&lt;&gt; of inline caches.
&gt; 
&gt; All of those inline caches will share the same CodeOrigin.  But, they should
&gt; not share the same CallSiteIndex.  Each inline cache generated by one of
&gt; these descriptors should have its own CallSiteIndex.  That&apos;s because each
&gt; inline cache will have its own patchpoint, and so its own StackMaps::Record,
&gt; and so it will have its own unique set of registers (its own used register
&gt; set, its own input registers, its own result register, and its own registers
&gt; for OSR exit).  Therefore each one needs to have its own exception handler,
&gt; which means having its own CallSiteIndex.

Dang, ok. I&apos;ll fix it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259551</attachid>
            <date>2015-08-20 18:35:44 -0700</date>
            <delta_ts>2015-08-20 18:41:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>57350</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OSBA
QAorMjAxNS0wOC0yMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBMZXRzIHJlbmFtZSBjb2RlT3JpZ2luSW5kZXggdG8gY2FsbFNpdGVJbmRleCBhbmQgZ2V0IHJp
ZCBvZiBDYWxsRnJhbWU6OkxvY2F0aW9uLiBIYW5kbGVySW5mbyBzaG91bGQgYWxzbyB1c2UgYSBj
YWxsU2l0ZUluZGV4IGluc3RlYWQgb2YgYSBieXRlIGNvZGUgaW5kZXguCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgyMTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
YSBzdHJ1Y3QgY2FsbGVkIENhbGxTaXRlSW5kZXggd2hpY2ggaXMKKyAgICAgICAgdXNlZCBhcyBh
IHdyYXBwZXIgZm9yIGEgMzItYml0IGludCB0byBwbGFjZSB0aGluZ3MgaW4gdGhlIHRhZyBmb3Ig
QXJndW1lbnRDb3VudCAKKyAgICAgICAgaW4gdGhlIGNhbGwgZnJhbWUuIE9uIDMyLWJpdCB3ZSBw
bGFjZSBJbnN0cnVjdGlvbiogaW50byB0aGlzIHNsb3QgZm9yIExMSW50IGFuZCBCYXNsaW5lLgor
ICAgICAgICBGb3IgMzItYml0IERGRyB3ZSBwbGFjZSBhIGFuIGluZGV4IGludG8gdGhlIGNvZGUg
b3JpZ2luIHRhYmxlIGluIHRoaXMgc2xvdC4KKyAgICAgICAgT24gNjQtYml0IHdlIHBsYWNlIGEg
Ynl0ZWNvZGUgb2Zmc2V0IGludG8gdGhpcyBzbG90IGZvciBMTEludCBhbmQgQmFzZWxpbmUuCisg
ICAgICAgIE9uIDY0LWJpdCB3ZSBwbGFjZSB0aGUgaW5kZXggaW50byB0aGUgY29kZSBvcmlnaW4g
dGFibGUgaW4gdGhpcyBzbG90IGluIHRoZQorICAgICAgICBERkcvRlRMLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBnZXRzIHJpZCBvZiB0aGUgZW5jb2Rpbmcgc2NoZW1lIHRoYXQgZGVzY3Jp
YmVzIGlmIHNvbWV0aGluZyBpcyBhCisgICAgICAgIGJ5dGVjb2RlIGluZGV4IG9yIGEgY29kZSBv
cmlnaW4gdGFibGUgaW5kZXguIFRoaXMgaW5mb3JtYXRpb24gY2FuIGFsd2F5cworICAgICAgICBi
ZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBDb2RlQmxvY2sncycgSklUVHlwZS4KKworICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyBub3cgYWxzbyBoYXMgYSBDYWxsU2l0ZUluZGV4IHdoaWNoIGl0
IHN0b3JlcyB0bworICAgICAgICB0aGUgY2FsbCBmcmFtZSB3aGVuIG1ha2luZyBhIGNhbGwuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpoYXNDb2RlT3JpZ2lucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuR2V0Q29kZU9y
aWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OlN0
cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6c2hyaW5rVG9GaXQpOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Q29tbW9u
RGF0YSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmFkZENhbGxTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZW1p
dFN0b3JlQ29kZU9yaWdpbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg6CisgICAgICAgIChKU0M6OkZUTDo6SW5s
aW5lQ2FjaGVEZXNjcmlwdG9yOjpJbmxpbmVDYWNoZURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpGVEw6OklubGluZUNhY2hlRGVzY3JpcHRvcjo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpJbmxpbmVDYWNoZURlc2NyaXB0b3I6OnVpZCk6CisgICAgICAgIChKU0M6OkZUTDo6
R2V0QnlJZERlc2NyaXB0b3I6OkdldEJ5SWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRM
OjpQdXRCeUlkRGVzY3JpcHRvcjo6UHV0QnlJZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpG
VEw6OkNoZWNrSW5EZXNjcmlwdG9yOjpDaGVja0luRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjb2RlT3JpZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9MTFZNOjpnZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpzdG9yZUNvZGVPcmlnaW4pOgorICAgICAgICAqIGludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3VycmVudFZQQyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29k
ZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNCeXRlY29kZU9mZnNl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJh
bWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJpdHMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6
OnJldHVyblBDT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphYnN0cmFjdFJldHVy
blBDKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjp0b3BPZkZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpzZXRDYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
c2V0U2NvcGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmN1cnJlbnRWUEMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldEN1cnJlbnRWUEMpOiBEZWxldGVkLgorICAg
ICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpoYXNMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6Omhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjpjYWxsU2l0ZUFzUmF3Qml0cyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNp
dGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6aGFzQWN0aXZhdGlvbik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5z
dHJ1Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjpl
bmNvZGVBc0NvZGVPcmlnaW5JbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6TG9jYXRpb246OmlzQnl0ZWNvZGVMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6TG9jYXRpb246OmlzQ29kZU9yaWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lOjpoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzUmF3Qml0cyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc1Jhd0JpdHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzQ29kZU9y
aWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRGcmFtZSk6CisgICAgICAgIChK
U0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0
YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICog
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2FyYmFnZVN0
dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGhDaGVja3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRC
eUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6c3R1YkluZm8p
OgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9w
Q2FsbEZyYW1lKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmdldEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeUlkU3R1Yik6CisKIDIwMTUtMDgtMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBPdmVyZmxvdyBjaGVjayBlbGltaW5hdGlvbiBmYWlscyBmb3IgYSBzaW1w
bGUgdGVzdCBjYXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxODg2OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwMSwxNiArNTAxLDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpOwog
ICAgIH0KICAgICAgICAgCi0gICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKHVuc2lnbmVkIGluZGV4
KQorICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQogICAgIHsK
ICAgICAgICAgaWYgKCFoYXNDb2RlT3JpZ2lucygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gaW5kZXggPCBjb2RlT3JpZ2lucygpLnNpemUoKTsKKyAgICAgICAg
cmV0dXJuIGluZGV4LmJpdHMoKSA8IGNvZGVPcmlnaW5zKCkuc2l6ZSgpOwogICAgIH0KIAotICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbih1bnNpZ25lZCBpbmRleCkKKyAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb2Rl
T3JpZ2lucygpW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW5zKClbaW5kZXguYml0
cygpXTsKICAgICB9CiAKICAgICBib29sIGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgREZHOjpG
cmVxdWVudEV4aXRTaXRlJiBzaXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4ODY5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw2ICs5Niw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAg
ICAgICwgc2VlbihmYWxzZSkKICAgICAgICAgLCByZXNldEJ5R0MoZmFsc2UpCiAgICAgICAgICwg
dG9va1Nsb3dQYXRoKGZhbHNlKQorICAgICAgICAsIGNhbGxTaXRlSW5kZXgoVUlOVF9NQVgpCiAg
ICAgewogICAgIH0KIApAQCAtMTg5LDYgKzE5MCw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgYm9vbCB0b29rU2xvd1BhdGggOiAxOwogCiAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luOworICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleDsKIAogICAgIHN0cnVjdCB7CiAg
ICAgICAgIHVuc2lnbmVkIHNwaWxsTW9kZSA6IDg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4ODY5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDE0ICs0NywxNCBAQCB2b2lkIENvbW1vbkRhdGE6Om5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyCiAg
ICAgICAgIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CiB9CiAKLXVuc2lnbmVkIENvbW1vbkRh
dGE6OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorQ2FsbFNpdGVJbmRleCBD
b21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBp
ZiAoY29kZU9yaWdpbnMuaXNFbXB0eSgpCiAgICAgICAgIHx8IGNvZGVPcmlnaW5zLmxhc3QoKSAh
PSBjb2RlT3JpZ2luKQogICAgICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFTU0VSVChj
b2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIGluZGV4OworICAg
IHJldHVybiBDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAogdm9pZCBDb21tb25EYXRhOjpzaHJp
bmtUb0ZpdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
aAkocmV2aXNpb24gMTg4NjkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHsg
fQogICAgIAogICAgIHZvaWQgbm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFu
JiwgQ29kZUJsb2NrKiwgTm9kZSopOwotICAgIHVuc2lnbmVkIGFkZENvZGVPcmlnaW4oQ29kZU9y
aWdpbik7CisgICAgQ2FsbFNpdGVJbmRleCBhZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4pOwogICAg
IAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE4ODY5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUw
LDExICsxNTAsMTUgQEAgcHVibGljOgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZD
b2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKICAgICB9CiAgICAgCisgICAgQ2FsbFNp
dGVJbmRleCBhZGRDYWxsU2l0ZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgeworICAgICAg
ICByZXR1cm4gbV9qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKKyAg
ICB9CisKICAgICB2b2lkIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBtX2ppdENvZGUtPmNvbW1vbi5hZGRD
b2RlT3JpZ2luKGNvZGVPcmlnaW4pOwotICAgICAgICB1bnNpZ25lZCBsb2NhdGlvbkJpdHMgPSBD
YWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0NvZGVPcmlnaW5JbmRleChpbmRleCk7Ci0gICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUgPSBhZGRDYWxsU2l0ZShjb2RlT3JpZ2luKTsKKyAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICB9CiAKICAg
ICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBj
aGVjay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE4ODY5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAxLDE0ICsyMDEsMTQgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycwogICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlIZWxwZXJz
OjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIGppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAg
ICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVB
c0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KS5iaXRzKCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIo
Y2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
ICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5z
dHJ1Y3Rpb24pOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4
KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpB
cmd1bWVudENvdW50KSkpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNh
bGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCkBA
IC0yMTcsMTAgKzIxNywxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxw
ZXJzCiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICNlbHNlCiAgICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9u
cygpLmJlZ2luKCkgKyBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZUluc3RydWN0
aW9uKGluc3RydWN0aW9uKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAjZW5kaWYKICAgICBqaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKShKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxODg2OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgz
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCgKICAgICB9CiAgICAgCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBj
b2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzKCksCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBj
b2RlT3JpZ2luLCBtX2ppdC5hZGRDYWxsU2l0ZShjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycygp
LAogICAgICAgICBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiks
CiAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIHNw
aWxsTW9kZSk7CiAgICAgCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkR2V0QnlJZCgKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1Bh
dGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCiB7CiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCB1
c2VkUmVnaXN0ZXJzKCksCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBt
X2ppdC5hZGRDYWxsU2l0ZShjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycygpLAogICAgICAgICBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZVBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwKICAgICAgICAgc2NyYXRjaEdQUiwgc3BpbGxNb2Rl
LCBtX2ppdC5lY21hTW9kZUZvcihjb2RlT3JpZ2luKSwgcHV0S2luZCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDE4ODY5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRHZXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQogewogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9y
aWdpbiwgdXNlZFJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwKKyAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIG1faml0LmFkZENhbGxTaXRlKGNvZGVPcmlnaW4p
LCB1c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAogICAgICAgICBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzcGlsbE1vZGUpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1f
aml0KTsKICAgICAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRHZXRCeUlkKENvZGVPCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGls
bE1vZGUpCiB7CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNv
ZGVCbG9jaygpLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgbV9qaXQuYWRkQ2Fs
bFNpdGUoY29kZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
CiAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgc3BpbGxNb2RlLCBt
X2ppdC5lY21hTW9kZUZvcihjb2RlT3JpZ2luKSwgcHV0S2luZCk7CiAKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aChtX2ppdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg4NjkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
NCw2ICs5NjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kCiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlc3VsdEdQUiksIHN0dWJJ
bmZvLCBiYXNlR1BSLAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwqPihzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpKSk7CiAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gbV9qaXQuYWRkQ2FsbFNpdGUobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljOwogICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VH
UFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VHUFIpOwogICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihyZXN1bHRHUFIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODg2OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTYsNiArNDU2LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24uY29kZU9yaWdpbnNbZ2V0QnlJZC5jYWxsU2l0ZUluZGV4KCkuYml0cygpXTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52
YWx1ZVtpXTsKICAgICAgICAgICAgIApAQCAtNDY1LDEzICs0NjYsMTMgQEAgc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNl
ID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICAg
ICAgY29kZUJsb2NrLCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1
ZVJlZ3MoYmFzZSksCisgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwg
Z2V0QnlJZC5jYWxsU2l0ZUluZGV4KCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2Up
LAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHQpLCBOZWVkVG9TcGlsbCk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBz
dGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGdldEJ5SWQuY29kZU9yaWdpbigpLCAm
ZXhjZXB0aW9uVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVy
cywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sICZleGNlcHRpb25UYXJnZXQsCiAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LCBnZW4uc3R1YkluZm8o
KSwgYmFzZSwgZ2V0QnlJZC51aWQoKSk7CiAKICAgICAgICAgICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKQEAgLTQ5Myw2ICs0OTQsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IHN0YXRlLmppdENvZGUtPmNvbW1vbi5jb2RlT3JpZ2luc1twdXRCeUlkLmNhbGxTaXRl
SW5kZXgoKS5iaXRzKCldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0
ZXItPnZhbHVlLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNv
cmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldOwogICAgICAgICAgICAgICAgIApAQCAtNTAyLDE0
ICs1MDQsMTQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAg
ICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgcHV0QnlJZC5jb2RlT3JpZ2lu
KCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAgICAgICAgICAgICAg
ICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIHB1dEJ5SWQuY2FsbFNpdGVJbmRleCgpLCB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3ModmFsdWUpLCBHUFJJbmZvOjpwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyLCBOZWVkVG9TcGls
bCwKICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZC5lY21hTW9kZSgpLCBwdXRCeUlkLnB1dEtp
bmQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBw
dXRCeUlkLmNvZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0
aW9uVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBn
ZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQudWlkKCkpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwp
OwpAQCAtNTMxLDEzICs1MzMsMTUgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24uY29kZU9yaWdpbnNbY2hlY2tJbi5jYWxsU2l0ZUluZGV4KCkuYml0cygpXTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52
YWx1ZVtpXTsKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNl
ZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwogICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBy
ZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBv
YmogPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsgCi0g
ICAgICAgICAgICAgICAgc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjaGVja0luLmNvZGVPcmlnaW4o
KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47Cisg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjaGVja0luLmNhbGxTaXRl
SW5kZXgoKTsKICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IHN0YXRp
Y19jYXN0PGludDhfdD4ob2JqKTsKICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudmFs
dWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTQ2LDcgKzU1
MCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgp
OwogCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwgPSBjYWxs
T3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xv
d1BhdGhKSVQsIGNoZWNrSW4uY29kZU9yaWdpbigpLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmln
aW4sICZleGNlcHRpb25UYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluT3B0
aW1pemUsIHJlc3VsdCwgc3R1YkluZm8sIG9iaiwgY2hlY2tJbi5tX3VpZCk7CiAKICAgICAgICAg
ICAgICAgICBjaGVja0luLm1fc2xvd1BhdGhEb25lLmFwcGVuZChzbG93UGF0aEpJVC5qdW1wKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNh
Y2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxODg2OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywy
MiArMzcsMjQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBJbmxp
bmVDYWNoZURlc2NyaXB0b3IgewogcHVibGljOgotICAgIElubGluZUNhY2hlRGVzY3JpcHRvcigp
IHsgfQorICAgIElubGluZUNhY2hlRGVzY3JpcHRvcigpIAorICAgICAgICA6IG1fY2FsbFNpdGVJ
bmRleChVSU5UX01BWCkgCisgICAgeyB9CiAgICAgCi0gICAgSW5saW5lQ2FjaGVEZXNjcmlwdG9y
KHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKKyAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJ
RCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKICAgICAg
ICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKLSAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29k
ZU9yaWdpbikKKyAgICAgICAgLCBtX2NhbGxTaXRlSW5kZXgoY2FsbFNpdGUpCiAgICAgICAgICwg
bV91aWQodWlkKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQotICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU9yaWdpbjsgfQorICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFNpdGVJbmRleDsgfQogICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQogICAgIAogcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmln
aW47CisgICAgQ2FsbFNpdGVJbmRleCBtX2NhbGxTaXRlSW5kZXg7CiAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIG1fdWlkOwogICAgIAogcHVibGljOgpAQCAtNjMsOCArNjUsOCBAQCBjbGFzcyBHZXRC
eUlkRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDCiBwdWJsaWM6CiAgICAgR2V0QnlJZERlc2Ny
aXB0b3IoKSB7IH0KICAgICAKLSAgICBHZXRCeUlkRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21h
cElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi0gICAg
ICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIHVpZCkK
KyAgICBHZXRCeUlkRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IElubGluZUNhY2hl
RGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgdWlkKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC03Niw5ICs3OCw5IEBAIHB1YmxpYzoKICAgICBQdXRCeUlkRGVzY3JpcHRvcigpIHsgfQog
ICAgIAogICAgIFB1dEJ5SWREZXNjcmlwdG9yKAotICAgICAgICB1bnNpZ25lZCBzdGFja21hcElE
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCisgICAgICAg
IHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsCiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQp
Ci0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4s
IHVpZCkKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNp
dGUsIHVpZCkKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1fcHV0
S2luZChwdXRLaW5kKQogICAgIHsKQEAgLTExMSw4ICsxMTMsOCBAQCBjbGFzcyBDaGVja0luRGVz
Y3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDCiBwdWJsaWM6CiAgICAgQ2hlY2tJbkRlc2NyaXB0b3Io
KSB7IH0KICAgICAKLSAgICBDaGVja0luRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi0gICAg
ICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIG51bGxw
dHIpCisgICAgQ2hlY2tJbkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBJ
bmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIG51bGxwdHIpCiAgICAg
ICAgICwgbV91aWQodWlkKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE4ODY5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lk
IGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9m
ZnNldCgwKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsU2l0
ZUluZGV4KDApLmJpdHMoKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7CiAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg4NjkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyMDEsNyArMjIwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEluc3Ry
dWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUucHV0QnlJZHMuYXBwZW5kKFB1dEJ5SWREZXNjcmlwdG9y
KAotICAgICAgICAgICAgc3RhY2ttYXBJRCwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsIHVpZCwK
KyAgICAgICAgICAgIHN0YWNrbWFwSUQsIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENv
ZGVPcmlnaW4obV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLCB1aWQsCiAgICAgICAgICAgICBtX2dy
YXBoLmV4ZWN1dGFibGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5lY21hTW9kZSgpLAog
ICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QgPyBEaXJlY3QgOiBOb3RE
aXJlY3QpKTsKICAgICB9CkBAIC00OTM4LDcgKzQ5MzgsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVn
Q2FsbENvbnYpOwogCi0gICAgICAgICAgICAgICAgbV9mdGxTdGF0ZS5jaGVja0lucy5hcHBlbmQo
Q2hlY2tJbkRlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0
cikpOworICAgICAgICAgICAgICAgIG1fZnRsU3RhdGUuY2hlY2tJbnMuYXBwZW5kKENoZWNrSW5E
ZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVP
cmlnaW4obV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBzdHIpKTsKICAgICAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGNhbGwpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
QEAgLTU3ODEsNyArNTc4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb25zdE51bGwobV9v
dXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGJhc2UpOwogICAgICAgICBzZXRJbnN0cnVj
dGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAg
IAotICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihz
dGFja21hcElELCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYywgdWlkKSk7CisgICAgICAgIG1fZnRs
U3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fZnRs
U3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4obV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpLCB1aWQpKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KQEAgLTgw
MzYsOCArODAzNiw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX291dC5zdG9yZTMyKAog
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigKLSAgICAgICAgICAgICAgICBDYWxsRnJhbWU6
OkxvY2F0aW9uOjplbmNvZGVBc0NvZGVPcmlnaW5JbmRleCgKLSAgICAgICAgICAgICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKSkpLAor
ICAgICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4o
Y29kZU9yaWdpbikuYml0cygpKSwKICAgICAgICAgICAgIHRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSk7CiAgICAgfQogICAgIHZvaWQgY2FsbFByZWZsaWdodCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAxODg2
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2Niw4ICsxNjYsOCBAQCB2b2lkIHN0b3JlQ29kZU9yaWdpbihTdGF0
ZSYgc3RhdGUsIENDYWxsCiAgICAgaWYgKCFjb2RlT3JpZ2luLmlzU2V0KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRlLmppdENvZGUtPmNvbW1vbi5h
ZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwotICAgIHVuc2lnbmVkIGxvY2F0aW9uQml0cyA9IENh
bGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQ29kZU9yaWdpbkluZGV4KGluZGV4KTsKKyAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmln
aW4oY29kZU9yaWdpbik7CisgICAgdW5zaWduZWQgbG9jYXRpb25CaXRzID0gY2FsbFNpdGUuYml0
cygpOwogICAgIGppdC5zdG9yZTMyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihsb2NhdGlvbkJpdHMpLAogICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNp
b24gMTg4NjkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDM5ICs0Niw1NCBAQCBKU1N0YWNrKiBDYWxsRnJh
bWU6OnN0YWNrKCkKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLXVuc2lnbmVkIENh
bGxGcmFtZTo6bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKK0luc3RydWN0aW9uKiBD
YWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogewotICAgIEFTU0VSVChjb2RlQmxvY2soKSk7
Ci0gICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKLSAgICByZXR1cm4g
Y3VycmVudFZQQygpIC0gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGNhbGxTaXRlSW5kZXgoKS5iaXRzKCkp
OworfQorCit2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvbiogdnBjKQor
eworICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUodnBjKTsKKyAgICB0aGlzW0pTU3RhY2s6OkFy
Z3VtZW50Q291bnRdLnRhZygpID0gY2FsbFNpdGUuYml0cygpOwogfQogCi12b2lkIENhbGxGcmFt
ZTo6c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKK3Vuc2lnbmVk
IENhbGxGcmFtZTo6Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKIHsKICAgICBBU1NF
UlQoY29kZUJsb2NrKCkpOwotICAgIHNldEN1cnJlbnRWUEMoY29kZUJsb2NrKCktPmluc3RydWN0
aW9ucygpLmJlZ2luKCkgKyBvZmZzZXQpOwogICAgIEFTU0VSVChoYXNMb2NhdGlvbkFzQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIGN1cnJlbnRWUEMoKSAtIGNvZGVCbG9jaygpLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpOyAgICAgCiB9Ci0jZWxzZQorCisjZWxzZSAvLyBVU0UoSlNWQUxV
RTMyXzY0KSAvLyBpLmUsIDY0IGJpdC4KIEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRW
UEMoKSBjb25zdAogewotICAgIHJldHVybiBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSArIGxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworICAgIHJldHVybiBjb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpOwog
fQorCiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvbiogdnBjKQogewot
ICAgIHNldExvY2F0aW9uQXNCeXRlY29kZU9mZnNldCh2cGMgLSBjb2RlQmxvY2soKS0+aW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKSk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSh2cGMgLSBjb2Rl
QmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CisgICAgdGhpc1tKU1N0YWNrOjpBcmd1
bWVudENvdW50XS50YWcoKSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGNhbGxTaXRlLmJpdHMoKSk7
CiB9CisKK3Vuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrKCkpOworICAgIEFTU0VSVChoYXNMb2NhdGlvbkFz
Qnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7Cit9
CisKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotdW5zaWduZWQgQ2FsbEZyYW1l
OjpieXRlY29kZU9mZnNldEZyb21Db2RlT3JpZ2luSW5kZXgoKQordW5zaWduZWQgQ2FsbEZyYW1l
OjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KCkKIHsKLSAgICBBU1NFUlQoaGFzTG9j
YXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKTsKKyAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0NhbGxT
aXRlSW5kZXgoKSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2so
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKIAogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsK
LSAgICB1bnNpZ25lZCBpbmRleCA9IGxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKTsKKyAgICBD
YWxsU2l0ZUluZGV4IGluZGV4ID0gY2FsbFNpdGVJbmRleCgpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKICAgICBjb2RlT3JpZ2luID0gY29kZUJsb2Nr
LT5jb2RlT3JpZ2luKGluZGV4KTsKIApAQCAtOTksMTAgKzExNCwxMCBAQCB1bnNpZ25lZCBDYWxs
RnJhbWU6OmJ5dGVjb2RlT2Zmc2V0KCkKICAgICBpZiAoIWNvZGVCbG9jaygpKQogICAgICAgICBy
ZXR1cm4gMDsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoaGFzTG9jYXRpb25Bc0NvZGVP
cmlnaW5JbmRleCgpKQotICAgICAgICByZXR1cm4gYnl0ZWNvZGVPZmZzZXRGcm9tQ29kZU9yaWdp
bkluZGV4KCk7CisgICAgaWYgKGhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KCkpCisgICAgICAg
IHJldHVybiBieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KCk7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gbG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgcmV0dXJuIGNhbGxTaXRlQXNC
eXRlY29kZU9mZnNldCgpOwogfQogCiBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigp
CkBAIC0xMTAsMTMgKzEyNSwxMyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigp
CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIENvZGVPcmlnaW4oMCk7CiAj
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgo
KSkgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgo
KTsKKyAgICBpZiAoaGFzTG9jYXRpb25Bc0NhbGxTaXRlSW5kZXgoKSkgeworICAgICAgICBDYWxs
U2l0ZUluZGV4IGluZGV4ID0gY2FsbFNpdGVJbmRleCgpOwogICAgICAgICBBU1NFUlQoY29kZUJs
b2NrKCktPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKICAgICAgICAgcmV0dXJuIGNvZGVCbG9j
aygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICByZXR1cm4gQ29kZU9y
aWdpbihsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIENvZGVPcmlnaW4o
Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0
b3BPZkZyYW1lSW50ZXJuYWwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTg4NjkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCwyMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xh
c3MgSlNTY29wZTsKIAorICAgIHN0cnVjdCBDYWxsU2l0ZUluZGV4IHsKKyAgICAgICAgZXhwbGlj
aXQgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRzKQorICAgICAgICAgICAgOiBtX2JpdHMoYml0
cykKKyAgICAgICAgeyB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgZXhwbGljaXQg
Q2FsbFNpdGVJbmRleChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgICAgICAgICA6IG1f
Yml0cyhiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkKKyAgICAgICAgeyB9Cisj
ZW5kaWYKKyAgICAgICAgaW5saW5lIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2Jp
dHM7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVpbnQzMl90IG1fYml0czsKKyAgICB9Owor
CiAgICAgLy8gUmVwcmVzZW50cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBzY3JpcHQgZXhlY3V0aW9u
LgogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbW9zdCBmdW5jdGlvbnMu
CiAgICAgY2xhc3MgRXhlY1N0YXRlIDogcHJpdmF0ZSBSZWdpc3RlciB7CkBAIC0xMDcsNDkgKzEy
MiwxNSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0dXJu
UENPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGVyRnJhbWVBbmRQQywgcGMp
OyB9CiAgICAgICAgIEFic3RyYWN0UEMgYWJzdHJhY3RSZXR1cm5QQyhWTSYgdm0pIHsgcmV0dXJu
IEFic3RyYWN0UEModm0sIHRoaXMpOyB9CiAKLSAgICAgICAgY2xhc3MgTG9jYXRpb24gewotICAg
ICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGRlY29kZSh1
aW50MzJfdCBiaXRzKTsKLQotICAgICAgICAgICAgc3RhdGljIGlubGluZSBib29sIGlzQnl0ZWNv
ZGVMb2NhdGlvbih1aW50MzJfdCBiaXRzKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBlbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KHVpbnQzMl90
IGJpdHMpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZW5jb2Rl
QXNCeXRlY29kZUluc3RydWN0aW9uKEluc3RydWN0aW9uKik7Ci0jZW5kaWYKLQotICAgICAgICAg
ICAgc3RhdGljIGlubGluZSBib29sIGlzQ29kZU9yaWdpbkluZGV4KHVpbnQzMl90IGJpdHMpOwot
ICAgICAgICAgICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBlbmNvZGVBc0NvZGVPcmlnaW5JbmRl
eCh1aW50MzJfdCBiaXRzKTsKLQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgZW51bSBU
eXBlVGFnIHsKLSAgICAgICAgICAgICAgICBCeXRlY29kZUxvY2F0aW9uVGFnID0gMCwKLSAgICAg
ICAgICAgICAgICBDb2RlT3JpZ2luSW5kZXhUYWcgPSAxLAotICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBlbmNvZGUoVHlwZVRhZywgdWludDMyX3Qg
Yml0cyk7Ci0KLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweDE7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBz
X3NoaWZ0ID0gMzE7Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19zaGlmdGVk
TWFzayA9IHNfbWFzayA8PCBzX3NoaWZ0OwotI2Vsc2UKLSAgICAgICAgICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBzX3NoaWZ0ID0gMTsKLSNlbmRpZgotICAgICAgICB9OwotCiAgICAgICAgIGJv
b2wgaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaGFz
TG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpIGNvbnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGxv
Y2F0aW9uQXNSYXdCaXRzKCkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBsb2NhdGlvbkFzQ29kZU9yaWdp
bkluZGV4KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaGFzTG9jYXRpb25Bc0NhbGxTaXRlSW5kZXgo
KSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldExvY2F0aW9uQXNSYXdCaXRzKHVuc2lnbmVkKTsK
LSAgICAgICAgdm9pZCBzZXRMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQpOworICAg
ICAgICB1bnNpZ25lZCBjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0OworICAgICAgICBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgY2FsbFNpdGVB
c0J5dGVjb2RlT2Zmc2V0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXRGcm9tQ29kZU9yaWdpbkluZGV4KCk7CisgICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoKTsKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgLy8gVGhpcyB3aWxsIHRyeSB0byBnZXQgeW91IHRoZSBieXRlY29kZSBvZmZz
ZXQsIGJ1dCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQKQEAgLTE3MCwxOSArMTUxLDggQEAgbmFt
ZXNwYWNlIEpTQyAgewogICAgICAgICAgICAgcmV0dXJuIHRvcE9mRnJhbWVJbnRlcm5hbCgpOwog
ICAgICAgICB9CiAgICAgCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRWUEMoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEluc3RydWN0aW9uKj4odGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWco
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRDdXJyZW50VlBDKEluc3RydWN0aW9uKiB2
cGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0u
dGFnKCkgPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odnBjKTsKLSAgICAgICAgfQotI2Vsc2UKICAg
ICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRWUEMoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRD
dXJyZW50VlBDKEluc3RydWN0aW9uKiB2cGMpOwotI2VuZGlmCiAKICAgICAgICAgdm9pZCBzZXRD
YWxsZXJGcmFtZShDYWxsRnJhbWUqIGZyYW1lKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJG
cmFtZSA9IGZyYW1lOyB9CiAgICAgICAgIHZvaWQgc2V0U2NvcGUoaW50IHNjb3BlUmVnaXN0ZXJP
ZmZzZXQsIEpTU2NvcGUqIHNjb3BlKSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbc2Nv
cGVSZWdpc3Rlck9mZnNldF0gPSBzY29wZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCShyZXZpc2lvbiAxODg2
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMTIgKzMxLDUyIEBACiAKIG5hbWVzcGFjZSBKU0Mg
IHsKIAotaW5saW5lIHVpbnQzMl90IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZShDYWxsRnJh
bWU6OkxvY2F0aW9uOjpUeXBlVGFnIHRhZywgdWludDMyX3QgYml0cykKLXsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIEFTU0VSVCghKGJpdHMgJiBzX3NoaWZ0ZWRNYXNrKSk7Ci0gICAgQVNTRVJU
KCEodGFnICYgfnNfbWFzaykpOwotICAgIHJldHVybiBiaXRzIHwgKHRhZyA8PCBzX3NoaWZ0KTsK
LSNlbHNlCi0gICAgQVNTRVJUKCEodGFnICYgfnNfbWFzaykpOwotICAgIGlmICh0YWcgJiBDb2Rl
T3JpZ2luSW5kZXhUYWcpCi0gICAgICAgIGJpdHMgPSAoYml0cyA8PCBzX3NoaWZ0KTsKLSAgICBB
U1NFUlQoIShiaXRzICYgc19tYXNrKSk7Ci0gICAgYml0cyB8PSB0YWc7Ci0gICAgcmV0dXJuIGJp
dHM7Ci0jZW5kaWYKLX0KLQotaW5saW5lIHVpbnQzMl90IENhbGxGcmFtZTo6TG9jYXRpb246OmRl
Y29kZSh1aW50MzJfdCBiaXRzKQotewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJp
dHMgJiB+c19zaGlmdGVkTWFzazsKLSNlbHNlCi0gICAgaWYgKGlzQ29kZU9yaWdpbkluZGV4KGJp
dHMpKQotICAgICAgICByZXR1cm4gYml0cyA+PiBzX3NoaWZ0OwotICAgIHJldHVybiBiaXRzICYg
fnNfbWFzazsKLSNlbmRpZgotfQotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB1aW50MzJf
dCBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KHVpbnQzMl90IGJp
dHMpCi17Ci0gICAgdWludDMyX3QgZW5jb2RlZEJpdHMgPSBlbmNvZGUoQnl0ZWNvZGVMb2NhdGlv
blRhZywgYml0cyk7Ci0gICAgQVNTRVJUKGlzQnl0ZWNvZGVMb2NhdGlvbihlbmNvZGVkQml0cykp
OwotICAgIHJldHVybiBlbmNvZGVkQml0czsKLX0KLSNlbHNlCi1pbmxpbmUgdWludDMyX3QgQ2Fs
bEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZUluc3RydWN0aW9uKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKLXsKLSAgICB1aW50MzJfdCBlbmNvZGVkQml0cyA9IGVuY29kZShCeXRl
Y29kZUxvY2F0aW9uVGFnLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikp
OwotICAgIEFTU0VSVChpc0J5dGVjb2RlTG9jYXRpb24oZW5jb2RlZEJpdHMpKTsKLSAgICByZXR1
cm4gZW5jb2RlZEJpdHM7Ci19Ci0jZW5kaWYKLQotaW5saW5lIHVpbnQzMl90IENhbGxGcmFtZTo6
TG9jYXRpb246OmVuY29kZUFzQ29kZU9yaWdpbkluZGV4KHVpbnQzMl90IGJpdHMpCi17Ci0gICAg
dWludDMyX3QgZW5jb2RlZEJpdHMgPSBlbmNvZGUoQ29kZU9yaWdpbkluZGV4VGFnLCBiaXRzKTsK
LSAgICBBU1NFUlQoaXNDb2RlT3JpZ2luSW5kZXgoZW5jb2RlZEJpdHMpKTsKLSAgICByZXR1cm4g
ZW5jb2RlZEJpdHM7Ci19Ci0KLWlubGluZSBib29sIENhbGxGcmFtZTo6TG9jYXRpb246OmlzQnl0
ZWNvZGVMb2NhdGlvbih1aW50MzJfdCBiaXRzKQotewotICAgIHJldHVybiAhaXNDb2RlT3JpZ2lu
SW5kZXgoYml0cyk7Ci19Ci0KLWlubGluZSBib29sIENhbGxGcmFtZTo6TG9jYXRpb246OmlzQ29k
ZU9yaWdpbkluZGV4KHVpbnQzMl90IGJpdHMpCi17Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBU
eXBlVGFnIHRhZyA9IHN0YXRpY19jYXN0PFR5cGVUYWc+KGJpdHMgPj4gc19zaGlmdCk7Ci0gICAg
cmV0dXJuICEhKHRhZyAmIENvZGVPcmlnaW5JbmRleFRhZyk7Ci0jZWxzZQotICAgIHJldHVybiAh
IShiaXRzICYgQ29kZU9yaWdpbkluZGV4VGFnKTsKLSNlbmRpZgotfQotCiBpbmxpbmUgYm9vbCBD
YWxsRnJhbWU6Omhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIExvY2F0aW9uOjppc0J5dGVjb2RlTG9jYXRpb24obG9jYXRpb25Bc1Jhd0JpdHMoKSk7Ci19
Ci0KLWlubGluZSBib29sIENhbGxGcmFtZTo6aGFzTG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIExvY2F0aW9uOjppc0NvZGVPcmlnaW5JbmRleChsb2NhdGlv
bkFzUmF3Qml0cygpKTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIENhbGxGcmFtZTo6bG9jYXRpb25B
c1Jhd0JpdHMoKSBjb25zdAotewotICAgIHJldHVybiB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291
bnRdLnRhZygpOwotfQorICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CisgICAgc3dpdGNoIChjb2Rl
QmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
OgorICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNhc2UgSklUQ29kZTo6Tm9uZToKKyAgICBjYXNlIEpJVENvZGU6Okhvc3RDYWxsVGh1bms6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi1pbmxp
bmUgdm9pZCBDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNSYXdCaXRzKHVuc2lnbmVkIGJpdHMpCi17
Ci0gICAgdGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKSA9IHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGJpdHMpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB1bnNpZ25lZCBDYWxs
RnJhbWU6OmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CitpbmxpbmUgYm9vbCBDYWxs
RnJhbWU6Omhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
aGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2soKSk7
Ci0gICAgcmV0dXJuIExvY2F0aW9uOjpkZWNvZGUobG9jYXRpb25Bc1Jhd0JpdHMoKSk7CisgICAg
c3dpdGNoIChjb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdK
SVQ6CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgSklUQ29kZTo6Tm9uZToKKyAgICBjYXNlIEpJVENvZGU6Okhvc3RDYWxsVGh1bms6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGlu
ZSB2b2lkIENhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIG9m
ZnNldCkKK2lubGluZSB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHNldExvY2F0aW9uQXNSYXdCaXRz
KExvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KG9mZnNldCkpOwotICAgIEFTU0VSVCho
YXNMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIHRoaXNbSlNTdGFjazo6
QXJndW1lbnRDb3VudF0udGFnKCk7CiB9Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAotaW5s
aW5lIHVuc2lnbmVkIENhbGxGcmFtZTo6bG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpIGNvbnN0
CitpbmxpbmUgQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdAog
ewotICAgIEFTU0VSVChoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCkpOwotICAgIEFTU0VS
VChjb2RlQmxvY2soKSk7Ci0gICAgcmV0dXJuIExvY2F0aW9uOjpkZWNvZGUobG9jYXRpb25Bc1Jh
d0JpdHMoKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoY2FsbFNpdGVBc1Jhd0JpdHMoKSk7
CiB9CiAKIGlubGluZSBib29sIENhbGxGcmFtZTo6aGFzQWN0aXZhdGlvbigpIGNvbnN0CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcAkocmV2aXNpb24gMTg4NjkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9p
ZCBTdGFja1Zpc2l0b3I6OnJlYWRGcmFtZShDYWxsRnJhbWUqIAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaW5kZXggPSBjYWxsRnJhbWUtPmxvY2F0aW9uQXNDb2RlT3Jp
Z2luSW5kZXgoKTsKKyAgICBDYWxsU2l0ZUluZGV4IGluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0
ZUluZGV4KCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkp
OwogICAgIGlmICghY29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2luKGluZGV4KSkgewogICAgICAg
ICAvLyBTZWUgYXNzZXJ0aW9uIGFib3ZlLiBJbiByZWxlYXNlIGJ1aWxkcywgd2UgdHJ5IHRvIHBy
b3RlY3Qgb3Vyc2VsdmVzCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJl
YWROb25JbmxpbmVkRnJhbWUoQwogICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9ICFtX2ZyYW1lLmNv
ZGVCbG9jaygpID8gMAogICAgICAgICA6IGNvZGVPcmlnaW4gPyBjb2RlT3JpZ2luLT5ieXRlY29k
ZUluZGV4Ci0gICAgICAgIDogY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsK
KyAgICAgICAgOiBjYWxsRnJhbWUtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpOwogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSAwOwogI2VuZGlm
CkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpwcmludChpbnQg
aW5kZQogICAgICAgICBsb2dGKGluZGVudCwgImNhbGxlZTogJXBcbiIsIGNhbGxlZSgpKTsKICAg
ICAgICAgbG9nRihpbmRlbnQsICJyZXR1cm5QQzogJXBcbiIsIHJldHVyblBDKTsKICAgICAgICAg
bG9nRihpbmRlbnQsICJjYWxsZXJGcmFtZTogJXBcbiIsIGNhbGxlckZyYW1lKTsKLSAgICAgICAg
dW5zaWduZWQgbG9jYXRpb25SYXdCaXRzID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzUmF3Qml0cygp
OworICAgICAgICB1bnNpZ25lZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxsRnJhbWUtPmNhbGxTaXRl
QXNSYXdCaXRzKCk7CiAgICAgICAgIGxvZ0YoaW5kZW50LCAicmF3TG9jYXRpb25CaXRzOiAldSAw
eCV4XG4iLCBsb2NhdGlvblJhd0JpdHMsIGxvY2F0aW9uUmF3Qml0cyk7CiAgICAgICAgIGxvZ0Yo
aW5kZW50LCAiY29kZUJsb2NrOiAlcCAiLCBjb2RlQmxvY2spOwogICAgICAgICBpZiAoY29kZUJs
b2NrKQpAQCAtMzg2LDE0ICszODYsMTQgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpwcmlu
dChpbnQgaW5kZQogICAgICAgICAgICAgaW5kZW50Kys7CiAKICAgICAgICAgICAgIGlmIChjYWxs
RnJhbWUtPmhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmxvY2F0aW9uQXNCeXRlY29kZU9m
ZnNldCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZy
YW1lLT5jYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBsb2coaW5k
ZW50LCAiYnl0ZWNvZGVPZmZzZXQ6ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiIG9mICIsIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbG9nKGluZGVudCwgImhhc0NvZGVP
cmlnaW5zOiAiLCBjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCksICJcbiIpOwogICAgICAgICAg
ICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY29kZU9yaWdpbkluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29k
ZU9yaWdpbkluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvZyhpbmRlbnQsICJjb2RlT3Jp
Z2luSW5kZXg6ICIsIGNvZGVPcmlnaW5JbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmNvZGVPcmln
aW5zKCkuc2l6ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIGxvZyhpbmRlbnQsICJjYWxsU2l0ZUluZGV4OiAiLCBjYWxsU2l0ZUluZGV4LmJpdHMo
KSwgIiBvZiAiLCBjb2RlQmxvY2stPmNvZGVPcmlnaW5zKCkuc2l6ZSgpLCAiXG4iKTsKIAogICAg
ICAgICAgICAgICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUgPSBjb2RlQmxvY2stPmpp
dFR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGppdFR5cGUgIT0gSklUQ29kZTo6RlRM
SklUKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CShyZXZpc2lvbiAxODg2OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1l
bnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zm
c2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgfSAvLyBTUCBob2xkcyBuZXdD
YWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBp
bml0aWFsaXplZC4KICAgICAKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6
OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOworICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMo
KTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoSlNTdGFj
azo6QXJndW1lbnRDb3VudCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKICAgICBlbWl0TG9hZChjYWxs
ZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTg4NjkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY4LDcgKzE2OCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkK
ICAgICB9IC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gaW5zdHJ1Y3Rpb24gLSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YmVnaW4oKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9u
OjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KS5iaXRzKCk7CiAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAxODg2OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTcgKzQwLDE4IEBAIHN0YXRpYyBT
dHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKICAgICByZXR1cm4gc3R1YkluZm87CiB9
CiAKLUpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCiAgICAgOiBtX2Nv
ZGVCbG9jayhjb2RlQmxvY2spCiB7CiAgICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9j
b2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJ
bmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKKyAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUlu
ZGV4ID0gY2FsbFNpdGU7CiB9CiAKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3Io
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4pCisgICAgOiBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlKQogICAgICwgbV9iYXNlKGJh
c2UpCiAgICAgLCBtX3ZhbHVlKHZhbHVlKQogewpAQCAtMTExLDkgKzExMiw5IEBAIHZvaWQgSklU
QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aEMKIH0KIAogSklUR2V0QnlJZEdlbmVyYXRv
cjo6SklUR2V0QnlJZEdlbmVyYXRvcigKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9k
ZSkKLSAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCB1c2VkUmVn
aXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRvcihj
b2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1
ZSwgc3BpbGxNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9
IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEzNiwxMCArMTM3LDEwIEBAIHZvaWQgSklUR2V0QnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKIH0KIAogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklU
UHV0QnlJZEdlbmVyYXRvcigKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUsCiAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAg
ICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJz
LCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxv
Y2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3Bp
bGxNb2RlKQogICAgICwgbV9zY3JhdGNoKHNjcmF0Y2gpCiAgICAgLCBtX2VjbWFNb2RlKGVjbWFN
b2RlKQogICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODg2
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xh
c3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yKCkgeyB9Ci0gICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2Nr
KiwgQ29kZU9yaWdpbik7CisgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwg
Q29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCk7CiAgICAgCiBwdWJsaWM6CiAgICAgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpAQCAtNTYs
NyArNTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSklUQnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAg
SklUQnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3Qg
UmVnaXN0ZXJTZXQmLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKKyAgICAg
ICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKICAgICAgICAgU3BpbGxS
ZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7CiAgICAgCiBwdWJsaWM6CkBAIC05NSw3ICs5NSw3IEBA
IHB1YmxpYzoKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKCkgeyB9CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwKKyAgICAgICAgQ29kZUJsb2Nr
KiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGls
bFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAg
ICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsIEpTVmFsdWVSZWdzIGJhc2UsCisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVn
cyBiYXNlLAogICAgICAgICBKU1ZhbHVlUmVncywgR1BSUmVnIHNjcmF0Y2gsIFNwaWxsUmVnaXN0
ZXJzTW9kZSBzcGlsbE1vZGUsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxODg2OTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDkgKzEzMCw5IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmEKICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8aW50PihtX2J5dGVjb2RlT2Zmc2V0KSA+PSAwKTsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgbV9ieXRlY29kZU9mZnNldCArIDE7IAotICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVJbnN0cnVj
dGlvbihpbnN0cnVjdGlvbik7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChpbnN0cnVjdGlvbikuYml0cygpOwogI2Vsc2UKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNv
ZGVPZmZzZXQgKyAxKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVPZmZzZXQgKyAxKS5iaXRzKCk7CiAjZW5kaWYKICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBpbnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV92bS0+dG9wQ2FsbEZyYW1lKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTg4NjkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbChFeGUKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAgIGJvb2wgZGlkT3B0aW1pemUgPSBmYWxzZTsKIAotICAg
ICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBB
U1NFUlQoZXhlYy0+Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICBBU1NFUlQo
IWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKICAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29y
dGggb3B0aW1pemluZyBhdCBhbGwuCiAgICAgICAgIGJvb2wgZGlkT3B0aW1pemUgPSBmYWxzZTsK
IAotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsK
ICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKQEAgLTE0NTEsNyArMTQ1
MSw3IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAg
aWYgKEpTQ2VsbDo6Y2FuVXNlRmFzdEdldE93blByb3BlcnR5KHN0cnVjdHVyZSkpIHsKICAgICAg
ICAgICAgIGlmIChSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gZXhpc3RpbmdBdG9taWNTdHJpbmcg
PSBhc1N0cmluZyhzdWJzY3JpcHQpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKGV4ZWMpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5m
YXN0R2V0T3duUHJvcGVydHkodm0sIHN0cnVjdHVyZSwgZXhpc3RpbmdBdG9taWNTdHJpbmcuZ2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsU2l0ZUFz
Qnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnN0
dWJJbmZvICYmIGJ5VmFsSW5mby0+Y2FjaGVkSWQuaW1wbCgpICE9IGV4aXN0aW5nQXRvbWljU3Ry
aW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ2MSw3ICsxNDYx
LDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgIH0KIAog
ICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+bG9j
YXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbFNpdGVB
c0J5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CiAKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwpAQCAtMTQ5
MCw3ICsxNDkwLDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAg
IEFTU0VSVChleGVjLT5jYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgaWYgKGJ5VmFs
SW5mby0+c3R1YkluZm8gJiYgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkKICAgICAg
ICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogCkBAIC0xNTIyLDcgKzE1MjIsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogICAgICAgICBib29sIGRpZE9wdGlt
aXplID0gZmFsc2U7CiAKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9m
ZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgp
KTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CkBAIC0x
NTU5LDcgKzE1NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJv
cGVydHlLZXkoZXhlYyk7CiAKICAgICAgICAgaWYgKCFzdWJzY3JpcHQuaXNTdHJpbmcoKSB8fCAh
cGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9j
YXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxT
aXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5z
dHViUm91dGluZSk7CiAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJ
ZCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQpAQCAtMTU4Niw3ICsx
NTg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYQogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogICAgIGJvb2wgZGlkT3B0aW1p
emUgPSBmYWxzZTsKIAotICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICBB
U1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAgIAogICAgIGlmIChoYXNPcHRpbWl6
YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKQEAgLTE2NTUsNyArMTY1NSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGkpOwogICAgICAg
ICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEFT
U0VSVChleGVjLT5jYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRy
ZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUgPyBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MTg4NjkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDcgKzI2Myw3IEBAIEpJVEdldEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXQKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENh
bGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdp
c3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgRG9udFNwaWxsKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAKQEAgLTUzMSw3ICs1MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQoSW5zdHJ1Y3Rpb24qCiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29k
ZUluZGV4V2l0aENlbGwocmVnVDAsIHJlZ1QyLCBtX2J5dGVjb2RlT2Zmc2V0KTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5k
ZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwK
ICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgRG9udFNwaWxsKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTU3Niw3ICs1NzYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3Ry
dWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwKICAg
ICAgICAgcmVnVDEsIERvbnRTcGlsbCwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIGRpcmVjdCA/
IERpcmVjdCA6IE5vdERpcmVjdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTg4NjkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5
VmFsV2l0CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QzLCBU
cnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgRG9udFNwaWxsKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKQEAgLTUyOCw3ICs1MjgsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVGb3JCeXRlY29kZUluZGV4V2l0aENlbGwocmVnVDAsIHJlZ1QxLCBtX2J5dGVjb2RlT2Zm
c2V0KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFs
UmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBEb250U3BpbGwpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
UmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNl
dCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgRG9udFNwaWxsLCBtX2NvZGVCbG9j
ay0+ZWNtYU1vZGUoKSwKICAgICAgICAgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg4
NjkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDExLDcgKzQxMSw3IEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAg
ICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1h
ZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCiAgICAgICAgIC8vIHBsYWNlIHRoYXQg
d2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQg
d2UgYXJlIGF0CiAgICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgc3R1YkppdC5zdG9yZTMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSks
CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0
dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpKTsKIAogICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNl
dHRlcikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259552</attachid>
            <date>2015-08-20 18:41:41 -0700</date>
            <delta_ts>2015-08-20 18:47:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>58596</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MCBA
QAorMjAxNS0wOC0yMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBMZXRzIHJlbmFtZSBjb2RlT3JpZ2luSW5kZXggdG8gY2FsbFNpdGVJbmRleCBhbmQgZ2V0IHJp
ZCBvZiBDYWxsRnJhbWU6OkxvY2F0aW9uLiBIYW5kbGVySW5mbyBzaG91bGQgYWxzbyB1c2UgYSBj
YWxsU2l0ZUluZGV4IGluc3RlYWQgb2YgYSBieXRlIGNvZGUgaW5kZXguCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgyMTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
YSBzdHJ1Y3QgY2FsbGVkIENhbGxTaXRlSW5kZXggd2hpY2ggaXMKKyAgICAgICAgdXNlZCBhcyBh
IHdyYXBwZXIgZm9yIGEgMzItYml0IGludCB0byBwbGFjZSB0aGluZ3MgaW4gdGhlIHRhZyBmb3Ig
QXJndW1lbnRDb3VudCAKKyAgICAgICAgaW4gdGhlIGNhbGwgZnJhbWUuIE9uIDMyLWJpdCB3ZSBw
bGFjZSBJbnN0cnVjdGlvbiogaW50byB0aGlzIHNsb3QgZm9yIExMSW50IGFuZCBCYXNsaW5lLgor
ICAgICAgICBGb3IgMzItYml0IERGRyB3ZSBwbGFjZSBhIGFuIGluZGV4IGludG8gdGhlIGNvZGUg
b3JpZ2luIHRhYmxlIGluIHRoaXMgc2xvdC4KKyAgICAgICAgT24gNjQtYml0IHdlIHBsYWNlIGEg
Ynl0ZWNvZGUgb2Zmc2V0IGludG8gdGhpcyBzbG90IGZvciBMTEludCBhbmQgQmFzZWxpbmUuCisg
ICAgICAgIE9uIDY0LWJpdCB3ZSBwbGFjZSB0aGUgaW5kZXggaW50byB0aGUgY29kZSBvcmlnaW4g
dGFibGUgaW4gdGhpcyBzbG90IGluIHRoZQorICAgICAgICBERkcvRlRMLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBnZXRzIHJpZCBvZiB0aGUgZW5jb2Rpbmcgc2NoZW1lIHRoYXQgZGVzY3Jp
YmVzIGlmIHNvbWV0aGluZyBpcyBhCisgICAgICAgIGJ5dGVjb2RlIGluZGV4IG9yIGEgY29kZSBv
cmlnaW4gdGFibGUgaW5kZXguIFRoaXMgaW5mb3JtYXRpb24gY2FuIGFsd2F5cworICAgICAgICBi
ZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBDb2RlQmxvY2sncycgSklUVHlwZS4KKworICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyBub3cgYWxzbyBoYXMgYSBDYWxsU2l0ZUluZGV4IHdoaWNoIGl0
IHN0b3JlcyB0bworICAgICAgICB0aGUgY2FsbCBmcmFtZSB3aGVuIG1ha2luZyBhIGNhbGwuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpoYXNDb2RlT3JpZ2lucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuR2V0Q29kZU9y
aWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OlN0
cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6c2hyaW5rVG9GaXQpOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Q29tbW9u
RGF0YSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmFkZENhbGxTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZW1p
dFN0b3JlQ29kZU9yaWdpbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg6CisgICAgICAgIChKU0M6OkZUTDo6SW5s
aW5lQ2FjaGVEZXNjcmlwdG9yOjpJbmxpbmVDYWNoZURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpGVEw6OklubGluZUNhY2hlRGVzY3JpcHRvcjo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpJbmxpbmVDYWNoZURlc2NyaXB0b3I6OnVpZCk6CisgICAgICAgIChKU0M6OkZUTDo6
R2V0QnlJZERlc2NyaXB0b3I6OkdldEJ5SWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRM
OjpQdXRCeUlkRGVzY3JpcHRvcjo6UHV0QnlJZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpG
VEw6OkNoZWNrSW5EZXNjcmlwdG9yOjpDaGVja0luRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjb2RlT3JpZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9MTFZNOjpnZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpzdG9yZUNvZGVPcmlnaW4pOgorICAgICAgICAqIGludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3VycmVudFZQQyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29k
ZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNCeXRlY29kZU9mZnNl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJh
bWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJpdHMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6
OnJldHVyblBDT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphYnN0cmFjdFJldHVy
blBDKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjp0b3BPZkZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpzZXRDYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
c2V0U2NvcGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmN1cnJlbnRWUEMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldEN1cnJlbnRWUEMpOiBEZWxldGVkLgorICAg
ICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpoYXNMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6Omhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjpjYWxsU2l0ZUFzUmF3Qml0cyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNp
dGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6aGFzQWN0aXZhdGlvbik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5z
dHJ1Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjpl
bmNvZGVBc0NvZGVPcmlnaW5JbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6TG9jYXRpb246OmlzQnl0ZWNvZGVMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6TG9jYXRpb246OmlzQ29kZU9yaWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lOjpoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzUmF3Qml0cyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc1Jhd0JpdHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzQ29kZU9y
aWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRGcmFtZSk6CisgICAgICAgIChK
U0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0
YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICog
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2FyYmFnZVN0
dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGhDaGVja3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRC
eUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6c3R1YkluZm8p
OgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9w
Q2FsbEZyYW1lKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5R2V0QnlWYWxPcHRpbWl6ZSk6CisgICAg
ICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRH
ZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorCiAyMDE1
LTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgT3ZlcmZs
b3cgY2hlY2sgZWxpbWluYXRpb24gZmFpbHMgZm9yIGEgc2ltcGxlIHRlc3QgY2FzZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTg4
NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDEsMTYgKzUwMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAotICAg
IGJvb2wgY2FuR2V0Q29kZU9yaWdpbih1bnNpZ25lZCBpbmRleCkKKyAgICBib29sIGNhbkdldENv
ZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmICghaGFzQ29k
ZU9yaWdpbnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGlu
ZGV4IDwgY29kZU9yaWdpbnMoKS5zaXplKCk7CisgICAgICAgIHJldHVybiBpbmRleC5iaXRzKCkg
PCBjb2RlT3JpZ2lucygpLnNpemUoKTsKICAgICB9CiAKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4odW5zaWduZWQgaW5kZXgpCisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKENhbGxTaXRlSW5k
ZXggaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleF07Cisg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2lucygpW2luZGV4LmJpdHMoKV07CiAgICAgfQogCiAgICAg
Ym9vbCBhZGRGcmVxdWVudEV4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYs
NyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAsIHNlZW4oZmFsc2UpCiAg
ICAgICAgICwgcmVzZXRCeUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkK
KyAgICAgICAgLCBjYWxsU2l0ZUluZGV4KFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAKQEAgLTE4
OSw2ICsxOTAsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgIGJvb2wgdG9va1Ns
b3dQYXRoIDogMTsKIAogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXg7CiAKICAgICBzdHJ1Y3QgewogICAgICAgICB1bnNpZ25lZCBzcGls
bE1vZGUgOiA4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuY3BwCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTQgQEAgdm9pZCBD
b21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cgogICAgICAgICBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQpOwogfQogCi11bnNpZ25lZCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKK0NhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9y
aWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgaWYgKGNvZGVPcmlnaW5zLmlzRW1w
dHkoKQogICAgICAgICB8fCBjb2RlT3JpZ2lucy5sYXN0KCkgIT0gY29kZU9yaWdpbikKICAgICAg
ICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09
IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBpbmRleDsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRl
eChpbmRleCk7CiB9CiAKIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5rVG9GaXQoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4ODczMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB7IH0KICAgICAKICAgICB2b2lkIG5v
dGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24oUGxhbiYsIENvZGVCbG9jayosIE5vZGUq
KTsKLSAgICB1bnNpZ25lZCBhZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4pOworICAgIENhbGxTaXRl
SW5kZXggYWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luKTsKICAgICAKICAgICB2b2lkIHNocmlua1Rv
Rml0KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCwxMSArMTUwLDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0
Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAorICAgIENhbGxTaXRlSW5kZXggYWRkQ2FsbFNpdGUo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0Q29kZS0+
Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CisgICAgfQorCiAgICAgdm9pZCBlbWl0
U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gbV9qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2lu
KTsKLSAgICAgICAgdW5zaWduZWQgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6
ZW5jb2RlQXNDb2RlT3JpZ2luSW5kZXgoaW5kZXgpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gYWRkQ2FsbFNpdGUoY29kZU9yaWdpbik7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQg
ZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxNCArMjAxLDE0
IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVh
bFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmU2NChjYWxs
ZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmU2NChB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNT
dGFjazo6Q2FsbGVlKSkpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0
aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWVPZmZzZXQoKSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNl
bGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKKyAgICAgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygp
OwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAg
ICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQpAQCAtMjE3LDEwICsyMTcsMTAgQEAg
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgIH0KIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KS5iaXRzKCk7CiAjZWxzZQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4OwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFt
ZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7Cisg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0
cygpOwogI2VuZGlmCiAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MTg4NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiAgICAgfQogICAgIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lz
dGVycygpLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgbV9qaXQuYWRk
Q2FsbFNpdGUoY29kZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLAogICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBzcGlsbE1vZGUpOwogICAgIApAQCAt
MjE1LDcgKzIxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BS
UmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxv
YWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRL
aW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lz
dGVyc01vZGUgc3BpbGxNb2RlKQogewogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLAorICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgbV9qaXQuYWRkQ2FsbFNpdGUoY29k
ZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KGJhc2VQYXlsb2FkR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9h
ZEdQUiksCiAgICAgICAgIHNjcmF0Y2hHUFIsIHNwaWxsTW9kZSwgbV9qaXQuZWNtYU1vZGVGb3Io
Y29kZU9yaWdpbiksIHB1dEtpbmQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODg3MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
SlNWYWx1ZShFZGdlIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3Bp
bGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKIHsKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2Rl
T3JpZ2luLCBtX2ppdC5hZGRDYWxsU2l0ZShjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3Bp
bGxNb2RlKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CiAgICAgCkBAIC0xNzQs
NyArMTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQogewogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdp
biwgdXNlZFJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwKKyAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIG1faml0LmFkZENhbGxTaXRlKGNvZGVPcmlnaW4pLCB1
c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAogICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIHNwaWxsTW9kZSwgbV9qaXQuZWNtYU1vZGVGb3IoY29k
ZU9yaWdpbiksIHB1dEtpbmQpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjQsNiArOTY0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZXN1bHRHUFIpLCBzdHViSW5mbywgYmFzZUdQUiwKICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBBdG9taWNTdHJpbmdJbXBsKj4oc3RyaW5nLT50
cnlHZXRWYWx1ZUltcGwoKSkpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSW5mby0+
Y2FsbFNpdGVJbmRleCA9IG1faml0LmFkZENhbGxTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
YzsKICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50
OF90PihiYXNlR1BSKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0
YXRpY19jYXN0PGludDhfdD4ocmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDYgKzQ1Niw3
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmNvZGVPcmlnaW5z
W2dldEJ5SWQuY2FsbFNpdGVJbmRleCgpLmJpdHMoKV07CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CiAgICAgICAgICAg
ICAKQEAgLTQ2NSwxMyArNDY2LDEzIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0
YWNrTWFwcygKICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJ
ZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAg
ICAgICAgICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGdldEJ5SWQuY2FsbFNpdGVJbmRl
eCgpLCB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVzdWx0KSwgTmVlZFRvU3BpbGwpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklU
LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMs
IHNsb3dQYXRoSklULCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2Rl
T3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIGJhc2UsIGdldEJ5SWQudWlk
KCkpOwogCiAgICAgICAgICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2Fs
bCk7CkBAIC00OTMsNiArNDk0LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24uY29kZU9yaWdpbnNbcHV0QnlJZC5jYWxsU2l0ZUluZGV4KCkuYml0cygpXTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52
YWx1ZVtpXTsKICAgICAgICAgICAgICAgICAKQEAgLTUwMiwxNCArNTA0LDE0IEBAIHN0YXRpYyB2
b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBHUFJSZWcg
dmFsdWUgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2ssIHB1dEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVnaXN0ZXJzLCBK
U1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBjb2RlT3Jp
Z2luLCBwdXRCeUlkLmNhbGxTaXRlSW5kZXgoKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3Mo
YmFzZSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlKSwgR1BSSW5mbzo6
cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgTmVlZFRvU3BpbGwsCiAgICAgICAgICAgICAgICAg
ICAgIHB1dEJ5SWQuZWNtYU1vZGUoKSwgcHV0QnlJZC5wdXRLaW5kKCkpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQ
YXRoSklULmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAg
IHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgcHV0QnlJZC5jb2RlT3JpZ2luKCks
ICZleGNlcHRpb25UYXJnZXQsCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0
ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKICAgICAgICAg
ICAgICAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVl
LCBiYXNlLCBwdXRCeUlkLnVpZCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKQEAgLTUzMSwxMyArNTMzLDE1
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmNvZGVPcmlnaW5z
W2NoZWNrSW4uY2FsbFNpdGVJbmRleCgpLmJpdHMoKV07CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CiAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3Jk
KTsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgb2JqID0gcmVjb3JkLmxvY2F0aW9u
c1sxXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7IAotICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5jb2RlT3JpZ2luID0gY2hlY2tJbi5jb2RlT3JpZ2luKCk7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOworICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5jYWxsU2l0ZUluZGV4ID0gY2hlY2tJbi5jYWxsU2l0ZUluZGV4KCk7CiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KG9iaik7
CiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8
aW50OF90PihyZXN1bHQpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVn
aXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU0Niw3ICs1NTAsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIHNsb3dDYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjaGVja0luLmNv
ZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUs
IHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0
LAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1bHQsIHN0dWJJ
bmZvLCBvYmosIGNoZWNrSW4ubV91aWQpOwogCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX3Ns
b3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkocmV2
aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNo
ZURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjIgKzM3LDI0IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsK
IHB1YmxpYzoKLSAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3IoKSB7IH0KKyAgICBJbmxpbmVDYWNo
ZURlc2NyaXB0b3IoKSAKKyAgICAgICAgOiBtX2NhbGxTaXRlSW5kZXgoVUlOVF9NQVgpIAorICAg
IHsgfQogICAgIAotICAgIElubGluZUNhY2hlRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElE
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiAgICAgICAgIDogbV9zdGFja21hcElEKHN0
YWNrbWFwSUQpCi0gICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgICAgICwg
bV9jYWxsU2l0ZUluZGV4KGNhbGxTaXRlKQogICAgICAgICAsIG1fdWlkKHVpZCkKICAgICB7CiAg
ICAgfQogICAgIAogICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrbWFwSUQ7IH0KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X2NvZGVPcmlnaW47IH0KKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxTaXRlSW5kZXg7IH0KICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkg
Y29uc3QgeyByZXR1cm4gbV91aWQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9z
dGFja21hcElEOwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAgIENhbGxTaXRlSW5k
ZXggbV9jYWxsU2l0ZUluZGV4OwogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKICAgICAK
IHB1YmxpYzoKQEAgLTYzLDggKzY1LDggQEAgY2xhc3MgR2V0QnlJZERlc2NyaXB0b3IgOiBwdWJs
aWMgSW5saW5lQwogcHVibGljOgogICAgIEdldEJ5SWREZXNjcmlwdG9yKCkgeyB9CiAgICAgCi0g
ICAgR2V0QnlJZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hlRGVz
Y3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCisgICAgR2V0QnlJZERlc2NyaXB0
b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJ
RCwgY2FsbFNpdGUsIHVpZCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNzYsOSArNzgsOSBAQCBw
dWJsaWM6CiAgICAgUHV0QnlJZERlc2NyaXB0b3IoKSB7IH0KICAgICAKICAgICBQdXRCeUlkRGVz
Y3JpcHRvcigKLSAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElE
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAogICAgICAg
ICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IElubGluZUNh
Y2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCisgICAgICAgIDogSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCB1aWQpCiAgICAgICAgICwg
bV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtpbmQocHV0S2luZCkKICAgICB7
CkBAIC0xMTEsOCArMTEzLDggQEAgY2xhc3MgQ2hlY2tJbkRlc2NyaXB0b3IgOiBwdWJsaWMgSW5s
aW5lQwogcHVibGljOgogICAgIENoZWNrSW5EZXNjcmlwdG9yKCkgeyB9CiAgICAgCi0gICAgQ2hl
Y2tJbkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hlRGVz
Y3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCBudWxscHRyKQorICAgIENoZWNrSW5EZXNj
cmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9y
KHN0YWNrbWFwSUQsIGNhbGxTaXRlLCBudWxscHRyKQogICAgICAgICAsIG1fdWlkKHVpZCkKICAg
ICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZp
c2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAg
ICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENh
bGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbFNpdGVJbmRleCgwKS5iaXRzKCkpLAog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OwogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50
b3BDYWxsRnJhbWUpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sg
PSBqaXQuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAxLDcg
KzIyMDEsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0
YXRlLnB1dEJ5SWRzLmFwcGVuZChQdXRCeUlkRGVzY3JpcHRvcigKLSAgICAgICAgICAgIHN0YWNr
bWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCB1aWQsCisgICAgICAgICAgICBzdGFja21h
cElELCBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgdWlkLAogICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+ZWNtYU1vZGUoKSwKICAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBQdXRCeUlkRGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KSk7CiAgICAgfQpAQCAt
NDkzOCw3ICs0OTM4LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIHNldEluc3RydWN0
aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKIAotICAgICAg
ICAgICAgICAgIG1fZnRsU3RhdGUuY2hlY2tJbnMuYXBwZW5kKENoZWNrSW5EZXNjcmlwdG9yKHN0
YWNrbWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdHIpKTsKKyAgICAgICAgICAgICAg
ICBtX2Z0bFN0YXRlLmNoZWNrSW5zLmFwcGVuZChDaGVja0luRGVzY3JpcHRvcihzdGFja21hcElE
LCBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwgc3RyKSk7CiAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC01NzgxLDcgKzU3ODEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25z
dEludDMyKDEpLCBiYXNlKTsKICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlv
bihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwogICAgICAgICAKLSAgICAgICAgbV9mdGxTdGF0
ZS5nZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMsIHVpZCkpOworICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVu
ZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21hcElELCBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1v
bi5hZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSwgdWlkKSk7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CkBAIC04MDM2LDggKzgwMzYsNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoCi0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXND
b2RlT3JpZ2luSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbikpKSwKKyAgICAgICAgICAgICAgICBtX2Z0
bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pLmJpdHMoKSks
CiAgICAgICAgICAgICB0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIH0KICAg
ICB2b2lkIGNhbGxQcmVmbGlnaHQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYs
OCArMTY2LDggQEAgdm9pZCBzdG9yZUNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDQ2FsbAogICAg
IGlmICghY29kZU9yaWdpbi5pc1NldCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgdW5z
aWduZWQgaW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3Jp
Z2luKTsKLSAgICB1bnNpZ25lZCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjpl
bmNvZGVBc0NvZGVPcmlnaW5JbmRleChpbmRleCk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSA9IHN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOworICAg
IHVuc2lnbmVkIGxvY2F0aW9uQml0cyA9IGNhbGxTaXRlLmJpdHMoKTsKICAgICBqaXQuc3RvcmUz
MigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NiwzOSArNDYsNTQgQEAgSlNTdGFjayogQ2FsbEZyYW1lOjpzdGFjaygpCiAjZW5kaWYK
IAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi11bnNpZ25lZCBDYWxsRnJhbWU6OmxvY2F0aW9uQXNC
eXRlY29kZU9mZnNldCgpIGNvbnN0CitJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBD
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChoYXNMb2Nh
dGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJuIGN1cnJlbnRWUEMoKSAtIGNvZGVC
bG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
SW5zdHJ1Y3Rpb24qPihjYWxsU2l0ZUluZGV4KCkuYml0cygpKTsKK30KKwordm9pZCBDYWxsRnJh
bWU6OnNldEN1cnJlbnRWUEMoSW5zdHJ1Y3Rpb24qIHZwYykKK3sKKyAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlKHZwYyk7CisgICAgdGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKSA9
IGNhbGxTaXRlLmJpdHMoKTsKIH0KIAotdm9pZCBDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCit1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRl
QXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAg
ICBzZXRDdXJyZW50VlBDKGNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgb2Zm
c2V0KTsKICAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgIHJl
dHVybiBjdXJyZW50VlBDKCkgLSBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsg
ICAgIAogfQotI2Vsc2UKKworI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkgLy8gaS5lLCA2NCBi
aXQuCiBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBsb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKTsKKyAgICByZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBjYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKTsKIH0KKwogdm9pZCBDYWxsRnJhbWU6
OnNldEN1cnJlbnRWUEMoSW5zdHJ1Y3Rpb24qIHZwYykKIHsKLSAgICBzZXRMb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQodnBjIC0gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwor
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUodnBjIC0gY29kZUJsb2NrKCktPmluc3RydWN0aW9u
cygpLmJlZ2luKCkpOworICAgIHRoaXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0udGFnKCkgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOwogfQorCit1bnNpZ25lZCBDYWxs
RnJhbWU6OmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNv
ZGVCbG9jaygpKTsKKyAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOworfQorCiAjZW5kaWYKICAgICAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKLXVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KCkKK3Vuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q2FsbFNpdGVJbmRleCgpCiB7Ci0gICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5k
ZXgoKSk7CisgICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KCkpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jayk7CiAKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgdW5zaWduZWQgaW5kZXgg
PSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9
IGNhbGxTaXRlSW5kZXgoKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2lu
KGluZGV4KSk7CiAgICAgY29kZU9yaWdpbiA9IGNvZGVCbG9jay0+Y29kZU9yaWdpbihpbmRleCk7
CiAKQEAgLTk5LDEwICsxMTQsMTAgQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRlY29kZU9mZnNl
dCgpCiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkKLSAgICAg
ICAgcmV0dXJuIGJ5dGVjb2RlT2Zmc2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOworICAgIGlmICho
YXNMb2NhdGlvbkFzQ2FsbFNpdGVJbmRleCgpKQorICAgICAgICByZXR1cm4gYnl0ZWNvZGVPZmZz
ZXRGcm9tQ2FsbFNpdGVJbmRleCgpOwogI2VuZGlmCi0gICAgcmV0dXJuIGxvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpOworICAgIHJldHVybiBjYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKTsKIH0K
IAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTEwLDEzICsxMjUsMTMg
QEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgIGlmICghY29kZUJsb2Nr
KCkpCiAgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKDApOwogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCkpIHsKLSAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgaWYgKGhhc0xvY2F0
aW9uQXNDYWxsU2l0ZUluZGV4KCkpIHsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9IGNh
bGxTaXRlSW5kZXgoKTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5jYW5HZXRDb2RlT3Jp
Z2luKGluZGV4KSk7CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRl
eCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4obG9jYXRpb25Bc0J5dGVj
b2RlT2Zmc2V0KCkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlQXNCeXRlY29kZU9m
ZnNldCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJ
KHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMjEgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTU2NvcGU7CiAKKyAgICBz
dHJ1Y3QgQ2FsbFNpdGVJbmRleCB7CisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgodWlu
dDMyX3QgYml0cykKKyAgICAgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQorICAgICAgICAgICAgOiBtX2JpdHMoYml0d2lzZV9jYXN0PHVp
bnQzMl90PihpbnN0cnVjdGlvbikpCisgICAgICAgIHsgfQorI2VuZGlmCisgICAgICAgIGlubGlu
ZSB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICB1aW50MzJfdCBtX2JpdHM7CisgICAgfTsKKwogICAgIC8vIFJlcHJlc2VudHMg
dGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMg
dGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rpb25zLgogICAgIGNsYXNzIEV4ZWNTdGF0
ZSA6IHByaXZhdGUgUmVnaXN0ZXIgewpAQCAtMTA3LDQ5ICsxMjIsMTUgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENhbGxlckZyYW1lQW5kUEMsIHBjKTsgfQogICAgICAgICBBYnN0cmFj
dFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBDKHZtLCB0aGlz
KTsgfQogCi0gICAgICAgIGNsYXNzIExvY2F0aW9uIHsKLSAgICAgICAgcHVibGljOgotICAgICAg
ICAgICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBkZWNvZGUodWludDMyX3QgYml0cyk7Ci0KLSAg
ICAgICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0J5dGVjb2RlTG9jYXRpb24odWludDMyX3Qg
Yml0cyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWlu
dDMyX3QgZW5jb2RlQXNCeXRlY29kZU9mZnNldCh1aW50MzJfdCBiaXRzKTsKLSNlbHNlCi0gICAg
ICAgICAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlv
bihJbnN0cnVjdGlvbiopOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0NvZGVPcmlnaW5JbmRleCh1aW50MzJfdCBiaXRzKTsKLSAgICAgICAgICAgIHN0YXRpYyBp
bmxpbmUgdWludDMyX3QgZW5jb2RlQXNDb2RlT3JpZ2luSW5kZXgodWludDMyX3QgYml0cyk7Ci0K
LSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIGVudW0gVHlwZVRhZyB7Ci0gICAgICAgICAg
ICAgICAgQnl0ZWNvZGVMb2NhdGlvblRhZyA9IDAsCi0gICAgICAgICAgICAgICAgQ29kZU9yaWdp
bkluZGV4VGFnID0gMSwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxp
bmUgdWludDMyX3QgZW5jb2RlKFR5cGVUYWcsIHVpbnQzMl90IGJpdHMpOwotCi0gICAgICAgICAg
ICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19tYXNrID0gMHgxOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19zaGlmdCA9IDMxOwotICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfc2hpZnRlZE1hc2sgPSBzX21hc2sgPDwgc19z
aGlmdDsKLSNlbHNlCi0gICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19zaGlmdCA9
IDE7Ci0jZW5kaWYKLSAgICAgICAgfTsKLQogICAgICAgICBib29sIGhhc0xvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpIGNvbnN0OwotICAgICAgICBib29sIGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2lu
SW5kZXgoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBsb2NhdGlvbkFzUmF3Qml0cygpIGNv
bnN0OwotICAgICAgICB1bnNpZ25lZCBsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdDsK
LSAgICAgICAgdW5zaWduZWQgbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpIGNvbnN0OworICAg
ICAgICBib29sIGhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KCkgY29uc3Q7CiAKLSAgICAgICAg
dm9pZCBzZXRMb2NhdGlvbkFzUmF3Qml0cyh1bnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgc2V0TG9j
YXRpb25Bc0J5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbFNp
dGVBc1Jhd0JpdHMoKSBjb25zdDsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpIGNv
bnN0OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dEZyb21DYWxsU2l0ZUluZGV4KCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMg
d2lsbCB0cnkgdG8gZ2V0IHlvdSB0aGUgYnl0ZWNvZGUgb2Zmc2V0LCBidXQgeW91IHNob3VsZCBi
ZSBhd2FyZSB0aGF0CkBAIC0xNzAsMTkgKzE1MSw4IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgICAgIHJldHVybiB0b3BPZkZyYW1lSW50ZXJuYWwoKTsKICAgICAgICAgfQogICAgIAotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50VlBDKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlv
bio+KHRoaXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0udGFnKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgc2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvbiogdnBjKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnRhZygpID0gYml0d2lzZV9jYXN0
PGludDMyX3Q+KHZwYyk7Ci0gICAgICAgIH0KLSNlbHNlCiAgICAgICAgIEluc3RydWN0aW9uKiBj
dXJyZW50VlBDKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFZQQyhJbnN0cnVjdGlv
biogdnBjKTsKLSNlbmRpZgogCiAgICAgICAgIHZvaWQgc2V0Q2FsbGVyRnJhbWUoQ2FsbEZyYW1l
KiBmcmFtZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWUgPSBmcmFtZTsgfQogICAg
ICAgICB2b2lkIHNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29w
ZSkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3Njb3BlUmVnaXN0ZXJPZmZzZXRdID0g
c2NvcGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZUlubGluZXMuaAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTEyICszMSw1MiBAQAogCiBuYW1lc3BhY2UgSlNDICB7CiAKLWlubGluZSB1aW50MzJf
dCBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGUoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6VHlwZVRh
ZyB0YWcsIHVpbnQzMl90IGJpdHMpCi17Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBBU1NFUlQo
IShiaXRzICYgc19zaGlmdGVkTWFzaykpOwotICAgIEFTU0VSVCghKHRhZyAmIH5zX21hc2spKTsK
LSAgICByZXR1cm4gYml0cyB8ICh0YWcgPDwgc19zaGlmdCk7Ci0jZWxzZQotICAgIEFTU0VSVCgh
KHRhZyAmIH5zX21hc2spKTsKLSAgICBpZiAodGFnICYgQ29kZU9yaWdpbkluZGV4VGFnKQotICAg
ICAgICBiaXRzID0gKGJpdHMgPDwgc19zaGlmdCk7Ci0gICAgQVNTRVJUKCEoYml0cyAmIHNfbWFz
aykpOwotICAgIGJpdHMgfD0gdGFnOwotICAgIHJldHVybiBiaXRzOwotI2VuZGlmCi19Ci0KLWlu
bGluZSB1aW50MzJfdCBDYWxsRnJhbWU6OkxvY2F0aW9uOjpkZWNvZGUodWludDMyX3QgYml0cykK
LXsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBiaXRzICYgfnNfc2hpZnRlZE1hc2s7
Ci0jZWxzZQotICAgIGlmIChpc0NvZGVPcmlnaW5JbmRleChiaXRzKSkKLSAgICAgICAgcmV0dXJu
IGJpdHMgPj4gc19zaGlmdDsKLSAgICByZXR1cm4gYml0cyAmIH5zX21hc2s7Ci0jZW5kaWYKLX0K
LQotI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdWludDMyX3QgQ2FsbEZyYW1lOjpMb2NhdGlv
bjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCh1aW50MzJfdCBiaXRzKQotewotICAgIHVpbnQzMl90
IGVuY29kZWRCaXRzID0gZW5jb2RlKEJ5dGVjb2RlTG9jYXRpb25UYWcsIGJpdHMpOwotICAgIEFT
U0VSVChpc0J5dGVjb2RlTG9jYXRpb24oZW5jb2RlZEJpdHMpKTsKLSAgICByZXR1cm4gZW5jb2Rl
ZEJpdHM7Ci19Ci0jZWxzZQotaW5saW5lIHVpbnQzMl90IENhbGxGcmFtZTo6TG9jYXRpb246OmVu
Y29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgdWludDMyX3QgZW5jb2RlZEJpdHMgPSBlbmNvZGUoQnl0ZWNvZGVMb2NhdGlvblRhZywgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKTsKLSAgICBBU1NFUlQoaXNCeXRl
Y29kZUxvY2F0aW9uKGVuY29kZWRCaXRzKSk7Ci0gICAgcmV0dXJuIGVuY29kZWRCaXRzOwotfQot
I2VuZGlmCi0KLWlubGluZSB1aW50MzJfdCBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0Nv
ZGVPcmlnaW5JbmRleCh1aW50MzJfdCBiaXRzKQotewotICAgIHVpbnQzMl90IGVuY29kZWRCaXRz
ID0gZW5jb2RlKENvZGVPcmlnaW5JbmRleFRhZywgYml0cyk7Ci0gICAgQVNTRVJUKGlzQ29kZU9y
aWdpbkluZGV4KGVuY29kZWRCaXRzKSk7Ci0gICAgcmV0dXJuIGVuY29kZWRCaXRzOwotfQotCi1p
bmxpbmUgYm9vbCBDYWxsRnJhbWU6OkxvY2F0aW9uOjppc0J5dGVjb2RlTG9jYXRpb24odWludDMy
X3QgYml0cykKLXsKLSAgICByZXR1cm4gIWlzQ29kZU9yaWdpbkluZGV4KGJpdHMpOwotfQotCi1p
bmxpbmUgYm9vbCBDYWxsRnJhbWU6OkxvY2F0aW9uOjppc0NvZGVPcmlnaW5JbmRleCh1aW50MzJf
dCBiaXRzKQotewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgVHlwZVRhZyB0YWcgPSBzdGF0aWNf
Y2FzdDxUeXBlVGFnPihiaXRzID4+IHNfc2hpZnQpOwotICAgIHJldHVybiAhISh0YWcgJiBDb2Rl
T3JpZ2luSW5kZXhUYWcpOwotI2Vsc2UKLSAgICByZXR1cm4gISEoYml0cyAmIENvZGVPcmlnaW5J
bmRleFRhZyk7Ci0jZW5kaWYKLX0KLQogaW5saW5lIGJvb2wgQ2FsbEZyYW1lOjpoYXNMb2NhdGlv
bkFzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewotICAgIHJldHVybiBMb2NhdGlvbjo6aXNCeXRl
Y29kZUxvY2F0aW9uKGxvY2F0aW9uQXNSYXdCaXRzKCkpOwotfQotCi1pbmxpbmUgYm9vbCBDYWxs
RnJhbWU6Omhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAotewotICAgIHJldHVy
biBMb2NhdGlvbjo6aXNDb2RlT3JpZ2luSW5kZXgobG9jYXRpb25Bc1Jhd0JpdHMoKSk7Ci19Ci0K
LWlubGluZSB1bnNpZ25lZCBDYWxsRnJhbWU6OmxvY2F0aW9uQXNSYXdCaXRzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKTsKLX0KKyAgICBB
U1NFUlQoY29kZUJsb2NrKCkpOworICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkg
eworICAgIGNhc2UgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVENvZGU6
OkJhc2VsaW5lSklUOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVENvZGU6Ok5v
bmU6CisgICAgY2FzZSBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpz
ZXRMb2NhdGlvbkFzUmF3Qml0cyh1bnNpZ25lZCBiaXRzKQotewotICAgIHRoaXNbSlNTdGFjazo6
QXJndW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihiaXRzKTsKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdW5zaWduZWQgQ2FsbEZyYW1lOjpsb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKSBjb25zdAoraW5saW5lIGJvb2wgQ2FsbEZyYW1lOjpoYXNMb2NhdGlvbkFz
Q2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNCeXRlY29k
ZU9mZnNldCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHJldHVybiBMb2NhdGlv
bjo6ZGVjb2RlKGxvY2F0aW9uQXNSYXdCaXRzKCkpOworICAgIHN3aXRjaCAoY29kZUJsb2NrKCkt
PmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgorICAgIGNhc2UgSklUQ29k
ZTo6RlRMSklUOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVENvZGU6Ok5vbmU6
CisgICAgY2FzZSBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNl
dExvY2F0aW9uQXNCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCitpbmxpbmUgdW5zaWdu
ZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jaygpKTsKLSAgICBzZXRMb2NhdGlvbkFzUmF3Qml0cyhMb2NhdGlvbjo6ZW5jb2RlQXNC
eXRlY29kZU9mZnNldChvZmZzZXQpKTsKLSAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0J5dGVjb2Rl
T2Zmc2V0KCkpOworICAgIHJldHVybiB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnRhZygp
OwogfQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKLWlubGluZSB1bnNpZ25lZCBDYWxsRnJh
bWU6OmxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAoraW5saW5lIENhbGxTaXRlSW5k
ZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzTG9j
YXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAg
IHJldHVybiBMb2NhdGlvbjo6ZGVjb2RlKGxvY2F0aW9uQXNSYXdCaXRzKCkpOworICAgIHJldHVy
biBDYWxsU2l0ZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpOwogfQogCiBpbmxpbmUgYm9vbCBD
YWxsRnJhbWU6Omhhc0FjdGl2YXRpb24oKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE4ODcz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFk
RnJhbWUoQ2FsbEZyYW1lKiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IGluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgQ2Fs
bFNpdGVJbmRleCBpbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKICAgICBpZiAoIWNvZGVCbG9j
ay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpIHsKICAgICAgICAgLy8gU2VlIGFzc2VydGlvbiBh
Ym92ZS4gSW4gcmVsZWFzZSBidWlsZHMsIHdlIHRyeSB0byBwcm90ZWN0IG91cnNlbHZlcwpAQCAt
MTI1LDcgKzEyNSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKEMK
ICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBt
X2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IDAKICAgICAg
ICAgOiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleAotICAgICAgICA6IGNh
bGxGcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgIDogY2FsbEZyYW1l
LT5jYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBt
X2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gMDsKICNlbmRpZgpAQCAtMzc2LDcgKzM3Niw3IEBA
IHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoaW50IGluZGUKICAgICAgICAgbG9nRihp
bmRlbnQsICJjYWxsZWU6ICVwXG4iLCBjYWxsZWUoKSk7CiAgICAgICAgIGxvZ0YoaW5kZW50LCAi
cmV0dXJuUEM6ICVwXG4iLCByZXR1cm5QQyk7CiAgICAgICAgIGxvZ0YoaW5kZW50LCAiY2FsbGVy
RnJhbWU6ICVwXG4iLCBjYWxsZXJGcmFtZSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2F0aW9uUmF3
Qml0cyA9IGNhbGxGcmFtZS0+bG9jYXRpb25Bc1Jhd0JpdHMoKTsKKyAgICAgICAgdW5zaWduZWQg
bG9jYXRpb25SYXdCaXRzID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUFzUmF3Qml0cygpOwogICAgICAg
ICBsb2dGKGluZGVudCwgInJhd0xvY2F0aW9uQml0czogJXUgMHgleFxuIiwgbG9jYXRpb25SYXdC
aXRzLCBsb2NhdGlvblJhd0JpdHMpOwogICAgICAgICBsb2dGKGluZGVudCwgImNvZGVCbG9jazog
JXAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgaWYgKGNvZGVCbG9jaykKQEAgLTM4NiwxNCArMzg2
LDE0IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoaW50IGluZGUKICAgICAgICAg
ICAgIGluZGVudCsrOwogCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYXNMb2NhdGlvbkFz
Qnl0ZWNvZGVPZmZzZXQoKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVBc0J5dGVj
b2RlT2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgbG9nKGluZGVudCwgImJ5dGVjb2RlT2Zmc2V0
OiAiLCBieXRlY29kZU9mZnNldCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGxvZyhpbmRlbnQsICJoYXNDb2RlT3JpZ2luczogIiwgY29kZUJsb2Nr
LT5oYXNDb2RlT3JpZ2lucygpLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2Nr
LT5oYXNDb2RlT3JpZ2lucygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVP
cmlnaW5JbmRleCA9IGNhbGxGcmFtZS0+bG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOwotICAg
ICAgICAgICAgICAgICAgICBsb2coaW5kZW50LCAiY29kZU9yaWdpbkluZGV4OiAiLCBjb2RlT3Jp
Z2luSW5kZXgsICIgb2YgIiwgY29kZUJsb2NrLT5jb2RlT3JpZ2lucygpLnNpemUoKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxG
cmFtZS0+Y2FsbFNpdGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBsb2coaW5kZW50LCAi
Y2FsbFNpdGVJbmRleDogIiwgY2FsbFNpdGVJbmRleC5iaXRzKCksICIgb2YgIiwgY29kZUJsb2Nr
LT5jb2RlT3JpZ2lucygpLnNpemUoKSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlID0gY29kZUJsb2NrLT5qaXRUeXBlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChqaXRUeXBlICE9IEpJVENvZGU6OkZUTEpJVCkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTg4NzMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSQogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCksIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpOwogICAgIH0gLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAgICAgCi0g
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNC
eXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQsIGNh
bGxGcmFtZVJlZ2lzdGVyKSk7CiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAv
LyByZWdUMSwgcmVnVDAgaG9sZHMgY2FsbGVlLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgfSAvLyBTUCBob2xkcyBu
ZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3Vu
dCBpbml0aWFsaXplZC4KICAgICAKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IGluc3Ry
dWN0aW9uIC0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0gICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChieXRlY29kZU9mZnNldCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0
KSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAg
aG9sZHMgY2FsbGVlLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDE3ICs0MCwxOCBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdh
cmJhZ2VTdHViSW5mCiAgICAgcmV0dXJuIHN0dWJJbmZvOwogfQogCi1KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKK0pJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ewogICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5m
bygpIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW47CisgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogfQog
CiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVy
c01vZGUgc3BpbGxNb2RlKQotICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2Nr
LCBjb2RlT3JpZ2luKQorICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2NrLCBj
b2RlT3JpZ2luLCBjYWxsU2l0ZSkKICAgICAsIG1fYmFzZShiYXNlKQogICAgICwgbV92YWx1ZSh2
YWx1ZSkKIHsKQEAgLTExMSw5ICsxMTIsOSBAQCB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhdGhDCiB9CiAKIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0
b3IoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRCeUlkR2Vu
ZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUs
IHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9
CkBAIC0xMzYsMTAgKzEzNywxMCBAQCB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhCiB9CiAKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzY3JhdGNoLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLAogICAgIEVD
TUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9y
KGNvZGVCbG9jaywgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxs
TW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKICAgICAsIG1fc2Ny
YXRjaChzY3JhdGNoKQogICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAsIG1fcHV0S2lu
ZChwdXRLaW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQot
ICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4pOworICAg
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXgpOwogICAgIAogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KQEAgLTU2LDcgKzU2LDcgQEAgcHJvdGVjdGVk
OgogICAgIEpJVEJ5SWRHZW5lcmF0b3IoKSB7IH0KIAogICAgIEpJVEJ5SWRHZW5lcmF0b3IoCi0g
ICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCisgICAgICAgIENvZGVCbG9jayosIENvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCiAgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1v
ZGUpOwogICAgIAogcHVibGljOgpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvcigKLSAgICAgICAg
Q29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IEpTVmFsdWVSZWdzIGJhc2UsCisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLAogICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSB7
IH0KIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIENvZGVP
cmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNl
LAorICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwKICAgICAgICAgSlNW
YWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBF
Q01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAko
cmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw5ICsxMzAsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjp1cGRhdGVUb3BDYWxsRnJhCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9ieXRl
Y29kZU9mZnNldCkgPj0gMCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIG1f
Ynl0ZWNvZGVPZmZzZXQgKyAxOyAKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJh
bWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJp
dHMoKTsKICNlbHNlCi0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlT2Zmc2V0ICsgMSk7CisgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0ICsg
MSkuYml0cygpOwogI2VuZGlmCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgaW50VGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3OCw3ICs1NzgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFs
T3B0CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkp
IHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAg
ICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAg
QVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgQVNTRVJU
KCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKQEAgLTYwMyw3ICs2MDMsNyBAQCBzdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgewogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwogICAg
ICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkp
OwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAg
ICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2Nr
KCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWQ7CkBAIC02NDcsNyArNjQ3LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlE
aXJlY3RQdXRCeQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBpZiAoc3Vic2NyaXB0
LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zm
c2V0KCkpOworICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkp
OwogICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogCiAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwpAQCAtNjcyLDcgKzY3
Miw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnkKICAgICAgICAg
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOwogCiAg
ICAgICAgIGlmICghc3Vic2NyaXB0LmlzU3RyaW5nKCkgfHwgIWluZGV4KSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAg
QVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgIEFT
U0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIERpcmVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwpAQCAtMTUyNSw3ICsx
NTI1LDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgICAg
ICBpZiAoSlNDZWxsOjpjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoc3RydWN0dXJlKSkgewogICAg
ICAgICAgICAgaWYgKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBleGlzdGluZ0F0b21pY1N0cmlu
ZyA9IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoZXhlYykpIHsK
ICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCkt
PmZhc3RHZXRPd25Qcm9wZXJ0eSh2bSwgc3RydWN0dXJlLCBleGlzdGluZ0F0b21pY1N0cmluZy5n
ZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRl
QXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+
c3R1YkluZm8gJiYgYnlWYWxJbmZvLT5jYWNoZWRJZC5pbXBsKCkgIT0gZXhpc3RpbmdBdG9taWNT
dHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTM1LDcgKzE1
MzUsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgfQog
CiAgICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5s
b2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChleGVjLT5jYWxsU2l0
ZUFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKIAogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC0x
NTY0LDcgKzE1NjQsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAotICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7Cisg
ICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICBpZiAoYnlW
YWxJbmZvLT5zdHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZh
bEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5KSkKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwogCkBAIC0xNTgxLDcgKzE1ODEsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9u
UmVzdWx0IHRyeUdldEJ5VmFsT3B0CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1
YnNjcmlwdC5pc0ludDMyKCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9m
ZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgp
KTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CkBAIC0x
NjA4LDcgKzE2MDgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0
CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2Ny
aXB0KSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlw
dC50b1Byb3BlcnR5S2V5KGV4ZWMpOwogICAgICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygp
IHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVj
LT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+
Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbElu
Zm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsV2l0aENh
Y2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6T3B0aW1pemVkOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYQogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOwogICAgIGJvb2wgZGlkT3B0aW1pemUgPSBmYWxzZTsKIAotICAgIEFT
U0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGV4ZWMt
PmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUpOwogICAgIAogICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+
c3RydWN0dXJlKHZtKSkpIHsKQEAgLTE3NDAsNyArMTc0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1
bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgaWYgKCFpc0pTU3RyaW5n
KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5
dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsU2l0ZUFz
Qnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQURE
UkVTUyksIEZ1bmN0aW9uUHRyKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRC
eVZhbEdlbmVyaWMgOiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU2LDcgKzI1Niw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlW
YWxXaXQKICAgICBlbWl0SWRlbnRpZmllckNoZWNrKHJlZ1QyLCByZWdUNCwgcHJvcGVydHlOYW1l
LCBzbG93Q2FzZXMpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3Bl
Y2lhbFJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNl
dDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBEb250U3BpbGwpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIApAQCAtNTYxLDcgKzU2MSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbioKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIG1fYnl0ZWNvZGVPZmZz
ZXQpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lz
dGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3BlY2lh
bFJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBEb250U3BpbGwpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAt
NjA2LDcgKzYwNiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRl
eChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAog
ICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpLAogICAgICAgICByZWdUMSwgRG9udFNwaWxsLCBtX2NvZGVCbG9jay0+ZWNtYU1v
ZGUoKSwgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
ODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
SklUOjplbWl0R2V0QnlWYWxXaXQKICAgICBlbWl0SWRlbnRpZmllckNoZWNrKHJlZ1QxLCByZWdU
MywgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBS
ZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0
KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIERvbnRTcGlsbCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogCkBAIC01NTYsNyArNTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkKEluc3RydWN0aW9uKgogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9y
Qnl0ZWNvZGVJbmRleFdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgbV9ieXRlY29kZU9mZnNldCk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVy
cygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgRG9u
dFNwaWxsKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTYwMyw3ICs2MDMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVy
U2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdp
c3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIERvbnRTcGlsbCwgbV9jb2RlQmxvY2stPmVjbWFN
b2RlKCksCiAgICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxMSw3ICs0MTEsNyBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICAv
LyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRo
ZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQogICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUg
aXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBh
dAogICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAorICAgICAg
ICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdHViSW5mby5j
YWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAK
ICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259554</attachid>
            <date>2015-08-20 18:47:36 -0700</date>
            <delta_ts>2015-08-24 14:54:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>59637</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MCBA
QAorMjAxNS0wOC0yMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBMZXRzIHJlbmFtZSBjb2RlT3JpZ2luSW5kZXggdG8gY2FsbFNpdGVJbmRleCBhbmQgZ2V0IHJp
ZCBvZiBDYWxsRnJhbWU6OkxvY2F0aW9uLiBIYW5kbGVySW5mbyBzaG91bGQgYWxzbyB1c2UgYSBj
YWxsU2l0ZUluZGV4IGluc3RlYWQgb2YgYSBieXRlIGNvZGUgaW5kZXguCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgyMTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
YSBzdHJ1Y3QgY2FsbGVkIENhbGxTaXRlSW5kZXggd2hpY2ggaXMKKyAgICAgICAgdXNlZCBhcyBh
IHdyYXBwZXIgZm9yIGEgMzItYml0IGludCB0byBwbGFjZSB0aGluZ3MgaW4gdGhlIHRhZyBmb3Ig
QXJndW1lbnRDb3VudCAKKyAgICAgICAgaW4gdGhlIGNhbGwgZnJhbWUuIE9uIDMyLWJpdCB3ZSBw
bGFjZSBJbnN0cnVjdGlvbiogaW50byB0aGlzIHNsb3QgZm9yIExMSW50IGFuZCBCYXNsaW5lLgor
ICAgICAgICBGb3IgMzItYml0IERGRyB3ZSBwbGFjZSBhIGFuIGluZGV4IGludG8gdGhlIGNvZGUg
b3JpZ2luIHRhYmxlIGluIHRoaXMgc2xvdC4KKyAgICAgICAgT24gNjQtYml0IHdlIHBsYWNlIGEg
Ynl0ZWNvZGUgb2Zmc2V0IGludG8gdGhpcyBzbG90IGZvciBMTEludCBhbmQgQmFzZWxpbmUuCisg
ICAgICAgIE9uIDY0LWJpdCB3ZSBwbGFjZSB0aGUgaW5kZXggaW50byB0aGUgY29kZSBvcmlnaW4g
dGFibGUgaW4gdGhpcyBzbG90IGluIHRoZQorICAgICAgICBERkcvRlRMLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBnZXRzIHJpZCBvZiB0aGUgZW5jb2Rpbmcgc2NoZW1lIHRoYXQgZGVzY3Jp
YmVzIGlmIHNvbWV0aGluZyBpcyBhCisgICAgICAgIGJ5dGVjb2RlIGluZGV4IG9yIGEgY29kZSBv
cmlnaW4gdGFibGUgaW5kZXguIFRoaXMgaW5mb3JtYXRpb24gY2FuIGFsd2F5cworICAgICAgICBi
ZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBDb2RlQmxvY2sncycgSklUVHlwZS4KKworICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyBub3cgYWxzbyBoYXMgYSBDYWxsU2l0ZUluZGV4IHdoaWNoIGl0
IHN0b3JlcyB0bworICAgICAgICB0aGUgY2FsbCBmcmFtZSB3aGVuIG1ha2luZyBhIGNhbGwuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpoYXNDb2RlT3JpZ2lucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuR2V0Q29kZU9y
aWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OlN0
cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6c2hyaW5rVG9GaXQpOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Q29tbW9u
RGF0YSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmFkZENhbGxTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZW1p
dFN0b3JlQ29kZU9yaWdpbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg6CisgICAgICAgIChKU0M6OkZUTDo6SW5s
aW5lQ2FjaGVEZXNjcmlwdG9yOjpJbmxpbmVDYWNoZURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpGVEw6OklubGluZUNhY2hlRGVzY3JpcHRvcjo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpJbmxpbmVDYWNoZURlc2NyaXB0b3I6OnVpZCk6CisgICAgICAgIChKU0M6OkZUTDo6
R2V0QnlJZERlc2NyaXB0b3I6OkdldEJ5SWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRM
OjpQdXRCeUlkRGVzY3JpcHRvcjo6UHV0QnlJZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpG
VEw6OkNoZWNrSW5EZXNjcmlwdG9yOjpDaGVja0luRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjb2RlT3JpZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9MTFZNOjpnZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpzdG9yZUNvZGVPcmlnaW4pOgorICAgICAgICAqIGludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3VycmVudFZQQyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y29k
ZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNCeXRlY29kZU9mZnNl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJh
bWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJpdHMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6
OnJldHVyblBDT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphYnN0cmFjdFJldHVy
blBDKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjp0b3BPZkZyYW1lKToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpzZXRDYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
c2V0U2NvcGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmN1cnJlbnRWUEMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldEN1cnJlbnRWUEMpOiBEZWxldGVkLgorICAg
ICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpoYXNMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6Omhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjpjYWxsU2l0ZUFzUmF3Qml0cyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbFNp
dGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6aGFzQWN0aXZhdGlvbik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5z
dHJ1Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjpl
bmNvZGVBc0NvZGVPcmlnaW5JbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6TG9jYXRpb246OmlzQnl0ZWNvZGVMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6TG9jYXRpb246OmlzQ29kZU9yaWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FsbEZyYW1lOjpoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzUmF3Qml0cyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc1Jhd0JpdHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzQ29kZU9y
aWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRGcmFtZSk6CisgICAgICAgIChK
U0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0
YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICog
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2FyYmFnZVN0
dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGhDaGVja3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRC
eUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6c3R1YkluZm8p
OgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6dXBkYXRlVG9w
Q2FsbEZyYW1lKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5R2V0QnlWYWxPcHRpbWl6ZSk6CisgICAg
ICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRH
ZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorCiAyMDE1
LTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgT3ZlcmZs
b3cgY2hlY2sgZWxpbWluYXRpb24gZmFpbHMgZm9yIGEgc2ltcGxlIHRlc3QgY2FzZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTg4
NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDEsMTYgKzUwMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKICAgICB9CiAgICAgICAgIAotICAg
IGJvb2wgY2FuR2V0Q29kZU9yaWdpbih1bnNpZ25lZCBpbmRleCkKKyAgICBib29sIGNhbkdldENv
ZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmICghaGFzQ29k
ZU9yaWdpbnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGlu
ZGV4IDwgY29kZU9yaWdpbnMoKS5zaXplKCk7CisgICAgICAgIHJldHVybiBpbmRleC5iaXRzKCkg
PCBjb2RlT3JpZ2lucygpLnNpemUoKTsKICAgICB9CiAKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4odW5zaWduZWQgaW5kZXgpCisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKENhbGxTaXRlSW5k
ZXggaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleF07Cisg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2lucygpW2luZGV4LmJpdHMoKV07CiAgICAgfQogCiAgICAg
Ym9vbCBhZGRGcmVxdWVudEV4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYs
NyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAsIHNlZW4oZmFsc2UpCiAg
ICAgICAgICwgcmVzZXRCeUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkK
KyAgICAgICAgLCBjYWxsU2l0ZUluZGV4KFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAKQEAgLTE4
OSw2ICsxOTAsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgIGJvb2wgdG9va1Ns
b3dQYXRoIDogMTsKIAogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXg7CiAKICAgICBzdHJ1Y3QgewogICAgICAgICB1bnNpZ25lZCBzcGls
bE1vZGUgOiA4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuY3BwCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTQgQEAgdm9pZCBD
b21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cgogICAgICAgICBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQpOwogfQogCi11bnNpZ25lZCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKK0NhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9y
aWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgaWYgKGNvZGVPcmlnaW5zLmlzRW1w
dHkoKQogICAgICAgICB8fCBjb2RlT3JpZ2lucy5sYXN0KCkgIT0gY29kZU9yaWdpbikKICAgICAg
ICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09
IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBpbmRleDsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRl
eChpbmRleCk7CiB9CiAKIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5rVG9GaXQoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4ODczMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB7IH0KICAgICAKICAgICB2b2lkIG5v
dGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24oUGxhbiYsIENvZGVCbG9jayosIE5vZGUq
KTsKLSAgICB1bnNpZ25lZCBhZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4pOworICAgIENhbGxTaXRl
SW5kZXggYWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luKTsKICAgICAKICAgICB2b2lkIHNocmlua1Rv
Rml0KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCwxMSArMTUwLDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0
Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAorICAgIENhbGxTaXRlSW5kZXggYWRkQ2FsbFNpdGUo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0Q29kZS0+
Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CisgICAgfQorCiAgICAgdm9pZCBlbWl0
U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gbV9qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2lu
KTsKLSAgICAgICAgdW5zaWduZWQgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6
ZW5jb2RlQXNDb2RlT3JpZ2luSW5kZXgoaW5kZXgpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gYWRkQ2FsbFNpdGUoY29kZU9yaWdpbik7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQg
ZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCShyZXZpc2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxNCArMjAxLDE0
IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVh
bFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmU2NChjYWxs
ZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmU2NChB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNT
dGFjazo6Q2FsbGVlKSkpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0
aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWVPZmZzZXQoKSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNl
bGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKKyAgICAgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygp
OwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAg
ICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQpAQCAtMjE3LDEwICsyMTcsMTAgQEAg
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgIH0KIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KS5iaXRzKCk7CiAjZWxzZQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4OwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFt
ZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7Cisg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0
cygpOwogI2VuZGlmCiAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MTg4NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiAgICAgfQogICAgIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lz
dGVycygpLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgbV9qaXQuYWRk
Q2FsbFNpdGUoY29kZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLAogICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBzcGlsbE1vZGUpOwogICAgIApAQCAt
MjE1LDcgKzIxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BS
UmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxv
YWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRL
aW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lz
dGVyc01vZGUgc3BpbGxNb2RlKQogewogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLAorICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgbV9qaXQuYWRkQ2FsbFNpdGUoY29k
ZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KGJhc2VQYXlsb2FkR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9h
ZEdQUiksCiAgICAgICAgIHNjcmF0Y2hHUFIsIHNwaWxsTW9kZSwgbV9qaXQuZWNtYU1vZGVGb3Io
Y29kZU9yaWdpbiksIHB1dEtpbmQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODg3MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
SlNWYWx1ZShFZGdlIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3Bp
bGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKIHsKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2Rl
T3JpZ2luLCBtX2ppdC5hZGRDYWxsU2l0ZShjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3Bp
bGxNb2RlKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CiAgICAgCkBAIC0xNzQs
NyArMTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQogewogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdp
biwgdXNlZFJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwKKyAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIG1faml0LmFkZENhbGxTaXRlKGNvZGVPcmlnaW4pLCB1
c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAogICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIHNwaWxsTW9kZSwgbV9qaXQuZWNtYU1vZGVGb3IoY29k
ZU9yaWdpbiksIHB1dEtpbmQpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjQsNiArOTY0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZXN1bHRHUFIpLCBzdHViSW5mbywgYmFzZUdQUiwKICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBBdG9taWNTdHJpbmdJbXBsKj4oc3RyaW5nLT50
cnlHZXRWYWx1ZUltcGwoKSkpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSW5mby0+
Y2FsbFNpdGVJbmRleCA9IG1faml0LmFkZENhbGxTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
YzsKICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50
OF90PihiYXNlR1BSKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0
YXRpY19jYXN0PGludDhfdD4ocmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDYgKzQ1Niw3
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmNvZGVPcmlnaW5z
W2dldEJ5SWQuY2FsbFNpdGVJbmRleCgpLmJpdHMoKV07CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CiAgICAgICAgICAg
ICAKQEAgLTQ2NSwxMyArNDY2LDEzIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0
YWNrTWFwcygKICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJ
ZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAg
ICAgICAgICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGdldEJ5SWQuY2FsbFNpdGVJbmRl
eCgpLCB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVzdWx0KSwgTmVlZFRvU3BpbGwpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklU
LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMs
IHNsb3dQYXRoSklULCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2Rl
T3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIGJhc2UsIGdldEJ5SWQudWlk
KCkpOwogCiAgICAgICAgICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2Fs
bCk7CkBAIC00OTMsNiArNDk0LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24uY29kZU9yaWdpbnNbcHV0QnlJZC5jYWxsU2l0ZUluZGV4KCkuYml0cygpXTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52
YWx1ZVtpXTsKICAgICAgICAgICAgICAgICAKQEAgLTUwMiwxNCArNTA0LDE0IEBAIHN0YXRpYyB2
b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBHUFJSZWcg
dmFsdWUgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2ssIHB1dEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVnaXN0ZXJzLCBK
U1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBjb2RlT3Jp
Z2luLCBwdXRCeUlkLmNhbGxTaXRlSW5kZXgoKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3Mo
YmFzZSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlKSwgR1BSSW5mbzo6
cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgTmVlZFRvU3BpbGwsCiAgICAgICAgICAgICAgICAg
ICAgIHB1dEJ5SWQuZWNtYU1vZGUoKSwgcHV0QnlJZC5wdXRLaW5kKCkpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQ
YXRoSklULmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAg
IHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgcHV0QnlJZC5jb2RlT3JpZ2luKCks
ICZleGNlcHRpb25UYXJnZXQsCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0
ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKICAgICAgICAg
ICAgICAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVl
LCBiYXNlLCBwdXRCeUlkLnVpZCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKQEAgLTUzMSwxMyArNTMzLDE1
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmNvZGVPcmlnaW5z
W2NoZWNrSW4uY2FsbFNpdGVJbmRleCgpLmJpdHMoKV07CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CiAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3Jk
KTsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgb2JqID0gcmVjb3JkLmxvY2F0aW9u
c1sxXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7IAotICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5jb2RlT3JpZ2luID0gY2hlY2tJbi5jb2RlT3JpZ2luKCk7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOworICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5jYWxsU2l0ZUluZGV4ID0gY2hlY2tJbi5jYWxsU2l0ZUluZGV4KCk7CiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KG9iaik7
CiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8
aW50OF90PihyZXN1bHQpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVn
aXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU0Niw3ICs1NTAsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIHNsb3dDYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjaGVja0luLmNv
ZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUs
IHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0
LAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1bHQsIHN0dWJJ
bmZvLCBvYmosIGNoZWNrSW4ubV91aWQpOwogCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX3Ns
b3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkocmV2
aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNo
ZURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjIgKzM3LDI0IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsK
IHB1YmxpYzoKLSAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3IoKSB7IH0KKyAgICBJbmxpbmVDYWNo
ZURlc2NyaXB0b3IoKSAKKyAgICAgICAgOiBtX2NhbGxTaXRlSW5kZXgoVUlOVF9NQVgpIAorICAg
IHsgfQogICAgIAotICAgIElubGluZUNhY2hlRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElE
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiAgICAgICAgIDogbV9zdGFja21hcElEKHN0
YWNrbWFwSUQpCi0gICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgICAgICwg
bV9jYWxsU2l0ZUluZGV4KGNhbGxTaXRlKQogICAgICAgICAsIG1fdWlkKHVpZCkKICAgICB7CiAg
ICAgfQogICAgIAogICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrbWFwSUQ7IH0KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X2NvZGVPcmlnaW47IH0KKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxTaXRlSW5kZXg7IH0KICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkg
Y29uc3QgeyByZXR1cm4gbV91aWQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9z
dGFja21hcElEOwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAgIENhbGxTaXRlSW5k
ZXggbV9jYWxsU2l0ZUluZGV4OwogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKICAgICAK
IHB1YmxpYzoKQEAgLTYzLDggKzY1LDggQEAgY2xhc3MgR2V0QnlJZERlc2NyaXB0b3IgOiBwdWJs
aWMgSW5saW5lQwogcHVibGljOgogICAgIEdldEJ5SWREZXNjcmlwdG9yKCkgeyB9CiAgICAgCi0g
ICAgR2V0QnlJZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hlRGVz
Y3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCisgICAgR2V0QnlJZERlc2NyaXB0
b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJ
RCwgY2FsbFNpdGUsIHVpZCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNzYsOSArNzgsOSBAQCBw
dWJsaWM6CiAgICAgUHV0QnlJZERlc2NyaXB0b3IoKSB7IH0KICAgICAKICAgICBQdXRCeUlkRGVz
Y3JpcHRvcigKLSAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElE
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAogICAgICAg
ICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IElubGluZUNh
Y2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCisgICAgICAgIDogSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCB1aWQpCiAgICAgICAgICwg
bV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtpbmQocHV0S2luZCkKICAgICB7
CkBAIC0xMTEsOCArMTEzLDggQEAgY2xhc3MgQ2hlY2tJbkRlc2NyaXB0b3IgOiBwdWJsaWMgSW5s
aW5lQwogcHVibGljOgogICAgIENoZWNrSW5EZXNjcmlwdG9yKCkgeyB9CiAgICAgCi0gICAgQ2hl
Y2tJbkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hlRGVz
Y3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCBudWxscHRyKQorICAgIENoZWNrSW5EZXNj
cmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9y
KHN0YWNrbWFwSUQsIGNhbGxTaXRlLCBudWxscHRyKQogICAgICAgICAsIG1fdWlkKHVpZCkKICAg
ICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZp
c2lvbiAxODg3MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAg
ICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENh
bGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbFNpdGVJbmRleCgwKS5iaXRzKCkpLAog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OwogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS50
b3BDYWxsRnJhbWUpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sg
PSBqaXQuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAxLDcg
KzIyMDEsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0
YXRlLnB1dEJ5SWRzLmFwcGVuZChQdXRCeUlkRGVzY3JpcHRvcigKLSAgICAgICAgICAgIHN0YWNr
bWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCB1aWQsCisgICAgICAgICAgICBzdGFja21h
cElELCBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgdWlkLAogICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+ZWNtYU1vZGUoKSwKICAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBQdXRCeUlkRGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KSk7CiAgICAgfQpAQCAt
NDkzOCw3ICs0OTM4LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIHNldEluc3RydWN0
aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKIAotICAgICAg
ICAgICAgICAgIG1fZnRsU3RhdGUuY2hlY2tJbnMuYXBwZW5kKENoZWNrSW5EZXNjcmlwdG9yKHN0
YWNrbWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdHIpKTsKKyAgICAgICAgICAgICAg
ICBtX2Z0bFN0YXRlLmNoZWNrSW5zLmFwcGVuZChDaGVja0luRGVzY3JpcHRvcihzdGFja21hcElE
LCBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwgc3RyKSk7CiAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC01NzgxLDcgKzU3ODEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25z
dEludDMyKDEpLCBiYXNlKTsKICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlv
bihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwogICAgICAgICAKLSAgICAgICAgbV9mdGxTdGF0
ZS5nZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMsIHVpZCkpOworICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVu
ZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21hcElELCBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1v
bi5hZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSwgdWlkKSk7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CkBAIC04MDM2LDggKzgwMzYsNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoCi0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXND
b2RlT3JpZ2luSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbikpKSwKKyAgICAgICAgICAgICAgICBtX2Z0
bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pLmJpdHMoKSks
CiAgICAgICAgICAgICB0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIH0KICAg
ICB2b2lkIGNhbGxQcmVmbGlnaHQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYs
OCArMTY2LDggQEAgdm9pZCBzdG9yZUNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDQ2FsbAogICAg
IGlmICghY29kZU9yaWdpbi5pc1NldCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgdW5z
aWduZWQgaW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3Jp
Z2luKTsKLSAgICB1bnNpZ25lZCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjpl
bmNvZGVBc0NvZGVPcmlnaW5JbmRleChpbmRleCk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSA9IHN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOworICAg
IHVuc2lnbmVkIGxvY2F0aW9uQml0cyA9IGNhbGxTaXRlLmJpdHMoKTsKICAgICBqaXQuc3RvcmUz
MigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NiwzOSArNDYsNTQgQEAgSlNTdGFjayogQ2FsbEZyYW1lOjpzdGFjaygpCiAjZW5kaWYK
IAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi11bnNpZ25lZCBDYWxsRnJhbWU6OmxvY2F0aW9uQXNC
eXRlY29kZU9mZnNldCgpIGNvbnN0CitJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBD
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIEFTU0VSVChoYXNMb2Nh
dGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgcmV0dXJuIGN1cnJlbnRWUEMoKSAtIGNvZGVC
bG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
SW5zdHJ1Y3Rpb24qPihjYWxsU2l0ZUluZGV4KCkuYml0cygpKTsKK30KKwordm9pZCBDYWxsRnJh
bWU6OnNldEN1cnJlbnRWUEMoSW5zdHJ1Y3Rpb24qIHZwYykKK3sKKyAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlKHZwYyk7CisgICAgdGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKSA9
IGNhbGxTaXRlLmJpdHMoKTsKIH0KIAotdm9pZCBDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCit1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRl
QXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAg
ICBzZXRDdXJyZW50VlBDKGNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgb2Zm
c2V0KTsKICAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgIHJl
dHVybiBjdXJyZW50VlBDKCkgLSBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsg
ICAgIAogfQotI2Vsc2UKKworI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkgLy8gaS5lLCA2NCBi
aXQuCiBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBsb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKTsKKyAgICByZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBjYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKTsKIH0KKwogdm9pZCBDYWxsRnJhbWU6
OnNldEN1cnJlbnRWUEMoSW5zdHJ1Y3Rpb24qIHZwYykKIHsKLSAgICBzZXRMb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQodnBjIC0gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwor
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUodnBjIC0gY29kZUJsb2NrKCktPmluc3RydWN0aW9u
cygpLmJlZ2luKCkpOworICAgIHRoaXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0udGFnKCkgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOwogfQorCit1bnNpZ25lZCBDYWxs
RnJhbWU6OmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNv
ZGVCbG9jaygpKTsKKyAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgIHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYml0cygpOworfQorCiAjZW5kaWYKICAgICAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKLXVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KCkKK3Vuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q2FsbFNpdGVJbmRleCgpCiB7Ci0gICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5k
ZXgoKSk7CisgICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KCkpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jayk7CiAKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgdW5zaWduZWQgaW5kZXgg
PSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9
IGNhbGxTaXRlSW5kZXgoKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2lu
KGluZGV4KSk7CiAgICAgY29kZU9yaWdpbiA9IGNvZGVCbG9jay0+Y29kZU9yaWdpbihpbmRleCk7
CiAKQEAgLTk5LDEwICsxMTQsMTAgQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRlY29kZU9mZnNl
dCgpCiAgICAgaWYgKCFjb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkKLSAgICAg
ICAgcmV0dXJuIGJ5dGVjb2RlT2Zmc2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOworICAgIGlmICho
YXNMb2NhdGlvbkFzQ2FsbFNpdGVJbmRleCgpKQorICAgICAgICByZXR1cm4gYnl0ZWNvZGVPZmZz
ZXRGcm9tQ2FsbFNpdGVJbmRleCgpOwogI2VuZGlmCi0gICAgcmV0dXJuIGxvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpOworICAgIHJldHVybiBjYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKTsKIH0K
IAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTEwLDEzICsxMjUsMTMg
QEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgIGlmICghY29kZUJsb2Nr
KCkpCiAgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKDApOwogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCkpIHsKLSAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgaWYgKGhhc0xvY2F0
aW9uQXNDYWxsU2l0ZUluZGV4KCkpIHsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9IGNh
bGxTaXRlSW5kZXgoKTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5jYW5HZXRDb2RlT3Jp
Z2luKGluZGV4KSk7CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRl
eCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4obG9jYXRpb25Bc0J5dGVj
b2RlT2Zmc2V0KCkpOworICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlQXNCeXRlY29kZU9m
ZnNldCgpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJ
KHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMjEgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTU2NvcGU7CiAKKyAgICBz
dHJ1Y3QgQ2FsbFNpdGVJbmRleCB7CisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgodWlu
dDMyX3QgYml0cykKKyAgICAgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQorICAgICAgICAgICAgOiBtX2JpdHMoYml0d2lzZV9jYXN0PHVp
bnQzMl90PihpbnN0cnVjdGlvbikpCisgICAgICAgIHsgfQorI2VuZGlmCisgICAgICAgIGlubGlu
ZSB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICB1aW50MzJfdCBtX2JpdHM7CisgICAgfTsKKwogICAgIC8vIFJlcHJlc2VudHMg
dGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMg
dGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rpb25zLgogICAgIGNsYXNzIEV4ZWNTdGF0
ZSA6IHByaXZhdGUgUmVnaXN0ZXIgewpAQCAtMTA3LDQ5ICsxMjIsMTUgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENhbGxlckZyYW1lQW5kUEMsIHBjKTsgfQogICAgICAgICBBYnN0cmFj
dFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBDKHZtLCB0aGlz
KTsgfQogCi0gICAgICAgIGNsYXNzIExvY2F0aW9uIHsKLSAgICAgICAgcHVibGljOgotICAgICAg
ICAgICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBkZWNvZGUodWludDMyX3QgYml0cyk7Ci0KLSAg
ICAgICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0J5dGVjb2RlTG9jYXRpb24odWludDMyX3Qg
Yml0cyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWlu
dDMyX3QgZW5jb2RlQXNCeXRlY29kZU9mZnNldCh1aW50MzJfdCBiaXRzKTsKLSNlbHNlCi0gICAg
ICAgICAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlv
bihJbnN0cnVjdGlvbiopOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0NvZGVPcmlnaW5JbmRleCh1aW50MzJfdCBiaXRzKTsKLSAgICAgICAgICAgIHN0YXRpYyBp
bmxpbmUgdWludDMyX3QgZW5jb2RlQXNDb2RlT3JpZ2luSW5kZXgodWludDMyX3QgYml0cyk7Ci0K
LSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIGVudW0gVHlwZVRhZyB7Ci0gICAgICAgICAg
ICAgICAgQnl0ZWNvZGVMb2NhdGlvblRhZyA9IDAsCi0gICAgICAgICAgICAgICAgQ29kZU9yaWdp
bkluZGV4VGFnID0gMSwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxp
bmUgdWludDMyX3QgZW5jb2RlKFR5cGVUYWcsIHVpbnQzMl90IGJpdHMpOwotCi0gICAgICAgICAg
ICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19tYXNrID0gMHgxOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19zaGlmdCA9IDMxOwotICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfc2hpZnRlZE1hc2sgPSBzX21hc2sgPDwgc19z
aGlmdDsKLSNlbHNlCi0gICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19zaGlmdCA9
IDE7Ci0jZW5kaWYKLSAgICAgICAgfTsKLQogICAgICAgICBib29sIGhhc0xvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpIGNvbnN0OwotICAgICAgICBib29sIGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2lu
SW5kZXgoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBsb2NhdGlvbkFzUmF3Qml0cygpIGNv
bnN0OwotICAgICAgICB1bnNpZ25lZCBsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdDsK
LSAgICAgICAgdW5zaWduZWQgbG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpIGNvbnN0OworICAg
ICAgICBib29sIGhhc0xvY2F0aW9uQXNDYWxsU2l0ZUluZGV4KCkgY29uc3Q7CiAKLSAgICAgICAg
dm9pZCBzZXRMb2NhdGlvbkFzUmF3Qml0cyh1bnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgc2V0TG9j
YXRpb25Bc0J5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbFNp
dGVBc1Jhd0JpdHMoKSBjb25zdDsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpIGNv
bnN0OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dEZyb21DYWxsU2l0ZUluZGV4KCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMg
d2lsbCB0cnkgdG8gZ2V0IHlvdSB0aGUgYnl0ZWNvZGUgb2Zmc2V0LCBidXQgeW91IHNob3VsZCBi
ZSBhd2FyZSB0aGF0CkBAIC0xNzAsMTkgKzE1MSw4IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAg
ICAgICAgIHJldHVybiB0b3BPZkZyYW1lSW50ZXJuYWwoKTsKICAgICAgICAgfQogICAgIAotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50VlBDKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlv
bio+KHRoaXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0udGFnKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgc2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvbiogdnBjKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnRhZygpID0gYml0d2lzZV9jYXN0
PGludDMyX3Q+KHZwYyk7Ci0gICAgICAgIH0KLSNlbHNlCiAgICAgICAgIEluc3RydWN0aW9uKiBj
dXJyZW50VlBDKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFZQQyhJbnN0cnVjdGlv
biogdnBjKTsKLSNlbmRpZgogCiAgICAgICAgIHZvaWQgc2V0Q2FsbGVyRnJhbWUoQ2FsbEZyYW1l
KiBmcmFtZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWUgPSBmcmFtZTsgfQogICAg
ICAgICB2b2lkIHNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29w
ZSkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3Njb3BlUmVnaXN0ZXJPZmZzZXRdID0g
c2NvcGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZUlubGluZXMuaAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTEyICszMSw1MiBAQAogCiBuYW1lc3BhY2UgSlNDICB7CiAKLWlubGluZSB1aW50MzJf
dCBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGUoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6VHlwZVRh
ZyB0YWcsIHVpbnQzMl90IGJpdHMpCi17Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBBU1NFUlQo
IShiaXRzICYgc19zaGlmdGVkTWFzaykpOwotICAgIEFTU0VSVCghKHRhZyAmIH5zX21hc2spKTsK
LSAgICByZXR1cm4gYml0cyB8ICh0YWcgPDwgc19zaGlmdCk7Ci0jZWxzZQotICAgIEFTU0VSVCgh
KHRhZyAmIH5zX21hc2spKTsKLSAgICBpZiAodGFnICYgQ29kZU9yaWdpbkluZGV4VGFnKQotICAg
ICAgICBiaXRzID0gKGJpdHMgPDwgc19zaGlmdCk7Ci0gICAgQVNTRVJUKCEoYml0cyAmIHNfbWFz
aykpOwotICAgIGJpdHMgfD0gdGFnOwotICAgIHJldHVybiBiaXRzOwotI2VuZGlmCi19Ci0KLWlu
bGluZSB1aW50MzJfdCBDYWxsRnJhbWU6OkxvY2F0aW9uOjpkZWNvZGUodWludDMyX3QgYml0cykK
LXsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBiaXRzICYgfnNfc2hpZnRlZE1hc2s7
Ci0jZWxzZQotICAgIGlmIChpc0NvZGVPcmlnaW5JbmRleChiaXRzKSkKLSAgICAgICAgcmV0dXJu
IGJpdHMgPj4gc19zaGlmdDsKLSAgICByZXR1cm4gYml0cyAmIH5zX21hc2s7Ci0jZW5kaWYKLX0K
LQotI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdWludDMyX3QgQ2FsbEZyYW1lOjpMb2NhdGlv
bjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCh1aW50MzJfdCBiaXRzKQotewotICAgIHVpbnQzMl90
IGVuY29kZWRCaXRzID0gZW5jb2RlKEJ5dGVjb2RlTG9jYXRpb25UYWcsIGJpdHMpOwotICAgIEFT
U0VSVChpc0J5dGVjb2RlTG9jYXRpb24oZW5jb2RlZEJpdHMpKTsKLSAgICByZXR1cm4gZW5jb2Rl
ZEJpdHM7Ci19Ci0jZWxzZQotaW5saW5lIHVpbnQzMl90IENhbGxGcmFtZTo6TG9jYXRpb246OmVu
Y29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgdWludDMyX3QgZW5jb2RlZEJpdHMgPSBlbmNvZGUoQnl0ZWNvZGVMb2NhdGlvblRhZywgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKTsKLSAgICBBU1NFUlQoaXNCeXRl
Y29kZUxvY2F0aW9uKGVuY29kZWRCaXRzKSk7Ci0gICAgcmV0dXJuIGVuY29kZWRCaXRzOwotfQot
I2VuZGlmCi0KLWlubGluZSB1aW50MzJfdCBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0Nv
ZGVPcmlnaW5JbmRleCh1aW50MzJfdCBiaXRzKQotewotICAgIHVpbnQzMl90IGVuY29kZWRCaXRz
ID0gZW5jb2RlKENvZGVPcmlnaW5JbmRleFRhZywgYml0cyk7Ci0gICAgQVNTRVJUKGlzQ29kZU9y
aWdpbkluZGV4KGVuY29kZWRCaXRzKSk7Ci0gICAgcmV0dXJuIGVuY29kZWRCaXRzOwotfQotCi1p
bmxpbmUgYm9vbCBDYWxsRnJhbWU6OkxvY2F0aW9uOjppc0J5dGVjb2RlTG9jYXRpb24odWludDMy
X3QgYml0cykKLXsKLSAgICByZXR1cm4gIWlzQ29kZU9yaWdpbkluZGV4KGJpdHMpOwotfQotCi1p
bmxpbmUgYm9vbCBDYWxsRnJhbWU6OkxvY2F0aW9uOjppc0NvZGVPcmlnaW5JbmRleCh1aW50MzJf
dCBiaXRzKQotewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgVHlwZVRhZyB0YWcgPSBzdGF0aWNf
Y2FzdDxUeXBlVGFnPihiaXRzID4+IHNfc2hpZnQpOwotICAgIHJldHVybiAhISh0YWcgJiBDb2Rl
T3JpZ2luSW5kZXhUYWcpOwotI2Vsc2UKLSAgICByZXR1cm4gISEoYml0cyAmIENvZGVPcmlnaW5J
bmRleFRhZyk7Ci0jZW5kaWYKLX0KLQogaW5saW5lIGJvb2wgQ2FsbEZyYW1lOjpoYXNMb2NhdGlv
bkFzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogewotICAgIHJldHVybiBMb2NhdGlvbjo6aXNCeXRl
Y29kZUxvY2F0aW9uKGxvY2F0aW9uQXNSYXdCaXRzKCkpOwotfQotCi1pbmxpbmUgYm9vbCBDYWxs
RnJhbWU6Omhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAotewotICAgIHJldHVy
biBMb2NhdGlvbjo6aXNDb2RlT3JpZ2luSW5kZXgobG9jYXRpb25Bc1Jhd0JpdHMoKSk7Ci19Ci0K
LWlubGluZSB1bnNpZ25lZCBDYWxsRnJhbWU6OmxvY2F0aW9uQXNSYXdCaXRzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKTsKLX0KKyAgICBB
U1NFUlQoY29kZUJsb2NrKCkpOworICAgIHN3aXRjaCAoY29kZUJsb2NrKCktPmppdFR5cGUoKSkg
eworICAgIGNhc2UgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICBjYXNlIEpJVENvZGU6
OkJhc2VsaW5lSklUOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVENvZGU6Ok5v
bmU6CisgICAgY2FzZSBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpz
ZXRMb2NhdGlvbkFzUmF3Qml0cyh1bnNpZ25lZCBiaXRzKQotewotICAgIHRoaXNbSlNTdGFjazo6
QXJndW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihiaXRzKTsKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdW5zaWduZWQgQ2FsbEZyYW1lOjpsb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKSBjb25zdAoraW5saW5lIGJvb2wgQ2FsbEZyYW1lOjpoYXNMb2NhdGlvbkFz
Q2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNCeXRlY29k
ZU9mZnNldCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHJldHVybiBMb2NhdGlv
bjo6ZGVjb2RlKGxvY2F0aW9uQXNSYXdCaXRzKCkpOworICAgIHN3aXRjaCAoY29kZUJsb2NrKCkt
PmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgorICAgIGNhc2UgSklUQ29k
ZTo6RlRMSklUOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEpJVENvZGU6Ok5vbmU6
CisgICAgY2FzZSBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rOgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNl
dExvY2F0aW9uQXNCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCitpbmxpbmUgdW5zaWdu
ZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jaygpKTsKLSAgICBzZXRMb2NhdGlvbkFzUmF3Qml0cyhMb2NhdGlvbjo6ZW5jb2RlQXNC
eXRlY29kZU9mZnNldChvZmZzZXQpKTsKLSAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0J5dGVjb2Rl
T2Zmc2V0KCkpOworICAgIHJldHVybiB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnRhZygp
OwogfQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKLWlubGluZSB1bnNpZ25lZCBDYWxsRnJh
bWU6OmxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAoraW5saW5lIENhbGxTaXRlSW5k
ZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzTG9j
YXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAg
IHJldHVybiBMb2NhdGlvbjo6ZGVjb2RlKGxvY2F0aW9uQXNSYXdCaXRzKCkpOworICAgIHJldHVy
biBDYWxsU2l0ZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpOwogfQogCiBpbmxpbmUgYm9vbCBD
YWxsRnJhbWU6Omhhc0FjdGl2YXRpb24oKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE4ODcz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFk
RnJhbWUoQ2FsbEZyYW1lKiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IGluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgQ2Fs
bFNpdGVJbmRleCBpbmRleCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKICAgICBpZiAoIWNvZGVCbG9j
ay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpIHsKICAgICAgICAgLy8gU2VlIGFzc2VydGlvbiBh
Ym92ZS4gSW4gcmVsZWFzZSBidWlsZHMsIHdlIHRyeSB0byBwcm90ZWN0IG91cnNlbHZlcwpAQCAt
MTI1LDcgKzEyNSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKEMK
ICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBt
X2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IDAKICAgICAg
ICAgOiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleAotICAgICAgICA6IGNh
bGxGcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgIDogY2FsbEZyYW1l
LT5jYWxsU2l0ZUFzQnl0ZWNvZGVPZmZzZXQoKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBt
X2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gMDsKICNlbmRpZgpAQCAtMzc2LDcgKzM3Niw3IEBA
IHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoaW50IGluZGUKICAgICAgICAgbG9nRihp
bmRlbnQsICJjYWxsZWU6ICVwXG4iLCBjYWxsZWUoKSk7CiAgICAgICAgIGxvZ0YoaW5kZW50LCAi
cmV0dXJuUEM6ICVwXG4iLCByZXR1cm5QQyk7CiAgICAgICAgIGxvZ0YoaW5kZW50LCAiY2FsbGVy
RnJhbWU6ICVwXG4iLCBjYWxsZXJGcmFtZSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2F0aW9uUmF3
Qml0cyA9IGNhbGxGcmFtZS0+bG9jYXRpb25Bc1Jhd0JpdHMoKTsKKyAgICAgICAgdW5zaWduZWQg
bG9jYXRpb25SYXdCaXRzID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUFzUmF3Qml0cygpOwogICAgICAg
ICBsb2dGKGluZGVudCwgInJhd0xvY2F0aW9uQml0czogJXUgMHgleFxuIiwgbG9jYXRpb25SYXdC
aXRzLCBsb2NhdGlvblJhd0JpdHMpOwogICAgICAgICBsb2dGKGluZGVudCwgImNvZGVCbG9jazog
JXAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgaWYgKGNvZGVCbG9jaykKQEAgLTM4NiwxNCArMzg2
LDE0IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6cHJpbnQoaW50IGluZGUKICAgICAgICAg
ICAgIGluZGVudCsrOwogCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYXNMb2NhdGlvbkFz
Qnl0ZWNvZGVPZmZzZXQoKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVBc0J5dGVj
b2RlT2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgbG9nKGluZGVudCwgImJ5dGVjb2RlT2Zmc2V0
OiAiLCBieXRlY29kZU9mZnNldCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGxvZyhpbmRlbnQsICJoYXNDb2RlT3JpZ2luczogIiwgY29kZUJsb2Nr
LT5oYXNDb2RlT3JpZ2lucygpLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2Nr
LT5oYXNDb2RlT3JpZ2lucygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVP
cmlnaW5JbmRleCA9IGNhbGxGcmFtZS0+bG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpOwotICAg
ICAgICAgICAgICAgICAgICBsb2coaW5kZW50LCAiY29kZU9yaWdpbkluZGV4OiAiLCBjb2RlT3Jp
Z2luSW5kZXgsICIgb2YgIiwgY29kZUJsb2NrLT5jb2RlT3JpZ2lucygpLnNpemUoKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxG
cmFtZS0+Y2FsbFNpdGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBsb2coaW5kZW50LCAi
Y2FsbFNpdGVJbmRleDogIiwgY2FsbFNpdGVJbmRleC5iaXRzKCksICIgb2YgIiwgY29kZUJsb2Nr
LT5jb2RlT3JpZ2lucygpLnNpemUoKSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlID0gY29kZUJsb2NrLT5qaXRUeXBlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChqaXRUeXBlICE9IEpJVENvZGU6OkZUTEpJVCkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTg4NzMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSQogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCksIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpOwogICAgIH0gLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAgICAgCi0g
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNC
eXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQsIGNh
bGxGcmFtZVJlZ2lzdGVyKSk7CiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAv
LyByZWdUMSwgcmVnVDAgaG9sZHMgY2FsbGVlLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgfSAvLyBTUCBob2xkcyBu
ZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3Vu
dCBpbml0aWFsaXplZC4KICAgICAKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IGluc3Ry
dWN0aW9uIC0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0gICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChieXRlY29kZU9mZnNldCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0
KSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAg
aG9sZHMgY2FsbGVlLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDE3ICs0MCwxOCBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdh
cmJhZ2VTdHViSW5mCiAgICAgcmV0dXJuIHN0dWJJbmZvOwogfQogCi1KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKK0pJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ewogICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5m
bygpIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW47CisgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogfQog
CiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVy
c01vZGUgc3BpbGxNb2RlKQotICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2Nr
LCBjb2RlT3JpZ2luKQorICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2NrLCBj
b2RlT3JpZ2luLCBjYWxsU2l0ZSkKICAgICAsIG1fYmFzZShiYXNlKQogICAgICwgbV92YWx1ZSh2
YWx1ZSkKIHsKQEAgLTExMSw5ICsxMTIsOSBAQCB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhdGhDCiB9CiAKIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0
b3IoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRCeUlkR2Vu
ZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUs
IHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9
CkBAIC0xMzYsMTAgKzEzNywxMCBAQCB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhCiB9CiAKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzY3JhdGNoLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLAogICAgIEVD
TUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9y
KGNvZGVCbG9jaywgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxs
TW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKICAgICAsIG1fc2Ny
YXRjaChzY3JhdGNoKQogICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAsIG1fcHV0S2lu
ZChwdXRLaW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQot
ICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4pOworICAg
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXgpOwogICAgIAogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KQEAgLTU2LDcgKzU2LDcgQEAgcHJvdGVjdGVk
OgogICAgIEpJVEJ5SWRHZW5lcmF0b3IoKSB7IH0KIAogICAgIEpJVEJ5SWRHZW5lcmF0b3IoCi0g
ICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCisgICAgICAgIENvZGVCbG9jayosIENvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCiAgICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1v
ZGUpOwogICAgIAogcHVibGljOgpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvcigKLSAgICAgICAg
Q29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IEpTVmFsdWVSZWdzIGJhc2UsCisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLAogICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSB7
IH0KIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIENvZGVP
cmlnaW4sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNl
LAorICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwKICAgICAgICAgSlNW
YWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBF
Q01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAko
cmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw5ICsxMzAsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjp1cGRhdGVUb3BDYWxsRnJhCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9ieXRl
Y29kZU9mZnNldCkgPj0gMCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIG1f
Ynl0ZWNvZGVPZmZzZXQgKyAxOyAKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJh
bWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJp
dHMoKTsKICNlbHNlCi0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlT2Zmc2V0ICsgMSk7CisgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0ICsg
MSkuYml0cygpOwogI2VuZGlmCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgaW50VGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4ODczMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3OCw3ICs1NzgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFs
T3B0CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkp
IHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAg
ICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAg
QVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgQVNTRVJU
KCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKQEAgLTYwMyw3ICs2MDMsNyBAQCBzdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgewogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwogICAg
ICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkp
OwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAg
ICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2Nr
KCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWQ7CkBAIC02NDcsNyArNjQ3LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlE
aXJlY3RQdXRCeQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBpZiAoc3Vic2NyaXB0
LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zm
c2V0KCkpOworICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkp
OwogICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogCiAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwpAQCAtNjcyLDcgKzY3
Miw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnkKICAgICAgICAg
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOwogCiAg
ICAgICAgIGlmICghc3Vic2NyaXB0LmlzU3RyaW5nKCkgfHwgIWluZGV4KSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAg
QVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgIEFT
U0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIERpcmVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwpAQCAtMTUyNSw3ICsx
NTI1LDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgICAg
ICBpZiAoSlNDZWxsOjpjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoc3RydWN0dXJlKSkgewogICAg
ICAgICAgICAgaWYgKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBleGlzdGluZ0F0b21pY1N0cmlu
ZyA9IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoZXhlYykpIHsK
ICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCkt
PmZhc3RHZXRPd25Qcm9wZXJ0eSh2bSwgc3RydWN0dXJlLCBleGlzdGluZ0F0b21pY1N0cmluZy5n
ZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRl
QXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+
c3R1YkluZm8gJiYgYnlWYWxJbmZvLT5jYWNoZWRJZC5pbXBsKCkgIT0gZXhpc3RpbmdBdG9taWNT
dHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTM1LDcgKzE1
MzUsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgfQog
CiAgICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5s
b2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChleGVjLT5jYWxsU2l0
ZUFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKIAogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC0x
NTY0LDcgKzE1NjQsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAotICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7Cisg
ICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICBpZiAoYnlW
YWxJbmZvLT5zdHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZh
bEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5KSkKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwogCkBAIC0xNTgxLDcgKzE1ODEsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9u
UmVzdWx0IHRyeUdldEJ5VmFsT3B0CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1
YnNjcmlwdC5pc0ludDMyKCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9m
ZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgp
KTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CkBAIC0x
NjA4LDcgKzE2MDgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0
CiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2Ny
aXB0KSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlw
dC50b1Byb3BlcnR5S2V5KGV4ZWMpOwogICAgICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygp
IHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVj
LT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+
Y2FsbFNpdGVBc0J5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbElu
Zm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsV2l0aENh
Y2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6T3B0aW1pemVkOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYQogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOwogICAgIGJvb2wgZGlkT3B0aW1pemUgPSBmYWxzZTsKIAotICAgIEFT
U0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGV4ZWMt
PmNhbGxTaXRlQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUpOwogICAgIAogICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+
c3RydWN0dXJlKHZtKSkpIHsKQEAgLTE3NDAsNyArMTc0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1
bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgaWYgKCFpc0pTU3RyaW5n
KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5
dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsU2l0ZUFz
Qnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQURE
UkVTUyksIEZ1bmN0aW9uUHRyKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRC
eVZhbEdlbmVyaWMgOiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTg4NzMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU2LDcgKzI1Niw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlW
YWxXaXQKICAgICBlbWl0SWRlbnRpZmllckNoZWNrKHJlZ1QyLCByZWdUNCwgcHJvcGVydHlOYW1l
LCBzbG93Q2FzZXMpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3Bl
Y2lhbFJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNl
dDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBEb250U3BpbGwpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIApAQCAtNDY4LDcgKzQ2OCw3IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMs
IHJlZ1QyKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxS
ZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnNw
ZWNpYWxSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVnVDEsIERvbnRTcGlsbCwgbV9jb2RlQmxv
Y2stPmVjbWFNb2RlKCksIHB1dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CkBAIC01NjEsNyArNTYxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleFdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgbV9ieXRl
Y29kZU9mZnNldCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVj
aWFsUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0
OjpzcGVjaWFsUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIERvbnRTcGlsbCk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CkBAIC02MDYsNyArNjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3Ry
dWN0aW9uKgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxs
U2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0
ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMiksCiAgICAgICAgIHJlZ1QxLCBEb250U3BpbGwsIG1fY29kZUJsb2Nr
LT5lY21hTW9kZSgpLCBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgSklUR2V0QnlJZEdl
bmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogICAgIGVtaXRJZGVudGlmaWVyQ2hlY2socmVn
VDEsIHJlZ1QzLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgRG9udFNwaWxsKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCks
IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZz
ZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIERvbnRTcGlsbCwgbV9jb2RlQmxv
Y2stPmVjbWFNb2RlKCksIHB1dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CkBAIC01NTYsNyArNTU2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleFdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgbV9ieXRl
Y29kZU9mZnNldCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVj
aWFsUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6
c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgRG9udFNwaWxsKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTYwMyw3ICs2MDMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIERvbnRTcGlsbCwgbV9j
b2RlQmxvY2stPmVjbWFNb2RlKCksCiAgICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVj
dCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDE4ODczMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxMSw3ICs0MTEsNyBAQCBzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRT
dHViKAogICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2Fs
bCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQogICAgICAgICAvLyBwbGFj
ZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFj
ZSB0aGF0IHdlIGFyZSBhdAogICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0dWJKaXQu
c3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdC
aXRzKCkpLAorICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSk7CiAKICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09
IENhbGxTZXR0ZXIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259782</attachid>
            <date>2015-08-24 14:54:45 -0700</date>
            <delta_ts>2015-08-25 12:07:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>60809</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MiBA
QAorMjAxNS0wOC0yNCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBMZXRzIHJlbmFtZSBjb2RlT3JpZ2luSW5kZXggdG8gY2FsbFNpdGVJbmRleCBhbmQgZ2V0IHJp
ZCBvZiBDYWxsRnJhbWU6OkxvY2F0aW9uLiBIYW5kbGVySW5mbyBzaG91bGQgYWxzbyB1c2UgYSBj
YWxsU2l0ZUluZGV4IGluc3RlYWQgb2YgYSBieXRlIGNvZGUgaW5kZXguCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgyMTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
YSBzdHJ1Y3QgY2FsbGVkIENhbGxTaXRlSW5kZXggd2hpY2ggaXMKKyAgICAgICAgdXNlZCBhcyBh
IHdyYXBwZXIgZm9yIGEgMzItYml0IGludCB0byBwbGFjZSB0aGluZ3MgaW4gdGhlIHRhZyBmb3Ig
QXJndW1lbnRDb3VudCAKKyAgICAgICAgaW4gdGhlIGNhbGwgZnJhbWUuIE9uIDMyLWJpdCB3ZSBw
bGFjZSBJbnN0cnVjdGlvbiogaW50byB0aGlzIHNsb3QgZm9yIExMSW50IGFuZCBCYXNsaW5lLgor
ICAgICAgICBGb3IgMzItYml0IERGRyB3ZSBwbGFjZSBhIGFuIGluZGV4IGludG8gdGhlIGNvZGUg
b3JpZ2luIHRhYmxlIGluIHRoaXMgc2xvdC4KKyAgICAgICAgT24gNjQtYml0IHdlIHBsYWNlIGEg
Ynl0ZWNvZGUgb2Zmc2V0IGludG8gdGhpcyBzbG90IGZvciBMTEludCBhbmQgQmFzZWxpbmUuCisg
ICAgICAgIE9uIDY0LWJpdCB3ZSBwbGFjZSB0aGUgaW5kZXggaW50byB0aGUgY29kZSBvcmlnaW4g
dGFibGUgaW4gdGhpcyBzbG90IGluIHRoZQorICAgICAgICBERkcvRlRMLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBnZXRzIHJpZCBvZiB0aGUgZW5jb2Rpbmcgc2NoZW1lIHRoYXQgZGVzY3Jp
YmVzIGlmIHNvbWV0aGluZyBpcyBhCisgICAgICAgIGJ5dGVjb2RlIGluZGV4IG9yIGEgY29kZSBv
cmlnaW4gdGFibGUgaW5kZXguIFRoaXMgaW5mb3JtYXRpb24gY2FuIGFsd2F5cworICAgICAgICBi
ZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBDb2RlQmxvY2sncycgSklUVHlwZS4KKworICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyBub3cgYWxzbyBoYXMgYSBDYWxsU2l0ZUluZGV4IHdoaWNoIGl0
IHN0b3JlcyB0bworICAgICAgICB0aGUgY2FsbCBmcmFtZSB3aGVuIG1ha2luZyBhIGNhbGwuCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpoYXNDb2RlT3JpZ2lucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuR2V0Q29kZU9y
aWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OlN0
cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6c2hyaW5rVG9GaXQpOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Q29tbW9u
RGF0YSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmFkZENhbGxTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZW1p
dFN0b3JlQ29kZU9yaWdpbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg6CisgICAgICAgIChKU0M6OkZUTDo6SW5s
aW5lQ2FjaGVEZXNjcmlwdG9yOjpJbmxpbmVDYWNoZURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpGVEw6OklubGluZUNhY2hlRGVzY3JpcHRvcjo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpJbmxpbmVDYWNoZURlc2NyaXB0b3I6OnVpZCk6CisgICAgICAgIChKU0M6OkZUTDo6
R2V0QnlJZERlc2NyaXB0b3I6OkdldEJ5SWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRM
OjpQdXRCeUlkRGVzY3JpcHRvcjo6UHV0QnlJZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpG
VEw6OkNoZWNrSW5EZXNjcmlwdG9yOjpDaGVja0luRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6
OkZUTDo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yOjpjb2RlT3JpZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9MTFZNOjpnZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpzdG9yZUNvZGVPcmlnaW4pOgorICAgICAgICAqIGludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y3VycmVudFZQQyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNv
ZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpzZXRMb2NhdGlvbkFzQnl0ZWNvZGVPZmZz
ZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlT2Zmc2V0RnJv
bUNvZGVPcmlnaW5JbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmg6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OkNhbGxTaXRlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpiaXRzKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRl
OjpyZXR1cm5QQ09mZnNldCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YWJzdHJhY3RSZXR1
cm5QQyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dG9wT2ZGcmFtZSk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6c2V0Q2FsbGVyRnJhbWUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6
OnNldFNjb3BlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjdXJyZW50VlBDKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRDdXJyZW50VlBDKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6Y2FsbFNpdGVBc1Jhd0JpdHMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OmNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6Omhhc0FjdGl2YXRpb24p
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRl
Y29kZUluc3RydWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNDb2RlT3JpZ2luSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWU6OkxvY2F0aW9uOjppc0J5dGVjb2RlTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWU6OkxvY2F0aW9uOjppc0NvZGVPcmlnaW5JbmRleCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6aGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpoYXNMb2NhdGlvbkFzQ29kZU9yaWdp
bkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsb2NhdGlvbkFzUmF3
Qml0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRpb25Bc1Jh
d0JpdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmxvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6c2V0TG9jYXRp
b25Bc0J5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjps
b2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRGcmFt
ZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6Cisg
ICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OnByaW50KToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAg
ICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2Fs
bCk6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Z2FyYmFnZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdl
bmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0
b3I6OmdlbmVyYXRlRmFzdFBhdGhDaGVja3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2Vu
ZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5l
cmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6c3R1YkluZm8pOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlk
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5R2V0QnlWYWxP
cHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgICogaml0L1Jl
cGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5SWRTdHViKToKKwogMjAxNS0wOC0y
NCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRzo6Rml4dXBQ
aGFzZSBzaG91bGQgdXNlIHRoZSBsYW1iZGEgZm9ybSBvZiBtX2dyYXBoLmRvVG9DaGlsZHJlbigp
IHJhdGhlciB0aGFuIHRoZSBvbGQgbWFjcm8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDE2ICs1
MDEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGppdFR5cGUoKSk7CiAgICAgfQogICAgICAgICAKLSAgICBib29sIGNhbkdldENvZGVPcmlnaW4o
dW5zaWduZWQgaW5kZXgpCisgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxTaXRlSW5kZXgg
aW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIWhhc0NvZGVPcmlnaW5zKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbmRleCA8IGNvZGVPcmlnaW5zKCkuc2l6
ZSgpOworICAgICAgICByZXR1cm4gaW5kZXguYml0cygpIDwgY29kZU9yaWdpbnMoKS5zaXplKCk7
CiAgICAgfQogCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKHVuc2lnbmVkIGluZGV4KQorICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNvZGVPcmlnaW5zKClbaW5kZXhdOworICAgICAgICByZXR1cm4gY29kZU9yaWdp
bnMoKVtpbmRleC5iaXRzKCldOwogICAgIH0KIAogICAgIGJvb2wgYWRkRnJlcXVlbnRFeGl0U2l0
ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24g
MTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAgc3RydWN0IFN0cnVjdHVyZVN0
dWJJbmZvIHsKICAgICAgICAgLCBzZWVuKGZhbHNlKQogICAgICAgICAsIHJlc2V0QnlHQyhmYWxz
ZSkKICAgICAgICAgLCB0b29rU2xvd1BhdGgoZmFsc2UpCisgICAgICAgICwgY2FsbFNpdGVJbmRl
eChVSU5UX01BWCkKICAgICB7CiAgICAgfQogCkBAIC0xODksNiArMTkwLDcgQEAgc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKICAgICBib29sIHRvb2tTbG93UGF0aCA6IDE7CiAKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OwogCiAg
ICAgc3RydWN0IHsKICAgICAgICAgdW5zaWduZWQgc3BpbGxNb2RlIDogODsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg4ODg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBAIHZvaWQgQ29tbW9uRGF0YTo6bm90aWZ5Q29tcGls
aW5nU3RydWN0dXIKICAgICAgICAgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKIH0KIAotdW5z
aWduZWQgQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCitD
YWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQogewogICAgIGlmIChjb2RlT3JpZ2lucy5pc0VtcHR5KCkKICAgICAgICAgfHwgY29kZU9y
aWdpbnMubGFzdCgpICE9IGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChj
b2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7
CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1
cm4gaW5kZXg7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoaW5kZXgpOwogfQogCiB2b2lkIENv
bW1vbkRhdGE6OnNocmlua1RvRml0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBw
dWJsaWM6CiAgICAgeyB9CiAgICAgCiAgICAgdm9pZCBub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVU
cmFuc2l0aW9uKFBsYW4mLCBDb2RlQmxvY2sqLCBOb2RlKik7Ci0gICAgdW5zaWduZWQgYWRkQ29k
ZU9yaWdpbihDb2RlT3JpZ2luKTsKKyAgICBDYWxsU2l0ZUluZGV4IGFkZENvZGVPcmlnaW4oQ29k
ZU9yaWdpbik7CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTg4ODg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsMTEgKzE1MCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRFbmRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwogICAgIH0KICAg
ICAKKyAgICBDYWxsU2l0ZUluZGV4IGFkZENhbGxTaXRlKENvZGVPcmlnaW4gY29kZU9yaWdpbikK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pOworICAgIH0KKwogICAgIHZvaWQgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG1faml0Q29k
ZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7Ci0gICAgICAgIHVuc2lnbmVkIGxv
Y2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQ29kZU9yaWdpbkluZGV4
KGluZGV4KTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFn
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
KTsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IGFkZENhbGxTaXRlKGNvZGVPcmln
aW4pOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZS5iaXRzKCkpLCB0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkp
OwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQg
YW4gZXhjZXB0aW9uIGNoZWNrLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTg4ODg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTQgKzIwMSwxNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlNjQoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9m
ZnNldCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9j
YXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25z
dGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlciko
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKICNlbHNl
IC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAg
IGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
Qnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmJlZ2luKCkgKyBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVJ
bnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCkKQEAgLTIxNywxMCArMjE3LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMKICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVP
ZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkuYml0cygpOwogI2Vs
c2UKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5
dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICNlbmRpZgogICAgIGppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKAog
ICAgIH0KICAgICAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIG1faml0LmFkZENhbGxTaXRlKGNvZGVPcmlnaW4pLCB1
c2VkUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VUYWdHUFJPck5vbmUsIGJh
c2VQYXlsb2FkR1BSKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSKSwgc3BpbGxNb2RlKTsKICAgICAKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
UHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BS
UmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKIHsK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCks
IGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCks
IGNvZGVPcmlnaW4sIG1faml0LmFkZENhbGxTaXRlKGNvZGVPcmlnaW4pLCB1c2VkUmVnaXN0ZXJz
KCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlUGF5bG9hZEdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLAogICAgICAgICBzY3JhdGNo
R1BSLCBzcGlsbE1vZGUsIG1faml0LmVjbWFNb2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1
NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcg
YmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1v
ZGUpCiB7CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVC
bG9jaygpLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgbV9qaXQuYWRkQ2FsbFNp
dGUoY29kZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCiAg
ICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNwaWxsTW9kZSk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgobV9qaXQpOwogICAgIApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hl
ZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZh
bHVlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0
S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdp
c3RlcnNNb2RlIHNwaWxsTW9kZSkKIHsKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMoKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2lu
LCBtX2ppdC5hZGRDYWxsU2l0ZShjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycygpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwKICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BS
LCBzcGlsbE1vZGUsIG1faml0LmVjbWFNb2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsKIAog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTY0LDYgKzk2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bihOb2RlKiBub2QKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVz
dWx0R1BSKSwgc3R1YkluZm8sIGJhc2VHUFIsCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCo+KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpKTsKICAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBtX2ppdC5h
ZGRDYWxsU2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICAgICAgc3R1YkluZm8t
PmNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgICAgICBzdHViSW5m
by0+cGF0Y2guYmFzZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUik7CiAgICAgICAg
ICAgICBzdHViSW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHJlc3Vs
dEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJl
dmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Niw2ICs0NTYsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IHN0YXRlLmppdENvZGUtPmNvbW1vbi5jb2RlT3JpZ2luc1tnZXRCeUlkLmNhbGxTaXRlSW5kZXgo
KS5iaXRzKCldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZh
bHVlLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJl
Y29yZCA9IGl0ZXItPnZhbHVlW2ldOwogICAgICAgICAgICAgCkBAIC00NjUsMTMgKzQ2NiwxMyBA
QCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAg
ICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGdldEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LCBjb2RlT3JpZ2luLCBnZXRCeUlkLmNhbGxTaXRlSW5kZXgoKSwgdXNlZFJlZ2lzdGVycywgSlNW
YWx1ZVJlZ3MoYmFzZSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdCks
IE5lZWRUb1NwaWxsKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwogCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAg
ICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgZ2V0QnlJZC5j
b2RlT3JpZ2luKCksICZleGNlcHRpb25UYXJnZXQsCisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdl
dCwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHQs
IGdlbi5zdHViSW5mbygpLCBiYXNlLCBnZXRCeUlkLnVpZCgpKTsKIAogICAgICAgICAgICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwpOwpAQCAtNDkzLDYgKzQ5NCw3IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmNvZGVPcmlnaW5zW3B1
dEJ5SWQuY2FsbFNpdGVJbmRleCgpLmJpdHMoKV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBT
dGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CiAgICAgICAgICAgICAg
ICAgCkBAIC01MDIsMTQgKzUwNCwxNCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25T
dGFja01hcHMoCiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVjb3JkLmxvY2F0aW9u
c1sxXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBKSVRQ
dXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBwdXRC
eUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCisgICAg
ICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwgcHV0QnlJZC5jYWxsU2l0ZUlu
ZGV4KCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAogICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncyh2YWx1ZSksIEdQUkluZm86OnBhdGNocG9pbnRTY3JhdGNoUmVnaXN0
ZXIsIE5lZWRUb1NwaWxsLAogICAgICAgICAgICAgICAgICAgICBwdXRCeUlkLmVjbWFNb2RlKCks
IHB1dEJ5SWQucHV0S2luZCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywg
c2xvd1BhdGhKSVQsIHB1dEJ5SWQuY29kZU9yaWdpbigpLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAg
ICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVP
cmlnaW4sICZleGNlcHRpb25UYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgIGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCB2YWx1ZSwgYmFzZSwgcHV0QnlJZC51aWQoKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChiZWdpbiwgY2FsbCk7CkBAIC01MzEsMTMgKzUzMywxNSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IHN0YXRlLmppdENvZGUtPmNvbW1vbi5jb2RlT3JpZ2luc1tjaGVja0luLmNhbGxTaXRlSW5kZXgo
KS5iaXRzKCldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZh
bHVlLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJl
Y29yZCA9IGl0ZXItPnZhbHVlW2ldOwogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRS
ZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7CiAgICAgICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAg
ICAgICAgR1BSUmVnIG9iaiA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRT
dHViSW5mbygpOyAKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNoZWNr
SW4uY29kZU9yaWdpbigpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0g
Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNo
ZWNrSW4uY2FsbFNpdGVJbmRleCgpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5i
YXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihvYmopOwogICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVzdWx0KTsKICAgICAg
ICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7
CkBAIC01NDYsNyArNTUwLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQ
YXRoSklULmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBz
bG93Q2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2Vk
UmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgY2hlY2tJbi5jb2RlT3JpZ2luKCksICZleGNlcHRpb25U
YXJnZXQsCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0
aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uSW5PcHRpbWl6ZSwgcmVzdWx0LCBzdHViSW5mbywgb2JqLCBjaGVja0luLm1fdWlk
KTsKIAogICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQ
YXRoSklULmp1bXAoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGlu
ZUNhY2hlRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDIyICszNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIGNsYXNzIElubGluZUNhY2hlRGVzY3JpcHRvciB7CiBwdWJsaWM6Ci0gICAgSW5saW5lQ2Fj
aGVEZXNjcmlwdG9yKCkgeyB9CisgICAgSW5saW5lQ2FjaGVEZXNjcmlwdG9yKCkgCisgICAgICAg
IDogbV9jYWxsU2l0ZUluZGV4KFVJTlRfTUFYKSAKKyAgICB7IH0KICAgICAKLSAgICBJbmxpbmVD
YWNoZURlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIElubGluZUNhY2hlRGVzY3JpcHRvcih1bnNp
Z25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQogICAgICAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQotICAgICAgICAsIG1f
Y29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIG1fY2FsbFNpdGVJbmRleChjYWxsU2l0
ZSkKICAgICAgICAgLCBtX3VpZCh1aWQpCiAgICAgewogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9Ci0gICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlT3JpZ2luOyB9CisgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsU2l0ZUluZGV4
OyB9CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9
CiAgICAgCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKLSAgICBDb2RlT3Jp
Z2luIG1fY29kZU9yaWdpbjsKKyAgICBDYWxsU2l0ZUluZGV4IG1fY2FsbFNpdGVJbmRleDsKICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CiAgICAgCiBwdWJsaWM6CkBAIC02Myw4ICs2NSw4
IEBAIGNsYXNzIEdldEJ5SWREZXNjcmlwdG9yIDogcHVibGljIElubGluZUMKIHB1YmxpYzoKICAg
ICBHZXRCeUlkRGVzY3JpcHRvcigpIHsgfQogICAgIAotICAgIEdldEJ5SWREZXNjcmlwdG9yKHVu
c2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLSAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY29k
ZU9yaWdpbiwgdWlkKQorICAgIEdldEJ5SWREZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQs
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAg
IDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCB1aWQpCiAgICAg
ewogICAgIH0KICAgICAKQEAgLTc2LDkgKzc4LDkgQEAgcHVibGljOgogICAgIFB1dEJ5SWREZXNj
cmlwdG9yKCkgeyB9CiAgICAgCiAgICAgUHV0QnlJZERlc2NyaXB0b3IoCi0gICAgICAgIHVuc2ln
bmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1
dEtpbmQgcHV0S2luZCkKLSAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJ
RCwgY29kZU9yaWdpbiwgdWlkKQorICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRvcihzdGFj
a21hcElELCBjYWxsU2l0ZSwgdWlkKQogICAgICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAg
ICAgICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCiAgICAgewpAQCAtMTExLDggKzExMyw4IEBAIGNs
YXNzIENoZWNrSW5EZXNjcmlwdG9yIDogcHVibGljIElubGluZUMKIHB1YmxpYzoKICAgICBDaGVj
a0luRGVzY3JpcHRvcigpIHsgfQogICAgIAotICAgIENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVk
IHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLSAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY29k
ZU9yaWdpbiwgbnVsbHB0cikKKyAgICBDaGVja0luRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21h
cElELCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQorICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwg
bnVsbHB0cikKICAgICAgICAgLCBtX3VpZCh1aWQpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcg
KzE1Myw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGppdC5lbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwogICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNv
ZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKENhbGxTaXRlSW5kZXgoMCkuYml0cygpKSwKICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyMCw3ICsyMjIwLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2Fs
bENvbnYpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5wdXRCeUlkcy5hcHBlbmQoUHV0
QnlJZERlc2NyaXB0b3IoCi0gICAgICAgICAgICBzdGFja21hcElELCBtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgdWlkLAorICAgICAgICAgICAgc3RhY2ttYXBJRCwgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5jb21tb24uYWRkQ29kZU9yaWdpbihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHVpZCwKICAg
ICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmVjbWFNb2RlKCksCiAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCA/
IERpcmVjdCA6IE5vdERpcmVjdCkpOwogICAgIH0KQEAgLTQ5NTcsNyArNDk1Nyw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNh
bGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAKLSAgICAgICAgICAgICAgICBtX2Z0bFN0YXRlLmNo
ZWNrSW5zLmFwcGVuZChDaGVja0luRGVzY3JpcHRvcihzdGFja21hcElELCBtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYywgc3RyKSk7CisgICAgICAgICAgICAgICAgbV9mdGxTdGF0ZS5jaGVja0lucy5h
cHBlbmQoQ2hlY2tJbkRlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5j
b21tb24uYWRkQ29kZU9yaWdpbihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHN0cikpOwogICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtNTgwMCw3ICs1ODAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7CiAgICAg
ICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxD
b252KTsKICAgICAgICAgCi0gICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5
SWREZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCB1aWQpKTsK
KyAgICAgICAgbV9mdGxTdGF0ZS5nZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERlc2NyaXB0b3Ioc3Rh
Y2ttYXBJRCwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksIHVpZCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNhbGw7
CiAgICAgfQpAQCAtODA1Niw4ICs4MDU2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1f
b3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKAotICAgICAgICAgICAg
ICAgIENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQ29kZU9yaWdpbkluZGV4KAotICAgICAg
ICAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pKSksCisgICAgICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24u
YWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKS5iaXRzKCkpLAogICAgICAgICAgICAgdGFnRm9yKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICB9CiAgICAgdm9pZCBjYWxsUHJlZmxpZ2h0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJ
KHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDggKzE2Niw4IEBAIHZvaWQgc3RvcmVD
b2RlT3JpZ2luKFN0YXRlJiBzdGF0ZSwgQ0NhbGwKICAgICBpZiAoIWNvZGVPcmlnaW4uaXNTZXQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGUuaml0
Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7Ci0gICAgdW5zaWduZWQgbG9j
YXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNDb2RlT3JpZ2luSW5kZXgo
aW5kZXgpOworICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBzdGF0ZS5qaXRDb2RlLT5jb21t
b24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKKyAgICB1bnNpZ25lZCBsb2NhdGlvbkJpdHMg
PSBjYWxsU2l0ZS5iaXRzKCk7CiAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksCiAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNjMgKzQ2LDcxIEBAIEpT
U3RhY2sqIENhbGxGcmFtZTo6c3RhY2soKQogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotdW5zaWduZWQgQ2FsbEZyYW1lOjpsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAor
SW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jaygpKTsKLSAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkp
OwotICAgIHJldHVybiBjdXJyZW50VlBDKCkgLSBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCku
YmVnaW4oKTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4oY2FsbFNpdGVJ
bmRleCgpLmJpdHMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKEluc3Ry
dWN0aW9uKiB2cGMpCit7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSh2cGMpOworICAgIHRo
aXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0udGFnKCkgPSBjYWxsU2l0ZS5iaXRzKCk7CiB9CiAK
LXZvaWQgQ2FsbEZyYW1lOjpzZXRMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgb2Zm
c2V0KQordW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHNldEN1cnJlbnRWUEMoY29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBvZmZzZXQpOwotICAgIEFTU0VSVCho
YXNMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxTaXRlQml0c0Fy
ZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIHJldHVybiBjdXJyZW50VlBDKCkgLSBjb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsgICAgIAogfQotI2Vsc2UKKworI2Vsc2UgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25z
dAogewotICAgIHJldHVybiBjb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGxv
Y2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRl
Y29kZU9mZnNldCgpKTsKKyAgICByZXR1cm4gY29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCk7CiB9CisKIHZvaWQgQ2FsbEZy
YW1lOjpzZXRDdXJyZW50VlBDKEluc3RydWN0aW9uKiB2cGMpCiB7Ci0gICAgc2V0TG9jYXRpb25B
c0J5dGVjb2RlT2Zmc2V0KHZwYyAtIGNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
KTsKKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKHZwYyAtIGNvZGVCbG9jaygpLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpKTsKKyAgICB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnRhZygp
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0cygpKTsKIH0KLSNlbmRpZgotICAg
IAotI2lmIEVOQUJMRShERkdfSklUKQotdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRlY29kZU9mZnNl
dEZyb21Db2RlT3JpZ2luSW5kZXgoKQotewotICAgIEFTU0VSVChoYXNMb2NhdGlvbkFzQ29kZU9y
aWdpbkluZGV4KCkpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2Nr
KCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47
Ci0gICAgdW5zaWduZWQgaW5kZXggPSBsb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7Ci0gICAg
QVNTRVJUKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRleCkpOwotICAgIGNvZGVPcmln
aW4gPSBjb2RlQmxvY2stPmNvZGVPcmlnaW4oaW5kZXgpOwotCi0gICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxp
bmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrKCkgPT0gY29kZUJsb2NrKQotICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleDsKIAotICAgICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXI7Ci0gICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OwotICAgIH0KLSAgICByZXR1cm4gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwordW5zaWduZWQg
Q2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoY29kZUJsb2NrKCkpOworICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9m
ZnNldCgpKTsKKyAgICByZXR1cm4gY2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKIH0KIAotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotCisjZW5kaWYKKyAgICAKIHVuc2lnbmVkIENhbGxGcmFtZTo6
Ynl0ZWNvZGVPZmZzZXQoKQogewogICAgIGlmICghY29kZUJsb2NrKCkpCiAgICAgICAgIHJldHVy
biAwOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChoYXNMb2NhdGlvbkFzQ29kZU9yaWdp
bkluZGV4KCkpCi0gICAgICAgIHJldHVybiBieXRlY29kZU9mZnNldEZyb21Db2RlT3JpZ2luSW5k
ZXgoKTsKKyAgICBpZiAoY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CisKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9IGNhbGxTaXRl
SW5kZXgoKTsKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRl
eCkpOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlQmxvY2stPmNvZGVPcmln
aW4oaW5kZXgpOworCisgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOykgeworICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKSA9PSBjb2Rl
QmxvY2spCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsK
KworICAgICAgICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKKyAgICB9
CiAjZW5kaWYKLSAgICByZXR1cm4gbG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgQVNT
RVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIHJldHVybiBjYWxsU2l0
ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2Rl
T3JpZ2luKCkKQEAgLTExMCwxMyArMTE4LDEzIEBAIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2Rl
T3JpZ2luKCkKICAgICBpZiAoIWNvZGVCbG9jaygpKQogICAgICAgICByZXR1cm4gQ29kZU9yaWdp
bigwKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoaGFzTG9jYXRpb25Bc0NvZGVPcmln
aW5JbmRleCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbG9jYXRpb25Bc0NvZGVPcmln
aW5JbmRleCgpOworICAgIGlmIChjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSkgewor
ICAgICAgICBDYWxsU2l0ZUluZGV4IGluZGV4ID0gY2FsbFNpdGVJbmRleCgpOwogICAgICAgICBB
U1NFUlQoY29kZUJsb2NrKCktPmNhbkdldENvZGVPcmlnaW4oaW5kZXgpKTsKICAgICAgICAgcmV0
dXJuIGNvZGVCbG9jaygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICBy
ZXR1cm4gQ29kZU9yaWdpbihsb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgcmV0dXJu
IENvZGVPcmlnaW4oY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKIH0KIAogUmVnaXN0
ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4ODg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsMjEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIEludGVy
cHJldGVyOwogICAgIGNsYXNzIEpTU2NvcGU7CiAKKyAgICBzdHJ1Y3QgQ2FsbFNpdGVJbmRleCB7
CisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKKyAgICAgICAg
ICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIHsgfQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQor
ICAgICAgICAgICAgOiBtX2JpdHMoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikp
CisgICAgICAgIHsgfQorI2VuZGlmCisgICAgICAgIGlubGluZSB1aW50MzJfdCBiaXRzKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1aW50MzJfdCBt
X2JpdHM7CisgICAgfTsKKwogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2Yg
c2NyaXB0IGV4ZWN1dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRv
IG1vc3QgZnVuY3Rpb25zLgogICAgIGNsYXNzIEV4ZWNTdGF0ZSA6IHByaXZhdGUgUmVnaXN0ZXIg
ewpAQCAtMTA3LDUxICsxMjIsMTUgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxl
ckZyYW1lQW5kUEMsIHBjKTsgfQogICAgICAgICBBYnN0cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMo
Vk0mIHZtKSB7IHJldHVybiBBYnN0cmFjdFBDKHZtLCB0aGlzKTsgfQogCi0gICAgICAgIGNsYXNz
IExvY2F0aW9uIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgc3RhdGljIGlubGluZSB1
aW50MzJfdCBkZWNvZGUodWludDMyX3QgYml0cyk7Ci0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0J5dGVjb2RlTG9jYXRpb24odWludDMyX3QgYml0cyk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZW5jb2RlQXNCeXRlY29k
ZU9mZnNldCh1aW50MzJfdCBiaXRzKTsKLSNlbHNlCi0gICAgICAgICAgICBzdGF0aWMgaW5saW5l
IHVpbnQzMl90IGVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihJbnN0cnVjdGlvbiopOwotI2Vu
ZGlmCi0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvZGVPcmlnaW5JbmRleCh1
aW50MzJfdCBiaXRzKTsKLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZW5jb2Rl
QXNDb2RlT3JpZ2luSW5kZXgodWludDMyX3QgYml0cyk7Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAg
ICAgICAgICAgIGVudW0gVHlwZVRhZyB7Ci0gICAgICAgICAgICAgICAgQnl0ZWNvZGVMb2NhdGlv
blRhZyA9IDAsCi0gICAgICAgICAgICAgICAgQ29kZU9yaWdpbkluZGV4VGFnID0gMSwKLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZW5jb2RlKFR5
cGVUYWcsIHVpbnQzMl90IGJpdHMpOwotCi0gICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc19tYXNrID0gMHgxOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdGF0aWMg
Y29uc3QgdWludDMyX3Qgc19zaGlmdCA9IDMxOwotICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHNfc2hpZnRlZE1hc2sgPSBzX21hc2sgPDwgc19zaGlmdDsKLSNlbHNlCi0gICAgICAg
ICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19zaGlmdCA9IDE7Ci0jZW5kaWYKLSAgICAgICAg
fTsKLQotICAgICAgICBib29sIGhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0Owot
ICAgICAgICBib29sIGhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSBjb25zdDsKKyAgICAg
ICAgYm9vbCBjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpIGNvbnN0OworICAgICAgICBi
b29sIGNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNvbnN0OwogCi0gICAgICAgIHVu
c2lnbmVkIGxvY2F0aW9uQXNSYXdCaXRzKCkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2F0
aW9uQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBsb2NhdGlvbkFz
Q29kZU9yaWdpbkluZGV4KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXRMb2NhdGlvbkFzUmF3
Qml0cyh1bnNpZ25lZCk7Ci0gICAgICAgIHZvaWQgc2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0
KHVuc2lnbmVkKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdDsK
KyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29uc3Q7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgdW5zaWduZWQgY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0
OworICAgIHB1YmxpYzoKIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldEZyb21Db2RlT3JpZ2luSW5kZXgoKTsKLSNlbmRpZgotICAgICAgICAKICAg
ICAgICAgLy8gVGhpcyB3aWxsIHRyeSB0byBnZXQgeW91IHRoZSBieXRlY29kZSBvZmZzZXQsIGJ1
dCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQKICAgICAgICAgLy8gdGhpcyBieXRlY29kZSBvZmZz
ZXQgbWF5IGJlIGJvZ3VzIGluIHRoZSBwcmVzZW5jZSBvZiBpbmxpbmluZy4gVGhpcyB3aWxsCiAg
ICAgICAgIC8vIGFsc28gcmV0dXJuIDAgaWYgdGhlIGNhbGwgZnJhbWUgaGFzIG5vIG5vdGlvbiBv
ZiBieXRlY29kZSBvZmZzZXRzIChmb3IKQEAgLTE3MCwxOSArMTQ5LDggQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICAgICAgcmV0dXJuIHRvcE9mRnJhbWVJbnRlcm5hbCgpOwogICAgICAgICB9
CiAgICAgCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRWUEMoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEluc3RydWN0aW9uKj4odGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdm9pZCBzZXRDdXJyZW50VlBDKEluc3RydWN0aW9uKiB2cGMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRoaXNbSlNTdGFjazo6QXJndW1lbnRDb3VudF0udGFnKCkgPSBi
aXR3aXNlX2Nhc3Q8aW50MzJfdD4odnBjKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRWUEMoKSBjb25zdDsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRWUEMoKSBjb25zdDsgLy8gVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGluIHRoZSBMTEludCBhbmQg
YmFzZWxpbmUuCiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFZQQyhJbnN0cnVjdGlvbiogdnBjKTsK
LSNlbmRpZgogCiAgICAgICAgIHZvaWQgc2V0Q2FsbGVyRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSkg
eyBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWUgPSBmcmFtZTsgfQogICAgICAgICB2b2lk
IHNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29wZSkgeyBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3Njb3BlUmVnaXN0ZXJPZmZzZXRdID0gc2NvcGU7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZUlubGluZXMuaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEy
ICszMSw1MiBAQAogCiBuYW1lc3BhY2UgSlNDICB7CiAKLWlubGluZSB1aW50MzJfdCBDYWxsRnJh
bWU6OkxvY2F0aW9uOjplbmNvZGUoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6VHlwZVRhZyB0YWcsIHVp
bnQzMl90IGJpdHMpCitpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUJ5dGVj
b2RlT2Zmc2V0KCkgY29uc3QKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEFTU0VSVCghKGJp
dHMgJiBzX3NoaWZ0ZWRNYXNrKSk7Ci0gICAgQVNTRVJUKCEodGFnICYgfnNfbWFzaykpOwotICAg
IHJldHVybiBiaXRzIHwgKHRhZyA8PCBzX3NoaWZ0KTsKLSNlbHNlCi0gICAgQVNTRVJUKCEodGFn
ICYgfnNfbWFzaykpOwotICAgIGlmICh0YWcgJiBDb2RlT3JpZ2luSW5kZXhUYWcpCi0gICAgICAg
IGJpdHMgPSAoYml0cyA8PCBzX3NoaWZ0KTsKLSAgICBBU1NFUlQoIShiaXRzICYgc19tYXNrKSk7
Ci0gICAgYml0cyB8PSB0YWc7Ci0gICAgcmV0dXJuIGJpdHM7Ci0jZW5kaWYKLX0KLQotaW5saW5l
IHVpbnQzMl90IENhbGxGcmFtZTo6TG9jYXRpb246OmRlY29kZSh1aW50MzJfdCBiaXRzKQotewot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJpdHMgJiB+c19zaGlmdGVkTWFzazsKLSNl
bHNlCi0gICAgaWYgKGlzQ29kZU9yaWdpbkluZGV4KGJpdHMpKQotICAgICAgICByZXR1cm4gYml0
cyA+PiBzX3NoaWZ0OwotICAgIHJldHVybiBiaXRzICYgfnNfbWFzazsKLSNlbmRpZgotfQotCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB1aW50MzJfdCBDYWxsRnJhbWU6OkxvY2F0aW9uOjpl
bmNvZGVBc0J5dGVjb2RlT2Zmc2V0KHVpbnQzMl90IGJpdHMpCi17Ci0gICAgdWludDMyX3QgZW5j
b2RlZEJpdHMgPSBlbmNvZGUoQnl0ZWNvZGVMb2NhdGlvblRhZywgYml0cyk7Ci0gICAgQVNTRVJU
KGlzQnl0ZWNvZGVMb2NhdGlvbihlbmNvZGVkQml0cykpOwotICAgIHJldHVybiBlbmNvZGVkQml0
czsKLX0KLSNlbHNlCi1pbmxpbmUgdWludDMyX3QgQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2Rl
QXNCeXRlY29kZUluc3RydWN0aW9uKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAgICB1
aW50MzJfdCBlbmNvZGVkQml0cyA9IGVuY29kZShCeXRlY29kZUxvY2F0aW9uVGFnLCByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpOwotICAgIEFTU0VSVChpc0J5dGVjb2Rl
TG9jYXRpb24oZW5jb2RlZEJpdHMpKTsKLSAgICByZXR1cm4gZW5jb2RlZEJpdHM7Ci19Ci0jZW5k
aWYKLQotaW5saW5lIHVpbnQzMl90IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQ29kZU9y
aWdpbkluZGV4KHVpbnQzMl90IGJpdHMpCi17Ci0gICAgdWludDMyX3QgZW5jb2RlZEJpdHMgPSBl
bmNvZGUoQ29kZU9yaWdpbkluZGV4VGFnLCBiaXRzKTsKLSAgICBBU1NFUlQoaXNDb2RlT3JpZ2lu
SW5kZXgoZW5jb2RlZEJpdHMpKTsKLSAgICByZXR1cm4gZW5jb2RlZEJpdHM7Ci19Ci0KLWlubGlu
ZSBib29sIENhbGxGcmFtZTo6TG9jYXRpb246OmlzQnl0ZWNvZGVMb2NhdGlvbih1aW50MzJfdCBi
aXRzKQotewotICAgIHJldHVybiAhaXNDb2RlT3JpZ2luSW5kZXgoYml0cyk7Ci19CisgICAgQVNT
RVJUKGNvZGVCbG9jaygpKTsKKyAgICBzd2l0Y2ggKGNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsK
KyAgICBjYXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1bms6CisgICAgY2FzZSBKSVRDb2RlOjpC
YXNlbGluZUpJVDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBKSVRDb2RlOjpOb25l
OgorICAgIGNhc2UgSklUQ29kZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLWlubGluZSBib29sIENhbGxGcmFtZTo6TG9j
YXRpb246OmlzQ29kZU9yaWdpbkluZGV4KHVpbnQzMl90IGJpdHMpCi17Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBUeXBlVGFnIHRhZyA9IHN0YXRpY19jYXN0PFR5cGVUYWc+KGJpdHMgPj4gc19z
aGlmdCk7Ci0gICAgcmV0dXJuICEhKHRhZyAmIENvZGVPcmlnaW5JbmRleFRhZyk7Ci0jZWxzZQot
ICAgIHJldHVybiAhIShiaXRzICYgQ29kZU9yaWdpbkluZGV4VGFnKTsKLSNlbmRpZgorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxp
bmUgYm9vbCBDYWxsRnJhbWU6Omhhc0xvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0Citp
bmxpbmUgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIExvY2F0aW9uOjppc0J5dGVjb2RlTG9jYXRpb24obG9jYXRpb25B
c1Jhd0JpdHMoKSk7Ci19CisgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKKyAgICBzd2l0Y2ggKGNv
ZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKKyAgICBj
YXNlIEpJVENvZGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBKSVRD
b2RlOjpOb25lOgorICAgIGNhc2UgSklUQ29kZTo6SG9zdENhbGxUaHVuazoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLWlubGluZSBib29sIENhbGxG
cmFtZTo6aGFzTG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IExvY2F0aW9uOjppc0NvZGVPcmlnaW5JbmRleChsb2NhdGlvbkFzUmF3Qml0cygpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5s
aW5lIHVuc2lnbmVkIENhbGxGcmFtZTo6bG9jYXRpb25Bc1Jhd0JpdHMoKSBjb25zdAoraW5saW5l
IHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewogICAgIHJl
dHVybiB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnRhZygpOwogfQogCi1pbmxpbmUgdm9p
ZCBDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNSYXdCaXRzKHVuc2lnbmVkIGJpdHMpCi17Ci0gICAg
dGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KGJpdHMpOwotfQotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB1bnNpZ25lZCBDYWxsRnJh
bWU6OmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc0xv
Y2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAg
IHJldHVybiBMb2NhdGlvbjo6ZGVjb2RlKGxvY2F0aW9uQXNSYXdCaXRzKCkpOwotfQotCi1pbmxp
bmUgdm9pZCBDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBv
ZmZzZXQpCi17Ci0gICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKLSAgICBzZXRMb2NhdGlvbkFzUmF3
Qml0cyhMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChvZmZzZXQpKTsKLSAgICBBU1NF
UlQoaGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwotfQotI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpCi0KLWlubGluZSB1bnNpZ25lZCBDYWxsRnJhbWU6OmxvY2F0aW9uQXNDb2RlT3JpZ2lu
SW5kZXgoKSBjb25zdAoraW5saW5lIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUlu
ZGV4KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzTG9jYXRpb25Bc0NvZGVPcmlnaW5JbmRleCgp
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwotICAgIHJldHVybiBMb2NhdGlvbjo6ZGVjb2Rl
KGxvY2F0aW9uQXNSYXdCaXRzKCkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGNhbGxTaXRl
QXNSYXdCaXRzKCkpOwogfQogCiBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6Omhhc0FjdGl2YXRpb24o
KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3
ICs5NSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkRnJhbWUoQ2FsbEZyYW1lKiAKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gY2FsbEZyYW1lLT5sb2Nh
dGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7CisgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9IGNhbGxG
cmFtZS0+Y2FsbFNpdGVJbmRleCgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmNhbkdldENvZGVP
cmlnaW4oaW5kZXgpKTsKICAgICBpZiAoIWNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihpbmRl
eCkpIHsKICAgICAgICAgLy8gU2VlIGFzc2VydGlvbiBhYm92ZS4gSW4gcmVsZWFzZSBidWlsZHMs
IHdlIHRyeSB0byBwcm90ZWN0IG91cnNlbHZlcwpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgU3Rh
Y2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKEMKICAgICBtX2ZyYW1lLm1fY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQg
PSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IDAKICAgICAgICAgOiBjb2RlT3JpZ2luID8gY29kZU9y
aWdpbi0+Ynl0ZWNvZGVJbmRleAotICAgICAgICA6IGNhbGxGcmFtZS0+bG9jYXRpb25Bc0J5dGVj
b2RlT2Zmc2V0KCk7CisgICAgICAgIDogY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpOwogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSAwOwogI2Vu
ZGlmCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpwcmludChp
bnQgaW5kZQogICAgICAgICBsb2dGKGluZGVudCwgImNhbGxlZTogJXBcbiIsIGNhbGxlZSgpKTsK
ICAgICAgICAgbG9nRihpbmRlbnQsICJyZXR1cm5QQzogJXBcbiIsIHJldHVyblBDKTsKICAgICAg
ICAgbG9nRihpbmRlbnQsICJjYWxsZXJGcmFtZTogJXBcbiIsIGNhbGxlckZyYW1lKTsKLSAgICAg
ICAgdW5zaWduZWQgbG9jYXRpb25SYXdCaXRzID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzUmF3Qml0
cygpOworICAgICAgICB1bnNpZ25lZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxsRnJhbWUtPmNhbGxT
aXRlQXNSYXdCaXRzKCk7CiAgICAgICAgIGxvZ0YoaW5kZW50LCAicmF3TG9jYXRpb25CaXRzOiAl
dSAweCV4XG4iLCBsb2NhdGlvblJhd0JpdHMsIGxvY2F0aW9uUmF3Qml0cyk7CiAgICAgICAgIGxv
Z0YoaW5kZW50LCAiY29kZUJsb2NrOiAlcCAiLCBjb2RlQmxvY2spOwogICAgICAgICBpZiAoY29k
ZUJsb2NrKQpAQCAtMzg1LDE1ICszODUsMTUgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpw
cmludChpbnQgaW5kZQogICAgICAgICBpZiAoY29kZUJsb2NrICYmICFpc0lubGluZWQpIHsKICAg
ICAgICAgICAgIGluZGVudCsrOwogCi0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYXNMb2Nh
dGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKKyAgICAg
ICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpIHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0
ZWNvZGVPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBsb2coaW5kZW50LCAiYnl0ZWNvZGVPZmZz
ZXQ6ICIsIGJ5dGVjb2RlT2Zmc2V0LCAiIG9mICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpLCAiXG4iKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgbG9nKGluZGVudCwgImhhc0NvZGVPcmlnaW5zOiAiLCBjb2RlQmxv
Y2stPmhhc0NvZGVPcmlnaW5zKCksICJcbiIpOwogICAgICAgICAgICAgICAgIGlmIChjb2RlQmxv
Y2stPmhhc0NvZGVPcmlnaW5zKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29k
ZU9yaWdpbkluZGV4ID0gY2FsbEZyYW1lLT5sb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGxvZyhpbmRlbnQsICJjb2RlT3JpZ2luSW5kZXg6ICIsIGNvZGVP
cmlnaW5JbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmNvZGVPcmlnaW5zKCkuc2l6ZSgpLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2Fs
bEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxvZyhpbmRlbnQs
ICJjYWxsU2l0ZUluZGV4OiAiLCBjYWxsU2l0ZUluZGV4LmJpdHMoKSwgIiBvZiAiLCBjb2RlQmxv
Y2stPmNvZGVPcmlnaW5zKCkuc2l6ZSgpLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGppdFR5cGUgPSBjb2RlQmxvY2stPmppdFR5cGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGppdFR5cGUgIT0gSklUQ29kZTo6RlRMSklUKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJ
RCBvcGNvZGVJCiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSk7CiAgICAgfSAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAK
LSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVB
c0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOworICAgIHVpbnQzMl90IGxvY2F0aW9u
Qml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCwg
Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7
IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICB9IC8vIFNQIGhvbGRz
IG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENv
dW50IGluaXRpYWxpemVkLgogICAgIAogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gaW5z
dHJ1Y3Rpb24gLSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgSlNTdGFjazo6QXJn
dW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZz
ZXQpKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdU
MCBob2xkcyBjYWxsZWUuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTcgKzQwLDE4IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyog
Z2FyYmFnZVN0dWJJbmYKICAgICByZXR1cm4gc3R1YkluZm87CiB9CiAKLUpJVElubGluZUNhY2hl
R2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQorSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCiAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
CiB7CiAgICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJ
bmZvKCkgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0g
Y29kZU9yaWdpbjsKKyAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiB9
CiAKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0
ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxv
Y2ssIGNvZGVPcmlnaW4pCisgICAgOiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ss
IGNvZGVPcmlnaW4sIGNhbGxTaXRlKQogICAgICwgbV9iYXNlKGJhc2UpCiAgICAgLCBtX3ZhbHVl
KHZhbHVlKQogewpAQCAtMTExLDkgKzExMiw5IEBAIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aEMKIH0KIAogSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVy
YXRvcigKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKLSAgICA6IEpJVEJ5SWRH
ZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1
ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmln
aW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsK
IH0KQEAgLTEzNiwxMCArMTM3LDEwIEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGEKIH0KIAogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsCiAgICAg
RUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICA6IEpJVEJ5SWRHZW5lcmF0
b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3Bp
bGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQogICAgICwgbV9z
Y3JhdGNoKHNjcmF0Y2gpCiAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICwgbV9wdXRL
aW5kKHB1dEtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9
Ci0gICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbik7Cisg
ICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCk7CiAgICAgCiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
KCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpAQCAtNTYsNyArNTYsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgSklUQnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklUQnlJZEdlbmVyYXRvcigK
LSAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKICAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSk7CiAgICAgCiBwdWJsaWM6CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yKCkgeyB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yKAotICAgICAg
ICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywgSlNWYWx1ZVJlZ3MgYmFzZSwKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdz
IGJhc2UsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3Bp
bGxNb2RlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigp
IHsgfQogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgQ29k
ZU9yaWdpbiwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJh
c2UsCisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLAogICAgICAgICBK
U1ZhbHVlUmVncywgR1BSUmVnIHNjcmF0Y2gsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDkgKzEzMCw5IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmEKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihtX2J5
dGVjb2RlT2Zmc2V0KSA+PSAwKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsg
bV9ieXRlY29kZU9mZnNldCArIDE7IAotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxG
cmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7
CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbiku
Yml0cygpOwogI2Vsc2UKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6Okxv
Y2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVPZmZzZXQgKyAxKTsKKyAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQg
KyAxKS5iaXRzKCk7CiAjZW5kaWYKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJp
dHMpLCBpbnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIHN0b3JlUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCAmbV92bS0+dG9wQ2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTc5LDcgKzU3OSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlW
YWxPcHQKICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIo
KSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKIAot
ICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAg
ICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLT5zdHViUm91dGluZSk7CiAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmpl
Y3QtPnN0cnVjdHVyZSh2bSk7CkBAIC02MDQsNyArNjA0LDcgQEAgc3RhdGljIE9wdGltaXphdGlv
blJlc3VsdCB0cnlQdXRCeVZhbE9wdAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBp
c1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKICAgICAgICAgaWYg
KCFzdWJzY3JpcHQuaXNTdHJpbmcoKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAg
ICAgICAgICAgQVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAgICAgQVNT
RVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIGlmIChieVZhbEluZm8t
PnNlZW4pIHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZCA9PSBwcm9w
ZXJ0eU5hbWUpIHsKQEAgLTY1OSw3ICs2NTksNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeURpcmVjdFB1dEJ5CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAgIGlmIChzdWJz
Y3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKICAg
ICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKQEAgLTY4NCw3ICs2ODQsNyBA
QCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5CiAgICAgICAgIE9wdGlv
bmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKIAogICAgICAg
ICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygpIHx8ICFpbmRleCkgewotICAgICAgICAgICAgQVNT
RVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7CkBA
IC0xNTQ4LDcgKzE1NDgsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4
ZWMsCiAgICAgICAgIGlmIChKU0NlbGw6OmNhblVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1
cmUpKSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5n
QXRvbWljU3RyaW5nID0gYXNTdHJpbmcoc3Vic2NyaXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmlu
ZyhleGVjKSkgewogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KHZtLCBzdHJ1Y3R1cmUsIGV4aXN0aW5nQXRv
bWljU3RyaW5nLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9j
YXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZXhl
Yy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8t
PnN0dWJJbmZvICYmIGJ5VmFsSW5mby0+Y2FjaGVkSWQuaW1wbCgpICE9IGV4aXN0aW5nQXRvbWlj
U3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGgg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTU1OCw3ICsx
NTU4LDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgIH0K
IAogICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+
bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNv
ZGVPZmZzZXQoKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKIAog
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC0xNTg3LDcgKzE1
ODcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAot
ICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJU
KGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYm
ICghaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0g
cHJvcGVydHkpKQogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKQEAg
LTE2MDQsNyArMTYwNCw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5R2V0QnlWYWxP
cHQKICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkg
ewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKIAotICAg
ICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBB
U1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7CiAKICAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewpAQCAtMTYzMSw3ICsxNjMxLDcgQEAgc3RhdGljIE9wdGlt
aXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9wdAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSAmJiBpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKICAgICAg
ICAgaWYgKCFzdWJzY3JpcHQuaXNTdHJpbmcoKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkp
OworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIGlmIChieVZh
bEluZm8tPnNlZW4pIHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZCA9
PSBwcm9wZXJ0eU5hbWUpIHsKQEAgLTE3MDYsNyArMTcwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uSGEKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKICAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7CiAKLSAgICBBU1NFUlQo
ZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChleGVjLT5ieXRl
Y29kZU9mZnNldCgpKTsKICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAg
IAogICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkp
IHsKQEAgLTE3NzUsNyArMTc3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUu
Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCks
IFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIoYnlWYWxJ
bmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgSklU
R2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogICAgIGVtaXRJZGVudGlmaWVy
Q2hlY2socmVnVDIsIHJlZ1Q0LCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4
KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCiAg
ICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIERvbnRTcGlsbCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
CkBAIC00NjgsNyArNDY4LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZh
bFdpdAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAorICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJy
ZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAogICAgICAg
ICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpLCByZWdUMSwgRG9udFNwaWxsLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgcHV0S2luZCk7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQo
anVtcCgpKTsKQEAgLTU2MSw3ICs1NjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qCiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUlu
ZGV4V2l0aENlbGwocmVnVDAsIHJlZ1QyLCBtX2J5dGVjb2RlT2Zmc2V0KTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgo
Y3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKICAg
ICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgRG9udFNwaWxsKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTYwNiw3ICs2MDYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
UmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0
aW9uKSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwKICAgICAg
ICAgcmVnVDEsIERvbnRTcGlsbCwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIGRpcmVjdCA/IERp
cmVjdCA6IE5vdERpcmVjdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMyw3ICsyMTMsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFs
V2l0CiAgICAgZW1pdElkZW50aWZpZXJDaGVjayhyZWdUMSwgcmVnVDMsIHByb3BlcnR5TmFtZSwg
c2xvd0Nhc2VzKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNp
YWxSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0Ojpz
cGVjaWFsUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBEb250U3BpbGwpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
IApAQCAtNDQ2LDcgKzQ0Niw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlW
YWxXaXQKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJl
Z1QxKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFs
UmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZWdUMiwgRG9udFNwaWxsLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgcHV0S2luZCk7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQo
anVtcCgpKTsKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qCiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUlu
ZGV4V2l0aENlbGwocmVnVDAsIHJlZ1QxLCBtX2J5dGVjb2RlT2Zmc2V0KTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBEb250U3BpbGwpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwpAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChJbnN0cnVjdGlvbioKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNp
YWxSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0Ojpz
cGVjaWFsUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMiwgRG9udFNwaWxsLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwKICAg
ICAgICAgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcgKzQx
MSw3IEBAIHN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgIC8vIE5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwg
d2UgcmVtZW1iZXIgdGhlCiAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJ
dCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0CiAgICAgICAg
IC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCisgICAgICAgIHN0dWJKaXQu
c3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5k
ZXguYml0cygpKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKIAogICAgICAgICBp
ZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewo=
</data>
<flag name="review"
          id="284975"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>