<?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>176106</bug_id>
          
          <creation_ts>2017-08-30 08:33:36 -0700</creation_ts>
          <short_desc>Add Logger observer and helper class</short_desc>
          <delta_ts>2017-11-14 07:02:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>aestes</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1343542</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-08-30 08:33:36 -0700</bug_when>
    <thetext>Make it possible to observe Logger output. Add a helper class to make logging code less verbose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343552</commentid>
    <comment_count>1</comment_count>
      <attachid>319367</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-08-30 08:57:09 -0700</bug_when>
    <thetext>Created attachment 319367
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343553</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-30 08:58:28 -0700</bug_when>
    <thetext>Attachment 319367 did not pass style-queue:


ERROR: Source/WebCore/PAL/pal/Logger.h:59:  The parameter name &quot;channel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 4 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>1343562</commentid>
    <comment_count>3</comment_count>
      <attachid>319370</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-08-30 09:23:44 -0700</bug_when>
    <thetext>Created attachment 319370
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343571</commentid>
    <comment_count>4</comment_count>
      <attachid>319370</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-08-30 09:44:42 -0700</bug_when>
    <thetext>Comment on attachment 319370
Proposed patch.

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

&gt; Source/WebCore/PAL/pal/Logger.h:40
&gt; +    template&lt;typename U = T&gt; static typename std::enable_if&lt;std::is_same&lt;U, bool&gt;::value, String&gt;::type toString(bool argument) { return argument ? String(&quot;true&quot;) : String(&quot;false&quot;); }

You can use ASCIILiteral for &quot;true&quot; and &quot;false&quot;.

&gt; Source/WebCore/PAL/pal/Logger.h:45
&gt; +    template&lt;typename U = T&gt; static typename std::enable_if&lt;std::is_same&lt;U, AtomicString&gt;::value, String&gt;::type toString(AtomicString argument) { return argument.string(); }
&gt; +    template&lt;typename U = T&gt; static typename std::enable_if&lt;std::is_same&lt;U, const AtomicString&amp;&gt;::value, String&gt;::type toString(const AtomicString&amp; argument) { return argument.string(); }

I wonder if you can use typename std::remove_reference&lt;U&gt;::type in the std::is_same&lt;&gt; check so that you don&apos;t have to treat AtomicString and const AtomicString&amp; separately.

&gt; Source/WebCore/PAL/pal/Logger.h:47
&gt; +    template&lt;typename U = T&gt; static typename std::enable_if&lt;std::is_same&lt;U, const String&amp;&gt;::value, String&gt;::type toString(const String&amp; argument) { return argument; }

Ditto.

&gt; Source/WebCore/PAL/pal/Logger.h:169
&gt; +    static inline void removeObserver(Observer&amp; observer)

Looks like it&apos;s up to the caller to ensure that removeObserver() is called before an Observer passed to addObserver() is destroyed. Is that the design?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343611</commentid>
    <comment_count>5</comment_count>
      <attachid>319370</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-08-30 11:20:11 -0700</bug_when>
    <thetext>Comment on attachment 319370
Proposed patch.

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

Thanks!

&gt;&gt; Source/WebCore/PAL/pal/Logger.h:40
&gt;&gt; +    template&lt;typename U = T&gt; static typename std::enable_if&lt;std::is_same&lt;U, bool&gt;::value, String&gt;::type toString(bool argument) { return argument ? String(&quot;true&quot;) : String(&quot;false&quot;); }
&gt; 
&gt; You can use ASCIILiteral for &quot;true&quot; and &quot;false&quot;.

Fixed.

&gt;&gt; Source/WebCore/PAL/pal/Logger.h:45
&gt;&gt; +    template&lt;typename U = T&gt; static typename std::enable_if&lt;std::is_same&lt;U, const AtomicString&amp;&gt;::value, String&gt;::type toString(const AtomicString&amp; argument) { return argument.string(); }
&gt; 
&gt; I wonder if you can use typename std::remove_reference&lt;U&gt;::type in the std::is_same&lt;&gt; check so that you don&apos;t have to treat AtomicString and const AtomicString&amp; separately.

Great idea, fixed.

&gt;&gt; Source/WebCore/PAL/pal/Logger.h:47
&gt;&gt; +    template&lt;typename U = T&gt; static typename std::enable_if&lt;std::is_same&lt;U, const String&amp;&gt;::value, String&gt;::type toString(const String&amp; argument) { return argument; }
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/WebCore/PAL/pal/Logger.h:169
&gt;&gt; +    static inline void removeObserver(Observer&amp; observer)
&gt; 
&gt; Looks like it&apos;s up to the caller to ensure that removeObserver() is called before an Observer passed to addObserver() is destroyed. Is that the design?

Yes, I wanted to keep this as simple as possible for now. I will reevaluate later when it is used outside of testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343613</commentid>
    <comment_count>6</comment_count>
      <attachid>319382</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-08-30 11:26:12 -0700</bug_when>
    <thetext>Created attachment 319382
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343633</commentid>
    <comment_count>7</comment_count>
      <attachid>319382</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-30 12:06:53 -0700</bug_when>
    <thetext>Comment on attachment 319382
Patch for landing

Clearing flags on attachment: 319382

Committed r221388: &lt;http://trac.webkit.org/changeset/221388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343634</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-30 12:11:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/34168545&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319367</attachid>
            <date>2017-08-30 08:57:09 -0700</date>
            <delta_ts>2017-08-30 09:23:44 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>log_observer_and_helper_patch.txt</filename>
            <type>text/plain</type>
            <size>15435</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZwkocmV2aXNpb24gMjIxMzE3KQorKysgU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA4
LTMwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBMb2dnZXIgb2JzZXJ2ZXIgYW5kIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWwvTG9nZ2VyLmg6CisgICAgICAgIChQQUw6
OkxvZ0FyZ3VtZW50Ojp0b1N0cmluZyk6IEFkZCBuZXcgdmFyaWFudHMuCisgICAgICAgIChQQUw6
OkxvZ2dlcjo6T2JzZXJ2ZXI6On5PYnNlcnZlcik6CisgICAgICAgIChQQUw6OkxvZ2dlcjo6bG9n
QWx3YXlzIGNvbnN0KTogQ29uc3RpZnkuCisgICAgICAgIChQQUw6OkxvZ2dlcjo6ZXJyb3IgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFBBTDo6TG9nZ2VyOjp3YXJuaW5nIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChQQUw6OkxvZ2dlcjo6bm90aWNlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChQ
QUw6OkxvZ2dlcjo6aW5mbyBjb25zdCk6IERpdHRvLgorICAgICAgICAoUEFMOjpMb2dnZXI6OmRl
YnVnIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChQQUw6OkxvZ2dlcjo6d2lsbExvZyBjb25zdCk6
IERpdHRvLgorICAgICAgICAoUEFMOjpMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXI6Ok1ldGhvZEFu
ZFBvaW50ZXIpOiBBZGQgY2xhc3MgbmFtZSwgbWFrZSBvYmplY3QgcG9pbnRlciBjb25zdC4KKyAg
ICAgICAgKFBBTDo6TG9nZ2VyOjphZGRPYnNlcnZlcik6IE5ldy4KKyAgICAgICAgKFBBTDo6TG9n
Z2VyOjpyZW1vdmVPYnNlcnZlcik6IE5ldy4KKyAgICAgICAgKFBBTDo6TG9nZ2VyOjpMb2dnZXIp
OgorICAgICAgICAoUEFMOjpMb2dnZXI6OmxvZyk6CisgICAgICAgIChQQUw6OkxvZ2dlcjo6b2Jz
ZXJ2ZXJzKToKKyAgICAgICAgKFBBTDo6TG9nSGVscGVyOjp3aWxsTG9nIGNvbnN0KToKKyAgICAg
ICAgKFBBTDo6TG9nQXJndW1lbnQ8TG9nZ2VyOjpNZXRob2RBbmRQb2ludGVyPjo6dG9TdHJpbmcp
OgorCiAyMDE3LTA4LTI5ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTWFjXSBVcHN0cmVhbSBXS1NldE1ldGFkYXRhVVJMKCkgZnJvbSBXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkocmV2aXNpb24gMjIxMzE3KQorKysg
U291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAg
KzM3LDE0IEBAIG5hbWVzcGFjZSBQQUwgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0
IExvZ0FyZ3VtZW50IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBib29sPjo6dmFsdWUsIFN0cmluZz46
OnR5cGUgdG9TdHJpbmcoYm9vbCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgPyBTdHJpbmco
InRydWUiKSA6IFN0cmluZygiZmFsc2UiKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBU
PiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGludD46OnZh
bHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGludCBhcmd1bWVudCkgeyByZXR1cm4gU3RyaW5n
OjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRp
YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZmxvYXQ+Ojp2YWx1ZSwg
U3RyaW5nPjo6dHlwZSB0b1N0cmluZyhmbG9hdCBhcmd1bWVudCkgeyByZXR1cm4gU3RyaW5nOjpu
dW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRpYyB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZG91YmxlPjo6dmFsdWUsIFN0
cmluZz46OnR5cGUgdG9TdHJpbmcoZG91YmxlIGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmc6Om51
bWJlcihhcmd1bWVudCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBBdG9taWNTdHJpbmc+Ojp2YWx1
ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhBdG9taWNTdHJpbmcgYXJndW1lbnQpIHsgcmV0dXJu
IGFyZ3VtZW50LnN0cmluZygpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRp
YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgY29uc3QgQXRvbWljU3Ry
aW5nJj46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYg
YXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50LnN0cmluZygpOyB9CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
VSwgU3RyaW5nPjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoU3RyaW5nIGFyZ3VtZW50
KSB7IHJldHVybiBhcmd1bWVudDsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0
aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGNvbnN0IFN0cmluZyY+
Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhjb25zdCBTdHJpbmcmIGFyZ3VtZW50KSB7
IHJldHVybiBhcmd1bWVudDsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGNvbnN0IGNoYXIqPjo6dmFs
dWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoY29uc3QgY2hhciogYXJndW1lbnQpIHsgcmV0dXJu
IFN0cmluZyhhcmd1bWVudCk7IH0KICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nKGNvbnN0IGNoYXIgKCZhcmd1bWVudClbbGVuZ3RoXSkgeyByZXR1cm4g
U3RyaW5nKGFyZ3VtZW50KTsgfQogfTsKQEAgLTQ4LDEzICs1MiwyMCBAQCBzdHJ1Y3QgTG9nQXJn
dW1lbnQgewogY2xhc3MgTG9nZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8TG9nZ2VyPiB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTG9nZ2VyKTsKIHB1YmxpYzoKKworICAgIGNsYXNzIE9ic2Vy
dmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9ic2VydmVyKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRMb2dNZXNzYWdlKGNvbnN0IFdURkxvZ0NoYW5uZWwmIGNoYW5u
ZWwsIGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB9OworCiAgICAgc3RhdGljIFJlZjxMb2dnZXI+
IGNyZWF0ZShjb25zdCB2b2lkKiBvd25lcikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IExvZ2dlcihvd25lcikpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KLSAgICBpbmxpbmUgdm9pZCBsb2dBbHdheXMoV1RGTG9nQ2hhbm5lbCYgY2hh
bm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpCisgICAgaW5saW5lIHZvaWQgbG9n
QWx3YXlzKGNvbnN0IFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4g
YXJndW1lbnRzKSBjb25zdAogICAgIHsKICNpZiBSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgICAg
ICAvLyAiU3RhbmRhcmQiIFdlYkNvcmUgbG9nZ2luZyBnb2VzIHRvIHN0ZGVyciwgd2hpY2ggaXMg
Y2FwdHVyZWQgaW4gbGF5b3V0IHRlc3Qgb3V0cHV0IGFuZCBjYW4gZ2VuZXJhbGx5IGJlIGEgcHJv
YmxlbQpAQCAtNjksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGlubGluZSB2b2lkIGVycm9yKFdURkxvZ0NoYW5uZWwm
IGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4gYXJndW1lbnRzKQorICAgIGlubGluZSB2b2lk
IGVycm9yKGNvbnN0IFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4g
YXJndW1lbnRzKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCF3aWxsTG9nKGNoYW5uZWwsIFdU
RkxvZ0xldmVsRXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzgsNyArODksNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAg
IGlubGluZSB2b2lkIHdhcm5pbmcoV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgQXJndW1l
bnRzJi4uLiBhcmd1bWVudHMpCisgICAgaW5saW5lIHZvaWQgd2FybmluZyhjb25zdCBXVEZMb2dD
aGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50cykgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmICghd2lsbExvZyhjaGFubmVsLCBXVEZMb2dMZXZlbFdhcm5pbmcpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtODcsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGlubGluZSB2b2lkIG5vdGlj
ZShXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50cykK
KyAgICBpbmxpbmUgdm9pZCBub3RpY2UoY29uc3QgV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgY29u
c3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIXdp
bGxMb2coY2hhbm5lbCwgV1RGTG9nTGV2ZWxOb3RpY2UpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtOTYsNyArMTA3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KLSAgICBpbmxpbmUgdm9pZCBpbmZvKFdURkxvZ0NoYW5uZWwmIGNoYW5u
ZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4gYXJndW1lbnRzKQorICAgIGlubGluZSB2b2lkIGluZm8o
Y29uc3QgV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVu
dHMpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIXdpbGxMb2coY2hhbm5lbCwgV1RGTG9nTGV2
ZWxJbmZvKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNSw3ICsxMTYsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGlubGlu
ZSB2b2lkIGRlYnVnKFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4g
YXJndW1lbnRzKQorICAgIGlubGluZSB2b2lkIGRlYnVnKGNvbnN0IFdURkxvZ0NoYW5uZWwmIGNo
YW5uZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4gYXJndW1lbnRzKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKCF3aWxsTG9nKGNoYW5uZWwsIFdURkxvZ0xldmVsRGVidWcpKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTEzLDcgKzEyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgbG9nKGNoYW5uZWws
IGFyZ3VtZW50cy4uLik7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgd2lsbExvZyhXVEZMb2dD
aGFubmVsJiBjaGFubmVsLCBXVEZMb2dMZXZlbCBsZXZlbCkgY29uc3QKKyAgICBpbmxpbmUgYm9v
bCB3aWxsTG9nKGNvbnN0IFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIFdURkxvZ0xldmVsIGxldmVs
KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGxldmVsICE9IFdURkxvZ0xldmVsQWx3YXlzICYm
IGxldmVsID4gY2hhbm5lbC5sZXZlbCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEz
Myw0MCArMTQ0LDk1IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdHJ1Y3QgTWV0aG9kQW5kUG9p
bnRlciB7Ci0gICAgICAgIE1ldGhvZEFuZFBvaW50ZXIoY29uc3QgY2hhciogbWV0aG9kTmFtZSwg
dm9pZCogb2JqZWN0UHRyKQotICAgICAgICAgICAgOiBtZXRob2ROYW1lKG1ldGhvZE5hbWUpCi0g
ICAgICAgICAgICAsIG9iamVjdFB0cihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ob2JqZWN0
UHRyKSkKKyAgICAgICAgTWV0aG9kQW5kUG9pbnRlcihjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBj
b25zdCB2b2lkKiBvYmplY3RQdHIpCisgICAgICAgICAgICA6IG1ldGhvZE5hbWUgeyBtZXRob2RO
YW1lIH0KKyAgICAgICAgICAgICwgb2JqZWN0UHRyIHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG9iamVjdFB0cikgfQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBj
aGFyKiBtZXRob2ROYW1lOwotICAgICAgICB1aW50cHRyX3Qgb2JqZWN0UHRyOworICAgICAgICBN
ZXRob2RBbmRQb2ludGVyKGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgY29uc3QgY2hhciogbWV0aG9k
TmFtZSwgY29uc3Qgdm9pZCogb2JqZWN0UHRyKQorICAgICAgICAgICAgOiBjbGFzc05hbWUgeyBj
bGFzc05hbWUgfQorICAgICAgICAgICAgLCBtZXRob2ROYW1lIHsgbWV0aG9kTmFtZSB9CisgICAg
ICAgICAgICAsIG9iamVjdFB0ciB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYmplY3RQ
dHIpIH0KKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgY2hhciogY2xhc3NO
YW1lIHsgbnVsbHB0ciB9OworICAgICAgICBjb25zdCBjaGFyKiBtZXRob2ROYW1lIHsgbnVsbHB0
ciB9OworICAgICAgICBjb25zdCB1aW50cHRyX3Qgb2JqZWN0UHRyIHsgMCB9OwogICAgIH07CiAK
KyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQor
ICAgIHsKKyAgICAgICAgb2JzZXJ2ZXJzKCkuYXBwZW5kKG9ic2VydmVyKTsKKyAgICB9CisgICAg
c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZU9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZlcikKKyAg
ICB7CisgICAgICAgIG9ic2VydmVycygpLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZvYnNlcnZlcl0o
YXV0byBhbk9ic2VydmVyKSB7CisgICAgICAgICAgICByZXR1cm4gJmFuT2JzZXJ2ZXIuZ2V0KCkg
PT0gJm9ic2VydmVyOworICAgICAgICB9KTsKKyAgICB9CisKIHByaXZhdGU6Ci0gICAgTG9nZ2Vy
KGNvbnN0IHZvaWQqIG93bmVyKSB7IG1fb3duZXIgPSBvd25lcjsgfQorICAgIExvZ2dlcihjb25z
dCB2b2lkKiBvd25lcikKKyAgICAgICAgOiBtX293bmVyIHsgb3duZXIgfQorICAgIHsKKyAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudD4KLSAgICBzdGF0aWMgaW5saW5l
IHZvaWQgbG9nKFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50Ji4uLiBhcmd1
bWVudHMpCisgICAgc3RhdGljIGlubGluZSB2b2lkIGxvZyhjb25zdCBXVEZMb2dDaGFubmVsJiBj
aGFubmVsLCBjb25zdCBBcmd1bWVudCYuLi4gYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IG1ha2VTdHJpbmcoTG9nQXJndW1lbnQ8QXJndW1lbnQ+Ojp0b1N0cmluZyhh
cmd1bWVudHMpLi4uKTsKKyAgICAgICAgU3RyaW5nIGxvZ01lc3NhZ2UgPSBtYWtlU3RyaW5nKExv
Z0FyZ3VtZW50PEFyZ3VtZW50Pjo6dG9TdHJpbmcoYXJndW1lbnRzKS4uLik7CiAKICNpZiBSRUxF
QVNFX0xPR19ESVNBQkxFRAotICAgICAgICBXVEZMb2coJmNoYW5uZWwsICIlcyIsIHN0cmluZy51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgV1RGTG9nKCZjaGFubmVsLCAiJXMiLCBsb2dNZXNzYWdl
LnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UKLSAgICAgICAgb3NfbG9nKGNoYW5uZWwub3NMb2dDaGFu
bmVsLCAiJXtwdWJsaWN9cyIsIHN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgb3NfbG9n
KGNoYW5uZWwub3NMb2dDaGFubmVsLCAiJXtwdWJsaWN9cyIsIGxvZ01lc3NhZ2UudXRmOCgpLmRh
dGEoKSk7CiAjZW5kaWYKKworICAgICAgICBmb3IgKE9ic2VydmVyJiBvYnNlcnZlciA6IG9ic2Vy
dmVycygpKQorICAgICAgICAgICAgb2JzZXJ2ZXIuZGlkTG9nTWVzc2FnZShjaGFubmVsLCBsb2dN
ZXNzYWdlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8T2JzZXJ2ZXI+PiYgb2JzZXJ2ZXJzKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxPYnNlcnZlcj4+PiBvYnNlcnZl
cnM7CisgICAgICAgIHJldHVybiBvYnNlcnZlcnM7CiAgICAgfQogCiAgICAgY29uc3Qgdm9pZCog
bV9vd25lcjsKICAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKIH07CiAKK2NsYXNzIExvZ0hl
bHBlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TG9nSGVscGVyKCkgPSBkZWZhdWx0OworCisg
ICAgdmlydHVhbCBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGNsYXNzTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IFdU
RkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCA9IDA7CisKKyAgICBpbmxpbmUgYm9vbCB3
aWxsTG9nKFdURkxvZ0xldmVsIGxldmVsKSBjb25zdCB7IHJldHVybiBsb2dnZXIoKS53aWxsTG9n
KGxvZ0NoYW5uZWwoKSwgbGV2ZWwpOyB9CisKKyNkZWZpbmUgQUxXQVlTX0xPRyguLi4pICAgICBs
b2dnZXIoKS5sb2dBbHdheXMobG9nQ2hhbm5lbCgpLCBMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXIo
Y2xhc3NOYW1lKCksIF9fZnVuY19fLCB0aGlzKSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgRVJS
T1JfTE9HKC4uLikgICAgICBsb2dnZXIoKS5lcnJvcihsb2dDaGFubmVsKCksIExvZ2dlcjo6TWV0
aG9kQW5kUG9pbnRlcihjbGFzc05hbWUoKSwgX19mdW5jX18sIHRoaXMpLCAjI19fVkFfQVJHU19f
KQorI2RlZmluZSBXQVJOSU5HX0xPRyguLi4pICAgIGxvZ2dlcigpLndhcm5pbmcobG9nQ2hhbm5l
bCgpLCBMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXIoY2xhc3NOYW1lKCksIF9fZnVuY19fLCB0aGlz
KSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgTk9USUNFX0xPRyguLi4pICAgICBsb2dnZXIoKS5u
b3RpY2UobG9nQ2hhbm5lbCgpLCBMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXIoY2xhc3NOYW1lKCks
IF9fZnVuY19fLCB0aGlzKSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSU5GT19MT0coLi4uKSAg
ICAgICBsb2dnZXIoKS5pbmZvKGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpNZXRob2RBbmRQb2ludGVy
KGNsYXNzTmFtZSgpLCBfX2Z1bmNfXywgdGhpcyksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIERF
QlVHX0xPRyguLi4pICAgICAgbG9nZ2VyKCkuZGVidWcobG9nQ2hhbm5lbCgpLCBMb2dnZXI6Ok1l
dGhvZEFuZFBvaW50ZXIoY2xhc3NOYW1lKCksIF9fZnVuY19fLCB0aGlzKSwgIyNfX1ZBX0FSR1Nf
XykKKworfTsKKwogdGVtcGxhdGUgPD4KIHN0cnVjdCBMb2dBcmd1bWVudDxMb2dnZXI6Ok1ldGhv
ZEFuZFBvaW50ZXI+IHsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IExvZ2dlcjo6
TWV0aG9kQW5kUG9pbnRlciYgdmFsdWUpCiAgICAgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisKKyAgICAgICAgaWYgKHZhbHVlLmNsYXNzTmFtZSkgeworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQodmFsdWUuY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiOjoiKTsKKyAgICAgICAgfQogICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZS5t
ZXRob2ROYW1lKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoMHgiKTsKICAgICAg
ICAgYXBwZW5kVW5zaWduZWQ2NEFzSGV4KHZhbHVlLm9iamVjdFB0ciwgYnVpbGRlcik7CkBAIC0x
NzYsNCArMjQyLDMgQEAgc3RydWN0IExvZ0FyZ3VtZW50PExvZ2dlcjo6TWV0aG9kQW5kUG9pbgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgUEFMCi0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTM3MykKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA4LTMwICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBMb2dnZXIgb2Jz
ZXJ2ZXIgYW5kIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2MTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTG9nZ2luZy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMb2dnaW5nVGVzdDo6TG9nZ2luZ1Rlc3QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6TG9nZ2luZ1Rlc3Q6OkxvZ2dlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMb2dP
YnNlcnZlcjo6bG9nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkxvZ09ic2VydmVyOjpjaGFu
bmVsIGNvbnN0KToKKwogMjAxNy0wOC0zMCAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJl
ekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERvIG5vdCB1c2UgYXV0b2dlbiB3aGVuZXZl
ciBwb3NzaWJsZSBpbiBKSEJ1aWxkIG1vZHVsZXMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Mb2dnaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvTG9nZ2luZy5jcHAJKHJldmlzaW9uIDIyMTMzNykKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Mb2dnaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsOCArNTUsMTMgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBsb2dDaGFubmVsQ291bnQgPSBz
aQogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKLWNsYXNzIExvZ2dpbmdUZXN0IDogcHVi
bGljIHRlc3Rpbmc6OlRlc3QgeworY2xhc3MgTG9nZ2luZ1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6
VGVzdCwgcHVibGljIExvZ0hlbHBlciB7CiBwdWJsaWM6CisgICAgTG9nZ2luZ1Rlc3QoKQorICAg
ICAgICA6IG1fbG9nZ2VyIHsgTG9nZ2VyOjpjcmVhdGUodGhpcykgfQorICAgIHsKKyAgICB9CisK
ICAgICB2b2lkIFNldFVwKCkgZmluYWwKICAgICB7CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKTsKQEAgLTk0LDcgKzk5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwogICAgIH0KIAorICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCBjaGFyKiBjbGFz
c05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTG9nZ2luZ1Rlc3QiOyB9CisgICAgY29uc3Qg
V1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFRlc3RDaGFu
bmVsMTsgfQorCiBwcml2YXRlOgorCisgICAgUmVmPExvZ2dlcj4gbV9sb2dnZXI7CiAgICAgaW50
IG1fZGVzY3JpcHRvcnNbMl07CiAgICAgRklMRSogbV9zdGRlcnI7CiB9OwpAQCAtMjY3LDYgKzI3
OCw3IEBAIFRFU1RfRihMb2dnaW5nVGVzdCwgTG9nZ2VyKQogICAgIEVYUEVDVF9UUlVFKGxvZ2dl
ci0+ZW5hYmxlZCgpKTsKIAogICAgIFdURlNldExvZ0NoYW5uZWxMZXZlbCgmVGVzdENoYW5uZWwx
LCBXVEZMb2dMZXZlbEVycm9yKTsKKyAgICBFWFBFQ1RfVFJVRShsb2dnZXItPndpbGxMb2coVGVz
dENoYW5uZWwxLCBXVEZMb2dMZXZlbEVycm9yKSk7CiAgICAgbG9nZ2VyLT5lcnJvcihUZXN0Q2hh
bm5lbDEsICJZb3UncmUgdXNpbmcgY29jb251dHMhIik7CiAgICAgRVhQRUNUX1RSVUUob3V0cHV0
KCkuY29udGFpbnMoIllvdSdyZSB1c2luZyBjb2NvbnV0cyEiLCBmYWxzZSkpOwogICAgIGxvZ2dl
ci0+d2FybmluZyhUZXN0Q2hhbm5lbDEsICJZb3UncmUgdXNpbmcgY29jb251dHMhIik7CkBAIC0z
MDIsMTAgKzMxNCw5NiBAQCBURVNUX0YoTG9nZ2luZ1Rlc3QsIExvZ2dlcikKICAgICBFWFBFQ1Rf
VFJVRShvdXRwdXQoKS5jb250YWlucygiSSBzaGFsbCB0YXVudCB5b3UgYSBzZWNvbmQgdGltZSEi
LCBmYWxzZSkpOwogCiAgICAgbG9nZ2VyLT5zZXRFbmFibGVkKHRoaXMsIGZhbHNlKTsKKyAgICBF
WFBFQ1RfRkFMU0UobG9nZ2VyLT53aWxsTG9nKFRlc3RDaGFubmVsMSwgV1RGTG9nTGV2ZWxFcnJv
cikpOworICAgIEVYUEVDVF9GQUxTRShsb2dnZXItPndpbGxMb2coVGVzdENoYW5uZWwxLCBXVEZM
b2dMZXZlbFdhcm5pbmcpKTsKKyAgICBFWFBFQ1RfRkFMU0UobG9nZ2VyLT53aWxsTG9nKFRlc3RD
aGFubmVsMSwgV1RGTG9nTGV2ZWxOb3RpY2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UobG9nZ2VyLT53
aWxsTG9nKFRlc3RDaGFubmVsMSwgV1RGTG9nTGV2ZWxJbmZvKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGxvZ2dlci0+d2lsbExvZyhUZXN0Q2hhbm5lbDEsIFdURkxvZ0xldmVsRGVidWcpKTsKICAgICBF
WFBFQ1RfRkFMU0UobG9nZ2VyLT5lbmFibGVkKCkpOwogICAgIGxvZ2dlci0+bG9nQWx3YXlzKFRl
c3RDaGFubmVsMSwgIllvdSd2ZSBnb3QgdHdvIGVtcHR5IGhhbHZlcyBvZiBjb2NvbnV0cyIpOwog
ICAgIEVYUEVDVF9FUSgwdSwgb3V0cHV0KCkubGVuZ3RoKCkpOwogfQorCitURVNUX0YoTG9nZ2lu
Z1Rlc3QsIExvZ0hlbHBlcikKK3sKKyAgICBFWFBFQ1RfVFJVRShsb2dnZXIoKS5lbmFibGVkKCkp
OworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiTG9nZ2luZ1Rlc3Q6OlRlc3RCb2R5KDB4Iik7CisgICAgYXBwZW5kVW5zaWduZWQ2NEFzSGV4
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgYnVpbGRlcik7CisgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIpIik7CisgICAgU3RyaW5nIHNpZ25hdHVyZSA9IGJ1aWxkZXIudG9T
dHJpbmcoKTsKKworICAgIEFMV0FZU19MT0coKTsKKyAgICBFWFBFQ1RfVFJVRSh0aGlzLT5vdXRw
dXQoKS5jb250YWlucyhzaWduYXR1cmUsIGZhbHNlKSk7CisKKyAgICBBTFdBWVNfTE9HKCJXZWxj
b21lIGJhY2siLCAiIG15IGZyaWVuZHMiLCAiIHRvIHRoZSBzaG93IiwgIiB0aGF0IG5ldmVyIGVu
ZHMiKTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gdGhpcy0+b3V0cHV0KCk7CisgICAgRVhQRUNUX1RS
VUUocmVzdWx0LmNvbnRhaW5zKHNpZ25hdHVyZSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQuY29udGFpbnMoInRvIHRoZSBzaG93IHRoYXQgbmV2ZXIiLCBmYWxzZSkpOworCisgICAg
V1RGU2V0TG9nQ2hhbm5lbExldmVsKCZUZXN0Q2hhbm5lbDEsIFdURkxvZ0xldmVsV2FybmluZyk7
CisgICAgRVhQRUNUX1RSVUUod2lsbExvZyhXVEZMb2dMZXZlbFdhcm5pbmcpKTsKKworICAgIEVS
Uk9SX0xPRygiV2UncmUgc28gZ2xhZCB5b3UgY291bGQgYXR0ZW5kIik7CisgICAgRVhQRUNUX1RS
VUUob3V0cHV0KCkuY29udGFpbnMoIldlJ3JlIHNvIGdsYWQgeW91IGNvdWxkIGF0dGVuZCIsIGZh
bHNlKSk7CisKKyAgICBXQVJOSU5HX0xPRygiQ29tZSBpbnNpZGUhICIsICJDb21lIGluc2lkZSEi
KTsKKyAgICBFWFBFQ1RfVFJVRShvdXRwdXQoKS5jb250YWlucygiQ29tZSBpbnNpZGUhIENvbWUg
aW5zaWRlISIsIGZhbHNlKSk7CisKKyAgICBOT1RJQ0VfTE9HKCJUaGVyZSBiZWhpbmQgYSBnbGFz
cyBpcyBhIHJlYWwgYmxhZGUgb2YgZ3Jhc3MiKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG91dHB1dCgp
Lmxlbmd0aCgpKTsKKworICAgIElORk9fTE9HKCJiZSBjYXJlZnVsIGFzIHlvdSBwYXNzLiIpOwor
ICAgIEVYUEVDVF9FUSgwdSwgb3V0cHV0KCkubGVuZ3RoKCkpOworCisgICAgREVCVUdfTE9HKCJN
b3ZlIGFsb25nISBNb3ZlIGFsb25nISIpOworICAgIEVYUEVDVF9FUSgwdSwgb3V0cHV0KCkubGVu
Z3RoKCkpOworfQorCitjbGFzcyBMb2dPYnNlcnZlciA6IHB1YmxpYyBMb2dnZXI6Ok9ic2VydmVy
IHsKK3B1YmxpYzoKKyAgICBMb2dPYnNlcnZlcigpID0gZGVmYXVsdDsKKworICAgIFN0cmluZyBs
b2coKQorICAgIHsKKyAgICAgICAgU3RyaW5nIGxvZyA9IG1fbG9nQnVmZmVyLnRvU3RyaW5nKCk7
CisgICAgICAgIG1fbG9nQnVmZmVyLmNsZWFyKCk7CisKKyAgICAgICAgcmV0dXJuIGxvZzsKKyAg
ICB9CisKKyAgICBXVEZMb2dDaGFubmVsIGNoYW5uZWwoKSBjb25zdCB7IHJldHVybiBtX2xhc3RD
aGFubmVsOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaWRMb2dNZXNzYWdlKGNvbnN0IFdURkxv
Z0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFN0cmluZyYgbG9nTWVzc2FnZSkgZmluYWwKKyAgICB7
CisgICAgICAgIG1fbG9nQnVmZmVyLmFwcGVuZChsb2dNZXNzYWdlKTsKKyAgICAgICAgbV9sYXN0
Q2hhbm5lbCA9IGNoYW5uZWw7CisgICAgfQorCisgICAgU3RyaW5nQnVpbGRlciBtX2xvZ0J1ZmZl
cjsKKyAgICBXVEZMb2dDaGFubmVsIG1fbGFzdENoYW5uZWw7Cit9OworCitURVNUX0YoTG9nZ2lu
Z1Rlc3QsIExvZ09ic2VydmVyKQoreworICAgIExvZ09ic2VydmVyIG9ic2VydmVyOworCisgICAg
RVhQRUNUX1RSVUUobG9nZ2VyKCkuZW5hYmxlZCgpKTsKKworICAgIGxvZ2dlcigpLmFkZE9ic2Vy
dmVyKG9ic2VydmVyKTsKKyAgICBBTFdBWVNfTE9HKCJ0ZXN0aW5nIDEsIDIsIDMiKTsKKyAgICBF
WFBFQ1RfVFJVRSh0aGlzLT5vdXRwdXQoKS5jb250YWlucygidGVzdGluZyAxLCAyLCAzIiwgZmFs
c2UpKTsKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci5sb2coKS5jb250YWlucygidGVzdGluZyAx
LCAyLCAzIiwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfU1RSRVEob2JzZXJ2ZXIuY2hhbm5lbCgpLm5h
bWUsIGxvZ0NoYW5uZWwoKS5uYW1lKTsKKworICAgIGxvZ2dlcigpLnJlbW92ZU9ic2VydmVyKG9i
c2VydmVyKTsKKyAgICBBTFdBWVNfTE9HKCJ0ZXN0aW5nICIsIDEsICIsICIsIDIsICIsIDMiKTsK
KyAgICBFWFBFQ1RfVFJVRSh0aGlzLT5vdXRwdXQoKS5jb250YWlucygidGVzdGluZyAxLCAyLCAz
IiwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG9ic2VydmVyLmxvZygpLmxlbmd0aCgpKTsK
K30KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319370</attachid>
            <date>2017-08-30 09:23:44 -0700</date>
            <delta_ts>2017-11-14 07:02:08 -0800</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>log_observer_and_helper_patch_2.txt</filename>
            <type>text/plain</type>
            <size>15427</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZwkocmV2aXNpb24gMjIxMzE3KQorKysgU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA4
LTMwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBMb2dnZXIgb2JzZXJ2ZXIgYW5kIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWwvTG9nZ2VyLmg6CisgICAgICAgIChQQUw6
OkxvZ0FyZ3VtZW50Ojp0b1N0cmluZyk6IEFkZCBuZXcgdmFyaWFudHMuCisgICAgICAgIChQQUw6
OkxvZ2dlcjo6T2JzZXJ2ZXI6On5PYnNlcnZlcik6CisgICAgICAgIChQQUw6OkxvZ2dlcjo6bG9n
QWx3YXlzIGNvbnN0KTogQ29uc3RpZnkuCisgICAgICAgIChQQUw6OkxvZ2dlcjo6ZXJyb3IgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFBBTDo6TG9nZ2VyOjp3YXJuaW5nIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChQQUw6OkxvZ2dlcjo6bm90aWNlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChQ
QUw6OkxvZ2dlcjo6aW5mbyBjb25zdCk6IERpdHRvLgorICAgICAgICAoUEFMOjpMb2dnZXI6OmRl
YnVnIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChQQUw6OkxvZ2dlcjo6d2lsbExvZyBjb25zdCk6
IERpdHRvLgorICAgICAgICAoUEFMOjpMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXI6Ok1ldGhvZEFu
ZFBvaW50ZXIpOiBBZGQgY2xhc3MgbmFtZSwgbWFrZSBvYmplY3QgcG9pbnRlciBjb25zdC4KKyAg
ICAgICAgKFBBTDo6TG9nZ2VyOjphZGRPYnNlcnZlcik6IE5ldy4KKyAgICAgICAgKFBBTDo6TG9n
Z2VyOjpyZW1vdmVPYnNlcnZlcik6IE5ldy4KKyAgICAgICAgKFBBTDo6TG9nZ2VyOjpMb2dnZXIp
OgorICAgICAgICAoUEFMOjpMb2dnZXI6OmxvZyk6CisgICAgICAgIChQQUw6OkxvZ2dlcjo6b2Jz
ZXJ2ZXJzKToKKyAgICAgICAgKFBBTDo6TG9nSGVscGVyOjp3aWxsTG9nIGNvbnN0KToKKyAgICAg
ICAgKFBBTDo6TG9nQXJndW1lbnQ8TG9nZ2VyOjpNZXRob2RBbmRQb2ludGVyPjo6dG9TdHJpbmcp
OgorCiAyMDE3LTA4LTI5ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTWFjXSBVcHN0cmVhbSBXS1NldE1ldGFkYXRhVVJMKCkgZnJvbSBXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvTG9nZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkocmV2aXNpb24gMjIxMzE3KQorKysg
U291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAg
KzM3LDE0IEBAIG5hbWVzcGFjZSBQQUwgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0
IExvZ0FyZ3VtZW50IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBib29sPjo6dmFsdWUsIFN0cmluZz46
OnR5cGUgdG9TdHJpbmcoYm9vbCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgPyBTdHJpbmco
InRydWUiKSA6IFN0cmluZygiZmFsc2UiKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBU
PiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGludD46OnZh
bHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGludCBhcmd1bWVudCkgeyByZXR1cm4gU3RyaW5n
OjpudW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRp
YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZmxvYXQ+Ojp2YWx1ZSwg
U3RyaW5nPjo6dHlwZSB0b1N0cmluZyhmbG9hdCBhcmd1bWVudCkgeyByZXR1cm4gU3RyaW5nOjpu
dW1iZXIoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRpYyB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZG91YmxlPjo6dmFsdWUsIFN0
cmluZz46OnR5cGUgdG9TdHJpbmcoZG91YmxlIGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmc6Om51
bWJlcihhcmd1bWVudCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBBdG9taWNTdHJpbmc+Ojp2YWx1
ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhBdG9taWNTdHJpbmcgYXJndW1lbnQpIHsgcmV0dXJu
IGFyZ3VtZW50LnN0cmluZygpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRp
YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgY29uc3QgQXRvbWljU3Ry
aW5nJj46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYg
YXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50LnN0cmluZygpOyB9CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
VSwgU3RyaW5nPjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoU3RyaW5nIGFyZ3VtZW50
KSB7IHJldHVybiBhcmd1bWVudDsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0
aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGNvbnN0IFN0cmluZyY+
Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhjb25zdCBTdHJpbmcmIGFyZ3VtZW50KSB7
IHJldHVybiBhcmd1bWVudDsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGNvbnN0IGNoYXIqPjo6dmFs
dWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoY29uc3QgY2hhciogYXJndW1lbnQpIHsgcmV0dXJu
IFN0cmluZyhhcmd1bWVudCk7IH0KICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nKGNvbnN0IGNoYXIgKCZhcmd1bWVudClbbGVuZ3RoXSkgeyByZXR1cm4g
U3RyaW5nKGFyZ3VtZW50KTsgfQogfTsKQEAgLTQ4LDEzICs1MiwyMCBAQCBzdHJ1Y3QgTG9nQXJn
dW1lbnQgewogY2xhc3MgTG9nZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8TG9nZ2VyPiB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTG9nZ2VyKTsKIHB1YmxpYzoKKworICAgIGNsYXNzIE9ic2Vy
dmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9ic2VydmVyKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRMb2dNZXNzYWdlKGNvbnN0IFdURkxvZ0NoYW5uZWwmLCBjb25z
dCBTdHJpbmcmKSA9IDA7CisgICAgfTsKKwogICAgIHN0YXRpYyBSZWY8TG9nZ2VyPiBjcmVhdGUo
Y29uc3Qgdm9pZCogb3duZXIpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBM
b2dnZXIob3duZXIpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+Ci0gICAgaW5saW5lIHZvaWQgbG9nQWx3YXlzKFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNv
bnN0IEFyZ3VtZW50cyYuLi4gYXJndW1lbnRzKQorICAgIGlubGluZSB2b2lkIGxvZ0Fsd2F5cyhj
b25zdCBXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50
cykgY29uc3QKICAgICB7CiAjaWYgUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAgICAgLy8gIlN0
YW5kYXJkIiBXZWJDb3JlIGxvZ2dpbmcgZ29lcyB0byBzdGRlcnIsIHdoaWNoIGlzIGNhcHR1cmVk
IGluIGxheW91dCB0ZXN0IG91dHB1dCBhbmQgY2FuIGdlbmVyYWxseSBiZSBhIHByb2JsZW0KQEAg
LTY5LDcgKzgwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KLSAgICBpbmxpbmUgdm9pZCBlcnJvcihXVEZMb2dDaGFubmVsJiBjaGFubmVs
LCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50cykKKyAgICBpbmxpbmUgdm9pZCBlcnJvcihj
b25zdCBXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50
cykgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghd2lsbExvZyhjaGFubmVsLCBXVEZMb2dMZXZl
bEVycm9yKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc4LDcgKzg5LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBpbmxpbmUg
dm9pZCB3YXJuaW5nKFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4g
YXJndW1lbnRzKQorICAgIGlubGluZSB2b2lkIHdhcm5pbmcoY29uc3QgV1RGTG9nQ2hhbm5lbCYg
Y2hhbm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAoIXdpbGxMb2coY2hhbm5lbCwgV1RGTG9nTGV2ZWxXYXJuaW5nKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTg3LDcgKzk4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBpbmxpbmUgdm9pZCBub3RpY2UoV1RGTG9n
Q2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpCisgICAgaW5s
aW5lIHZvaWQgbm90aWNlKGNvbnN0IFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3Vt
ZW50cyYuLi4gYXJndW1lbnRzKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCF3aWxsTG9nKGNo
YW5uZWwsIFdURkxvZ0xldmVsTm90aWNlKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk2LDcg
KzEwNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+Ci0gICAgaW5saW5lIHZvaWQgaW5mbyhXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25z
dCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50cykKKyAgICBpbmxpbmUgdm9pZCBpbmZvKGNvbnN0IFdU
RkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50cyYuLi4gYXJndW1lbnRzKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKCF3aWxsTG9nKGNoYW5uZWwsIFdURkxvZ0xldmVsSW5mbykp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDUsNyArMTE2LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBpbmxpbmUgdm9pZCBk
ZWJ1ZyhXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50
cykKKyAgICBpbmxpbmUgdm9pZCBkZWJ1Zyhjb25zdCBXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBj
b25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50cykgY29uc3QKICAgICB7CiAgICAgICAgIGlmICgh
d2lsbExvZyhjaGFubmVsLCBXVEZMb2dMZXZlbERlYnVnKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTExMyw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGxvZyhjaGFubmVsLCBhcmd1bWVu
dHMuLi4pOwogICAgIH0KIAotICAgIGlubGluZSBib29sIHdpbGxMb2coV1RGTG9nQ2hhbm5lbCYg
Y2hhbm5lbCwgV1RGTG9nTGV2ZWwgbGV2ZWwpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgd2lsbExv
Zyhjb25zdCBXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBXVEZMb2dMZXZlbCBsZXZlbCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChsZXZlbCAhPSBXVEZMb2dMZXZlbEFsd2F5cyAmJiBsZXZlbCA+
IGNoYW5uZWwubGV2ZWwpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzMsNDAgKzE0
NCw5NSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RydWN0IE1ldGhvZEFuZFBvaW50ZXIgewot
ICAgICAgICBNZXRob2RBbmRQb2ludGVyKGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUsIHZvaWQqIG9i
amVjdFB0cikKLSAgICAgICAgICAgIDogbWV0aG9kTmFtZShtZXRob2ROYW1lKQotICAgICAgICAg
ICAgLCBvYmplY3RQdHIocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9iamVjdFB0cikpCisg
ICAgICAgIE1ldGhvZEFuZFBvaW50ZXIoY29uc3QgY2hhciogbWV0aG9kTmFtZSwgY29uc3Qgdm9p
ZCogb2JqZWN0UHRyKQorICAgICAgICAgICAgOiBtZXRob2ROYW1lIHsgbWV0aG9kTmFtZSB9Cisg
ICAgICAgICAgICAsIG9iamVjdFB0ciB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYmpl
Y3RQdHIpIH0KICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgY2hhciogbWV0
aG9kTmFtZTsKLSAgICAgICAgdWludHB0cl90IG9iamVjdFB0cjsKKyAgICAgICAgTWV0aG9kQW5k
UG9pbnRlcihjb25zdCBjaGFyKiBjbGFzc05hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUsIGNv
bnN0IHZvaWQqIG9iamVjdFB0cikKKyAgICAgICAgICAgIDogY2xhc3NOYW1lIHsgY2xhc3NOYW1l
IH0KKyAgICAgICAgICAgICwgbWV0aG9kTmFtZSB7IG1ldGhvZE5hbWUgfQorICAgICAgICAgICAg
LCBvYmplY3RQdHIgeyByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ob2JqZWN0UHRyKSB9Cisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSB7IG51
bGxwdHIgfTsKKyAgICAgICAgY29uc3QgY2hhciogbWV0aG9kTmFtZSB7IG51bGxwdHIgfTsKKyAg
ICAgICAgY29uc3QgdWludHB0cl90IG9iamVjdFB0ciB7IDAgfTsKICAgICB9OwogCisgICAgc3Rh
dGljIGlubGluZSB2b2lkIGFkZE9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZlcikKKyAgICB7Cisg
ICAgICAgIG9ic2VydmVycygpLmFwcGVuZChvYnNlcnZlcik7CisgICAgfQorICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCByZW1vdmVPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgeworICAg
ICAgICBvYnNlcnZlcnMoKS5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmb2JzZXJ2ZXJdKGF1dG8gYW5P
YnNlcnZlcikgeworICAgICAgICAgICAgcmV0dXJuICZhbk9ic2VydmVyLmdldCgpID09ICZvYnNl
cnZlcjsKKyAgICAgICAgfSk7CisgICAgfQorCiBwcml2YXRlOgotICAgIExvZ2dlcihjb25zdCB2
b2lkKiBvd25lcikgeyBtX293bmVyID0gb3duZXI7IH0KKyAgICBMb2dnZXIoY29uc3Qgdm9pZCog
b3duZXIpCisgICAgICAgIDogbV9vd25lciB7IG93bmVyIH0KKyAgICB7CisgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGxv
ZyhXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudCYuLi4gYXJndW1lbnRzKQor
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2coY29uc3QgV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwg
Y29uc3QgQXJndW1lbnQmLi4uIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIFN0cmluZyBzdHJp
bmcgPSBtYWtlU3RyaW5nKExvZ0FyZ3VtZW50PEFyZ3VtZW50Pjo6dG9TdHJpbmcoYXJndW1lbnRz
KS4uLik7CisgICAgICAgIFN0cmluZyBsb2dNZXNzYWdlID0gbWFrZVN0cmluZyhMb2dBcmd1bWVu
dDxBcmd1bWVudD46OnRvU3RyaW5nKGFyZ3VtZW50cykuLi4pOwogCiAjaWYgUkVMRUFTRV9MT0df
RElTQUJMRUQKLSAgICAgICAgV1RGTG9nKCZjaGFubmVsLCAiJXMiLCBzdHJpbmcudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIFdURkxvZygmY2hhbm5lbCwgIiVzIiwgbG9nTWVzc2FnZS51dGY4KCku
ZGF0YSgpKTsKICNlbHNlCi0gICAgICAgIG9zX2xvZyhjaGFubmVsLm9zTG9nQ2hhbm5lbCwgIiV7
cHVibGljfXMiLCBzdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG9zX2xvZyhjaGFubmVs
Lm9zTG9nQ2hhbm5lbCwgIiV7cHVibGljfXMiLCBsb2dNZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwog
I2VuZGlmCisKKyAgICAgICAgZm9yIChPYnNlcnZlciYgb2JzZXJ2ZXIgOiBvYnNlcnZlcnMoKSkK
KyAgICAgICAgICAgIG9ic2VydmVyLmRpZExvZ01lc3NhZ2UoY2hhbm5lbCwgbG9nTWVzc2FnZSk7
CisgICAgfQorCisgICAgc3RhdGljIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPE9ic2Vy
dmVyPj4mIG9ic2VydmVycygpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8T2JzZXJ2ZXI+Pj4gb2JzZXJ2ZXJzOworICAg
ICAgICByZXR1cm4gb2JzZXJ2ZXJzOwogICAgIH0KIAogICAgIGNvbnN0IHZvaWQqIG1fb3duZXI7
CiAgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CiB9OwogCitjbGFzcyBMb2dIZWxwZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkxvZ0hlbHBlcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1
YWwgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBjbGFzc05hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBXVEZMb2dDaGFu
bmVsJiBsb2dDaGFubmVsKCkgY29uc3QgPSAwOworCisgICAgaW5saW5lIGJvb2wgd2lsbExvZyhX
VEZMb2dMZXZlbCBsZXZlbCkgY29uc3QgeyByZXR1cm4gbG9nZ2VyKCkud2lsbExvZyhsb2dDaGFu
bmVsKCksIGxldmVsKTsgfQorCisjZGVmaW5lIEFMV0FZU19MT0coLi4uKSAgICAgbG9nZ2VyKCku
bG9nQWx3YXlzKGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpNZXRob2RBbmRQb2ludGVyKGNsYXNzTmFt
ZSgpLCBfX2Z1bmNfXywgdGhpcyksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIEVSUk9SX0xPRygu
Li4pICAgICAgbG9nZ2VyKCkuZXJyb3IobG9nQ2hhbm5lbCgpLCBMb2dnZXI6Ok1ldGhvZEFuZFBv
aW50ZXIoY2xhc3NOYW1lKCksIF9fZnVuY19fLCB0aGlzKSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZp
bmUgV0FSTklOR19MT0coLi4uKSAgICBsb2dnZXIoKS53YXJuaW5nKGxvZ0NoYW5uZWwoKSwgTG9n
Z2VyOjpNZXRob2RBbmRQb2ludGVyKGNsYXNzTmFtZSgpLCBfX2Z1bmNfXywgdGhpcyksICMjX19W
QV9BUkdTX18pCisjZGVmaW5lIE5PVElDRV9MT0coLi4uKSAgICAgbG9nZ2VyKCkubm90aWNlKGxv
Z0NoYW5uZWwoKSwgTG9nZ2VyOjpNZXRob2RBbmRQb2ludGVyKGNsYXNzTmFtZSgpLCBfX2Z1bmNf
XywgdGhpcyksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIElORk9fTE9HKC4uLikgICAgICAgbG9n
Z2VyKCkuaW5mbyhsb2dDaGFubmVsKCksIExvZ2dlcjo6TWV0aG9kQW5kUG9pbnRlcihjbGFzc05h
bWUoKSwgX19mdW5jX18sIHRoaXMpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBERUJVR19MT0co
Li4uKSAgICAgIGxvZ2dlcigpLmRlYnVnKGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpNZXRob2RBbmRQ
b2ludGVyKGNsYXNzTmFtZSgpLCBfX2Z1bmNfXywgdGhpcyksICMjX19WQV9BUkdTX18pCisKK307
CisKIHRlbXBsYXRlIDw+CiBzdHJ1Y3QgTG9nQXJndW1lbnQ8TG9nZ2VyOjpNZXRob2RBbmRQb2lu
dGVyPiB7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBMb2dnZXI6Ok1ldGhvZEFu
ZFBvaW50ZXImIHZhbHVlKQogICAgIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
CisgICAgICAgIGlmICh2YWx1ZS5jbGFzc05hbWUpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKHZhbHVlLmNsYXNzTmFtZSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
Ijo6Iik7CisgICAgICAgIH0KICAgICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWUubWV0aG9kTmFt
ZSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKDB4Iik7CiAgICAgICAgIGFwcGVu
ZFVuc2lnbmVkNjRBc0hleCh2YWx1ZS5vYmplY3RQdHIsIGJ1aWxkZXIpOwpAQCAtMTc2LDQgKzI0
MiwzIEBAIHN0cnVjdCBMb2dBcmd1bWVudDxMb2dnZXI6Ok1ldGhvZEFuZFBvaW4KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFBBTAotCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjEzNzMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wOC0zMCAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgTG9nZ2VyIG9ic2VydmVyIGFu
ZCBoZWxwZXIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NjEwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0xvZ2dpbmcuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6TG9nZ2luZ1Rlc3Q6OkxvZ2dpbmdUZXN0KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkxvZ2dpbmdUZXN0OjpMb2dnZXI6OmNyZWF0ZSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6TG9nT2JzZXJ2ZXI6
OmxvZyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMb2dPYnNlcnZlcjo6Y2hhbm5lbCBjb25z
dCk6CisKIDIwMTctMDgtMzAgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBEbyBub3QgdXNlIGF1dG9nZW4gd2hlbmV2ZXIgcG9zc2li
bGUgaW4gSkhCdWlsZCBtb2R1bGVzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0xvZ2dpbmcuY3BwCShyZXZpc2lvbiAyMjEzMzcpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvTG9nZ2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDgg
KzU1LDEzIEBAIHN0YXRpYyBjb25zdCBzaXplX3QgbG9nQ2hhbm5lbENvdW50ID0gc2kKIAogbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCi1jbGFzcyBMb2dnaW5nVGVzdCA6IHB1YmxpYyB0ZXN0
aW5nOjpUZXN0IHsKK2NsYXNzIExvZ2dpbmdUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QsIHB1
YmxpYyBMb2dIZWxwZXIgewogcHVibGljOgorICAgIExvZ2dpbmdUZXN0KCkKKyAgICAgICAgOiBt
X2xvZ2dlciB7IExvZ2dlcjo6Y3JlYXRlKHRoaXMpIH0KKyAgICB7CisgICAgfQorCiAgICAgdm9p
ZCBTZXRVcCgpIGZpbmFsCiAgICAgewogICAgICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFk
KCk7CkBAIC05NCw3ICs5OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKICAgICB9CiAKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAgY29uc3QgY2hhciogY2xhc3NOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkxvZ2dpbmdUZXN0IjsgfQorICAgIGNvbnN0IFdURkxvZ0No
YW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUZXN0Q2hhbm5lbDE7IH0K
KwogcHJpdmF0ZToKKworICAgIFJlZjxMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGludCBtX2Rlc2Ny
aXB0b3JzWzJdOwogICAgIEZJTEUqIG1fc3RkZXJyOwogfTsKQEAgLTI2Nyw2ICsyNzgsNyBAQCBU
RVNUX0YoTG9nZ2luZ1Rlc3QsIExvZ2dlcikKICAgICBFWFBFQ1RfVFJVRShsb2dnZXItPmVuYWJs
ZWQoKSk7CiAKICAgICBXVEZTZXRMb2dDaGFubmVsTGV2ZWwoJlRlc3RDaGFubmVsMSwgV1RGTG9n
TGV2ZWxFcnJvcik7CisgICAgRVhQRUNUX1RSVUUobG9nZ2VyLT53aWxsTG9nKFRlc3RDaGFubmVs
MSwgV1RGTG9nTGV2ZWxFcnJvcikpOwogICAgIGxvZ2dlci0+ZXJyb3IoVGVzdENoYW5uZWwxLCAi
WW91J3JlIHVzaW5nIGNvY29udXRzISIpOwogICAgIEVYUEVDVF9UUlVFKG91dHB1dCgpLmNvbnRh
aW5zKCJZb3UncmUgdXNpbmcgY29jb251dHMhIiwgZmFsc2UpKTsKICAgICBsb2dnZXItPndhcm5p
bmcoVGVzdENoYW5uZWwxLCAiWW91J3JlIHVzaW5nIGNvY29udXRzISIpOwpAQCAtMzAyLDEwICsz
MTQsOTYgQEAgVEVTVF9GKExvZ2dpbmdUZXN0LCBMb2dnZXIpCiAgICAgRVhQRUNUX1RSVUUob3V0
cHV0KCkuY29udGFpbnMoIkkgc2hhbGwgdGF1bnQgeW91IGEgc2Vjb25kIHRpbWUhIiwgZmFsc2Up
KTsKIAogICAgIGxvZ2dlci0+c2V0RW5hYmxlZCh0aGlzLCBmYWxzZSk7CisgICAgRVhQRUNUX0ZB
TFNFKGxvZ2dlci0+d2lsbExvZyhUZXN0Q2hhbm5lbDEsIFdURkxvZ0xldmVsRXJyb3IpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UobG9nZ2VyLT53aWxsTG9nKFRlc3RDaGFubmVsMSwgV1RGTG9nTGV2ZWxX
YXJuaW5nKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxvZ2dlci0+d2lsbExvZyhUZXN0Q2hhbm5lbDEs
IFdURkxvZ0xldmVsTm90aWNlKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxvZ2dlci0+d2lsbExvZyhU
ZXN0Q2hhbm5lbDEsIFdURkxvZ0xldmVsSW5mbykpOworICAgIEVYUEVDVF9GQUxTRShsb2dnZXIt
PndpbGxMb2coVGVzdENoYW5uZWwxLCBXVEZMb2dMZXZlbERlYnVnKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKGxvZ2dlci0+ZW5hYmxlZCgpKTsKICAgICBsb2dnZXItPmxvZ0Fsd2F5cyhUZXN0Q2hhbm5l
bDEsICJZb3UndmUgZ290IHR3byBlbXB0eSBoYWx2ZXMgb2YgY29jb251dHMiKTsKICAgICBFWFBF
Q1RfRVEoMHUsIG91dHB1dCgpLmxlbmd0aCgpKTsKIH0KKworVEVTVF9GKExvZ2dpbmdUZXN0LCBM
b2dIZWxwZXIpCit7CisgICAgRVhQRUNUX1RSVUUobG9nZ2VyKCkuZW5hYmxlZCgpKTsKKworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkxvZ2dp
bmdUZXN0OjpUZXN0Qm9keSgweCIpOworICAgIGFwcGVuZFVuc2lnbmVkNjRBc0hleChyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIGJ1aWxkZXIpOworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiKSIpOworICAgIFN0cmluZyBzaWduYXR1cmUgPSBidWlsZGVyLnRvU3RyaW5nKCk7
CisKKyAgICBBTFdBWVNfTE9HKCk7CisgICAgRVhQRUNUX1RSVUUodGhpcy0+b3V0cHV0KCkuY29u
dGFpbnMoc2lnbmF0dXJlLCBmYWxzZSkpOworCisgICAgQUxXQVlTX0xPRygiV2VsY29tZSBiYWNr
IiwgIiBteSBmcmllbmRzIiwgIiB0byB0aGUgc2hvdyIsICIgdGhhdCBuZXZlciBlbmRzIik7Cisg
ICAgU3RyaW5nIHJlc3VsdCA9IHRoaXMtPm91dHB1dCgpOworICAgIEVYUEVDVF9UUlVFKHJlc3Vs
dC5jb250YWlucyhzaWduYXR1cmUsIGZhbHNlKSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmNv
bnRhaW5zKCJ0byB0aGUgc2hvdyB0aGF0IG5ldmVyIiwgZmFsc2UpKTsKKworICAgIFdURlNldExv
Z0NoYW5uZWxMZXZlbCgmVGVzdENoYW5uZWwxLCBXVEZMb2dMZXZlbFdhcm5pbmcpOworICAgIEVY
UEVDVF9UUlVFKHdpbGxMb2coV1RGTG9nTGV2ZWxXYXJuaW5nKSk7CisKKyAgICBFUlJPUl9MT0co
IldlJ3JlIHNvIGdsYWQgeW91IGNvdWxkIGF0dGVuZCIpOworICAgIEVYUEVDVF9UUlVFKG91dHB1
dCgpLmNvbnRhaW5zKCJXZSdyZSBzbyBnbGFkIHlvdSBjb3VsZCBhdHRlbmQiLCBmYWxzZSkpOwor
CisgICAgV0FSTklOR19MT0coIkNvbWUgaW5zaWRlISAiLCAiQ29tZSBpbnNpZGUhIik7CisgICAg
RVhQRUNUX1RSVUUob3V0cHV0KCkuY29udGFpbnMoIkNvbWUgaW5zaWRlISBDb21lIGluc2lkZSEi
LCBmYWxzZSkpOworCisgICAgTk9USUNFX0xPRygiVGhlcmUgYmVoaW5kIGEgZ2xhc3MgaXMgYSBy
ZWFsIGJsYWRlIG9mIGdyYXNzIik7CisgICAgRVhQRUNUX0VRKDB1LCBvdXRwdXQoKS5sZW5ndGgo
KSk7CisKKyAgICBJTkZPX0xPRygiYmUgY2FyZWZ1bCBhcyB5b3UgcGFzcy4iKTsKKyAgICBFWFBF
Q1RfRVEoMHUsIG91dHB1dCgpLmxlbmd0aCgpKTsKKworICAgIERFQlVHX0xPRygiTW92ZSBhbG9u
ZyEgTW92ZSBhbG9uZyEiKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG91dHB1dCgpLmxlbmd0aCgpKTsK
K30KKworY2xhc3MgTG9nT2JzZXJ2ZXIgOiBwdWJsaWMgTG9nZ2VyOjpPYnNlcnZlciB7CitwdWJs
aWM6CisgICAgTG9nT2JzZXJ2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgbG9nKCkKKyAg
ICB7CisgICAgICAgIFN0cmluZyBsb2cgPSBtX2xvZ0J1ZmZlci50b1N0cmluZygpOworICAgICAg
ICBtX2xvZ0J1ZmZlci5jbGVhcigpOworCisgICAgICAgIHJldHVybiBsb2c7CisgICAgfQorCisg
ICAgV1RGTG9nQ2hhbm5lbCBjaGFubmVsKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q2hhbm5lbDsg
fQorCitwcml2YXRlOgorICAgIHZvaWQgZGlkTG9nTWVzc2FnZShjb25zdCBXVEZMb2dDaGFubmVs
JiBjaGFubmVsLCBjb25zdCBTdHJpbmcmIGxvZ01lc3NhZ2UpIGZpbmFsCisgICAgeworICAgICAg
ICBtX2xvZ0J1ZmZlci5hcHBlbmQobG9nTWVzc2FnZSk7CisgICAgICAgIG1fbGFzdENoYW5uZWwg
PSBjaGFubmVsOworICAgIH0KKworICAgIFN0cmluZ0J1aWxkZXIgbV9sb2dCdWZmZXI7CisgICAg
V1RGTG9nQ2hhbm5lbCBtX2xhc3RDaGFubmVsOworfTsKKworVEVTVF9GKExvZ2dpbmdUZXN0LCBM
b2dPYnNlcnZlcikKK3sKKyAgICBMb2dPYnNlcnZlciBvYnNlcnZlcjsKKworICAgIEVYUEVDVF9U
UlVFKGxvZ2dlcigpLmVuYWJsZWQoKSk7CisKKyAgICBsb2dnZXIoKS5hZGRPYnNlcnZlcihvYnNl
cnZlcik7CisgICAgQUxXQVlTX0xPRygidGVzdGluZyAxLCAyLCAzIik7CisgICAgRVhQRUNUX1RS
VUUodGhpcy0+b3V0cHV0KCkuY29udGFpbnMoInRlc3RpbmcgMSwgMiwgMyIsIGZhbHNlKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXIubG9nKCkuY29udGFpbnMoInRlc3RpbmcgMSwgMiwgMyIs
IGZhbHNlKSk7CisgICAgRVhQRUNUX1NUUkVRKG9ic2VydmVyLmNoYW5uZWwoKS5uYW1lLCBsb2dD
aGFubmVsKCkubmFtZSk7CisKKyAgICBsb2dnZXIoKS5yZW1vdmVPYnNlcnZlcihvYnNlcnZlcik7
CisgICAgQUxXQVlTX0xPRygidGVzdGluZyAiLCAxLCAiLCAiLCAyLCAiLCAzIik7CisgICAgRVhQ
RUNUX1RSVUUodGhpcy0+b3V0cHV0KCkuY29udGFpbnMoInRlc3RpbmcgMSwgMiwgMyIsIGZhbHNl
KSk7CisgICAgRVhQRUNUX0VRKDB1LCBvYnNlcnZlci5sb2coKS5sZW5ndGgoKSk7Cit9CisKICNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319382</attachid>
            <date>2017-08-30 11:26:12 -0700</date>
            <delta_ts>2017-08-30 12:06:53 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>log_observer_and_helper_patch_4.txt</filename>
            <type>text/plain</type>
            <size>15738</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZwkocmV2aXNpb24gMjIxMzE3KQorKysgU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA4
LTMwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBMb2dnZXIgb2JzZXJ2ZXIgYW5kIGhlbHBlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW5keSBFc3Rlcy4KKworICAgICAgICAqIHBhbC9Mb2dnZXIuaDoKKyAgICAgICAgKFBBTDo6TG9n
QXJndW1lbnQ6OnRvU3RyaW5nKTogQWRkIG5ldyB2YXJpYW50cy4KKyAgICAgICAgKFBBTDo6TG9n
Z2VyOjpPYnNlcnZlcjo6fk9ic2VydmVyKToKKyAgICAgICAgKFBBTDo6TG9nZ2VyOjpsb2dBbHdh
eXMgY29uc3QpOiBDb25zdGlmeS4KKyAgICAgICAgKFBBTDo6TG9nZ2VyOjplcnJvciBjb25zdCk6
IERpdHRvLgorICAgICAgICAoUEFMOjpMb2dnZXI6Ondhcm5pbmcgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFBBTDo6TG9nZ2VyOjpub3RpY2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFBBTDo6
TG9nZ2VyOjppbmZvIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChQQUw6OkxvZ2dlcjo6ZGVidWcg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFBBTDo6TG9nZ2VyOjp3aWxsTG9nIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChQQUw6OkxvZ2dlcjo6TWV0aG9kQW5kUG9pbnRlcjo6TWV0aG9kQW5kUG9p
bnRlcik6IEFkZCBjbGFzcyBuYW1lLCBtYWtlIG9iamVjdCBwb2ludGVyIGNvbnN0LgorICAgICAg
ICAoUEFMOjpMb2dnZXI6OmFkZE9ic2VydmVyKTogTmV3LgorICAgICAgICAoUEFMOjpMb2dnZXI6
OnJlbW92ZU9ic2VydmVyKTogTmV3LgorICAgICAgICAoUEFMOjpMb2dnZXI6OkxvZ2dlcik6Cisg
ICAgICAgIChQQUw6OkxvZ2dlcjo6bG9nKToKKyAgICAgICAgKFBBTDo6TG9nZ2VyOjpvYnNlcnZl
cnMpOgorICAgICAgICAoUEFMOjpMb2dIZWxwZXI6OndpbGxMb2cgY29uc3QpOgorICAgICAgICAo
UEFMOjpMb2dBcmd1bWVudDxMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXI+Ojp0b1N0cmluZyk6CisK
IDIwMTctMDgtMjkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtN
YWNdIFVwc3RyZWFtIFdLU2V0TWV0YWRhdGFVUkwoKSBmcm9tIFdlYktpdFN5c3RlbUludGVyZmFj
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dlci5oCShyZXZpc2lvbiAyMjEzMTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcs
MTIgQEAgbmFtZXNwYWNlIFBBTCB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgTG9n
QXJndW1lbnQgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGJvb2w+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlw
ZSB0b1N0cmluZyhib29sIGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCA/IEFTQ0lJTGl0ZXJh
bCgidHJ1ZSIpIDogQVNDSUlMaXRlcmFsKCJmYWxzZSIpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwg
aW50Pjo6dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoaW50IGFyZ3VtZW50KSB7IHJldHVy
biBTdHJpbmc6Om51bWJlcihhcmd1bWVudCk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0g
VD4gc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBmbG9hdD46
OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGZsb2F0IGFyZ3VtZW50KSB7IHJldHVybiBT
dHJpbmc6Om51bWJlcihhcmd1bWVudCk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4g
c3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBkb3VibGU+Ojp2
YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhkb3VibGUgYXJndW1lbnQpIHsgcmV0dXJuIFN0
cmluZzo6bnVtYmVyKGFyZ3VtZW50KTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBz
dGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIFN0cmluZz46OnZh
bHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKFN0cmluZyBhcmd1bWVudCkgeyByZXR1cm4gYXJn
dW1lbnQ7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8
VT46OnR5cGUsIEF0b21pY1N0cmluZz46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKEF0
b21pY1N0cmluZyBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQuc3RyaW5nKCk7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VT46OnR5cGUsIFN0cmlu
Zz46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5nKFN0cmluZyBhcmd1bWVudCkgeyByZXR1
cm4gYXJndW1lbnQ7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBjb25zdCBjaGFyKj46OnZhbHVlLCBT
dHJpbmc+Ojp0eXBlIHRvU3RyaW5nKGNvbnN0IGNoYXIqIGFyZ3VtZW50KSB7IHJldHVybiBTdHJp
bmcoYXJndW1lbnQpOyB9CiAgICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhjb25zdCBjaGFyICgmYXJndW1lbnQpW2xlbmd0aF0pIHsgcmV0dXJuIFN0cmlu
Zyhhcmd1bWVudCk7IH0KIH07CkBAIC00OCwxMyArNTAsMjAgQEAgc3RydWN0IExvZ0FyZ3VtZW50
IHsKIGNsYXNzIExvZ2dlciA6IHB1YmxpYyBSZWZDb3VudGVkPExvZ2dlcj4gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKExvZ2dlcik7CiBwdWJsaWM6CisKKyAgICBjbGFzcyBPYnNlcnZlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PYnNlcnZlcigpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkTG9nTWVzc2FnZShjb25zdCBXVEZMb2dDaGFubmVsJiwgY29uc3QgU3Ry
aW5nJikgPSAwOworICAgIH07CisKICAgICBzdGF0aWMgUmVmPExvZ2dlcj4gY3JlYXRlKGNvbnN0
IHZvaWQqIG93bmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTG9nZ2Vy
KG93bmVyKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgot
ICAgIGlubGluZSB2b2lkIGxvZ0Fsd2F5cyhXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBB
cmd1bWVudHMmLi4uIGFyZ3VtZW50cykKKyAgICBpbmxpbmUgdm9pZCBsb2dBbHdheXMoV1RGTG9n
Q2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpIGNvbnN0CiAg
ICAgewogI2lmIFJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgICAgIC8vICJTdGFuZGFyZCIgV2Vi
Q29yZSBsb2dnaW5nIGdvZXMgdG8gc3RkZXJyLCB3aGljaCBpcyBjYXB0dXJlZCBpbiBsYXlvdXQg
dGVzdCBvdXRwdXQgYW5kIGNhbiBnZW5lcmFsbHkgYmUgYSBwcm9ibGVtCkBAIC02OSw3ICs3OCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
Ci0gICAgaW5saW5lIHZvaWQgZXJyb3IoV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgQXJn
dW1lbnRzJi4uLiBhcmd1bWVudHMpCisgICAgaW5saW5lIHZvaWQgZXJyb3IoV1RGTG9nQ2hhbm5l
bCYgY2hhbm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAoIXdpbGxMb2coY2hhbm5lbCwgV1RGTG9nTGV2ZWxFcnJvcikpCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC03OCw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgaW5saW5lIHZvaWQgd2FybmluZyhXVEZM
b2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50cykKKyAgICBp
bmxpbmUgdm9pZCB3YXJuaW5nKFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IEFyZ3VtZW50
cyYuLi4gYXJndW1lbnRzKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCF3aWxsTG9nKGNoYW5u
ZWwsIFdURkxvZ0xldmVsV2FybmluZykpCiAgICAgICAgICAgICByZXR1cm47CkBAIC04Nyw3ICs5
Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+Ci0gICAgaW5saW5lIHZvaWQgbm90aWNlKFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0
IEFyZ3VtZW50cyYuLi4gYXJndW1lbnRzKQorICAgIGlubGluZSB2b2lkIG5vdGljZShXVEZMb2dD
aGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVudHMmLi4uIGFyZ3VtZW50cykgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmICghd2lsbExvZyhjaGFubmVsLCBXVEZMb2dMZXZlbE5vdGljZSkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC05Niw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGlubGluZSB2b2lkIGluZm8o
V1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpCisg
ICAgaW5saW5lIHZvaWQgaW5mbyhXVEZMb2dDaGFubmVsJiBjaGFubmVsLCBjb25zdCBBcmd1bWVu
dHMmLi4uIGFyZ3VtZW50cykgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghd2lsbExvZyhjaGFu
bmVsLCBXVEZMb2dMZXZlbEluZm8pKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA1LDcgKzEx
NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+Ci0gICAgaW5saW5lIHZvaWQgZGVidWcoV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgY29uc3Qg
QXJndW1lbnRzJi4uLiBhcmd1bWVudHMpCisgICAgaW5saW5lIHZvaWQgZGVidWcoV1RGTG9nQ2hh
bm5lbCYgY2hhbm5lbCwgY29uc3QgQXJndW1lbnRzJi4uLiBhcmd1bWVudHMpIGNvbnN0CiAgICAg
ewogICAgICAgICBpZiAoIXdpbGxMb2coY2hhbm5lbCwgV1RGTG9nTGV2ZWxEZWJ1ZykpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMTMsNyArMTIyLDcgQEAgcHVibGljOgogICAgICAgICBsb2co
Y2hhbm5lbCwgYXJndW1lbnRzLi4uKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCB3aWxsTG9n
KFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIFdURkxvZ0xldmVsIGxldmVsKSBjb25zdAorICAgIGlu
bGluZSBib29sIHdpbGxMb2coY29uc3QgV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgV1RGTG9nTGV2
ZWwgbGV2ZWwpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobGV2ZWwgIT0gV1RGTG9nTGV2ZWxB
bHdheXMgJiYgbGV2ZWwgPiBjaGFubmVsLmxldmVsKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTMzLDQwICsxNDIsOTUgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0cnVjdCBNZXRo
b2RBbmRQb2ludGVyIHsKLSAgICAgICAgTWV0aG9kQW5kUG9pbnRlcihjb25zdCBjaGFyKiBtZXRo
b2ROYW1lLCB2b2lkKiBvYmplY3RQdHIpCi0gICAgICAgICAgICA6IG1ldGhvZE5hbWUobWV0aG9k
TmFtZSkKLSAgICAgICAgICAgICwgb2JqZWN0UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihvYmplY3RQdHIpKQorICAgICAgICBNZXRob2RBbmRQb2ludGVyKGNvbnN0IGNoYXIqIG1ldGhv
ZE5hbWUsIGNvbnN0IHZvaWQqIG9iamVjdFB0cikKKyAgICAgICAgICAgIDogbWV0aG9kTmFtZSB7
IG1ldGhvZE5hbWUgfQorICAgICAgICAgICAgLCBvYmplY3RQdHIgeyByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ob2JqZWN0UHRyKSB9CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IGNvbnN0IGNoYXIqIG1ldGhvZE5hbWU7Ci0gICAgICAgIHVpbnRwdHJfdCBvYmplY3RQdHI7Cisg
ICAgICAgIE1ldGhvZEFuZFBvaW50ZXIoY29uc3QgY2hhciogY2xhc3NOYW1lLCBjb25zdCBjaGFy
KiBtZXRob2ROYW1lLCBjb25zdCB2b2lkKiBvYmplY3RQdHIpCisgICAgICAgICAgICA6IGNsYXNz
TmFtZSB7IGNsYXNzTmFtZSB9CisgICAgICAgICAgICAsIG1ldGhvZE5hbWUgeyBtZXRob2ROYW1l
IH0KKyAgICAgICAgICAgICwgb2JqZWN0UHRyIHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG9iamVjdFB0cikgfQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBjaGFy
KiBjbGFzc05hbWUgeyBudWxscHRyIH07CisgICAgICAgIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUg
eyBudWxscHRyIH07CisgICAgICAgIGNvbnN0IHVpbnRwdHJfdCBvYmplY3RQdHIgeyAwIH07CiAg
ICAgfTsKIAorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZlciYgb2Jz
ZXJ2ZXIpCisgICAgeworICAgICAgICBvYnNlcnZlcnMoKS5hcHBlbmQob2JzZXJ2ZXIpOworICAg
IH0KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2Vy
dmVyKQorICAgIHsKKyAgICAgICAgb2JzZXJ2ZXJzKCkucmVtb3ZlRmlyc3RNYXRjaGluZyhbJm9i
c2VydmVyXShhdXRvIGFuT2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiAmYW5PYnNlcnZl
ci5nZXQoKSA9PSAmb2JzZXJ2ZXI7CisgICAgICAgIH0pOworICAgIH0KKwogcHJpdmF0ZToKLSAg
ICBMb2dnZXIoY29uc3Qgdm9pZCogb3duZXIpIHsgbV9vd25lciA9IG93bmVyOyB9CisgICAgTG9n
Z2VyKGNvbnN0IHZvaWQqIG93bmVyKQorICAgICAgICA6IG1fb3duZXIgeyBvd25lciB9CisgICAg
eworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50PgogICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBsb2coV1RGTG9nQ2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgQXJndW1lbnQm
Li4uIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5n
KExvZ0FyZ3VtZW50PEFyZ3VtZW50Pjo6dG9TdHJpbmcoYXJndW1lbnRzKS4uLik7CisgICAgICAg
IFN0cmluZyBsb2dNZXNzYWdlID0gbWFrZVN0cmluZyhMb2dBcmd1bWVudDxBcmd1bWVudD46OnRv
U3RyaW5nKGFyZ3VtZW50cykuLi4pOwogCiAjaWYgUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAg
ICAgV1RGTG9nKCZjaGFubmVsLCAiJXMiLCBzdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IFdURkxvZygmY2hhbm5lbCwgIiVzIiwgbG9nTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKICNlbHNl
Ci0gICAgICAgIG9zX2xvZyhjaGFubmVsLm9zTG9nQ2hhbm5lbCwgIiV7cHVibGljfXMiLCBzdHJp
bmcudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG9zX2xvZyhjaGFubmVsLm9zTG9nQ2hhbm5lbCwg
IiV7cHVibGljfXMiLCBsb2dNZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCisKKyAgICAg
ICAgZm9yIChPYnNlcnZlciYgb2JzZXJ2ZXIgOiBvYnNlcnZlcnMoKSkKKyAgICAgICAgICAgIG9i
c2VydmVyLmRpZExvZ01lc3NhZ2UoY2hhbm5lbCwgbG9nTWVzc2FnZSk7CisgICAgfQorCisgICAg
c3RhdGljIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPE9ic2VydmVyPj4mIG9ic2VydmVy
cygpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8T2JzZXJ2ZXI+Pj4gb2JzZXJ2ZXJzOworICAgICAgICByZXR1cm4gb2Jz
ZXJ2ZXJzOwogICAgIH0KIAogICAgIGNvbnN0IHZvaWQqIG1fb3duZXI7CiAgICAgYm9vbCBtX2Vu
YWJsZWQgeyB0cnVlIH07CiB9OwogCitjbGFzcyBMb2dIZWxwZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkxvZ0hlbHBlcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgY29uc3QgTG9nZ2Vy
JiBsb2dnZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBjbGFzc05hbWUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29u
c3QgPSAwOworCisgICAgaW5saW5lIGJvb2wgd2lsbExvZyhXVEZMb2dMZXZlbCBsZXZlbCkgY29u
c3QgeyByZXR1cm4gbG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIGxldmVsKTsgfQorCisj
ZGVmaW5lIEFMV0FZU19MT0coLi4uKSAgICAgbG9nZ2VyKCkubG9nQWx3YXlzKGxvZ0NoYW5uZWwo
KSwgTG9nZ2VyOjpNZXRob2RBbmRQb2ludGVyKGNsYXNzTmFtZSgpLCBfX2Z1bmNfXywgdGhpcyks
ICMjX19WQV9BUkdTX18pCisjZGVmaW5lIEVSUk9SX0xPRyguLi4pICAgICAgbG9nZ2VyKCkuZXJy
b3IobG9nQ2hhbm5lbCgpLCBMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXIoY2xhc3NOYW1lKCksIF9f
ZnVuY19fLCB0aGlzKSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0FSTklOR19MT0coLi4uKSAg
ICBsb2dnZXIoKS53YXJuaW5nKGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpNZXRob2RBbmRQb2ludGVy
KGNsYXNzTmFtZSgpLCBfX2Z1bmNfXywgdGhpcyksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIE5P
VElDRV9MT0coLi4uKSAgICAgbG9nZ2VyKCkubm90aWNlKGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpN
ZXRob2RBbmRQb2ludGVyKGNsYXNzTmFtZSgpLCBfX2Z1bmNfXywgdGhpcyksICMjX19WQV9BUkdT
X18pCisjZGVmaW5lIElORk9fTE9HKC4uLikgICAgICAgbG9nZ2VyKCkuaW5mbyhsb2dDaGFubmVs
KCksIExvZ2dlcjo6TWV0aG9kQW5kUG9pbnRlcihjbGFzc05hbWUoKSwgX19mdW5jX18sIHRoaXMp
LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBERUJVR19MT0coLi4uKSAgICAgIGxvZ2dlcigpLmRl
YnVnKGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpNZXRob2RBbmRQb2ludGVyKGNsYXNzTmFtZSgpLCBf
X2Z1bmNfXywgdGhpcyksICMjX19WQV9BUkdTX18pCisKK307CisKIHRlbXBsYXRlIDw+CiBzdHJ1
Y3QgTG9nQXJndW1lbnQ8TG9nZ2VyOjpNZXRob2RBbmRQb2ludGVyPiB7CiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhjb25zdCBMb2dnZXI6Ok1ldGhvZEFuZFBvaW50ZXImIHZhbHVlKQogICAg
IHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgICAgIGlmICh2YWx1ZS5j
bGFzc05hbWUpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlLmNsYXNzTmFtZSk7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIjo6Iik7CisgICAgICAgIH0KICAg
ICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWUubWV0aG9kTmFtZSk7CiAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiKDB4Iik7CiAgICAgICAgIGFwcGVuZFVuc2lnbmVkNjRBc0hleCh2YWx1
ZS5vYmplY3RQdHIsIGJ1aWxkZXIpOwpAQCAtMTc2LDQgKzI0MCwzIEBAIHN0cnVjdCBMb2dBcmd1
bWVudDxMb2dnZXI6Ok1ldGhvZEFuZFBvaW4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFBBTAotCklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMjEzNzMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNyBAQAorMjAxNy0wOC0zMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgTG9nZ2VyIG9ic2VydmVyIGFuZCBoZWxwZXIgY2xhc3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjEwNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFuZHkgRXN0ZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvTG9nZ2luZy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpMb2dnaW5n
VGVzdDo6TG9nZ2luZ1Rlc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6TG9nZ2luZ1Rlc3Q6
OkxvZ2dlcjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpMb2dPYnNlcnZlcjo6bG9nKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkxvZ09ic2VydmVyOjpjaGFubmVsIGNvbnN0KToKKwogMjAxNy0wOC0zMCAgQWRyaWFu
IFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERv
IG5vdCB1c2UgYXV0b2dlbiB3aGVuZXZlciBwb3NzaWJsZSBpbiBKSEJ1aWxkIG1vZHVsZXMKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Mb2dnaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTG9nZ2luZy5jcHAJKHJl
dmlzaW9uIDIyMTMzNykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Mb2dn
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsMTMgQEAgc3RhdGljIGNvbnN0IHNp
emVfdCBsb2dDaGFubmVsQ291bnQgPSBzaQogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAK
LWNsYXNzIExvZ2dpbmdUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworY2xhc3MgTG9nZ2lu
Z1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCwgcHVibGljIExvZ0hlbHBlciB7CiBwdWJsaWM6
CisgICAgTG9nZ2luZ1Rlc3QoKQorICAgICAgICA6IG1fbG9nZ2VyIHsgTG9nZ2VyOjpjcmVhdGUo
dGhpcykgfQorICAgIHsKKyAgICB9CisKICAgICB2b2lkIFNldFVwKCkgZmluYWwKICAgICB7CiAg
ICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKQEAgLTk0LDcgKzk5LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgIH0KIAorICAgIGNv
bnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7
IH0KKyAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiTG9n
Z2luZ1Rlc3QiOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIFRlc3RDaGFubmVsMTsgfQorCiBwcml2YXRlOgorCisgICAgUmVmPExvZ2dlcj4g
bV9sb2dnZXI7CiAgICAgaW50IG1fZGVzY3JpcHRvcnNbMl07CiAgICAgRklMRSogbV9zdGRlcnI7
CiB9OwpAQCAtMjY3LDYgKzI3OCw3IEBAIFRFU1RfRihMb2dnaW5nVGVzdCwgTG9nZ2VyKQogICAg
IEVYUEVDVF9UUlVFKGxvZ2dlci0+ZW5hYmxlZCgpKTsKIAogICAgIFdURlNldExvZ0NoYW5uZWxM
ZXZlbCgmVGVzdENoYW5uZWwxLCBXVEZMb2dMZXZlbEVycm9yKTsKKyAgICBFWFBFQ1RfVFJVRShs
b2dnZXItPndpbGxMb2coVGVzdENoYW5uZWwxLCBXVEZMb2dMZXZlbEVycm9yKSk7CiAgICAgbG9n
Z2VyLT5lcnJvcihUZXN0Q2hhbm5lbDEsICJZb3UncmUgdXNpbmcgY29jb251dHMhIik7CiAgICAg
RVhQRUNUX1RSVUUob3V0cHV0KCkuY29udGFpbnMoIllvdSdyZSB1c2luZyBjb2NvbnV0cyEiLCBm
YWxzZSkpOwogICAgIGxvZ2dlci0+d2FybmluZyhUZXN0Q2hhbm5lbDEsICJZb3UncmUgdXNpbmcg
Y29jb251dHMhIik7CkBAIC0zMDIsMTAgKzMxNCwxMDcgQEAgVEVTVF9GKExvZ2dpbmdUZXN0LCBM
b2dnZXIpCiAgICAgRVhQRUNUX1RSVUUob3V0cHV0KCkuY29udGFpbnMoIkkgc2hhbGwgdGF1bnQg
eW91IGEgc2Vjb25kIHRpbWUhIiwgZmFsc2UpKTsKIAogICAgIGxvZ2dlci0+c2V0RW5hYmxlZCh0
aGlzLCBmYWxzZSk7CisgICAgRVhQRUNUX0ZBTFNFKGxvZ2dlci0+d2lsbExvZyhUZXN0Q2hhbm5l
bDEsIFdURkxvZ0xldmVsRXJyb3IpKTsKKyAgICBFWFBFQ1RfRkFMU0UobG9nZ2VyLT53aWxsTG9n
KFRlc3RDaGFubmVsMSwgV1RGTG9nTGV2ZWxXYXJuaW5nKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxv
Z2dlci0+d2lsbExvZyhUZXN0Q2hhbm5lbDEsIFdURkxvZ0xldmVsTm90aWNlKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGxvZ2dlci0+d2lsbExvZyhUZXN0Q2hhbm5lbDEsIFdURkxvZ0xldmVsSW5mbykp
OworICAgIEVYUEVDVF9GQUxTRShsb2dnZXItPndpbGxMb2coVGVzdENoYW5uZWwxLCBXVEZMb2dM
ZXZlbERlYnVnKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxvZ2dlci0+ZW5hYmxlZCgpKTsKICAgICBs
b2dnZXItPmxvZ0Fsd2F5cyhUZXN0Q2hhbm5lbDEsICJZb3UndmUgZ290IHR3byBlbXB0eSBoYWx2
ZXMgb2YgY29jb251dHMiKTsKICAgICBFWFBFQ1RfRVEoMHUsIG91dHB1dCgpLmxlbmd0aCgpKTsK
KworICAgIGxvZ2dlci0+c2V0RW5hYmxlZCh0aGlzLCB0cnVlKTsKKyAgICBBdG9taWNTdHJpbmcg
c3RyaW5nMSgiQXRvbWljU3RyaW5nIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nIHN0cmluZzIoImNvbnN0IEF0b21pY1N0cmluZyIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIGxvZ2dlci0+bG9nQWx3
YXlzKFRlc3RDaGFubmVsMSwgc3RyaW5nMSwgIiBhbmQgIiwgc3RyaW5nMik7CisgICAgRVhQRUNU
X1RSVUUob3V0cHV0KCkuY29udGFpbnMoIkF0b21pY1N0cmluZyBhbmQgY29uc3QgQXRvbWljU3Ry
aW5nIiwgZmFsc2UpKTsKKworICAgIFN0cmluZyBzdHJpbmczKCJTdHJpbmciKTsKKyAgICBjb25z
dCBTdHJpbmcgc3RyaW5nNCgiY29uc3QgU3RyaW5nIik7CisgICAgbG9nZ2VyLT5sb2dBbHdheXMo
VGVzdENoYW5uZWwxLCBzdHJpbmczLCAiIGFuZCAiLCBzdHJpbmc0KTsKKyAgICBFWFBFQ1RfVFJV
RShvdXRwdXQoKS5jb250YWlucygiU3RyaW5nIGFuZCBjb25zdCBTdHJpbmciLCBmYWxzZSkpOwog
fQorCitURVNUX0YoTG9nZ2luZ1Rlc3QsIExvZ0hlbHBlcikKK3sKKyAgICBFWFBFQ1RfVFJVRShs
b2dnZXIoKS5lbmFibGVkKCkpOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTG9nZ2luZ1Rlc3Q6OlRlc3RCb2R5KDB4Iik7CisgICAgYXBw
ZW5kVW5zaWduZWQ2NEFzSGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgYnVp
bGRlcik7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIpIik7CisgICAgU3RyaW5nIHNpZ25h
dHVyZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgIEFMV0FZU19MT0coKTsKKyAgICBFWFBF
Q1RfVFJVRSh0aGlzLT5vdXRwdXQoKS5jb250YWlucyhzaWduYXR1cmUsIGZhbHNlKSk7CisKKyAg
ICBBTFdBWVNfTE9HKCJXZWxjb21lIGJhY2siLCAiIG15IGZyaWVuZHMiLCAiIHRvIHRoZSBzaG93
IiwgIiB0aGF0IG5ldmVyIGVuZHMiKTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gdGhpcy0+b3V0cHV0
KCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmNvbnRhaW5zKHNpZ25hdHVyZSwgZmFsc2UpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuY29udGFpbnMoInRvIHRoZSBzaG93IHRoYXQgbmV2ZXIi
LCBmYWxzZSkpOworCisgICAgV1RGU2V0TG9nQ2hhbm5lbExldmVsKCZUZXN0Q2hhbm5lbDEsIFdU
RkxvZ0xldmVsV2FybmluZyk7CisgICAgRVhQRUNUX1RSVUUod2lsbExvZyhXVEZMb2dMZXZlbFdh
cm5pbmcpKTsKKworICAgIEVSUk9SX0xPRygiV2UncmUgc28gZ2xhZCB5b3UgY291bGQgYXR0ZW5k
Iik7CisgICAgRVhQRUNUX1RSVUUob3V0cHV0KCkuY29udGFpbnMoIldlJ3JlIHNvIGdsYWQgeW91
IGNvdWxkIGF0dGVuZCIsIGZhbHNlKSk7CisKKyAgICBXQVJOSU5HX0xPRygiQ29tZSBpbnNpZGUh
ICIsICJDb21lIGluc2lkZSEiKTsKKyAgICBFWFBFQ1RfVFJVRShvdXRwdXQoKS5jb250YWlucygi
Q29tZSBpbnNpZGUhIENvbWUgaW5zaWRlISIsIGZhbHNlKSk7CisKKyAgICBOT1RJQ0VfTE9HKCJU
aGVyZSBiZWhpbmQgYSBnbGFzcyBpcyBhIHJlYWwgYmxhZGUgb2YgZ3Jhc3MiKTsKKyAgICBFWFBF
Q1RfRVEoMHUsIG91dHB1dCgpLmxlbmd0aCgpKTsKKworICAgIElORk9fTE9HKCJiZSBjYXJlZnVs
IGFzIHlvdSBwYXNzLiIpOworICAgIEVYUEVDVF9FUSgwdSwgb3V0cHV0KCkubGVuZ3RoKCkpOwor
CisgICAgREVCVUdfTE9HKCJNb3ZlIGFsb25nISBNb3ZlIGFsb25nISIpOworICAgIEVYUEVDVF9F
USgwdSwgb3V0cHV0KCkubGVuZ3RoKCkpOworfQorCitjbGFzcyBMb2dPYnNlcnZlciA6IHB1Ymxp
YyBMb2dnZXI6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBMb2dPYnNlcnZlcigpID0gZGVmYXVs
dDsKKworICAgIFN0cmluZyBsb2coKQorICAgIHsKKyAgICAgICAgU3RyaW5nIGxvZyA9IG1fbG9n
QnVmZmVyLnRvU3RyaW5nKCk7CisgICAgICAgIG1fbG9nQnVmZmVyLmNsZWFyKCk7CisKKyAgICAg
ICAgcmV0dXJuIGxvZzsKKyAgICB9CisKKyAgICBXVEZMb2dDaGFubmVsIGNoYW5uZWwoKSBjb25z
dCB7IHJldHVybiBtX2xhc3RDaGFubmVsOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaWRMb2dN
ZXNzYWdlKGNvbnN0IFdURkxvZ0NoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFN0cmluZyYgbG9nTWVz
c2FnZSkgZmluYWwKKyAgICB7CisgICAgICAgIG1fbG9nQnVmZmVyLmFwcGVuZChsb2dNZXNzYWdl
KTsKKyAgICAgICAgbV9sYXN0Q2hhbm5lbCA9IGNoYW5uZWw7CisgICAgfQorCisgICAgU3RyaW5n
QnVpbGRlciBtX2xvZ0J1ZmZlcjsKKyAgICBXVEZMb2dDaGFubmVsIG1fbGFzdENoYW5uZWw7Cit9
OworCitURVNUX0YoTG9nZ2luZ1Rlc3QsIExvZ09ic2VydmVyKQoreworICAgIExvZ09ic2VydmVy
IG9ic2VydmVyOworCisgICAgRVhQRUNUX1RSVUUobG9nZ2VyKCkuZW5hYmxlZCgpKTsKKworICAg
IGxvZ2dlcigpLmFkZE9ic2VydmVyKG9ic2VydmVyKTsKKyAgICBBTFdBWVNfTE9HKCJ0ZXN0aW5n
IDEsIDIsIDMiKTsKKyAgICBFWFBFQ1RfVFJVRSh0aGlzLT5vdXRwdXQoKS5jb250YWlucygidGVz
dGluZyAxLCAyLCAzIiwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci5sb2coKS5j
b250YWlucygidGVzdGluZyAxLCAyLCAzIiwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfU1RSRVEob2Jz
ZXJ2ZXIuY2hhbm5lbCgpLm5hbWUsIGxvZ0NoYW5uZWwoKS5uYW1lKTsKKworICAgIGxvZ2dlcigp
LnJlbW92ZU9ic2VydmVyKG9ic2VydmVyKTsKKyAgICBBTFdBWVNfTE9HKCJ0ZXN0aW5nICIsIDEs
ICIsICIsIDIsICIsIDMiKTsKKyAgICBFWFBFQ1RfVFJVRSh0aGlzLT5vdXRwdXQoKS5jb250YWlu
cygidGVzdGluZyAxLCAyLCAzIiwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG9ic2VydmVy
LmxvZygpLmxlbmd0aCgpKTsKK30KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>